ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AI Agent对云架构的挑战:计算、推理与数据如何重构

AI Agent对云架构的挑战:计算、推理与数据如何重构 1. 传统云架构为什么在 Agent 面前突然不够用了先说我自己的经历。去年年底我接了一个项目给一家做电商客服的公司搭一套 AI Agent 系统。当时我脑子里还是过去做微服务的那套思路前端请求进来负载均衡分发给后端服务后端调数据库、调缓存完事。结果第一个压力测试就把我打蒙了。一个用户提问进来Agent 内部要先做意图识别再检索知识库然后调用大模型生成回答中间还可能穿插几个工具调用——一次用户请求背后是三四次甚至更多次的推理请求。旧的架构不是扛不住并发而是扛不住这种一次请求引发的连锁推理爆炸。1.1 一次用户请求背后藏着三次以上的推理调用很多人理解 AI Agent以为就是聊天机器人接了个大模型 API。实际完全不是这么回事。以我们做的客服场景为例一次完整的用户交互大概是这样的用户说了一句我上周买的耳机充电仓丢了能补买吗Agent 要先把这句话送给语义理解模型判断出意图是配件购买咨询同时抽取关键实体耳机型号、购买时间、问题类型。接着Agent 需要去检索订单系统、商品库这一步按理说是查数据库但现在很多数据是非结构化的得用向量检索这又是一次推理。然后主模型要把检索结果组织成一个通顺、准确的回答这又是一次大模型推理。再往后如果系统要做质检、情绪判断、多轮对话记忆更新可能还要再跑一两个小模型。也就是说一次用户请求触发三次到五次的模型推理调用。而传统云架构设计的时候计算和数据是分层解耦的数据在存储层计算在服务层二者通过 API 调用连接。这种模式处理读取→返回这种简单链路没问题但处理 Agent 这种取数据→思考→再取数据→再思考的循环链路效率低得吓人。数据来回序列化和传输的耗时有时候比模型推理本身还长。1.2 计算、推理、数据被拆开的年代已经过去了过去十年云计算的架构逻辑一直是分层解耦计算资源ECS、容器、存储资源对象存储、数据库、网络资源VPC、负载均衡分开管理各自伸缩通过标准接口互相调用。这种设计在互联网业务时代是真理因为业务逻辑是确定的——用户下单、支付、查物流每一步都知道下一步干什么。但 Agent 不是这样的。Agent 的每一步行动都是模型推断出来的它可能先查询再决定查询什么再基于新的信息继续推理。这个过程中数据不是一次性取好喂给模型的而是边推理边取数取完数接着推理。打个比方传统云架构像是流水线工厂——原材料按工序传递每道工序只负责固定动作而 Agent 像是一个独立的工匠他每敲一锤都要看一眼材料、想一下下一步材料和思考是搅在一起的。这时候你强行把计算和数据库分开每一次思考都要跨网络去取材料这个来回延迟会直接把体验拖垮。所以我觉得这个标题说得非常准确——AI Agent 时代的云计算、推理和数据必须重新整合。整合的含义不是把三者塞进同一个进程里那样伸缩性太差而是从架构层面把它们设计成一个整体流动的系统数据以 Agent 理解的形式组织推理以任务队列的形式嵌入数据流中计算资源按推理负载动态调度。1.3 Agent 负载的三个特征长链路、不可预测、数据密集和传统 Web 负载相比Agent 业务的负载模型有三个显著差异这是我在压测时一点点体会出来的长链路传统请求秒级以内返回Agent 请求可能在几秒到几十秒之间链路越长中间任何一环节抖动都会被放大。不可预测传统业务的峰值可以靠运营日历预估Agent 的推理需求取决于用户话术的复杂度有时候一个简单问题触发的内部调用比复杂问题还多很难用固定模型预测。数据密集Agent 需要喂给模型的不仅仅是用户输入的几句话还有历史对话、知识库片段、实时业务数据这些都必须在推理前准备好。数据获取的吞吐直接决定推理速度。这三点合在一起决定了 Agent 业务的云基础设施不能再用静态分配、分层解耦的老思路。我在后续的设计中基本抛弃了原来那套API 网关 无状态服务 数据库的三层结构转而把数据准备和推理计算之间做一个紧耦合的高速通道。2. 计算层怎么重新组合通用算力与异构算力分工先讲清楚一个背景传统云服务商在计算这一层的产品形态基本就是给你一堆 vCPU 和内存。你选规格、付钱、部署代码。但到了 Agent 时代这套玩法不够用了——因为 Agent 的负载核心是模型推理而模型推理对计算类型的要求跟普通业务代码完全不一样。2.1 CPU、GPU、NPU 各自该干什么活我在项目里观察到一个很明显的现象如果让普通 CPU 实例去跑大模型推理哪怕是 7B 参数的小模型单请求延迟也会高到不可接受。而 GPU 实例虽然能跑但如果把 Agent 里的每步推理都丢给 GPU成本会爆炸。正确做法是按推理类型做分工轻量推理意图分类、实体抽取、情绪判断这类小模型用 CPU 或 NPU 实例就能扛这类模型参数量不大延迟要求不高用 CPU 批量处理反而划算。重量推理主对话模型、长文本生成必须上 GPU而且要配合推理引擎做连续批处理。辅助计算向量检索、重排序这些介于两者之间用 CPU 可以跑但用带向量加速指令的实例会有明显性能提升。这里我要强调一点很多人一说大模型应用第一反应是租个 A100实际上绝大多数 Agent 场景的正确姿势是小模型用 CPU/NPU 扛大模型用 GPU 扛两个池子之间用队列连接。我在生产环境里做过一个测试一个意图识别小模型大概 3 亿参数在 8 核 CPU 上配合性能调优QPS 可以跑到 200 以上延迟在 50ms 左右——这个量级完全不需要 GPU。2.2 推理引擎选型vLLM、LocalAI 这些到底差在哪聊到推理绕不开推理引擎。我在热词里看到有朋友在搜vllm推理localai推理引擎这里顺便说说我的试用结论。先说 vLLM。它做的最核心的一件事叫 PagedAttention就是把 KV Cache 像虚拟内存一样分页管理内存利用率大幅提升配合 continuous batching连续批处理吞吐量能比朴素部署高出几倍。我把一个 13B 模型用 vLLM 部署后吞吐从每秒 20-30 tokens 提升到每秒 80-100 tokens这在客服场景里是质变——因为 Agent 要做多轮推理吞吐上不去整个链路就卡在模型这环。LocalAI 则走的是另一个路线它把各种开源模型包装成本地 API可以在 CPU 上运行量化模型。我试下来LocalAI 的价值在于快速验证和边缘场景。你想跑通一个 Agent 流程、或者推理请求量很低比如内部工具、个人项目LocalAI 是很好的选择让你不用去抢 GPU 资源就能开发调试。但生产环境里本地 CPU 推理的吞吐上限摆在那扛不住规模化并发。另外一个容易被忽略的点是模型格式和量化选择。同样的模型用 FP16 还是 INT8 量化推理速度和显存占用差一大截。我的建议是主模型尽量用支持量化感知训练的版本别用后训练直接转 INT8精度损失往往会在 Agent 的多步推理里被放大导致错误决策。我给各位一个简单选型标准按场景分场景推荐方案理由开发环境、个人项目LocalAI CPU 量化模型零门槛快速验证流程生产环境、并发较高vLLM GPU 连续批处理吞吐高内存效率好超轻量任务意图、分类CPU 服务器 ONNX Runtime成本极低延迟可控边缘设备、弱网环境端侧 NPU 推理数据不出设备隐私好2.3 弹性伸缩的实操经验从固定实例到按推理量调度计算层的另一个关键问题是弹性伸缩。传统云架构的伸缩规则一般是按 CPU 利用率超过 70% 扩容两个实例这套规则放在 Agent 业务上会出现一个尴尬GPU 利用率还没到 40%但推理队列已经积压了上千条请求。原因在于 GPU 主要瓶颈是显存和 KV Cache 容量不是算力利用率。你光看显卡利用率决定要不要扩容会误判。我现在的做法是以推理队列深度作为伸缩指标。具体来说在任务队列里设定一个阈值比如积压超过 500 条请求就扩容配合 Kubernetes 的 HPA 做弹性调度。这样算力的增长真正跟随着待推理的请求量走而不是盲目盯资源利用率。这个改造上线之后我们高峰期没有再出现过用户等待超过 10 秒的情况而低谷期的 GPU 成本降了大概 30%。3. 推理层的硬仗延迟、并发与成本的三角博弈如果计算层是把算力准备好推理层要解决的就是怎么把算力用好。这一章我重点聊 AI Agent 怎么扛并发。这个问题的本质是模型推理不像普通接口那样是无状态的每一次调用都会占用显存保存中间状态KV Cache并发上来之后显存先不够接着排队延迟就开始飙升。3.1 连续批处理为什么是扛并发的关键传统推理服务的做法是动态批处理攒够多少请求再一起跑跑完一批再收下一批。问题在于一批请求里每个请求的输入长度不一样、生成长度不一样如果强制等最慢的完成快的请求也被拖着吞吐提不上去。vLLM 这类引擎的 continuous batching 聪明在一个请求生成完了下一个请求立刻插进来嵌入到当前批次里继续计算——相当于把 GPU 的空闲时间塞满了。这就好比在餐厅里传统做法是一桌菜全上齐了才开始炒下一桌而连续批处理是哪桌菜做好了就上哪桌同时安排新客入座翻台率自然高。我在部署的时候发现光是把连续批处理打开吞吐量就能提高 2-3 倍这个收益几乎是白拿的。如果你用的推理引擎不支持这个功能建议优先想办法换掉。3.2 推理结果别急着丢校验、缓存与降级策略扛并发不能只靠硬件和引擎业务层面的策略更重要。我踩过一个很大的坑刚开始的时候每个用户提问都直接送进大模型结果同样的问题反复被问推理服务白白烧钱。后来加了语义缓存——把用户问题的向量表示存下来新请求进来先算相似度如果跟之前的某条请求相似度超过 0.95直接返回缓存答案。这里有个细节Agent 场景的缓存不能只缓最终回复中间步骤的推理结果意图识别结果、检索结果也要缓存。因为一次对话里用户可能会追问好几个不同的方面但意图往往不变意图识别这步就没必要重复推理。降级策略也很重要。如果大模型服务超时或负载过高系统应该能降到关键词匹配 知识库直查的模式哪怕回复生硬一点也比让用户无限等待强。我们做的方案是大模型推理超过 3 秒未返回自动降级到检索式客服用户感知不明显但系统的稳定性高了一个量级。3.3 按业务场景给推理分级不是所有推理都要求一样的服务质量我把 Agent 里的推理分成了三级实时级用户直接等待的推理。要求延迟 2 秒内返回通常是一条独立的 GPU 部署有充足资源兜底。准实时级用户不直接感知但需要尽快完成的推理比如多轮记忆更新、情绪分析。允许 5 秒内完成可以跟实时任务共用资源池靠优先级调度。异步级事后分析的推理比如会话总结、质检、用户画像更新。这类任务丢到队列里慢慢跑在 CPU 池子里就能做成本极低。把推理分级的好处是GPU 资源不必每类任务都预留峰值容量。我们上线分级调度之后整体 GPU 成本降了接近一半——因为异步级的推理负载全部被挪到 CPU 池而这部分占整个系统推理总量的三成以上。4. 数据层重新长回应用里实时管道与 Agent 记忆聊完计算和推理再来说数据。这是我觉得 Agent 时代变化最大、也最少被人系统讲清楚的一层。过去我们的数据架构讲究数据中台——数据抽到数仓业务服务按需拉取。但 Agent 不一样它对数据的需求是实时的、语义化的、跟上下文关联的。4.1 Agent 吃的是数据管道不是数据库查询我举个不太抽象的例子。用户在客服 Agent 里查订单我的手机收到了但充电器好像漏发了怎么办Agent 要处理这件事需要的不是一个订单表里的行记录而是把订单状态、物流轨迹、售后政策、历史工单等多方数据组织成一段当前情境描述再把这段描述作为上下文交给模型推理。这就是关键差异传统应用的数据是用户触发查询数据库返回行记录Agent 的数据是持续流动的事件流被组织成语义上下文供推理消费。所以在设计数据架构的时候我优先考虑的不是用什么数据库而是怎么构建数据管道订单事件、物流事件、客服工单事件、用户操作事件全部实时流入一个统一管道Agent 按需订阅和拼接。我们在项目里用消息队列把各业务系统的变更事件汇总起来再提供给 Agent 的数据组装模块这样 Agent 拿到的永远是最新状态而不是请求那一刻去查的快照。4.2 数据采集、绑定和实时同步哪个环节最容易卡住项目里最头疼的不是推理毕竟推理再慢也有成熟的优化方案而是数据采集和实时同步。尤其是当你接的不是自家后端而是第三方系统的时候比如电商平台订单、物流公司轨迹API 限流、字段变动、时区差异任何一个小问题都会让 Agent失忆——它拿不到正确的上下文推理出来的回答就是错的。我在踩过几次坑之后总结了一套实操流程事件采集用增量拉取 变更监听双通道主数据靠定时增量拉取实时性要求高的数据用户操作、支付回调走 webhook 订阅两条通道合并写入消息队列。字段变动要做版本管理给业务数据的表结构做 schema registry字段重命名或增删时下游 Agent 的数据组装逻辑不会崩掉。数据绑定把不同来源的数据用统一的业务主键串起来。比如订单 ID、用户 ID、设备 ID 三者的关联关系不理解清楚Agent 拿到的上下文就是残缺的。这套流程做完之后我最大的体会是Agent 的数据层本质上是实时数仓 语义层的结合。没有这层模型再强也巧妇难为无米之炊。4.3 Prompt 上下文、向量库和短期记忆的协作Agent 的记忆体系也值得单独说说。一个典型的 Agent 需要同时处理三类数据短期记忆当前会话的上下文直接拼进 prompt 里。这里要控制长度不然 token 超限或者推理成本暴涨。长期记忆用户的历史偏好、历史对话摘要需要从向量库检索后按需取用。知识库产品手册、FAQ 这类静态知识也需要向量化。在这个基础上我倾向于把向量检索和记忆管理做成数据层的一个独立服务而不是塞进 Agent 的主逻辑里。这样即使你从一个大模型换到另一个大模型数据层不需要动Agent 迁移成本很低。还有一个细节向量检索的相似度阈值不好设设高了召回太少设低了噪声太多。我的做法是先跑一批标注数据画出精确率和召回率曲线选一个平衡点后面再根据线上反馈微调。5. 把三者捏合起来的一整套参考架构前面三章分别讲了计算、推理、数据各自的玩法和坑最后聊聊把它们整合到一起的架构。我不是说有一个万能架构能套在所有 Agent 项目上但我的经验是一套事件驱动 推理队列 数据语义层的组合在绝大多数业务型 Agent 场景下都管用。5.1 事件驱动 任务队列让弹性真正落地整个系统的主脉络是事件流用户消息进来作为事件进入编排引擎编排引擎开始执行 Agent 的决策循环——这一步可能需要推理、需要查数据、需要等待外部 API 返回。这个过程中会产生新的事件和推理任务全部投递到任务队列由后端的 Worker 异步消费。这么做有几个直接的好处每个环节都能独立伸缩比如意图识别 Worker 和主模型 Worker 互不干扰系统对突发的流量有天然的缓冲能力队列就是削峰填谷的蓄水池每个推理任务可以单独配置优先级和超时策略前面说的推理分级就是这个架构里落地的。我在实操时用的是开源的编排框架加消息队列RabbitMQ 或者 Kafka根据流量规模选配合 Kubernetes 做调度。整体架构不复杂但每一步的稳定性都需要单独压测。特别提醒一句队列消费方也就是 Worker一旦出问题积压会快速膨胀必须做好监控告警。我在项目里给每个队列都配了积压量告警积压超过阈值就自动扩容 Worker这个比任何智能调度都实用。5.2 从零搭建一个带记忆的智能客服 Agent为了让你更直观地理解这套整合之后的系统我列一个最小可复用的实现路径以自然语言交互的客服 Agent 为例搭建消息入口接收用户消息建立会话 ID把消息投递到意图识别队列。意图识别 Worker消费队列消息调用轻量模型判断意图和关键实体结果写回事件存储。数据组装模块根据意图结果从实时管道拉取相关业务数据订单、物流、售后组装成语义上下文。主模型推理 Worker把语义上下文和检索到的知识片段拼进 prompt调用大模型生成候选回复。结果校验 回复对模型输出做格式校验比如是否包含幻觉信息、是否超出回答边界通过后返回用户不通过就触发重试或降级策略。记忆更新异步把本次对话的关键信息存入向量库更新用户的长期记忆。这条链路跑通之后再加并发控制、缓存、成本优化这些进阶手段。我在团队里带新人时常用这个路径作为入门项目基本上一个两周左右的周期就能做出一个可用的 Agent 骨架。5.3 选型取舍的标准我的几条原则最后说几条我在做架构决策时的取舍标准都是实践中磨出来的经验不要为了高级而上复杂组件一个小流量项目Kafka 完全可以用 RabbitMQ 替代一个内部工具LocalAI 比 vLLM 来得更快。先让业务跑起来再谈容量。推理引擎和模型绑定要谨慎同一个模型在不同推理引擎上的表现差异很大换引擎必须先做全量回归测试不要让 Agent 的关键行为悄悄变化。数据语义层一定要独立不要让业务数据直接暴露给模型调用方中间加一层语义封装既方便多模型切换也方便字段变动时不影响主体流程。监控要覆盖推理链路而不是单点资源单看 GPU 利用率、CPU 利用率容易失真要监控一次用户请求从进入到回复的完整链路耗时、每一步的队列积压量、每一步的推理耗时。我一直跟朋友说Agent 落地这件事七成功夫在工程三成在模型。模型选型和推理引擎只是入口真正决定体验的是整条数据管道通不通、推理队列堵不堵、算力用得值不值。计算、推理和数据这三件事从过去的各自为政到现在必须捏合成一个整体——这个趋势我觉得才刚开头后面随着 Agent 场景越来越复杂对云基础设施的要求还会更高。这篇算是我这段时间实打实趟出来的经验总结希望对正在做同类项目的朋友有帮助。
返回列表