构建 Agent:从一个循环到通用架构

构建 Agent:从一个循环到通用架构 一次模型调用接收输入并生成输出。完成“修复一个测试失败并验证结果”需要多次调用:模型检查代码、执行操作、读取结果,再决定下一步。把这些调用连接起来,就得到一个最小的 Agent Loop。 本文沿着这段程序的数据和调用路径逐项扩展。每节从一个具体限制出发,加入解决它所需的机制。章节按工程实现依赖推进。 一、一个最小的 Agent 最小 Agent 只做三件事:让模型决定下一步,执行模型选择的工具,再把执行结果交还模型。模型给出最终回答时,循环结束。 TYPESCRIPTasync function runAgent(userInput: string): Promise<string> { const messages: ModelMessage[] = [ { role: 'user', content: userInput }, ] while (true) { const response = await model.generate({ messages, tools: toolRegistry.schemas(), }) messages.push(response.message) if (response.toolCalls.length === 0) { return response.text } for (const call of response.toolCalls) { const result = await toolRegistry.execute(call.name, call.arguments) messages.push({ role: 'tool', toolCallId: call.id, content: result, }) } } } 这个循环已经具备 Agent 的核心反馈结构: TEXT用户目标 -> 模型决策 -> 工具行动 -> 环境观察 -> 模型决策 -> ... -> 最终回答 本文先把这段程序称为最小 Agent:模型选择下一步行动,运行时执行行动,并把环境观察送回模型。模型停止调用 Tool 表示本轮循环结束,测试结果与任务要求共同决定工作是否完成。 模型既可以直接回答,也可以通过搜索、文件、Shell、浏览器或业务 API 观察或改变外部环境。工具结果成为下一轮观察,模型据此修正行动。 第一处问题就在 toolRegistry.execute:模型生成的工具名和参数必须先经过运行时校验。 二、校验并执行 Tool Call 要修复测试失败,模型需要读取源码、搜索符号、修改文件并运行测试。我们先把这些操作注册成 Tool: ...

September 4, 2026

Agent References

Blogs LLM Powered Autonomous Agents | Lil’Log - Lilian Weng 关于 LLM Agent 的经典综述,覆盖规划、记忆和工具使用。 Function calling | OpenAI API - OpenAI API 关于函数调用和工具调用的官方文档。 Model Context Protocol - MCP 官方文档,关注模型应用如何连接外部工具、数据和上下文。 A2A Protocol - Agent 与 Agent 之间通信和互操作的协议文档。 Equipping agents for the real world with Agent Skills | Anthropic - Anthropic 关于 Agent Skills 的官方博客,介绍能力封装和按需加载的思路。- The Agent Skills Directory Introduction - Agent Client Protocol - Agent Client Protocol 官方入门文档,定义客户端应用与 Agent 之间的标准交互方式。 Codex 应用服务器 | ChatGPT 学习 - Codex App Server 官方文档,介绍如何把 Codex 作为本地服务接入自定义客户端,支持会话、审批和事件流。 企业级 Agent 多智能体架构与选型指南 – 来自 1000+ 行业应用实践积累 - 面向企业级场景的多智能体架构和技术选型经验。 Projects openclaw/openclaw: Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞 NousResearch/hermes-agent: The agent that grows with you bytedance/deer-flow: An open-source long-horizon SuperAgent harness that researches, codes, and creates. With the help of sandboxes, memories, tools, skill, subagents and message gateway, it handles different levels of tasks that could take minutes to hours. ultraworkers/claw-code: An agent-managed museum exhibit, built in Rust with Gajae-Code / LazyCodex — developed and maintained with no human intervention. openai/codex: Lightweight coding agent that runs in your terminal multica-ai/multica: The open-source managed agents platform. Turn coding agents into real teammates — assign tasks, track progress, compound skills.

July 18, 2026

Agent

Agent:从 Prompt Pattern 到 Agent Runtime 如果用 2023 年的视角看 Agent,经典结构通常是 Planning、Memory、Tools。这个划分没有错,但放到 2026 年已经不够了。 今天更准确的理解是: Agent 不是“一个会调用工具的大模型”,而是一个由模型驱动、可以感知上下文、调用工具、维护状态、接受约束、可观测、可恢复的运行时系统。 可以把现代 Agent 拆成七个部分: 层次 负责什么 Model 推理、生成、工具选择、结构化输出 Instructions 角色、目标、边界、业务规则 Context 当前任务、历史状态、检索结果、用户偏好、文件和工件 Tools 函数、API、数据库、代码执行、浏览器、MCP Server、其他 Agent Runtime 循环调度、流式输出、重试、暂停恢复、并发、检查点 Policy 权限、审批、沙箱、预算、速率限制、输入输出校验 Observability trace、评测、日志、成本、延迟、失败分析 这也是为什么早期的 Prompt Pattern 文章会显得“旧”:它们解释了 Agent 的思想来源,但没有覆盖生产系统真正困难的部分。 1. 经典结构仍然成立,但只能算基础层 经典 Agent 通常被拆成三块: Planning:把复杂目标拆成步骤。 Memory:保存任务相关上下文。 Tools:让模型能影响外部世界。 这个模型适合入门,但在真实系统里会遇到几个问题: Planning 不能只靠模型自由发挥,需要运行时约束、检查点和失败恢复。 Memory 不能只理解成上下文窗口,需要区分会话状态、长期记忆、检索知识库、文件工件。 Tools 不能只理解成 function calling,需要认证、授权、审批、沙箱、超时、幂等和审计。 Multi-Agent 不能只理解成“多个角色聊天”,需要明确的路由、状态边界和责任归属。 生产环境必须有 trace、eval、guardrail、成本和延迟控制。 所以本文的重点不是否定经典范式,而是把它们放回正确的位置:经典范式是 Agent 的思想基础,现代 Agent Runtime 才是工程架构。 ...

March 9, 2026