Files

158 lines
6.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 不是稳定 APIProvider DOM 或安全策略变化可能导致 Adapter 暂时失效。欢迎通过 GitHub Issues 提交复现步骤、页面截图和控制台错误。