news 2026/8/16 13:49:59

开发一个 Agent,还需要哪些东西?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
开发一个 Agent,还需要哪些东西?

专栏:AI Agent 开发|05

上一章我们已经把 Agent Loop 跑通了:组上下文 → 调模型 → Tool Call → Runtime 执行 → Observation → 下一轮。真正开始做项目后,你会发现“循环能跑”只是第一步。这一篇不让你背框架,而是用真实问题把 Agent 工程里还会出现的几类能力一块块补出来。

一、上一章的三件套已经能跑,为什么还不够?

最小 Agent 其实很简单:一个模型、几个工具,再加一段控制循环。

while not done: context = build_context(state) action = model(context, tools) result = runtime.execute(action) state.update(result)

如果任务只是“查一次天气再回答”,它已经够用了。

但需求稍微变一下,问题马上出现:用户聊了十轮以后上下文怎么控制?下次再来要不要记住偏好?付款前谁审批?任务跑一半进程重启怎么办?改了 Prompt 以后怎么知道效果变好还是变差?

图 1 真实 Agent 的技术栈,是需求一层层把新能力“逼”出来的

二、先别背“十一层技术栈”,把 Runtime 放在中间看

原稿把 Agent 技术栈拆成很多层,这能做总图,但对第一次接触的人容易产生两个误会:一是以为它们存在严格的上下层依赖;二是以为做 Agent 必须把所有东西一次装齐。

更容易理解的方式是:Runtime / Agent Loop 是中间的执行器,周围有几类能力给它提供信息、动作和工程保障。

图 2 Agent 技术栈更像围绕 Runtime 协作的能力地图,而不是一栋严格的六层楼

1. Model:负责理解、生成和做决策

Model 仍然是核心能力来源。Runtime 会把当前任务和工具信息交给模型,模型再决定是直接回答,还是提出 Tool Call。

工程上通常会把模型调用封装成 Provider / Model Adapter,而不是让业务代码到处直接写某一家 SDK。原因很简单:以后换模型、做路由、增加超时或统计 Usage 时,改一个入口比改几十个业务文件容易。

2. Context + State:先解决“这一轮要让模型看到什么”

上一章已经出现了 Context Builder。它关心的是本轮输入:用户要求、前面必要的 Tool Result、系统约束、可用工具,以及可能检索到的材料。

State 则更宽一点,它表示当前 Run 的任务状态:已经做了哪些步骤、哪些工具调用完成了、是否等待审批、还剩多少预算等。

Context 和 State 不要混成一个词。State 是程序持有的任务状态;Context 是从 State 和外部信息中挑选出来、这一轮真正发送给模型的内容。

3. Memory:只有需要“跨时间记住”时才出现

Memory 不是 Agent 的必选组件。很多一次性任务根本不需要长期记忆。

只有当产品真的需要“用户下次再来仍然记得某些信息”,才需要把偏好、历史事实或任务经验持久化。它可能放在普通数据库、专门的 Memory Store,或者通过检索把相关信息重新找回来。

Redis、向量数据库都只是可能的实现,不应该把“短期 Memory=Redis、长期 Memory=Vector DB”当成定义。

4. Tools:把“模型会说”变成“系统能做”

Tool 可以是本地 Python 函数、公司内部 API、搜索服务、数据库操作,也可以是代码执行、浏览器或电脑操作。

重要的不是 Tool 越多越好,而是 Runtime 必须知道:工具叫什么、参数怎么校验、谁有权限调用、失败怎么处理、结果怎样回填。

5. Workflow / Orchestration:哪些步骤固定,哪些允许动态

不是所有任务都应该全部交给模型自由决定。真实产品更常见的是外层流程比较确定,局部节点允许 Agent 动态处理。

例如“提交报销”可以固定为:解析票据 → 校验 → Agent 处理异常 → 人工审批 → 入账。这里 Agent 只是整个 Workflow 的一部分。

