Multi-site AI aggregator CLI for Chinese AI products and search engines (Yuanbao, Kimi, Tongyi, Doubao, Baidu, Sogou WeChat, ...).
Project description
>简体中文< | English
Browser-AI Toolkit / 浏览器 AI 工具集
一个 CLI,把同一句话同时丢给一堆 AI 和搜索引擎,然后把答案排好序端回来。
这是干嘛的?
browser-ai 是一个 Python CLI:把单条查询同时分发给多个 AI 服务(腾讯元宝、Kimi、通义千问、知乎直答、豆包……)和搜索引擎(百度、Google、搜狗微信),等所有源返回后做统一排序,输出一个综合结果。
底层基于 Playwright,提供两个可按站点切换的引擎:
- Chromium + 持久化 profile:用于需要保留登录态的站点。
- Camoufox(反检测 Firefox):用于对普通浏览器进行指纹识别的搜索/抓取类站点。
站点配置完全由 config/ai_sites.json 数据驱动。新增站点只需复制一段配置并修改选择器,无需改动任何 Python 代码。
和 OpenRouter / LiteLLM 有什么不同?
看到这里第一反应很可能是「这不就是又一个 AI router 吗?」——问题合理,但路由对象完全不同。
| OpenRouter / LiteLLM / OneAPI / Portkey | browser-ai | |
|---|---|---|
| 路由对象 | LLM API 端点 | AI 网页产品 + 搜索引擎网页 |
| 调用方式 | HTTP API(OpenAI 兼容格式) | 浏览器自动化(Playwright) |
| 鉴权 | API Key(按 token 计费) | 你自己的登录态(cookie / persistent profile) |
| 覆盖范围 | 有公开 API 的 LLM 提供商 | 有网页 UI 的一切——包括没 API 的 |
| 输出 | 单个模型的文本回复 | 多源页面文本 + 统一打分排序 |
| 形态 | 后端服务 / 网关 | 本地 CLI |
API router 做不到的三件事,browser-ai 都覆盖:
1. 那些「没 API、只有网页」的源。
腾讯元宝、知乎直答、Web 版豆包、B 站 AI 总结、搜狗微信——这些都没有公开 API,但都是有用信源。API router 物理上摸不到这一层。
2. 主流 LLM 看不到的「围墙花园」内容。
Gemini、GPT、Claude 这类模型有训练截止日期,而且语料重度偏向英文。它们对中文平台围墙内的内容覆盖非常弱:
- 微信公众号:中文长文的主战场,Google 几乎索引不到,模型训练数据里也稀薄。
- 百度贴吧、知乎、小红书:反爬严格、登录门槛高,西方爬虫根本看不见。
- 中文平台的实时内容:上周刚发的帖子、新出的爆款文章,模型压根没见过。
browser-ai 通过搜狗微信(目前唯一的公开公众号聚合入口)、百度、加上你登录好的元宝 / Kimi 会话,直接抓活的、带中文场景的真实资料,而不是问一个 LLM 它几年前的记忆。weixin 命令就是为这个场景设计的——搜狗 + 百度 + 元宝三路包抄同一个查询,把 AI 看不到的中文长文搜回来,给 LLM 的回答补充一个它够不着的思考维度。
3. AI + 搜索引擎混合扇出。
大多数 AI router 只在 LLM 之间扇出。browser-ai 把 AI 产品和搜索引擎(百度、Google、搜狗微信)混在同一次查询里——这是「边问 AI、边找参考资料」的唯一实用做法。
一句话总结:OpenRouter 做的是「API 抽象层」;browser-ai 做的是「网页抽象层」——把任何带网页的 AI 产品或搜索引擎,捏成一个统一查询目标。
和 @playwright/mcp 有什么不同?
@playwright/mcp是微软官方维护的 Playwright MCP 服务器:把浏览器自动化能力暴露成 MCP 工具,让 AI agent 可以一步步指挥浏览器。
它和 browser-ai 不在同一个层面竞争——一个把浏览器暴露给 AI,另一个是基于浏览器的预设工作流。
@playwright/mcp |
browser-ai | |
|---|---|---|
| 本质 | 通用浏览器遥控器(MCP 工具集) | 预设工作流 CLI |
| 决策者 | AI agent 自己(一步步操作) | JSON 配置(开箱即用) |
| 执行模式 | 单标签页串行 | 多站点并行扇出(asyncio.gather) |
| 站点知识 | 通用,每次让 AI 现场摸索 | 预配每个 AI 站点的选择器 / 等待逻辑 |
| 反检测 | 无 | navigator.webdriver 掩蔽 + 可选 Camoufox |
| 登录态 | 无 explicit 管理 | config/profiles/ 按站点分目录 + Firefox cookie 导入 |
| 意图路由 | 无 | search_routes.json 按关键词决定探哪些站点 |
| 评分排序 | 无 | 三阶段 probe → evaluate → deep-dive |
| 公众号搜索 | 无 | weixin 命令三路包抄 |
一句话总结:
@playwright/mcp给 AI agent 一本空白笔记本和一支笔;browser-ai是已经填好的答题卡,连笔迹都描过一遍了。
推荐两者都装
它们解决的问题不同,建议都装:
# browser-ai:CLI 工作流(多源聚合、反检测、预配站点)
pip install playwright camoufox
playwright install chromium
camoufox fetch
# @playwright/mcp:MCP 工具集(让 Claude / Cursor / Cline 直接控制浏览器)
npm install -g @playwright/mcp
@playwright/mcp适合「让 AI 自由探索新站点」的开放场景。browser-ai适合「中文 AI 产品聚合 + 围墙花园数据获取」的预设场景。
两个装上互不冲突,按场景切换用。
快速开始
方式一:pip install(推荐给最终用户)
pip install browser-ai-cli
playwright install chromium
# 可选:反检测场景用得到
camoufox fetch
# 首次运行会自动把模板配置拷到 ~/.config/browser-ai/config/
browser-ai-cli list
# 登录某个站点(会弹一个真的浏览器窗口,自己手动登录一下就行)
browser-ai-cli login yuanbao
# 全网智能搜索:AI + 搜索引擎一起上
browser-ai-cli search "python 异步编程最佳实践"
# 公众号文章:搜狗 + 百度 + 元宝三路包抄
browser-ai-cli weixin "微信公众号 跨境电商"
pip 安装模式下,配置和登录态落在
~/.config/browser-ai/(XDG 风格),和系统其他 dotfiles 一处管理。本地 checkout 模式下仍是仓库根目录的config/,老用户行为不变。
方式二:clone 仓库自己改(推荐给二次开发)
git clone https://github.com/Weiming3/browser-ai.git
cd browser-ai
pip install -r requirements.txt
playwright install chromium
# 可选:装上 Camoufox,反检测场景用得到
pip install camoufox
camoufox fetch
# 把示例配置复制成你自己的本地配置
cp config/ai_sites.example.json config/ai_sites.json
cp config/search_routes.example.json config/search_routes.json
# 看看现在接了哪些站点
python scripts/browser_ai.py list
# 登录某个站点(会弹一个真的浏览器窗口,自己手动登录一下就行)
python scripts/browser_ai.py login yuanbao
# 全网智能搜索:AI + 搜索引擎一起上
python scripts/browser_ai.py search "python 异步编程最佳实践"
# 想单独戳某个源也行
python scripts/browser_ai.py probe "kimi 长文本"
从 Firefox 导入已有登录态
如果某些站点你已经在 Firefox 里登录过,不必再手动登录一次。scripts/import_firefox_login.py 会读取你本机 Firefox 的 cookies.sqlite 数据库,把对应的 cookie 写入到 config/profiles/ 下对应的 Chromium profile 目录中。
# 先 dry-run 看看会动哪些 cookie
python scripts/import_firefox_login.py --dry-run
# 确认无误后再真跑
python scripts/import_firefox_login.py
# 只导入某个站点的 cookie
python scripts/import_firefox_login.py --site yuanbao
强烈建议第一次使用先跑 --dry-run 预览。
目录结构
browser-ai/
├── scripts/
│ ├── browser_ai.py # 主 CLI
│ ├── import_firefox_login.py # Firefox 登录态搬运工
│ └── pre-commit-check.py # 提交前安全检查
├── config/
│ ├── ai_sites.example.json # 模板,复制成 ai_sites.json
│ └── search_routes.example.json
├── tests/
│ └── test_smoke.py # 26 个冒烟测试
├── README.md
├── README_en.md
├── LICENSE
├── pyproject.toml # pip 包元数据 + entry point
├── requirements.txt
├── .gitignore
└── .gitattributes
加一个新 AI 站点
最快是跑向导:
python scripts/browser_ai.py add-site
愿意直接改 JSON 的话,从 config/ai_sites.json 里复制一段 site,改这几个字段就够了:name、url、login_url、login_hint、selectors.input、selectors.submit、selectors.response、preferred_engine。重启 CLI,新站点就上线了。
引擎怎么选?
| 引擎 | 适用场景 |
|---|---|
| Chromium + profile | 需要登录态的站点(元宝、Kimi、豆包、B站)。 |
| Camoufox | 搜索/抓取类站点对无头 Chromium 不友好(百度、Google、搜狗微信)。 |
在 ai_sites.json 里给每个站点设一个 preferred_engine 就完事,只这一个开关。两个引擎相互独立——想留就留,想拆就拆,反正不是承重墙。
真正要看两眼的就这两件事
一、登录态别往仓库里塞。
config/profiles/ 里装的是 cookies、localStorage、IndexedDB,基本等同于每个站点的活动登录会话。.gitignore 默认已经把它排除在外了,别动这一行。真正的 config/ai_sites.json 也在 gitignore 里,模板是 *.example.json 那两份。仓库自带的 scripts/pre-commit-check.py 会拦下任何想偷偷把这俩文件加进去的 commit。建议这样用:
python scripts/pre-commit-check.py # 每次提交前手动跑
cp scripts/pre-commit-check.py .git/hooks/pre-commit # 装成 git hook 自动拦截
二、站点的服务条款还是老大。
绝大多数 AI 平台的服务条款都明确禁止自动化访问。本工具就自己研究用,别拿去当爬虫服务赚钱,也别去薅别人的付费内容。被限流、被封 IP、被发律师函,都跟作者没关系,谢谢。
一些零碎
login和--headed一定弹窗,其他命令默认静默。- 百度/Google 无头模式有时候会跳验证码,加
--headed就行。 - 默认配置是样例,不是真理。按自己工作流改好再发给别人看。
许可证
MIT —— 见 LICENSE。
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file browser_ai_cli-0.1.0.tar.gz.
File metadata
- Download URL: browser_ai_cli-0.1.0.tar.gz
- Upload date:
- Size: 29.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1d64ee34a92200969356b198a756e8fb83458dd2e14d4a9fbb85d58f3f3aa128
|
|
| MD5 |
b77c1f3c8085cf582b8e33611855b2e0
|
|
| BLAKE2b-256 |
32849b144820809f3d315d202a9dc396935eca3fcdb8605913ced52b1d6c76e5
|
File details
Details for the file browser_ai_cli-0.1.0-py3-none-any.whl.
File metadata
- Download URL: browser_ai_cli-0.1.0-py3-none-any.whl
- Upload date:
- Size: 31.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4322184b37a2c6d1183da0ea66b9f99b66c7176c154934b5ee66ebd3063b1a62
|
|
| MD5 |
ec04d64404e548be68aa2fd9a02e1f8c
|
|
| BLAKE2b-256 |
672067c2b0fb5e101b09c23cc7f083974e152ead2c553a6f35e0c32bfaf2de57
|