6.0 KiB
6.0 KiB
唤醒通道(transports)
每个成员在被 aig wake 调用时,用的都是它自己的 CLI 的无头模式。本机实测过的路径如下(2026-09-18)。
dsh — DeepSeek Harness
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
"%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)
"<~>\.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,切换模型:
node aig.mjs join opencode --model opencode/ling-3.0-flash-fin-free # 单个成员改
node aig.mjs wake opencode --model opencode/big-pickle --dry-run # 只这一次改
加一个新成员
node aig.mjs join reviewer --kind custom --model whatever
然后在 rooms/<room>/members.json 里给它加通道画像(transport 必须是 aig.mjs 里 resolveTransport
认识的类型,或者你自己在 resolveTransport 加一个分支):
{
"reviewer": {
"kind": "custom",
"transport": "opencode",
"model": "opencode/big-pickle",
"dir": "E:/proj",
"note": "只做代码审查"
}
}
身份识别顺序
aig 判断「我是谁」的顺序:
--as <member>(最优先)AIGROUP_MEMBER环境变量- 宿主环境变量:
DSH_SESSION_ID/DSH_HOME→ dsh;OPENCODE_*→ opencode;CODEBUDDY_*/CBC_*→ workbuddy - 安装目录里的
.aig-host.json(由install.mjs写入) - 父进程链(向上找
opencode.exe/WorkBuddy.exe/dsh,需要detect或深度识别时才算) - 兜底
anon
aig detect 会把这三类证据全打出来,认错身份时先看它。