当流程需要暂停、恢复、人工介入或多 Agent 协作时,才会开始需要更强的 Orchestration / durable execution 能力。

6. MCP / Tool Integration:工具越来越多以后,怎么接得整齐

Function Calling 是模型表达工具调用的一种机制;MCP 则解决 Agent/应用怎样以标准方式连接外部工具、资源等能力。两者不是同一个层级的“二选一协议”。

你完全可以先用普通函数 Tool。等外部系统越来越多、希望复用和标准化工具接入时,再学习 MCP。

三、横着贯穿整个系统的,还有 4 类工程能力

1. Security / Guardrails / HITL

模型提出动作,不代表动作就应该执行。工具执行前后可以做校验;删除、付款、发邮件等高风险动作还可以要求人工审批。

安全不是最后上线前补一个“Prompt 防注入”就结束,它还包括身份、权限、租户隔离、Secret、Tool 边界和数据访问控制。

2. Evaluation:回答“这个 Agent 到底有没有变好”

Prompt、模型、工具描述改一次,最终轨迹就可能变化。没有固定任务集,你只能凭感觉判断“好像更聪明了”。

Eval 的基本思路是保留一组代表性任务,反复跑回归:结果是否正确、工具是否选对、任务是否完成、步数和成本是否合理。

3. Tracing / Observability:回答“它到底在哪一步错了”

一个 Agent Run 可能包含很多模型轮次和工具调用。线上报错时,只看最终一句“失败了”几乎没法排查。

Tracing 会把 Run、模型轮次、Tool Call、Handoff、Guardrail 等事件串成一条轨迹。这样才能知道:第几轮用了哪个工具、参数是什么、耗时多少、失败发生在哪里。

4. Storage / Deployment:让状态和服务真的活下来

Agent 需要保存会话、任务状态、审批状态、文件或评测数据时,还是要回到普通软件工程:数据库、对象存储、缓存、队列。

部署也一样,没有哪套“Agent 专用服务器”。容器、网关、Secret、日志、监控、扩缩容,都是把 Runtime 稳定运行起来的基础设施。

四、什么时候该加哪一块?不要按照地图从左到右安装

图 3 地图的真正用法:遇到一个问题,再找到对应能力

这张图比“完整依赖清单”更重要,因为真实项目的技术栈应该按问题成长。

你遇到的问题

优先检查/增加什么

常见误区

多走几步后模型开始跑偏

Context / State

第一反应就去做长期 Memory

下次会话需要记住用户偏好

Memory

认为 Memory 必须是向量库

任务需要暂停、审批、恢复

Workflow / Persistence / HITL

继续用一个 while 循环硬顶

工具来自很多系统

Tool Registry / MCP

把 MCP 当成 Agent 必装依赖

改模型后不知道有没有退化

Evaluation

只看几个 Demo

线上失败不知道原因

Tracing / Observability

只记录最终错误日志

五、框架到底放在这张地图的什么位置?

到这里再看 OpenAI Agents SDK、LangGraph、LangChain 等框架会容易很多。它们不是“完整技术栈本身”,而是帮你封装其中一部分能力。

• Agent SDK 类框架通常帮你管理模型轮次、Tool、Handoff、Guardrail、Session、Tracing 等。

• LangGraph 这类 Runtime / Orchestration 工具更关注持久化状态、durable execution、Human-in-the-loop、长任务恢复等。

• 数据库、对象存储、业务权限、真实评测数据、部署方式仍然要根据你的产品自己设计。

所以选框架时先问“它帮我解决地图上的哪几个问题”,而不是先问“哪个框架最强”。

六、一个适合学习阶段的项目骨架,应该先长什么样

这一篇不建议像原稿那样第一版就建 memory、MCP、eval、observability 十几个目录。更适合学习的方式是先留出清楚边界:

agent_project/ ├── app/ │ ├── runtime/ # Agent Loop / 状态推进 │ ├── models/ # Model Provider 封装 │ ├── tools/ # Tool 定义与 Registry │ └── context/ # Context Builder ├── tests/ ├── .env.example └── pyproject.toml

