Agent 工程实践篇:从 0 到 1 构建一个可用 Agent
一个可用 Agent 不只是一个循环调用模型的脚本,还需要任务状态、工具注册、错误处理、日志追踪和退出条件。
Agent 工程实践篇:从 0 到 1 构建一个可用 Agent
构建 Agent 时,最容易犯的错误是只写一个 while 循环,让模型不断决定下一步。生产系统更需要明确的状态机、工具边界和可观测性。
Rendering diagram...
最小运行时
一个最小 Agent Runtime 至少要管理任务状态、最大步数、工具结果和最终输出。最大步数非常重要,它能避免模型陷入循环。
async function runAgent(goal: string) {
const state = { goal, steps: [], observations: [] };
for (let i = 0; i < 8; i++) {
const action = await planNextAction(state);
if (action.type === "final") return action.answer;
const result = await executeTool(action.tool, action.args);
state.observations.push(JSON.stringify(result));
}
throw new Error("Agent reached max steps");
}
错误恢复
工具可能失败,参数可能不合法,外部 API 可能超时。Agent Runtime 要把错误反馈给模型,但也要区分可重试错误和不可重试错误。
比如网络超时可以重试,权限不足不能重试,参数缺失可以让模型重新补参数。
日志和追踪
Agent 的每一步都应该记录:输入、模型决策、工具调用、工具结果、成本、耗时和最终输出。没有 Trace 的 Agent 很难调试。
小结
可用 Agent 的关键是 Runtime,而不只是模型。Runtime 把模型能力变成可测试、可追踪、可限制的工程系统。