☰
Agent Infra 揭秘:智能体落地的关键基础设施
2026/10/22 9:18:26 网站建设 项目流程

最近大半年,我跟不少做后端、做平台的同事聊技术选型,发现一个非常有意思的现象:大家聊的最多的已经不是某个大模型又涨了多少参数、跑分又高了多少,而是“这个智能体到底怎么接进生产环境”“工具调用怎么鉴权”“上下文怎么不被打爆”“出问题了怎么定位”。换句话说,模型本身的军备竞赛还在继续,但真正卡住项目落地的,已经是模型周边那一整套基础设施了。这个层面巨头们都在悄悄投入,很多细节甚至不会写进官方文档里,但它恰恰决定了谁能把智能体从“演示很惊艳”推到“线上真能用”。这篇就把我看到的 Agent Infra 这个隐秘战场的结构、巨头布局逻辑,以及普通工程师怎么拿到入场券,一次性拆开讲明白。

1. Agent Infra 到底在解决什么问题:从单点能力到系统能力的跨越

先说一个基本判断:大模型只是大脑,不是身体。大脑再聪明,如果没有血管输送养分、没有神经把指令传到四肢,它也没法干活。放到工程里,这层血管和神经就是 Agent Infra——智能体基础设施。它包含的不只是 API 调用,而是一整套让智能体稳定、安全、可控地完成长链路任务的基础能力。

一个智能体要真正投入使用,至少要过这几道坎:它需要能调用外部工具、能记住前几步做了什么、能在上下文超长时自动精简、能在调用失败时重试或换路、能在关键时刻让用户介入确认。这些能力没有任何一个是靠“换一个大一点的模型”就能解决的。比如你让一个模型去执行“查询订单、判断异常、生成工单、发给客户”这条链,模型本身能做语言理解和生成,但你得先有一个组件帮它决定先调订单接口还是先查黑名单,得有一个组件缓存订单查询结果避免重复调用,也得有一个组件在订单接口超时的时候决定是重试还是终止流程。这些组件叠在一起,才是真正的 Agent Infra。

这也是为什么现在很多团队觉得东西“能用”但“不好用”。模型很强,但基础设施跟不上,智能体就会表现得像一个人记忆力差、手忙脚乱、经常把简单事办砸的新员工。所以 Agent Infra 的价值不是“让模型更聪明”,而是“让模型在工程环境里更可靠”。二者的区别,就是实验室和战场之间的区别。

巨头们显然早就看到了这一点。无论是最上游的云厂商、大模型研发团队,还是做协同办公、做企业服务的厂商,都在把火力往基础设施层集中。原因也简单:模型能力会逐渐同质化,但基础设施一旦做成体系,就能形成长期壁垒。跑在最前面的团队吃的不是模型本身的口水,而是模型调度、工具生态、数据沉淀这些周边红利。

有一个现象值得注意:目前对外发布的很多所谓“智能体平台”,其实只做了界面层和编排层,真正的调度、记忆、审计能力仍然散落在各家内部体系里。这就像你看到一个漂亮的楼盘模型,其实承重结构、管线系统都还没公开。所以工程师如果只看产品发布会,很容易低估这个领域的复杂度,也容易高估某项技术的成熟度。

2. 拆解 Agent Infra 的四大核心板块:编排、工具、记忆、可观测

2.1 编排与调度:智能体的“中枢神经”

编排层是 Agent Infra 最上面的一层,它决定了智能体如何拆解任务、按什么顺序执行步骤、如何并行、如何回退。我见过很多团队在早期会直接用模型自己规划步骤,也就是让模型输出一个 JSON 数组告诉我们“先做A再做B”。这种方式在小任务上很灵活,但到生产环境就会暴露出问题:模型可能生成不存在的步骤、可能漏掉关键约束、可能在分支条件下摇摆不定。所以在成熟的 Infra 里,编排层通常会引入两个办法:一是用工作流模板做“半自由”规划,二是对模型输出的每一步做合法性校验。

所谓“半自由”,就是先定义好有哪些原子操作(比如查库、调接口、发消息、改写文本),模型只能在给定范围内做选择和排序。这样既保留了灵活性,又不会跑偏。你可以把它理解成给一个聪明但容易跑题的员工一张公司章程:你可以自由处理,但不能越权,不能跳过合规步骤。校验环节通常包括参数类型检查、依赖关系检查、并发冲突检查。比如两个子任务都要写同一个配置文件,就得在编排层加互斥。