等需求出现,再新增:

# 需要跨会话记忆 app/memory/ # 需要 Graph / 审批 / 可恢复流程 app/workflows/ # 工具接入开始标准化 app/integrations/mcp/ # 开始做回归评测 evals/ # 需要自己补充 Trace / Metrics app/observability/

这种结构的好处是:每个目录都是因为真实需求出现才建立,不会第一天就得到一个“看起来生产级、实际上全是空文件夹”的项目。

七、几个原稿里需要特别纠正的认识

• Agent 技术栈不是固定“十一板块,一个都不能少”。不同产品需要的能力不同,地图是导航,不是验收清单。

• Memory 不是 Agent 必需品,也不等于 Redis + pgvector。

• MCP 很重要,但不是所有 Tool 都必须经过 MCP;本地函数和普通 API Tool 仍然很常见。

• 框架之间也不是严格覆盖同一层。SDK、Runtime、Workflow Engine、Observability 平台关注点会重叠。

• 安全、Eval、Tracing 应该尽早建立最小版本,但不代表第一天就搭完整企业平台。

八、这一篇只需要记住一句话

Agent 技术栈不是“有哪些热门组件”,而是:为了让一个模型驱动的循环能长期、受控、可验证地完成任务,你分别需要哪些信息、动作、状态和工程保障。

九、下一篇

下一篇 06《Message、Role、Instruction 到底是什么?》会回到最靠近模型的一层,从一条最普通的 messages 请求开始,看 system/developer/user/assistant 分别承担什么角色,以及“对话历史”和 Runtime State 为什么不是一回事。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/16 13:38:39

Postman请求体注释全攻略:提升接口测试可读性与团队协作效率

1. 项目概述:为什么要在Postman请求体中写注释?在接口开发、测试和联调的过程中,Postman几乎是每个开发者、测试工程师甚至产品经理手边的标配工具。我们用它来构造请求、调试参数、验证响应,流程一气呵成。但不知道你有没有遇到过…

作者头像 李华
网站建设 2026/8/16 13:37:39

马哥2026云原生/微服务治理大厂冲刺班/名师亲授

技术实战面试刷题:马哥云原生/微服务治理大厂冲刺班名师亲授 想冲刺互联网大厂后端、架构岗的开发者,大多都遇到过相似的瓶颈:日常工作里只接触到零散的云原生组件,对微服务治理的理解停留在表面,面试时被问到高并发场…

作者头像 李华
网站建设 2026/8/16 13:34:36

Winscope如何让你的系统app在可以展示ViewCapture相关数据?

背景 在使用Winscope时候,发现有一个单独的ViewCapture项目可以展示出view的完整结构但是并不是所有的app都是支持这个ViewCapture功能,比如我们这里的DeskClock app就不支持,目前只看到Launcher是有支持的。系统应用中的 ViewCapture ViewC…

作者头像 李华
网站建设 2026/8/16 13:34:14

深度拆解 Windows Hello:从红外成像到密钥全流程

当你看向笔记本屏幕,一秒完成系统解锁,这就是 Windows Hello 带给我们的无感登录体验。多数人只知道它好用,却很少了解这套系统并不是简单的摄像头拍照比对,而是由红外成像活体采集、安全隔离运算、TPM2.0 硬件密钥体系共同搭建的…

作者头像 李华
网站建设 2026/8/16 13:33:29

原神成就导出终极攻略:YaeAchievement 五分钟搞定全平台数据同步

原神成就导出终极攻略:YaeAchievement 五分钟搞定全平台数据同步 【免费下载链接】YaeAchievement 更快、更准的原神数据导出工具 项目地址: https://gitcode.com/gh_mirrors/ya/YaeAchievement 如果你玩《原神》已经有一阵子,多半体会过这样的纠…

作者头像 李华