资讯详情

图解AI应用架构设计:从LLM、Agent到MCP的五层架构与工程实践

📅 2026/10/26 9:06:53 | 华诺云谱 👁 阅读
图解AI应用架构设计:从LLM、Agent到MCP的五层架构与工程实践
1. 从一张架构图说起AI应用到底该怎么搭很多人第一次接触AI应用开发脑子里冒出来的第一个念头是“调个API就完事了”。我刚开始也这么想直到真正接手一个需要接入知识库、调用外部工具、还要维持多轮对话状态的项目才发现事情远没有那么简单。一个能跑通的Demo和一个能上线的AI应用之间隔着一整套架构设计的鸿沟。这也是为什么我想借“图解AI应用架构设计”这个题目把这几年来在AI应用开发一线踩过的坑、总结出的分层思路完整地摊开来讲一遍。所谓AI应用架构设计说白了就是回答一个问题当用户输入一句话之后系统内部到底发生了什么这些环节分别由谁负责它们之间怎么协作。这个问题听起来朴素但它决定了你的应用是只能做单轮问答的玩具还是能支撑复杂业务流程的生产系统。核心关键词AI应用、架构设计、Agent、LLM、MCP其实正好对应了这套架构里的几个关键层次——LLM是大脑Agent是手脚和调度中枢MCP是连接外部世界的标准接口而架构设计就是把这些东西组装成一个稳定整体的工程方法。这篇文章适合谁看如果你已经能调用大模型接口但不知道如何组织一个完整项目如果你听说过Agent和MCP但不确定它们在架构里处于什么位置如果你正在做AI应用开发想找一套可参考的分层方案那这篇内容应该能帮到你。我会尽量用图解式的思路把每一层的职责、边界、常见坑都讲清楚让你看完之后能直接对照着搭自己的架构。2. 整体架构分层把一团乱麻拆成五层2.1 为什么必须分层我见过太多AI项目一开始就是一堆代码堆在一起前端直接调模型接口模型返回的结果直接塞进数据库工具调用逻辑散落在各个文件里。这种写法在功能少的时候没问题一旦要加记忆、加工具、加多模型切换整个项目就会变成一团乱麻改一处崩三处。分层不是为了好看是为了让每一层的变化不影响其他层。比如你今天用某个模型明天想换另一个如果模型调用逻辑被封装在LLM层上层业务代码一行都不用改。从工程实践来看一套完整的AI应用架构通常可以拆成五层接入层、编排层、能力层、模型层、基础设施层。这个分法不是唯一的但我觉得它最符合大多数AI应用的实际情况也最容易对应到具体的代码模块。2.2 五层架构的职责边界先给一张文字版的架构图从上到下依次是接入层负责和用户交互包括Web界面、移动端、API网关、消息队列等。这一层不关心AI逻辑只负责把请求收进来、把结果送出去。编排层这是AI应用的核心Agent就活在这一层。它负责决定什么时候调模型、什么时候调工具、什么时候查记忆、什么时候结束。可以理解为整个系统的调度中枢。能力层把各种外部能力封装成统一接口包括工具调用、知识库检索、记忆存储、MCP客户端等。这一层是Agent的“工具箱”。模型层负责和LLM打交道包括模型路由、Prompt管理、流式输出、Token计数、降级策略等。这一层屏蔽了不同模型之间的差异。基础设施层向量数据库、关系数据库、缓存、日志、监控、密钥管理等等。这一层是地基平时不显眼出问题的时候最要命。这五层之间的关系是接入层调用编排层编排层按需调用能力层和模型层能力层和模型层再依赖基础设施层。每一层只和相邻层交互不跨层调用。这个约束看起来简单但坚持下来能省掉大量重构成本。2.3 一个请求的完整流转过程为了让大家有直观感受我描述一个典型场景用户在聊天框里问“帮我查一下上个月的销售数据并生成一个趋势图”。请求从接入层进来编排层的Agent开始工作。它先判断这个问题需要调用工具于是通过能力层发起一次数据库查询工具调用。工具返回原始数据后Agent发现还需要生成图表于是再调用一个绘图工具。图表生成后Agent把结果和一段自然语言总结一起返回给模型层让LLM组织成最终回复。模型层处理完流式输出结果回到接入层展示给用户。整个过程中记忆模块在后台默默记录了这次对话的关键信息方便后续追问。这个流程里每一层各司其职。如果数据库换了只改能力层的工具实现如果模型换了只改模型层的路由配置如果前端换了只改接入层。这就是分层带来的好处。3. Agent编排层整个系统最烧脑的部分3.1 Agent到底是什么别被概念绕晕Agent这个词现在被用得有点泛滥很多人一听到就想到“自主智能体”“通用人工智能”之类的大词。但从工程角度看Agent就是一个带循环的调度器。它的核心逻辑可以用一段伪代码概括while not done: response llm.chat(messages, tools) if response.has_tool_call: result execute_tool(response.tool_call) messages.append(result) else: done True return response.content就这么简单。Agent和普通LLM调用的区别在于普通调用是一次性的问一句答一句Agent是循环的它会根据模型的输出决定下一步做什么直到任务完成。这个循环就是Agent的灵魂。3.2 编排模式的选择ReAct、Plan-and-Execute还是Workflow实际做Agent开发的时候编排模式的选择很关键。我总结下来主要有三种模式核心思路适用场景缺点ReAct边想边做每步都让模型决定探索性任务、工具调用不确定Token消耗大容易绕圈Plan-and-Execute先规划完整步骤再执行流程明确的多步任务规划错误会导致全盘失败Workflow预定义流程模型只填内容业务规则固定的场景灵活性差但最稳定我的经验是能用Workflow就别用Agent。很多人一上来就想做全自主Agent结果发现模型经常不按套路出牌调试成本极高。如果业务流程是确定的比如“先查订单、再判断状态、再发通知”那就用Workflow把流程写死只在需要理解自然语言的地方调模型。这样系统稳定出了问题也好排查。只有当任务路径真的无法预先确定时才上ReAct这类自主编排模式。3.3 Agent记忆管理短期、长期和会话隔离Agent记忆是另一个容易踩坑的地方。我把它分成三类短期记忆当前对话的消息列表直接放在上下文里。注意要控制长度超过模型窗口就得截断或摘要。长期记忆跨会话需要保留的信息比如用户偏好、历史事实。通常存向量数据库需要的时候检索出来注入上下文。会话隔离不同用户的记忆必须严格隔离否则会出现A用户的信息泄露给B用户的严重问题。这一点在架构设计时就要考虑不能等上线了再补。我踩过的一个坑是早期做记忆检索时没有加用户ID过滤测试的时候用同一个账号没发现问题上线后差点出大事。后来在能力层强制要求所有记忆操作必须带用户标识从架构上杜绝这类问题。3.4 Agent安全别让工具调用变成漏洞Agent安全这个词最近被提得很多但很多人理解得比较窄以为只是防止Prompt注入。实际上Agent安全至少包括三个层面第一是工具权限控制。Agent能调用的工具必须白名单化不能让模型随意调用任意函数。比如一个客服Agent就不应该有能力调用删除数据库的工具。第二是输入输出过滤。用户输入可能包含恶意指令模型输出可能包含敏感信息。这两端都要有过滤机制。第三是操作审计。Agent的每一次工具调用、每一次模型请求都要有日志出了问题能追溯。这在生产环境里是硬性要求。4. MCP与工具层让Agent真正能干活4.1 MCP解决了什么问题MCP是最近AI应用开发领域讨论度很高的一个概念。简单说它是一套标准协议让不同的工具和数据源能以统一的方式暴露给AI应用。在没有MCP之前每接一个工具就要写一套适配代码工具多了之后维护成本爆炸。MCP的出现相当于给工具调用定了一个USB接口标准只要工具实现了MCP协议任何支持MCP的AI应用都能直接调用。从架构角度看MCP位于能力层是Agent和外部世界之间的桥梁。Agent不需要知道工具的具体实现只需要知道MCP服务器暴露了哪些能力然后按协议调用即可。这种解耦让工具生态可以独立发展AI应用也可以灵活组合不同的工具。4.2 MCP的三种接入方式实际项目中MCP的接入方式主要有三种本地进程MCP服务器和AI应用跑在同一台机器上通过标准输入输出通信。适合本地工具比如文件操作、代码执行。远程服务MCP服务器部署在远端通过网络通信。适合团队共享的工具比如数据库查询、内部API。嵌入式把MCP能力直接集成到应用内部不走独立进程。适合性能要求高的场景。选择哪种方式主要看工具的部署位置、性能要求和安全边界。我一般建议先从本地进程开始跑通了再考虑远程部署。4.3 工具设计的几个原则工具设计得好不好直接决定Agent能不能用好。我总结了几条原则第一工具描述要清晰。模型是根据工具描述来决定调不调的描述写得含糊模型就会乱调或者不调。描述里要写清楚工具做什么、什么时候用、参数是什么意思。第二参数尽量简单。参数越多模型填错的概率越大。能用枚举就不用自由文本能用一个参数就不用三个。第三返回值要结构化。工具返回的结果最好是JSON格式字段名清晰方便模型理解。返回一大段自然语言文本模型反而不好处理。第四错误信息要友好。工具调用失败时返回的错误信息要能让模型理解发生了什么这样它才能决定是重试还是换方案。4.4 工具调用的常见故障排查工具调用出问题的时候排查思路一般是这样的现象可能原因排查方法模型不调用工具工具描述不清、Prompt没引导检查工具描述在系统提示里明确说明可用工具调用参数错误参数定义复杂、缺少示例简化参数在描述里给示例调用超时工具执行慢、网络问题加超时控制检查工具实现返回结果模型不理解返回格式混乱统一返回JSON字段命名清晰循环调用同一工具模型陷入死循环加最大调用次数限制检测重复调用这些坑我基本都踩过尤其是循环调用那个早期没有加限制模型有时候会反复调同一个工具十几次Token烧得飞快。后来在编排层加了最大迭代次数和重复调用检测问题就解决了。5. LLM模型层屏蔽差异统一出口5.1 为什么需要模型层现在市面上的LLM模型越来越多各有各的接口格式、参数命名、返回结构。如果业务代码直接调模型接口换一个模型就要改一堆地方。模型层的价值就在于把这些差异屏蔽掉对上提供统一的调用接口。模型层通常要处理这些事情模型路由根据任务选模型、Prompt模板管理、流式输出处理、Token计数、超时重试、降级策略、成本统计。这些事情看起来琐碎但每一项都直接影响应用的稳定性和成本。5.2 模型路由策略模型路由是模型层的核心功能之一。不同任务对模型的要求不一样简单分类任务用小模型就够了复杂推理任务需要大模型对延迟敏感的场景要用快的模型对质量敏感的场景可以用慢一点的。路由策略一般有几种按任务类型路由分类、抽取用便宜模型生成、推理用强模型。按用户等级路由付费用户用强模型免费用户用基础模型。按降级策略路由主模型超时或失败时自动切到备用模型。我一般会在配置里维护一张路由表把任务类型和模型对应起来改的时候只改配置不改代码。5.3 Prompt管理别把Prompt散落在代码里Prompt管理是很多项目容易忽视的地方。我见过不少项目Prompt直接硬编码在业务逻辑里改一个标点都要重新部署。正确的做法是把Prompt抽出来集中管理支持版本控制和热更新。Prompt管理一般包括模板定义、变量注入、版本管理、A/B测试。模板定义用占位符比如{user_input}运行时替换成实际内容。版本管理让每次Prompt变更都可追溯出问题能回滚。A/B测试让不同Prompt可以对比效果用数据决定用哪个。5.4 流式输出与Token控制流式输出是提升用户体验的关键。用户不用等模型生成完才看到内容而是一个字一个字地显示出来感觉响应快很多。实现流式输出要注意几点接入层要支持SSE或WebSocket模型层要正确处理流式响应中间层要做好缓冲和错误处理。Token控制是成本管理的关键。每次调用都要记录输入和输出的Token数累计起来做成本分析。同时要设置单次调用的Token上限防止异常情况导致费用失控。我一般会在模型层加一个Token预算检查超过预算就拒绝或降级。6. 实操落地从零搭一个最小可用架构6.1 技术选型建议如果你现在要动手搭一个AI应用我建议的技术栈是这样的接入层FastAPI或Express轻量够用生态成熟。编排层LangChain或自己写看团队熟悉程度。自己写其实不难核心就是那个循环。能力层MCP客户端用官方SDK向量库用Milvus或Qdrant缓存用Redis。模型层自己封装一层对接多家模型API做好路由和降级。基础设施PostgreSQL存业务数据Redis做缓存对象存储放文件。这个选型不是唯一的但经过多个项目验证比较稳。6.2 最小可用架构的搭建步骤第一步先把模型层搭起来。封装一个统一的chat接口支持传入消息列表和工具定义返回模型响应。内部处理不同模型的差异对外暴露统一格式。第二步实现Agent循环。写一个run_agent函数接收用户输入循环调用模型层遇到工具调用就执行工具直到模型返回最终答案。第三步接入MCP。启动一个MCP服务器把常用工具注册进去Agent通过MCP客户端调用。第四步加记忆。用向量数据库存对话历史每次请求前检索相关记忆注入上下文。第五步加接入层。用FastAPI暴露一个聊天接口支持流式输出。这五步走下来一个最小可用的AI应用架构就成型了。后面就是在这个骨架上不断加功能、做优化。6.3 参数配置与调优经验几个关键参数的经验值最大迭代次数Agent循环最多跑10次超过就强制结束防止死循环。上下文窗口保留最近20轮对话更早的做摘要或丢弃。工具超时单个工具调用超时设30秒超时返回错误让模型决定下一步。模型超时单次模型调用超时设60秒超时触发降级。记忆检索条数每次检索Top 5相关记忆太多会稀释上下文。这些值不是固定的要根据实际场景调整。但有一个原则所有可能无限循环或无限增长的地方都必须有上限。7. 常见问题与排查技巧实录7.1 Agent不按预期调用工具怎么办这是最常见的问题。排查顺序是先看工具描述是否清晰再看系统Prompt有没有引导模型使用工具最后看模型本身是否支持工具调用。有些小模型对工具调用的支持不好换个大模型可能就正常了。7.2 流式输出中断怎么排查流式输出中断通常有几个原因网络不稳定、模型服务端超时、中间层缓冲问题。排查的时候先在模型层加日志确认是模型没返回还是中间层丢了。如果是网络问题加心跳和重连机制。7.3 记忆检索不准怎么优化记忆检索不准一般是向量化质量或检索策略的问题。可以尝试换更好的Embedding模型、调整分块策略、加关键词过滤、做混合检索向量关键词。我实测下来混合检索的效果比纯向量检索好不少。7.4 Token消耗过快怎么控制Token消耗快通常是上下文太长或Agent循环太多。优化方向压缩上下文、限制迭代次数、用小模型做预处理、缓存常见问题的答案。我一般会做一个Token消耗监控面板每天看趋势异常了及时查。8. 一些个人体会做AI应用架构设计这几年我最大的体会是不要追求一步到位。很多人一开始就想设计一个完美的架构结果迟迟动不了手。实际上架构是演进出来的不是设计出来的。先搭一个能跑的最小版本然后在实际使用中发现问题、解决问题架构自然就长出来了。另一个体会是稳定性比先进性重要。新技术层出不穷但不是每个都适合你的场景。选型的时候多问一句“这个技术解决了我什么实际问题”如果答不上来那可能就不需要它。最后分享一个小技巧给Agent加一个“思考日志”把每一步的决策过程记下来。调试的时候看日志比猜模型为什么这么做高效得多。这个习惯帮我省了大量排查时间。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