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 把模型能力变成可测试、可追踪、可限制的工程系统。

参考链接