一、原理概述与背景问题
在大语言模型(LLM)的应用演进中,开发者面临着一个核心痛点:原生LLM本质是一个基于概率的“词语接龙”引擎,它既没有长期记忆,也无法主动触达外部网络或本地工具。如果仅仅依靠单次输入提示词,无法满足持续对话、信息检索、逻辑推理与工具调用的复杂业务诉求。
为了弥合“静态语言模型”与“动态业务需求”之间的鸿沟,业界逐渐沉淀出一套以LLM为核心的系统化架构。这套架构通过引入上下文管理、智能体代理、检索增强与标准化协议等机制,将孤立的模型包装成能够持续交互、处理复杂任务的系统。理解这套架构的底层运行原理,是构建企业级AI应用的关键前提。
二、核心概念:从Prompt到上下文与记忆
在最基础的交互阶段,开发者向模型输入的内容统称为提示词。然而,并非所有提示词都是同等效用的。
- 上下文:在提示词中,通常包含背景信息和最终指令。为了提高模型响应的准确度,架构上需要将背景信息剥离并进行单独管理,这部分信息被称为上下文。上下文为模型提供了生成回答的边界和约束。
- 记忆:原生LLM是“无状态”的,即每次请求都是独立的,无法感知上一轮对话。为了解决“不能追问”的问题,系统引入了记忆机制。其底层实现原理是:在每次发送请求时,程序自动将历史对话记录拼接并塞入当前请求的上下文中,伪装出多轮对话的效果。
由于LLM的上下文窗口长度存在物理限制,无限拼接历史记录会导致Token超限和推理成本飙升。因此,记忆机制通常包含“总结压缩”策略:当历史信息超过阈值时,系统会调用模型对早期对话进行摘要提取,用短文本替代长对话,以此控制上下文长度。
三、系统组成与Agent的诞生
具备了记忆能力后,LLM成为一个优秀的“对话员工”,但仍受限于训练数据,无法获取实时信息或操作外部工具(如查询数据库、调用API)。
- 智能体:解决这一问题的方案并非改变LLM本身,而是在外层包裹一段代理程序。该程序负责解析LLM的意图、代替LLM去执行联网搜索等动作,并将执行结果反馈给LLM。这个代理程序被称为智能体。早期部分实现仅通过在Prompt中硬编码指令来模拟智能,缺乏真正的闭环执行能力;真正的Agent必须包含感知、规划、行动和反馈的完整链路。
- 架构演进:至此,系统的核心架构演变为“用户 -> Agent -> LLM”。Agent充当了中间件的角色,负责传话、鉴权以及处理LLM做不到的物理操作。
四、关键机制:RAG、Function Calling与MCP
为了赋予Agent丰富的工具调用能力,架构在数据检索和接口协议上衍生出了以下关键机制:
- 检索增强生成机制
当Agent需要搜索本地文档或企业内部知识库时,传统的基于关键词的字符串匹配往往不靠谱。RAG机制通过引入向量数据库来解决这一问题。
- 底层运行流程:
- 第一步(数据预处理):将本地文档进行分块,通过嵌入模型将文本块转化为高维向量,并存入向量数据库。
- 第二步(语义检索):当用户提问时,将问题同样转化为向量,在向量数据库中通过计算余弦相似度等指标,召回语义最相近的文本块。
- 第三步(上下文注入):将召回的文本块作为背景信息注入到Prompt的上下文中,LLM基于这些精准的背景信息生成最终回答。
- 机制价值:RAG本质上是给模型外挂了一个动态可变的长期记忆库,解决了模型幻觉和知识时效性问题。
- 函数调用机制
Agent如何知道当前该调用什么工具?这依赖于函数调用机制。
- 协议约定:这本质上是前后端接口格式的约定。Agent向后端声明当前可用的工具列表(包含工具名称、描述及参数结构)。
- 数据流转:LLM接收到用户请求后,不直接输出自然语言,而是输出一段符合约定格式的结构化数据(如JSON),指明需要调用的函数名和参数值。Agent解析该JSON,执行对应的本地代码或API,获取返回结果后,再将结果作为上下文拼接到Prompt中,让LLM进行第二轮推理并给出最终回答。
- 模型上下文协议机制
在传统架构中,Agent内部编写的工具调用逻辑往往与业务代码深度耦合,新增一个工具需要修改Agent本身的代码,不具备扩展性。
- 问题背景:为了实现解耦,需要将工具单独封装为独立的服务,让Agent能够动态发现并调用它们。
- 协议原理:MCP定义了一套标准化的服务发现与通信接口规范。它规定了工具服务如何向Agent暴露工具列表、如何描述参数规范、以及如何进行安全调用。这类似于微服务架构中的服务注册与发现机制。
- 模块协作:工具开发者只需遵循MCP规范编写工具服务,无需关心Agent的具体实现;Agent通过MCP协议动态拉取工具清单,在运行时根据用户意图动态编排调用链路。这大幅提升了系统的开放性和生态扩展能力。
五、通用示例与伪代码解析
为了更清晰地展示上述机制的协作过程,以下是一个简化版的Agent处理流程伪代码:
# 1. 定义上下文与记忆context = "用户当前需要查询公司2023年Q3的财报数据"memory = get_summarized_history(user_id) # 获取压缩后的历史对话# 2. 组装Prompt并获取LLM的意图判断(Function Calling环节)# LLM在此时判定需要调用 "query_financial_db" 工具llm_response = llm.predict( prompt = context + memory + user_query, available_tools = ["query_financial_db", "search_web"] # 通过MCP动态获取的工具列表)# 3. Agent解析意图并执行工具if llm_response.tool_call: tool_name = llm_response.tool_call.name params = llm_response.tool_call.params # 动态调用解耦的工具服务 tool_result = execute_tool_via_mcp(tool_name, params) # 4. 将工具结果喂给LLM进行最终生成 final_prompt = context + memory + user_query + tool_result final_answer = llm.predict(prompt = final_prompt, available_tools = [])else: final_answer = llm_response.text
六、技术优势与限制
- 优势:这套分层架构实现了关注点分离。LLM专注推理,RAG专注数据召回,Agent专注调度,MCP负责标准化连接。这使得系统具备极强的可扩展性,企业可以像插拔USB设备一样接入各类数据源和工具。
- 限制:整套链路较长,存在延迟累加问题(多次LLM推理+工具网络请求+向量检索)。此外,Agent在复杂任务下的规划能力高度依赖LLM的推理能力,若模型能力不足,极易出现死循环或调用错误工具的情况。
七、常见误区
- 将Agent等同于多段提示词:许多人误以为写一段“你是一个智能助手,请一步步思考”的Prompt就是Agent。实际上,没有外部工具调用和状态反馈闭环的流程,不能被称为真正的Agent。
- 认为RAG只是向量搜索:成熟的RAG系统不仅包含向量检索,还涉及文档解析、分块策略优化、重排序机制以及混合检索(关键词+向量)。单一的向量搜索往往无法应对精确匹配场景。
- 混淆Function Calling与MCP:Function Calling是LLM输出结构化指令的格式约定,而MCP是工具服务与Agent之间的通信与发现规范,前者是“语言协议”,后者是“架构规范”。
八、总结
从最初的Prompt工程到上下文与记忆管理,再到Agent代理、RAG检索增强,直至最终的Function Calling和MCP协议,大模型应用架构的演进逻辑始终围绕“弥补模型自身缺陷、解耦系统模块、增强工程扩展性”这一核心主线展开。系统通过将大模型封装在多层代理与协议之下,使其从一个静态的文本生成器,跃变为具备感知、规划和执行能力的智能系统。掌握这些底层原理与协作机制,是开发者构建稳定、高效、可扩展的AI应用系统的基石。