# Easy-BOW **Repository Path**: caoyuhao97/Easy-BOW ## Basic Information - **Project Name**: Easy-BOW - **Description**: EasyBow——会替你干活的 AI 浏览器:大模型直接点击、输入、读取、跨页签搬运数据。⚡内置本地快速决策模型,简单步骤毫秒级响应、无需等待云端,复杂操作才调大模型——响应更快、token 更省,全程可视,附赠免费本地 OCR。EasyBow: an AI browser that works for you—LLMs click, type, read & move data across tabs. A local model decides simple steps instantly, no cloud wait. Faster, token-light, free OCR. - **Primary Language**: TypeScript - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-08 - **Last Updated**: 2026-10-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # EasyBow — AI 浏览器 一个 Windows 桌面应用(Electron),本身就是一台 **AI 浏览器**:你描述任务,AI 大模型直接驱动浏览器替你点、输、读、填、搬运数据,全过程实时可见,token 消耗可控;本地免费 OCR 与本地快速决策模型加持。 ## 界面一览 | 主界面(多页签 + AI 任务面板) | AI 操作过程时间线 | |---|---| | ![主界面](docs/screenshots/app-main.png) | ![时间线](docs/screenshots/panel-timeline.png) | **⏰ 定时任务**(每天定时 / 固定间隔 / 单次,执行前 1 分钟顶部倒计时可取消): ![定时任务](docs/screenshots/schedule-modal.png) ``` ┌────────────────────────────────────────────┬──────────────┐ │ [页签1 淘宝][页签2 聚水潭]…(≤5) + │ 任务输入框 │ │ 地址栏 ← → ⟳ [人工接管] │ [开始][暂停][停止] │ │ 内置浏览器(真实 Chromium,保持登录态) │ 操作过程时间线 │ │ ↑ CDP 真实事件 · 同源iframe穿透 │ ·「页签1 读取到 3 条订单」│ │ ↑ 本地 OCR(免费离线,PP-OCR) │ ·「切到页签2 输入[3] A1024」│ │ │ 任务记忆 · Token 统计│ └────────────────────────────────────────────┴──────────────┘ ``` ## 快速开始 ### 开发运行 ```bash npm install # 首次安装依赖(.npmrc 已配置国内镜像;postinstall 自动打 WASM 推理补丁) npm run dev # 开发模式(热更新) npm run selftest:prod # 自测:59 项检查(CDP/元素提取/iframe/视觉构造/文档粘贴/遮罩硬解除/定时任务/OCR/UI) npm run fetch:model # (可选)预拉取本地快速决策模型到 resources/fastmodel ``` ### 打包 EXE ```bash npm run dist # 自动拉取模型 + 构建 + 打包:安装包 + 便携版到 dist/ ``` - `dist/EasyBow-Setup-3.0.0.exe` — NSIS 安装包(约 477MB,**已内置本地快速决策模型**,装完即用) - `dist/EasyBow-Portable-3.0.0.exe` — 免安装便携版(约 477MB,同内置) ### 使用步骤 1. 启动后在 **⚙ 设置 → 快速预设** 点一个服务商(OpenAI / DeepSeek / 智谱 GLM / Kimi / OpenRouter / Ollama 等),填入 API Key(仅保存在本机),点「测试连接」验证 2. 在浏览器里像平时一样上网,需要登录的站(淘宝/聚水潭等)先手动登录一次,Cookie 长期保留 3. 右侧输入任务描述,点「开始任务」,在时间线里观看 AI 的每一步操作 ## 功能 | 功能 | 说明 | |---|---| | 多页签(最多 5 个) | 每个页签独立网页视图,共享登录态;AI 可新建/切换/关闭页签 | | 跨页签数据搬运 | A 页读取数据 → 存任务记忆 → 切到 B 页填写;长文本用 `{{记忆键}}` 引用,压缩历史也不会丢 | | 操作过程可见 | 每步:思考摘要 + 动作标签 + 页面变化 + 截图缩略图(可点开放大) | | ✨ AI 增强任务描述 | 输入框「✨ AI 增强」把粗糙描述改写为结构化任务指令(补步骤/字段/预期,保留原意),原文可一键还原 | | 🧩 任务模板快速填充 | 任务输入框模板 chips 一键填充 + 「/」快捷选择 + 📄 模板库(分组/删除/存为模板,历史任务、大编辑器共用);支持 `{{日期}}` 等自动变量与 `{{字段:说明}}` 填空变量(填完自动开跑) | | 🔗 节点链复核自愈 | 任务分解为「意图+预期」节点链逐步执行;每节点完成后按预期复核(页面文字/URL/选择器本地判定 → 本地快速模型 → 严格模式云端终审),未通过自动开启视觉看图修正重试并**显示未通过原因**,多次失败暂停等人工(可留言指路,或**一键批准本节点通过**跳过复核继续);时间线节点进度条全程可视 | | 🧠 语义对齐(v2.0) | 任务说「商品名称」、页面写「名称/商品名/标题」也能对上(同义词+模糊匹配自动重排候选并给出匹配提示);表格布局字段读取邻近文本与 name/id 线索,不再出现"空白字段";**填错字段立即显式报错**(值对了但字段不对也算错),静默写错归零 | | 🩹 失败自愈 + 经验沉淀(v2.0) | 七类失败(定位/语义/页面异变/数据缺失/复核/循环/步数耗尽)自动归因并各走自愈策略;踩过的坑自动记入经验库(站点字段映射/失败教训/成功路径),下次同站点任务直接照做,越用越快越准 | | 🛡 反风控拟人化(v2.0) | UA 为真实 Chrome(不再暴露 Electron 身份);键入逐字符带思考停顿、鼠标贝塞尔轨迹、滚动带惯性;持久会话保持真实登录态;遇验证码/限流**优雅降级**(暂停等人工 / 指数退避放慢),绝不硬闯 | | 🚀 v3.0 操控升级 | **智能等待**(页面/网络静默信号替代盲等 + `wait_for` 业务信号等待,动画页自动熔断回退);**定位链**(页面改版后按容器锚点/语义键重定位,列表行操作不串行,提交/删除类写操作禁坐标兜底);**反思重规划**(禁止重复失败方式、卡住自动重排节点,重规划后收尾强制云端复核);**planner 模型分级**(可选强推理模型只做规划/复核/专家重试);Shadow DOM 全链路穿透;时间线点击命中标记 | | AI 操作遮罩 | AI 工作期间浏览器蒙上淡蓝色水波纹遮罩并拦截人工鼠标(避免误操作干扰,AI 经 CDP 不受影响);顶部悬浮「AI 操作中」状态条实时显示当前步骤,可一键 **⏸ 暂停**;暂停后遮罩自动揭开,人工接管操作,随时点「继续」恢复任务 | | 省 token | 模型只看「编号元素列表」(browser-use 同款技术,每步约 1~4k tokens);元素上限可调;历史自动压缩;实时 token 统计 | | 视觉模式(可选,默认关) | 每步把视口截图发给支持图片的模型(glm-4.5v / gpt-4o / qwen-vl / kimi-latest 等),看图+元素列表一起判断更准;元素带 `@x,y` 归一化坐标与截图对照,动作仍按编号执行;模型拒图自动降级为元素列表,任务不中断;「测试连接」顺带探测视觉支持 | | ⚡ 混合模式(默认开) | 本地快速决策模型(Qwen2.5-0.5B int8 ONNX,onnxruntime WASM 本机推理,仅本机,**安装包内置免下载**)秒出"显而易见"的简单步骤,不确定/高风险(done、跳转、粘贴、人工指导、经验库场景)自动回退云端大模型;本地推理 >10s 或连续决策不可靠时自动冷却;另有 `repeat` 重放动作让翻页/批量操作一次决策执行多轮。设置可切「纯大模型」模式 | | 文档写作(富文本+真图) | `paste_rich`:把 Markdown 自动转成标题/列表/加粗等真实样式粘贴进文档(空白文档默认美化排版);`paste_image`:下载图片(带 Referer 过防盗链,webp/gif 自动转 PNG)→写剪贴板→真实粘贴嵌入,文档里显示的是图片本体而非链接文字;均粘贴在光标处、不清空已有内容 | | ⏰ 定时任务 | 任务描述一键设为定时(每天定时 / 固定间隔 / 单次),到点 AI 空闲时自动执行;执行前 1 分钟顶部倒计时提示 + 一键取消本次;支持编辑任务与策略、停用、删除;AI 忙碌时自动跳过本次 | | 人工介入(附截图) | 运行/暂停中随时发文字+剪贴板截图指路(Win+Shift+S 后点「📷 附截图」或输入框 Ctrl+V),下一步优先执行;可「✓ 批准本节点通过」跳过当前节点复核(暂停中自动继续) | | 🗂 面板三 Tab | 右侧面板按「✏️ 任务(输入自适应撑满/模板/增强/最近任务)/ ▶ 执行(人工介入/状态/时间线/🧹清空)/ 📦 记忆(图片缩略图/复制/完整展示)」分 tab,任务启动/暂停自动切到执行页,新任务自动清时间线 | | 本地 OCR(免费) | PP-OCRv4 ONNX 在本机 WASM 推理:图片按钮自动补标签、图片型页面整页识别、DOM 提取失败降级——纯本地推理,0 额外费用 | | 双协议接口 | OpenAI 兼容 + Anthropic 兼容,自定义 baseURL,任意国产/中转/本地模型可用 | | 验证码人机协作 | 检测到滑块/验证码自动暂停 + 系统通知,人工完成后点「继续」;不自动破解验证码 | | 原生弹窗接管 | confirm/alert/prompt **接管常开、任何时刻都有人应答**:任务/测试期自动应答并反馈文案给 AI(误触可纠正);空闲/人工接管期弹「EasyBow 页面确认」框由人工点确定/取消;CDP 会话重连后自动重臂,杜绝原生弹框悬空挂死任务 | | 拟人化操作 | CDP 浏览器级真实输入事件(trusted),操作间隔随机化;「慢速模式」适配风控敏感站点 | | 登录态保持 | 独立持久分区,登录一次长期有效 | | 界面故障自愈 | UI 渲染器卡死/崩溃时主进程心跳看门狗自动重建界面(页签与页面状态在主进程,不丢失);浏览器视图用可见性切换而非反复拆装,杜绝高频弹窗/缩放下的合成器卡顿 | | 文件下载 | 自动保存到系统下载目录并提示 | | 🧪 浏览器仿真测试 | 工具栏 🧪 打开测试面板:需求 MD/粗略步骤 → AI 生成步骤化测试用例 MD(人审可改)→ 独立测试页签执行 → Markdown 报告(失败截图落盘)。断言(文字/URL/CSS 选择器/取值,支持取反与 3s 轮询)、智能表单填充(无 label 字段按 placeholder/name/邻接文本推断,按语义造格式合法数据,逐字段理由可审计,可开人工预览)、confirm/alert 自动应答、文件上传、hover 菜单、数据驱动多组、提交后校验错误软断言、多环境档案({{base_url}} 注入 + 生产保护确认门禁)、fail-fast/跑完全程可选、MD+HTML 报告 | ## 复杂站点说明(淘宝 / 小红书 / 聚水潭) - **聚水潭**:企业工具无反爬,支持同源 iframe 穿透提取(其老式嵌套布局可正常操作),订单表格自动转 Markdown 供模型读取——体验最好 - **淘宝**:登录后订单/商品/搜索页均可操作;遇滑块会自动暂停等人工处理;建议开「慢速模式」 - **小红书**:反爬最强,登录后低频浏览/单篇内容提取可行;**高频自动化有账号风控风险**,建议人工监督使用 ## 项目结构 ``` src/ ├── main/ # Electron 主进程 │ ├── index.ts # 入口、IPC 注册 │ ├── tabs.ts # 多页签管理(WebContentsView) │ ├── cdp.ts # CDP 会话封装(webContents.debugger) │ ├── extractor.ts # 元素提取器(同源 iframe 穿透 + 视口优先排序)+ 验证码检测 │ ├── executor.ts # 动作执行器(真实事件、拟人化、{{记忆}}替换) │ ├── agent/ │ │ ├── runner.ts # Agent 循环(暂停/停止/验证码暂停/用量统计)+ 测试模式 │ │ ├── prompts.ts # 提示词与历史压缩(+ 测试脚本区块/TEST_MODE_ADDON) │ │ └── llm.ts # OpenAI / Anthropic 双协议 Provider │ ├── testcase/ # 浏览器仿真测试:用例MD解析/需求转换/断言/智能填充/报告 │ ├── ocr/ # 本地 OCR(隐藏窗口 WASM 推理宿主) │ ├── settings.ts # 设置持久化(%APPDATA%/easybow/settings.json) │ └── selftest.ts # 自测模式 ├── preload/ # contextBridge 桥 ├── renderer/ # React UI(页签栏/地址栏/时间线/设置/记忆面板) └── shared/types.ts # 主/渲染进程共享类型 resources/ ├── ocr/ # PP-OCR 模型 + WASM 运行时 + worker 页面 └── testpage.html # 自测 fixture scripts/ ├── download-ocr-models.mjs # (可选)重新下载 OCR 模型 ├── sync-ocr-web.mjs # 构建前同步 onnxruntime-web 运行时 ├── fetch-fastmodel.mjs # 构建前拉取内置快速决策模型(幂等、断点续传) └── patch-transformers.mjs # postinstall:transformers WASM 注入分支补丁 ``` ## 技术要点 - **元素提取**(browser-use 核心技术):CDP 注入脚本遍历可交互元素 → 可见性/遮挡检查 → 视口优先打分排序 → 截取上限数量 → 生成 `[5]