40 个文件里找 3 处,不该付 40 个文件的钱
普通的 agent 找引用是一条一条读。40 次工具调用、40 段结果全部记进上下文,哪怕你要的只是其中 3 处。钱照付,窗口照占。
run_code 换了个方向。模型写一小段 MoonBit 程序,程序自己去循环、自己过滤,只把那 3 处带回对话:
let hits = []
for path in paths {
match ctx.call("grep", {"pattern": "OldAuth", "path": path}) {
{"error": _, ..} => ()
result => hits.push({ "path": path, "hit": result })
}
}
{ "count": hits.length(), "hits": hits }中间结果活在程序里,不进上下文,也就不进账单。这不是压缩,那些内容从头到尾没有产生过。
模型写的代码,凭什么放心跑
程序跑在 Wasm 沙箱里,文件系统、网络、进程访问全部拒绝。它唯一能做的是调用你允许的工具,列表之外是一句明确的报错,不会悄悄放行。
程序是编译执行的。类型错误在运行前就是编译错误,作为有上限的诊断(8K 字符)交还给模型自己修。
返回值有大小上限,程序能被取消。一个写歪的循环不会变成一次账单事故。
什么时候别用它
两三个工具调用的事,直接调更快,它的收益从循环和过滤开始。嵌套调用目前是串行的,需要并发请求时别用它。