试读章节:Tool Runtime 与权限审批
这篇继续放《Agent Runtime 工程化》的试读。
上一篇讲 Agent Loop 的生命周期。
这一篇讲工具。
更准确地说,是 Tool Runtime。
因为在生产级 Agent 里,工具不是函数列表。
工具是 Agent 行动的治理入口。
工具不是 Map<string, Function>
很多 demo 会这样写:
const tools = {
read_file,
write_file,
run_command,
};
模型返回:
{"name":"read_file","arguments":{"path":"README.md"}}
程序执行:
await tools[call.name](call.arguments);
这能跑。
但只适合 demo。
一旦工具能写文件、跑命令、联网、访问数据库,你就不能只关心'函数怎么调用'。
你要关心:
这个工具是否存在?
参数是否合法?
参数行为是否安全?
风险等级是什么?
是否需要用户批准?
输出太大怎么办?
失败如何反馈模型?
副作用如何进入 checkpoint?
所以工具要先'上户口'。
ToolDefinition 至少要说清楚什么
一个工具定义,最少要覆盖四类读者。
模型要读工具名、描述和 schema,用来决定是否调用。
Permission Gate 要读风险、副作用、资源范围和 preview,用来决定是否允许执行。
Executor 要读 timeout、并行安全、取消信号和输出策略,用来控制执行。
Context Builder 要读 output policy,用来决定工具结果如何进入上下文。
可以从这样的结构开始:
type ToolDefinition<TInput = unknown> = {
name: string;
version: string;
description: string;
: ;
: | | | | ;
: ;
: | ;
: {
: ;
: | | ;
};
(: , : ): <>;
};

