← 博客

工程笔记约 3 分钟

原样运行编程智能体,只改一处模型地址

多数把编程智能体装进自家界面的工具都在重新实现它。Mirasim 则照原样启动真正的命令行工具,只把模型请求 URL 指向本地代理。

Claude Code 自己的终端界面,原样跑在 Mirasim 的窗格里Claude Code 自己的终端界面,原样跑在 Mirasim 的窗格里

为什么给编程智能体「包一层」外壳通常会出问题

要把别人的编程智能体装进自家产品,最直觉的做法是接管它的输入和输出:解析智能体的输出内容、在自己的面板里重新绘制界面、通过自己的协议去驱动它。这种做法在演示时效果很好,但很快就会遇到下面的问题:

  1. 你的产品解析智能体输出

    把智能体的输出内容放到你自己的面板里重新绘制

  2. 智能体发布新版本

    智能体在新版本里改动了输出格式

  3. 你的解析器解析出错

    界面显示出错,让用户误以为是智能体变差了

一旦由你来解析并重绘智能体的输出,你就等于在维护别人产品的副本,对方的每次改进都会变成你产品里的故障。

另一重代价随后会体现在账号鉴权上。编程智能体原本会通过各自的订阅登录、OAuth 令牌或设备授权来直接验证身份。一旦外层的包装工具介入并代管了对话,往往也会顺手接管这些登录凭据,导致用户自己的账号变成由你的产品持有,而不是留在智能体自己手里。

Mirasim 的做法:原样启动智能体,只改模型请求地址

Mirasim 会直接启动智能体官方的命令行工具,并接通它的标准输入与标准输出,因此与你对话的进程就是原封不动的 Claude Code 或 Codex。在这过程中,Mirasim 只改动一处配置:把智能体的模型 base URL 指向本地代理,而不是直接连向模型供应商。Mirasim 在中间所做的改动只有这一处。

  1. 直接启动智能体官方命令行工具

    原样运行官方发布的 Claude Code 或 Codex

  2. 经由本地代理转发请求

    只把智能体的模型 base URL 改指向本地代理

  3. 连接上游的模型供应商

    智能体直接使用自己原有的登录状态与模型供应商通信

原封不动转发请求内容
代理只负责转发,不解析任何内容
保留智能体原有的登录鉴权
除非智能体要求,否则不注入密钥
在后台记录请求与响应数据
记录器写满即丢并计数,决不阻塞

本地代理不关心请求是 Anthropic 还是 OpenAI 格式,只把原始字节在后台存盘,因此兼容任意供应商与版本。

只转发流量而不做翻译能带来什么好处

替智能体翻译输出的包装层
Mirasim:只做路由转发
当智能体改动输出格式时
包装层解析出错,你必须跟着更新自己的解析器
Mirasim 不受任何影响,无需修改即可继续正常运行
智能体的交互界面
包装层解析智能体的输出后,在自家面板里重新绘制界面
Claude Code 与 Codex 保留原有的终端界面
账号登录与凭据管理
用户的账号登录凭据转由外层的包装产品代管和持有
直接沿用智能体已有的登录状态,无需重新注册或授权
原始视图里显示的内容
包装层根据自己的解析结果重新拼出来的模拟输出
智能体进程向终端真正写出的原始字节流
在 Mirasim 中可一键切换智能体原生终端输出与渲染面板,出问题时能直接对照原始输出排查原因。

因为 Mirasim 不在中间翻译内容,也不接管鉴权,Claude Code 和 Codex 都能直接沿用各自原有的登录状态,用户不需要另外注册新账号,也不用再在 Mirasim 里重新授权。每个会话都可以独立选择各自要用的编程智能体和模型,因此两个面板可以同时运行两个不同的智能体,并分别连接不同的模型供应商。

这种只做路由转发的做法也有代价:Mirasim 无法抹平不同编程智能体之间的差异。不同的智能体在运行行为、报错方式和配置方法上各不相同,Mirasim 不会用一层统一的外壳把这些差异掩盖起来。Mirasim 负责的是把流量路由到正确的地方、记录会话数据,以及提供外围的工作台功能,而不是假装这些智能体是同一个工具。

接着读