Muse Code 接入任意模型
最近 Meta 发布一个编码工具,考虑到如今 Harness 如日中天,突然觉得此前 Meta 意欲收购 Manus 也没那么离谱了。尽管工具本身关注度不高,不过因其号称在健壮性方面很强(可能参考过 Manus 的思路),所以打算看看。
Muse Code 不支持第三方模型,但提供了20美金试用,愿意分享数据的话,可以用很久。
程序本身也没什么设防,即使没文档,接入第三方也不算艰难。
研究过程比较零碎,直接抛结论,具体实现在文末的 PoC。
首先,muse 启动参数有几个重要项:
META_API_KEY作为环境变量输入时,比浏览器授权优先级更高。不经 TUI 设置可以跳过 KEY 验证,直接进入界面;--base-url可以设置 Meta API ,可能是用作镜像,也可以 mock 一个私服作为中转;--model和--provider是设置默认模型,与 base-url 返回的结果对应。
对应的启动方式形如:META_API_KEY="dummy-key" muse --provider meta --base-url http://127.0.0.1:9911 --model glm-5.2 --yolo
base-url是本地搭建的中间层,用来提供模型目录和转发对话。
具体而言,muse 会从 {base-url}/muse-code/models 获取模型列表,官方模型只有 spark 系列,我们可以返回自定义结果。示例:
{
"schema_version": 1,
"data": [
{
"provider_id": "meta",
"profile_id": "default",
"id": "glm-5.2",
"model_id": "glm-5.2",
"display_label": "Z.AI/GLM-5.2",
"visibility": "visible",
"release_date": "2025-01-01",
"display_order": 1,
"is_current": true,
"is_default": true,
"context_limit": 65536,
"output_limit": 8192,
"description": "Third-Party Model via muse proxy"
}
]
}
具体的对话走 OpenAI Responses 格式接口({base-url}/v1/responses)。
上下文窗口控制和压缩:
- 默认达到 80% 触发摘要压缩,90% 进行强制硬压缩;
settings.json、CLI 和远程模型信息均可控制窗口,本地设置优先于远程;- 可以额外控制是否清除工具输出,默认是清除。
之前的示例已经展示远程模型列表如何传入窗口,以下是 settings.json 示例,优先级更高:
{
"schema_version": 1,
"run": {
"reminder_roster": {
"interval_steps": 999999,
"skip_if_running": true,
"max_in_flight_per_agent": 1
},
"context_compaction": {
"soft_threshold": 0.8,
"hard_threshold": 0.9,
"provider_context_limit_tokens": 32768,
"tool_result_clearing_enabled": true
}
}
}
btw:对应的 CLI 参数(一般无需使用)是 --context-compaction-soft-threshold / --context-compaction-strategy / --max-tool-output-bytes 。
可以看到,在配置文件中还有一个reminder_roster。
在实际调度中,每次回应后会有几秒的延迟,显示 Finishing up,期间程序会发起多次额外对话:
- scope reminder(与对话调用并发)
- approval judge
- goal reminder
- verification watcher
简单来说,就是 muse 在发起额外检查,确保操作没有越界、真的完成任务。它还引入了一个二号观察员,用来监督检查是否真的起效(可以说是有迫害妄想症)。
如果想要关闭或者调整,可以配置reminder_roster,按需设定:
interval_steps:执行多少步开始检查,默认可能是1,大数等同于跳过;skip_if_running:如果已有 reminder 在运行,跳过本次调度;max_in_flight_per_agent:每个agent 最多几个并发 reminder。
至此,我们已经有了大致信息,可以完成一个简单的中间层,通过 CC-Switch、New API 等工具,我们也可以接入 /chat/completions 端点。
具体的中间层可以查看这份:PoC