调度层还要管算力分配。同一个智能体系统里,有些请求是实时交互,有些是后台批处理,如果都挤在一个模型通道里,实时请求会被批处理拖慢。基础设施需要支持多优先级队列、超时熔断、自动降级。我在实际设计时习惯把请求按 SLA 分成三档:P0 是用户实时等待的,必须秒回;P1 是内部任务触发的,允许十秒级延迟;P2 是异步分析类,跑几分钟都行。每一档用不同的队列和超时参数,互不挤占。

2.2 工具连接与权限控制:智能体的“手和边界”

工具层是很多人最先意识到必须做基础建设的地方。一个没有工具调用能力的智能体,本质上就是个高级聊天机器人;一旦接上工具,它就能查库存、发邮件、改配置、操作数据库。但也正因为接上了工具,安全边界问题立刻变得尖锐。

工具层要解决的第一个问题是协议适配。市面上有 REST 接口、有 gRPC、有消息队列、有数据库直连、有命令行工具,智能体不可能每个都原生理解。所以需要一套“工具注册表”(Tool Registry),把各种能力包装成统一的函数描述,包括函数名、入参 schema、出参 schema、调用地址、鉴权方式、超时时间、重试策略。模型只跟注册表交互,不直接面对混沌的外部接口。注册表还有一个附带的好处:可以做工具的“能力发现”,也就是由系统自动找到满足当前任务的工具,而不是让模型从海量文档里猜。

更关键的是权限控制。传统 API 网关的权限模型是“用户级”的,但智能体场景需要“意图级”的细粒度控制。举个例子:一个用户有权限查看订单,但系统不应该允许智能体拿着这个权限去批量导出所有订单再发给第三方。所以在工具层必须加一道策略引擎,它能在调用前检查:这次调用的参数范围是否超出授权?目标地址是否在允许名单里?操作是否属于高风险类(删除、转账、对外发送)?“某个工具定义的服务权限”一句话不难,但真要在每秒几百次调用的场景下做到,就需要把权限判断缓存起来,同时还要应对模型偶尔构造出越权参数的情况。

2.3 记忆与状态管理:智能体的“长期记忆和草稿本”

有状态的智能体才好用,这是我从多个项目里得到的共同结论。但“状态”恰恰是很多初版实现里做得最薄弱的地方。

拆开来看,记忆分三层:短程记忆是当前任务里几步之内的上下文,比如刚查完订单号,下一步就拿着这个号去查物流;工作记忆是当前会话或当前任务实例的过程记录,比如“已经处理了三个异常订单,还剩五个”;长期记忆是跨会话的业务知识和用户偏好,比如“这个客户每次催单都很急,要优先回复”。基础设施要做的,就是分别用不同的存储来承接:短程可以直接放在模型上下文里或 KV 缓存;工作记忆适合放在 Redis 或关系库里,关键字段要可查;长期记忆则需要向量库或结构化知识库,并配合定期摘要机制。

有一个特别容易踩的坑:状态一致性。智能体在一次任务中往往要更新多个存储,比如先记录“已发送提醒”,再写入“已生成工单”。如果第一步成功、第二步失败,整个状态就断裂了。解决办法是引入事件日志(Event Log),把所有关键步骤先写成追加日志,再逐步更新视图。这样即使某一环失败,也能依据日志做补偿。这个思想和传统微服务里的事件溯源很像,但在智能体场景里,因为步骤更多、更不确定,事件日志的作用被进一步放大。

2.4 可观测性与成本治理:智能体的“监控仪表盘和安全锁”

可观测性看起来不性惑,但没有它,智能体系统就是黑箱。传统接口的日志是线性、可预期的,智能体则不一样:一次请求可能触发工具链上的五六个调用,内部还会发生迭代、重试、分支跳转。出了问题,你往往需要把整条链路的事件串起来看,才能知道“它为什么要这么走”。

所以 Agent Infra 里的可观测性有三个基础件:链路追踪(Trace)、事件日志(Event Log)和审计日志(Audit Log)。链路追踪负责把一次任务的调用关系串成树状结构,记录每一步的输入输出、耗时、token 消耗;事件日志负责记录智能体的决策轨迹,包括为什么选这个工具、为什么放弃另一个;审计日志则更偏安全合规,记录谁在什么时间让智能体干了什么,特别是删除、导出、外部发送这类敏感行为。三者缺一不可。

