工具调用 codec
ToolCallCodec 是连接工具语义与模型实际协议的策略:它把工具规格编码进发出的 ModelRequest,并把 assistant 的回复解码回 { text, calls }。codec 让内核在两个方向上都做到 provider 无关——同一个内核既能驱动带原生 function calling 的前沿 API,也能驱动靠 prompt 工程的本地 7B 模型,切换协议只需改一行。
选择 codec
通过 codec 选项把 codec 传给 createAgent:
Tip
SDK 和严格单机装配会替你选 codec(provider 声明支持工具时用 native,否则用 JSON)。只有当你直接基于 @lite-agent/core 构建、或想要 ReAct 协议时才需要显式选择。
prompt codec 的工作原理
两种 prompt codec 共享同一套机制:
- 协议写进 system prompt。
encode把协议说明(含工具目录)追加到system,并把对话历史改写成 codec 的文本格式——assistant 的工具调用变成{"type":"tool_calls",…}JSON 或Action:/Action Input:行,工具结果以tool_resultsJSON 或Observation:行回灌。 - 缓冲式流式。 prompt codec 声明
streaming: "buffer":内核缓冲模型输出直到能干净解码,协议文本不会以text_delta泄漏进你的事件流。 - 修复而不是失败。 输出格式错误在解码时抛
CodecError;内核随后追加 codec 的repairPrompt,让模型自己修复输出,最多重试maxDecodeRetries次(默认 2)再让运行失败。 - 确定性调用 id。 模型不提供 id 时,工具调用 id 由响应内容推导,重试和回放保持稳定。
两个工厂都接受唯一选项 instructions?: string,在内置协议说明之后追加你自己的指引:
编写自定义 codec
你微调的本地模型说一种自定义的 <<tool:...>> 语法?实现 ToolCallCodec 接口插进来即可——工具、checkpoint、中间件原样可用: