158 lines
6.4 KiB
Markdown
158 lines
6.4 KiB
Markdown
# AI Parallel
|
||
|
||
AI Parallel 是一个 Chrome / Edge Manifest V3 扩展:在一个工作区中打开多个 AI 网页,一次输入,并行发送,并按需收集、比较和导出回答。
|
||
|
||
> No API keys. No proxy server. AI Parallel reuses your existing provider web sessions locally in the browser.
|
||
|
||
## 功能
|
||
|
||
- 多模型网页工作区:ChatGPT、DeepSeek、智谱清言、Qwen、Kimi、Claude、Gemini、Grok
|
||
- 一次输入并行发送到多个 Provider
|
||
- Compare Drawer:收集当前回答并安全显示为纯文本
|
||
- 导出 Markdown、JSON,或下载 `.md` 文件
|
||
- Agent Handoff:把问题和多模型回答交给目标模型继续处理
|
||
- 本地 Prompt Library
|
||
- 布局切换与 Provider 独立刷新/打开
|
||
|
||
默认启用 ChatGPT、DeepSeek、智谱清言、Qwen 和 Kimi。Claude、Gemini 与 Grok 可按需开启。
|
||
|
||
## Provider 运行模式
|
||
|
||
| Provider | 运行方式 | 说明 |
|
||
| --- | --- | --- |
|
||
| ChatGPT | 工作区 iframe | 使用原站页面和当前登录会话 |
|
||
| DeepSeek | 工作区 iframe | 使用原站页面和当前登录会话 |
|
||
| 智谱清言 | 工作区 iframe | 使用原站页面和当前登录会话 |
|
||
| Qwen | 工作区 iframe | 使用原站页面和当前登录会话 |
|
||
| Kimi | 工作区 iframe | 使用原站页面和当前登录会话 |
|
||
| Claude | 工作区 iframe | DOM Adapter 为 best effort |
|
||
| Gemini | 工作区 iframe | DOM Adapter 为 best effort |
|
||
| Grok | 受控顶层标签页 | 避免登录 iframe 与 WebSocket timeout |
|
||
|
||
Grok 官网依赖已登录的实时 WebSocket,认证页也禁止 iframe。AI Parallel 会打开或复用正常的 `grok.com` 标签页,然后通过受限消息桥完成 Prompt 发送、回答收集和 Handoff。
|
||
|
||
## 从 GitHub Release 安装
|
||
|
||
1. 打开 [Releases](https://github.com/CoderLambert/ai-parallel/releases/latest)。
|
||
2. 下载 `ai-parallel-browser-extension-vX.Y.Z.zip`。
|
||
3. 解压 ZIP,保留解压目录,不要在安装后删除或移动它。
|
||
4. Chrome 打开 `chrome://extensions/`;Edge 打开 `edge://extensions/`。
|
||
5. 开启右上角“开发者模式”。
|
||
6. 点击“加载已解压的扩展程序”。
|
||
7. 选择解压得到的 `ai-parallel-browser-extension` 文件夹。
|
||
8. 固定 AI Parallel 图标,点击即可打开工作区。
|
||
|
||
Chrome 不能直接把普通 ZIP 当成未打包扩展安装,必须先解压。
|
||
|
||
### 校验下载文件
|
||
|
||
每个 Release 都提供 SHA-256 文件:
|
||
|
||
```bash
|
||
sha256sum -c ai-parallel-browser-extension-vX.Y.Z.zip.sha256
|
||
```
|
||
|
||
## 首次使用
|
||
|
||
1. 先在各 Provider 官网完成登录。
|
||
2. 点击 AI Parallel 图标打开工作区。
|
||
3. 在顶部选择 Provider。
|
||
4. 在底部输入 Prompt,按 `Ctrl+Enter` / `Cmd+Enter` 或点击“发送”。
|
||
5. 等待原站生成回答,点击 `Compare` 收集结果。
|
||
|
||
Grok 第一次参与发送时会打开或复用官网标签页。扩展升级后,如果旧 Grok 标签页没有新版桥接脚本,AI Parallel 会自动刷新该标签页一次。
|
||
|
||
## 更新
|
||
|
||
### 手动更新
|
||
|
||
下载新 Release,解压并覆盖原目录,然后在 `chrome://extensions/` / `edge://extensions/` 中点击 AI Parallel 的“重新加载”。如果替换了目录位置,需要删除旧扩展后重新“加载已解压的扩展程序”。
|
||
|
||
### Linux:使用 `ai-parallel-sync`
|
||
|
||
从 Release 下载 `ai-parallel-sync` 后安装:
|
||
|
||
```bash
|
||
install -Dm755 ai-parallel-sync ~/.local/bin/ai-parallel-sync
|
||
ai-parallel-sync
|
||
```
|
||
|
||
首次运行会把扩展同步到:
|
||
|
||
```text
|
||
~/.local/share/ai-parallel/browser-extension
|
||
```
|
||
|
||
第一次在浏览器中加载这个固定目录。以后只需运行 `ai-parallel-sync`,再到扩展管理页点击“重新加载”。命令默认同步最新 `v*` Release 标签,需要 `git`、`node`、`npm` 和 `rsync`。
|
||
|
||
## 常见问题
|
||
|
||
### `accounts.x.ai refused to connect`
|
||
|
||
不要在 iframe 中登录 Grok。当前版本会让 Grok 在正常顶层标签页中运行。请确认已更新扩展,并完全关闭后重新打开旧的 AI Parallel 工作区标签页。
|
||
|
||
### Grok 显示 WebSocket `timeout`
|
||
|
||
确认普通 `https://grok.com/` 标签页可以聊天。AI Parallel v2.1.4 起不再把 Grok 嵌入 iframe;如果仍看到旧 iframe,请在扩展管理页重新加载扩展并重新打开工作区。
|
||
|
||
### `ERR_BLOCKED_BY_CLIENT`
|
||
|
||
这通常来自广告或隐私扩展。若被阻止的是 Provider 的核心接口,请暂时关闭对应站点的拦截后重试;单纯的统计/广告请求失败通常不影响聊天。
|
||
|
||
### Provider 显示“未就绪”或发送失败
|
||
|
||
- 重新加载对应面板。
|
||
- 确认已经登录原站。
|
||
- 在扩展管理页重新加载 AI Parallel,并重新打开工作区。
|
||
- Provider 网页 DOM 会更新;选择器 Adapter 属于 best effort,需要随原站变化维护。
|
||
|
||
## 权限与隐私
|
||
|
||
AI Parallel 请求:
|
||
|
||
- `storage`:保存 Provider 选择、草稿和 Prompt Library。
|
||
- `tabs`:打开/聚焦工作区和 Grok 顶层标签页。
|
||
- `declarativeNetRequest*`:仅对已配置 Provider 的 `sub_frame` 响应移除 iframe 限制头。
|
||
- Provider host permissions:注入本地 Adapter,并与原站页面交互。
|
||
|
||
扩展不保存 Provider 密码,不请求 Cookie 权限,不把 Prompt 放进目标 URL,也不把回答发送到 AI Parallel 自有服务器。回答只在用户点击 Compare 后收集到当前扩展页面,并按纯文本渲染。
|
||
|
||
## 本地开发
|
||
|
||
要求 Node.js 18+:
|
||
|
||
```bash
|
||
git clone https://github.com/CoderLambert/ai-parallel.git
|
||
cd ai-parallel
|
||
npm run check
|
||
npm test
|
||
```
|
||
|
||
需要真实 Provider 登录态时,使用独立的手动、受保护 authenticated smoke
|
||
流程;默认 Browser Smoke 仍不读取凭据。配置和保留边界见
|
||
[Authenticated Provider Smoke](docs/testing/AUTHENTICATED-PROVIDER-SMOKE.md)。
|
||
|
||
从源码加载时,在扩展管理页选择 `apps/browser-extension`。
|
||
|
||
生成 Release 包:
|
||
|
||
```bash
|
||
npm run package:extension
|
||
```
|
||
|
||
产物位于 `dist/`。
|
||
|
||
## 架构
|
||
|
||
```text
|
||
AI Parallel Workspace
|
||
├─ iframe Providers ─ postMessage ─ Provider Adapter
|
||
└─ Grok top-level tab ─ service worker ─ tabs.sendMessage ─ Grok Adapter
|
||
```
|
||
|
||
Provider Adapter 统一提供 `sendPrompt()`、`collectResponse()` 和 `newChat()`。详细设计见 [docs/architecture.md](docs/architecture.md)。第三方架构参考和署名见 [ATTRIBUTION.md](ATTRIBUTION.md)。
|
||
|
||
## 项目状态
|
||
|
||
AI Web UI 不是稳定 API,Provider DOM 或安全策略变化可能导致 Adapter 暂时失效。欢迎通过 GitHub Issues 提交复现步骤、页面截图和控制台错误。
|