成本治理也需要被基础设施接管。模型调用的费用不是线性的,上下文越长、工具返回越多、重试次数越多,成本指数级上升。我在系统里会给每个任务设定 token 预算,当累计消耗超过阈值时触发两种策略:一种是轻量模型接管后续步骤,另一种是终止任务申请人工处理。这个机制用一句话说就是:给智能体一个额度,花完了就停下来请示,而不是无限烧钱直到用户发现账单。

3. 巨头们的隐秘策略:他们不仅在做产品,更在抢基建

现在再回到标题里“隐秘战场”这四个字。为什么说隐秘?因为公开宣传里,巨头们讲的是“我们的智能体很聪明”“我们的模型参数很大”,但真正投入的地方,往往是平台化的基础设施,比如模型网关、Agent 开发框架、企业级知识库、低代码编排画布。这些产品可能不以“智能体”命名,却是智能体跑起来的地基。

巨头做 Agent Infra 有三种典型的布局逻辑。第一种是云厂商的“算力+模型服务+工具生态”闭环:他们希望开发者的智能体程序跑在自己的云上,用自己提供的模型接口,再经过自己托管的函数计算和数据库服务。这样一来,开发者的每一次工具调用都会变成云平台上的资源消耗,商业模型天然成立。第二种是模型团队的“开发框架”策略:通过提供好用的 SDK 和 Agent 协议,把开发者生态绑定在自己模型周围,形成模型+生态的双重护城河。第三种是企业服务厂商的“开箱即用”策略:不强调底层技术,而是把智能体包装成各种业务场景模板,比如客服、数据分析、办公助手,直接卖给企业客户。三种策略表面不太一样,背后争夺的其实是同一个东西:开发者和企业用户的默认选择权。

对普通工程师来说,理解巨头策略不是为了替他们操心,而是为了看清楚自己踩的坑哪些是技术问题,哪些是生态绑定问题。举个例子:你用某个框架写了业务逻辑,如果框架本身只支持一家模型厂商,后续想切换供应商就得改大量代码,这就是生态锁定。健康的做法是尽量把业务逻辑与具体的模型 API、框架实现解耦。我通常会在设计上抽象出一层“模型网关”,内部再对接不同供应商。这不是不信任谁,而是给自己留活路。

还有一个值得留意的信号:巨头之间已经开始在协议层面互动了。比如多家厂商都在推 Agent 之间通信的统一描述格式,目的就是让不同系统里的智能体能互相调用。这有点像早期消息队列的标准化过程——最开始各家有各家的协议,后来出现统一协议,最终受益的是生态,但每个参与方都希望自己成为那个“统一标准”的定义者。作为工程师,这时候最该做的不是急着站队,而是把通用能力(如工具注册、状态管理、可观测性)先沉淀在自己的代码库里,保证将来无论生态向哪个方向收敛,你都能快速适配。

4. 普通工程师的入场券:从零搭一套轻量 Agent Infra

前面讲了那么多概念,接下来上实操。我按“先能跑,再优化,后治理”的顺序,分享一套可以直接参考的最小实现路径。这套方案不依赖任何特定云平台,所有组件都能在你自己的代码库里落地。

4.1 明确第一责任人:是编排放内存、记忆放 Redis 还是全放数据库

做 Agent Infra 最容易犯的错就是一上来就想搞个大而全的平台。我的建议是相反:先收紧范围,用一套“单机可跑、依赖最少”的架构跑通一条业务线。比如你负责一个工单系统,先只做一个“查工单—判断优先级—回复客户”的智能体,把这个链路调顺了,再扩展。

依赖选择上,我给出一个基础的推荐组合:

组件选型建议说明
编排引擎直接用代码流程(Python/Java 均可)第一阶段不要引入额外的流程引擎,代码即流程
模型接入通过模型网关 SDK 封装屏蔽不同模型厂商的 API 差异
工具注册JSON Schema 描述工具简单清晰,模型易于理解
记忆存储Redis + 关系库Redis 存短程和工作记忆,关系库存长期业务数据
可观测结构化日志 + 简单的 Trace ID先不要上重型 APM,把日志打全比啥都强

