留一个自己的运行时
大约 2 分钟
留一个自己的运行时
什么时候值得离开现成框架?
现有框架的消息模型和控制流盖不住你的约束:轨迹必须按自己的格式落库、工具权限要插进每次调用、几种循环要共用同一套停止和预算。这时再留一个最小运行时。
不值得为了「更轻」重写一个只覆盖演示的框架。自研的理由是你要拥有状态和拦截点,不是要拥有更多类名。
最小要有哪几块?
- 模型适配:一个客户端接口,下面可以换供应商。配置放在环境里,调用方不写死地址和密钥。能自动判断供应商,是为了示例和切换方便,生产仍要显式配置。
- 消息:角色有限,例如系统、用户、助手、工具。历史是消息列表,不是拼好的大字符串。
- 配置:模型、温度、最大步数、超时放在一处。
- 智能体接口:统一的
run,外面不关心里面是直接回答还是循环。 - 工具:基类加注册表。智能体只按名字调用,工具自己校验参数并返回字符串或结构化结果。
本地推理服务只要兼容同样的对话接口,就可以走这条适配,不必让智能体知道模型跑在哪台机器上。
几种循环怎么收成同一接口?
上面是同一个 Agent 抽象,下面是不同策略:
| 策略 | 它多做的事 |
|---|---|
| Simple | 带历史直接对话,需要时调用工具 |
| ReAct | 解析 Thought / Action,执行工具,把观察塞回轨迹 |
| Plan-and-Solve | 先产出计划,再逐步执行,进度存在运行时 |
| Reflection | 生成、收集反馈、带反馈再生成,并限制轮数 |
| Function Call | 用模型的原生函数调用,而不是从文本里抠动作 |
外面的代码只依赖 run 和工具注册。换策略不换工具,换模型不换策略。这是自研运行时要证明的唯一结构。
工具还可以再做两件面试爱问的事:多个工具按固定顺序组成链,以及互不依赖的工具并行执行。并行的前提是没有共享副作用。