AI agent 基础设施让模型能够在真实系统中完成工作。它包括 agent 循环、工具、调用方身份、权限、持久状态、代码执行、应用后端和遥测。模型没有这些组件也能制定计划,却无法可靠执行。
每一层只负责一项工作时,整个技术栈更容易理解。如果两层都在重试同一次写入、保存相同状态或决定授权,失败将难以复现。
Agent 技术栈的七个部分
模型和 agent 循环
模型提出下一步操作。Agent 循环提供上下文、开放工具、记录结果,并决定何时停止运行。框架可以帮助实现这套循环,但运行时仍需明确限制时间、工具调用和支出。
这项区别很重要,因为更换模型不应悄然替换权限规则或恢复行为。这些控制应位于提示词之外。
工具和集成
工具将 agent 循环连接到数据库、API、文件、浏览器和内部服务。实用的工具应描述一项任务、验证输入、返回稳定结果,并向调用方提供能指导后续操作的错误。MCP 工具规范统一了发现和调用方式,但符合规范的 MCP 服务器仍可能包含含糊或不安全的工具。
设计工作的重点在于工具边界。设计 agent 可可靠使用的 MCP 工具说明了名称、schema 和结果如何影响工具选择。
身份和策略
每个 agent 会话都需要一个能被下游服务授权的身份。工具说明可以声称操作只读,但拥有数据的服务必须实际执行该规则。共享管理员密钥会让操作难以追溯,并扩大密钥泄漏后的影响。
OWASP 关于过度代理权的指南建议限制工具功能、权限和自主程度。实际做法包括使用权限范围严格受限的凭据,在高影响操作前要求审批,并提供单独方式停止或撤销正在运行的 agent。
状态和记忆
状态记录工作流已经完成的操作,记忆提供可能帮助未来决策的信息。二者有所重叠,却不能互换。订单 ID 和付款结果属于持久状态;可能帮助回答问题的检索段落属于上下文或记忆。
Postgres 通常足以同时承载结构化状态和语义检索。Postgres 与向量数据库如何用于 agent 记忆说明了何时需要专用向量服务。
持久执行和沙箱
持久执行让工作流在崩溃后恢复,而不重复已经完成的外部影响。沙箱则限制不受信任代码在运行时可以访问什么,二者不能相互替代。沙箱可以隔离重复付款,持久工作流也可能可靠地恢复恶意代码。
Temporal 的持久执行模型会保存工作流进度,并在失败后重放确定性代码。代码沙箱则需要文件系统、进程、网络、密钥和生命周期限制。生产环境 agent 检查清单将两类控制整合到同一发布流程中。
应用后端
应用仍然需要数据库、身份验证、对象存储、队列、托管和外部 API。面向 agent 的后端增加结构化配置和范围受限的凭据,让 coding agent 无需将提供商密钥写入生成的代码,也能创建和操作这些资源。
Cohesivity 位于这一层。agent 可以创建隔离租户、请求应用所需的后端资源,之后再将所有权交给人。它不会取代模型,也不负责决定应用的业务规则。
遥测和评估
遥测记录一次运行中发生的事情,评估则检查一组固定任务中的行为是否仍可接受。一条有效的追踪记录会连接用户请求、模型调用、工具调用、策略决定和下游工作。有效的评估会在模型、提示词、工具或策略发生变化后,重新运行具有代表性的成功和失败案例。
OpenTelemetry 的 GenAI 约定为模型和 agent span 提供共享字段。这些约定提供统一词汇,但应用仍需决定记录哪些标识符和结果才既安全又有用。
一条生产工作流所需的最小技术栈
| 关注点 | 最小实现 | 可防止的失败 |
|---|---|---|
| 工具访问 | 类型明确、任务级且结果受限的工具 | 选错工具和输出无法使用 |
| 身份 | 每个 agent 或会话一个范围受限的凭据 | 访问范围过大且难以追溯 |
| 状态 | 持久的操作记录和检查点记录 | 进度丢失和外部影响重复 |
| 执行 | 时间、工具调用、支出和网络限制 | 循环失控和代码不受控制 |
| 恢复 | 幂等性加结果核对 | 结果不明后重复写入 |
| 遥测 | 贯穿模型、工具和后端的一条追踪记录 | 无法重建失败过程 |
| 评估 | 冻结的任务和验收标准 | 成功演示掩盖回归 |
不必为每一行选择不同提供商,但每种行为都需要一个明确的负责人。
选择提供商前先梳理一条工作流
选择一条一旦重复写入或使用错误凭据就会造成最大损失的工作流。从用户请求开始,画出直到后端最终产生影响的完整路径,并在出现模型、工具、身份、状态记录、执行边界、审批和追踪记录的位置分别标注。
缺失的标签比通用技术栈示意图更有用。下方提示词会让 coding agent 绘制这张图,同时不更改项目。