选型的核心逻辑是“用好成熟的东西,不追新概念”。Redis 和关系库大家都熟,出了事好排查;JSON Schema 是标准,几乎所有模型都支持;代码即流程看起来“土”,但可控性是最高的。

4.2 搭第一步:定义工具注册表

工具注册表是 Agent Infra 里最早应该写的一段代码。它做的事情很简单:把你要暴露给模型的能力列出来,用统一的 schema 描述。我先给一个示例:

{ "tools": [ { "name": "get_order_status", "description": "根据订单号查询订单当前状态", "parameters": { "type": "object", "properties": { "order_id": { "type": "string", "description": "订单号" } }, "required": ["order_id"] }, "auth": { "scope": "order:read", "risk": "low" } }, { "name": "send_message_to_customer", "description": "向客户发送一条消息", "parameters": { "type": "object", "properties": { "customer_id": { "type": "string" }, "content": { "type": "string" } }, "required": ["customer_id", "content"] }, "auth": { "scope": "message:send", "risk": "medium" } } ] }

这段描述背后有三层信息:name 和 description 是给模型读的,parameters 是给模型做参数生成的,auth 则是给底层权限引擎做校验的。模型看到注册表后,会自动决定“查订单”用什么参数、“发消息”用什么参数。这里有一个很关键的工程细节:工具说明写得太简单,模型就会错误传参;写得太啰嗦,又会占掉大量上下文 token。一个好的 description 应该包含触发条件、参数格式和典型示例,控制在一百个汉字以内。

4.3 写编排核心:循环加退避

接下来的核心是一个“感知—决策—执行—观察”的循环。我建议把这个循环封装成一个通用的 runner,而不是每次任务都重写。下面是一段可以落地的伪代码:

async def run_agent(task, registry, policy): state = {"history": [], "result": None, "turn": 0} while state["turn"] < policy.max_turns: plan = await model.decide(task, state["history"], registry.list_tools()) if plan.action == "finish": state["result"] = plan.output break if not validator.check(plan.action, plan.arguments): state["history"].append({"role": "system", "content": "上一步参数非法,请重新选择"}) state["turn"] += 1 continue caller_check = policy.check_auth(plan.action, plan.arguments) if not caller_check.allow: state["history"].append({"role": "system", "content": "无权限执行该操作,已终止"}) break tool_result = await registry.invoke(plan.action, plan.arguments, trace_id=state.trace_id) state["history"].append({"role": "tool", "content": tool_result}) state["turn"] += 1 return state["result"]

这段代码里藏着几个重要判断。第一,max_turns 必须设上限,我见过很多事故就是因为没设上限导致智能体无限循环,把 API 调用费烧掉一大笔。第二,参数校验必须在调用工具之前做,不能让一个约定字段为数字的接口收到模型传过来的字符串。第三,每一步放 trace_id,是为了把决策、工具调用、返回结果串起来,出了问题能回溯。第四,policy.check_auth 查的是“意图级别”的权限,不只是“登录用户有没有权限”,更要是“这个操作允许不允许在当前上下文里执行”。

4.4 加记忆模块:三段时间线

记忆模块我建议用一张事件表来统一承接,而不是直接让模型把全程都塞在上下文里。事件表的结构大概这样:

字段类型说明
event_idstring全局唯一事件 ID
task_idstring任务 ID
turnint第几轮决策
event_typestringuser_message / model_decision / tool_call / tool_result / error
contenttext事件内容,存摘要或最终结果
token_costint该事件消耗的 token
created_attimestamp事件时间

每完成一轮循环,就把关键信息追加到这个表里。等到模型需要上下文时,不把全表灌给它,而是按策略抽一段“最近 N 轮 + 关键业务字段”的摘要发过去。这个做法能显著控制 token 增长,尤其是当一个任务有十几轮工具调用时,不加控制的话上下文很快会膨胀到不可收拾。

4.5 构建观测和开关:把“看不见”变成“能解释”

最后一步,给整个系统加上观测和熔断开关。我用的是一组轻量的中间件:收到请求时生成 trace_id,每次调用工具前打印日志,调用完成后记录耗时和 token 消耗;同时维护一个健康状态接口,返回最近五分钟的成功率、平均延迟、队列深度。一旦成功率低于阈值,旁边的自动降级组件就会启用“保守模式”,把所有高风险操作改成需要人工确认。

