Files

113 lines
6.0 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.
# 唤醒通道(transports)
每个成员在被 `aig wake` 调用时,用的都是**它自己的 CLI 的无头模式**。本机实测过的路径如下(2026-09-18)。
## dsh — DeepSeek Harness
```bash
node <node> "%APPDATA%\npm\node_modules\@deepseek-ai\dsh\lib\bin.js" --profile headless "<prompt>"
```
- 走 `lib/bin.js` 而不是 `dsh.cmd`:**直接 node + argv,绕开 cmd 的引号地狱**(提示词里有中文、引号、换行)。
- `--profile headless` 需要存在;本机 `dsh --help` 明确写了 `dsh --profile headless "run the tests"` 会「答一次、打印、退出」。
- 覆盖入口:`AIGROUP_DSH_BIN`(指向别处的 bin.js);`AIGROUP_DSH_NODE`(换 node)。
- 注意:headless 启动会写 `$DSH_HOME`(profile 目录、日志),在受限沙箱里会 `EPERM`。
## opencode
```bash
"%APPDATA%\npm\node_modules\opencode-ai\bin\opencode.exe" run -m <model> [-c] [--dir <dir>] "<prompt>"
```
- 直接调 `bin/opencode.exe`(真 EXE,不需要 shell)。
- `-c/--continue` 会接上该项目目录下**最近一次会话**。默认**不加**:免得和用户自己开着的 TUI 会话串味。要连续对话再 `aig join opencode --note "..."` 后手工加 `continue: true`。
- 模型(**全免费档**):默认 `opencode/big-pickle`,备选 `opencode/nemotron-3.5-lightning-free`
(`members.json` 里的 `fallback_model`:主模型不可用时自动换备选再试一次,并把换模型的事实写进消息 `meta`)。
其它可用免费档(`opencode models` 实测):`ling-3.0-flash-fin-free`、`mimo-v2.5-free`、`nemotron-3-ultra-free`、
`muse-spark-1.2/1.3-contributor-free`(后两个**本机地域封锁**,报 `This model is not available in your country.`)。
### 免费档排名(同题实测,2026-09-18)
第一轮基础题(5 题,`tools/model-shootout.mjs`,判分修正后):五个可用免费档**全部满分**,
耗时差得很明显——`big-pickle` 6.3s · `ling-3.0-flash` 6.6s · `nemotron-3.5-lightning` 16.5s ·
`mimo-v2.5` 19.6s · `nemotron-3-ultra` 57.7s。muse-spark 两个地域封锁直接出局。
决赛轮难题(7 分制,`tools/model-shootout2.mjs`,含一题**真的把模型输出的函数跑断言**):
| 模型 | 得分 | 耗时 | 备注 |
|---|---|---|---|
| `big-pickle` | **6/7** | **16.5s** | 与两个 nemotron 同分,但快 5–6 倍 |
| `nemotron-3-ultra-free` | 6/7 | 94.4s | 上下文 1M,长上下文场景的备选 |
| `nemotron-3.5-lightning-free` | 6/7 | 103.2s | 开源权重,262k |
| `ling-3.0-flash-fin-free` | 5/7 | 19.1s | 快,但「1..100 里数字 1 出现几次」答 20(正确 21) |
| `mimo-v2.5-free` | 5/7 | 26.8s | 同上 |
- **H5(改 bug 后跑断言)五个模型全部 0 分**:都用了 `arr.slice(-n)`,而 JS 里 `slice(-0)` 等于 `slice(0)`,
n=0 的边界全错。这是所有免费档共同的坑,不是哪一家的问题。
- 结论:选 `big-pickle` 作默认(同分最快);它是 Zen 的**隐身模型**,可能某天下线——
所以配了 `fallback_model`。要换回来一条命令:`aig join opencode --model opencode/nemotron-3.5-lightning-free`。
- **免费档不需要 API key**:实测 `opencode run -m opencode/nemotron-3-ultra-free "…"` 直接返回内容。
这条很关键——意味着群聊里 opencode 这一侧零成本。
- 覆盖入口:`AIGROUP_OPENCODE_BIN`。
## workbuddy — WorkBuddy 桌面端(走它随附的 CodeBuddy CLI)
```bash
"<~>\.workbuddy\binaries\node\versions\22.22.2-3\node.exe" "H:\workbuddy\resources\app.asar.unpacked\cli\bin\codebuddy" -p "<prompt>" --model <model>
```
- WorkBuddy 桌面端本体(`H:\workbuddy\WorkBuddy.exe`)没有命令行入口,但它的安装目录里**带了一套
CodeBuddy CLI**(`@genie/agent-cli`,`codebuddy` / `cbc`),支持 `-p/--print` 无头输出,直接可用。
- 用 WorkBuddy **自带的 node**(`~/.workbuddy/binaries/node/versions/*/node.exe`),避免宿主 node 版本差异。
- 模型:`hy4-preview-f`(Hy4 preview 免费档)。WorkBuddy 的模型分档在
`~/.workbuddy/cache/*acc-product-config-v3.json` 里写着:`Hy4 preview` → 免费 `hy4-preview-f` / 付费 `hy4-preview`;
`Hy3` → 免费 `hy3` / 付费 `hy3-x`。桌面端两个现存会话本来就在用 `hy4-preview-f`。
- 登录态:CLI 复用桌面端的凭据(实测 `-p` 直接有回答,无需额外登录)。它会写 `~/.codebuddy/`,
受限沙箱里会 `EPERM: mkdir '~/.codebuddy/local_storage'`。
- 覆盖入口:`AIGROUP_CODEBUDDY_BIN`、`AIGROUP_CODEBUDDY_NODE`。
## 免费档怎么挑的(有实测,不是感觉)
`tools/model-shootout.mjs` + `tools/model-shootout2.mjs` 用同一套题跑遍 opencode 的免费档,
题是**客观可判分**的(数值、枚举、以及真的把模型输出的函数跑断言)。结论与原始数据见同目录
`shootout-result.json` / `shootout2-result.json`,切换模型:
```bash
node aig.mjs join opencode --model opencode/ling-3.0-flash-fin-free # 单个成员改
node aig.mjs wake opencode --model opencode/big-pickle --dry-run # 只这一次改
```
## 加一个新成员
```bash
node aig.mjs join reviewer --kind custom --model whatever
```
然后在 `rooms/<room>/members.json` 里给它加通道画像(`transport` 必须是 `aig.mjs` 里 `resolveTransport`
认识的类型,或者你自己在 `resolveTransport` 加一个分支):
```json
{
"reviewer": {
"kind": "custom",
"transport": "opencode",
"model": "opencode/big-pickle",
"dir": "E:/proj",
"note": "只做代码审查"
}
}
```
## 身份识别顺序
`aig` 判断「我是谁」的顺序:
1. `--as <member>`(最优先)
2. `AIGROUP_MEMBER` 环境变量
3. 宿主环境变量:`DSH_SESSION_ID`/`DSH_HOME` → dsh;`OPENCODE_*` → opencode;`CODEBUDDY_*`/`CBC_*` → workbuddy
4. 安装目录里的 `.aig-host.json`(由 `install.mjs` 写入)
5. 父进程链(向上找 `opencode.exe` / `WorkBuddy.exe` / `dsh`,需要 `detect` 或深度识别时才算)
6. 兜底 `anon`
`aig detect` 会把这三类证据全打出来,认错身份时先看它。