本记录依据我在 Go Agentic 学习目录中实现的 Python 最小实验整理。它用于解释 Agent 的基本执行机制,属于技术实验,不代表成熟 Coding Agent 产品。
模型提出调用,程序执行工具
模型返回工具名称和 JSON 参数;真正读取文件或执行程序的是本地 Python 工具实现。实现中用 JSON Schema 描述四个工具:
list_files
、
read_file
、
write_file
、
run_command
。
每轮先保留完整 assistant 消息,再依次执行 tool calls,并以对应的
tool_call_id
回传工具结果。下一轮模型才能根据真实执行结果继续工作。
message = model(messages, tools)
messages.append(message)
for call in message.get("tool_calls") or []:
observation = workspace.execute(call)
messages.append({
"role": "tool",
"tool_call_id": call["id"],
"content": observation,
})
失败也需要成为下一轮输入
参数解析、未知工具和文件访问错误被转成带类型的
TOOL_ERROR
观察结果,模型可以修改参数继续尝试。模型 API 连接失败、空回答和达到最大轮次则明确停止,已发生的文件修改不会自动回滚。
边界要由程序实现
文件工具会解析实际路径并检查是否仍在工作目录中。命令执行默认不开放,只有显式指定
--allow-run
后才提供给模型;执行时设置超时、返回码和输出截断,并移除子进程中的模型密钥变量。
cwd
只指定起始目录,不是进程沙箱。允许执行命令后,程序仍拥有当前用户权限,因此不能把文件工具的路径校验当作完整系统隔离。
接下来怎么验证
用固定的小任务检查多轮改错、参数错误、路径越界、超时和最大轮次退出;真实模型的完成率与成本需要独立实验记录。本页不从代码存在推导这些结果。