这里有个被我反复验证过的经验:与其依赖专门的追踪系统,不如先保证日志里每一步都有足够的“上下文标记”。比如记录 tool_call 的时候,同时记下当时的状态摘要和决策理由,而不是只记“调用了某接口”。这样一来,你用最简单 grep 命令都能定位绝大多数问题。等量上去了再接入成熟的观测平台,成本压力会小很多。

5. 实战避坑:我在 Agent Infra 上踩过的四个典型问题

5.1 同一次任务里上下文越走越长,最后直接爆掉

这个问题几乎每个做智能体的人都会遇到。症状是:任务刚开始时响应很快,五六轮之后就变得非常慢,甚至报 token 超限。根因就是我把每一步的工具原始返回都原样塞进了历史记录里。比如查一次订单返回一万字 JSON,五轮之后就是五万字,再加系统提示词,直接撑爆上下文窗口。

解决办法是“摘要化+裁剪”。工具返回先经过一层处理,只抽取关键字段写入历史;真正要用全量数据的地方,让智能体自己决定是否重新调用。我还设了一个上下文预算系统:每轮记录当前 token 消耗,超过总预算的 60% 后,自动压缩早期的对话摘要,把空间留给最新的决策。

5.2 工具调用总是出现“看似合理但实际不可执行”的参数

模型在生成工具参数时,偶尔会凭空捏造一些值,比如把客户 ID 传成订单号,或者把一个根本不存在的仓库编号传进库存接口。我之前一度以为是模型问题,后来发现是工具注册表描述不够严格。解决方法是两层并行:一是在 parameters 里加 pattern 和 format 约束,二是做一个本地校验器,对必填字段、枚举值、长度上限逐项验证。校验不过直接返回错误提示让模型重新规划,而不是把脏数据打到业务系统里。

5.3 智能体突然进入死循环,一直在重复同一个操作

有次排查线上问题,发现一个智能体在一个小时内反复调用同一接口三百多次,原因是接口返回了一个“处理中”的状态,智能体把它解释为“还需要继续轮询”,但没有设置重试上限。解决方案很简单,但当时花了大半天才找到:任何轮询类、重试类的工具,必须在注册表里声明最大次数和退避策略,同时会在编排层做一个全局“重复动作检测”,同一个动作连续执行超过三次就强行终止并上报。

这类问题暴露的是基建的缺位:模型有无穷大的耐性,但基础设施必须给它装上刹车。

5.4 审计日志不够细,出问题后说不清楚责任

另一个容易被忽视的坑是日志细度。一开始我只记录了“谁在什么时间调用了什么工具”,没有记录具体参数和决策理由。结果有一次出现误发消息的事故,复盘时完全看不清是哪一步的哪种判断导致了发送内容出错。后来我强制要求:所有高风险工具调用记录必须包含触发上下文摘要和完整的请求/响应参数。虽然这让日志量大了一倍,但在追责和修复时带来的帮助远超成本。

6. 每个工程师的入场券:马上就做的最小行动清单

到这里,你应该能感觉到 Agent Infra 并不是一个高不可攀的领域。恰恰相反,它的门槛比想象中低,因为很多核心组件都可以从小到大、从简到繁地生长。我建议想入局的人不要等平台发布,直接在自己手头的小项目里开练。

具体可以做三件事。第一件,找一个你觉得重复、琐碎、规则明确的业务场景,比如“自动归类客服消息并给出优先级”“定时巡检接口可用性并汇总报告”,先别想着赚钱,做成一个带工具调用、记忆和日志的智能体小服务。这个过程中你会被迫思考模型之外的所有问题。第二件,读一遍市面上主流 Agent 协议和工具调用规范,不要追版本,重点理解它们为什么那样设计消息结构:哪些字段是为了可观测,哪些是为了权限,哪些是为了兼容。第三件,给自己维护一个“智能体事故记录本”,每踩一个坑就记一次,记录当时的上下文、根因和改动。我自己的感受是,这个领域最大的学习速度不是来自读文档,而是来自修复那些真实线上问题时的复盘。

最后补一句关于选择的建议:除非你的场景极度特殊,否则不要从零造模型调度和底层协议,要用成熟生态;但在工具注册、权限策略、记忆结构这三层,一定要保留自己的控制权,因为它们是跑在业务上下文里的,换一个框架也换不走。能把这层想明白,你手里的入场券就已经算数了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询