简介:本文从“老板与员工”的比喻切入,系统梳理大语言模型应用封装技术的演进脉络,对比提示词工程、上下文管理、记忆机制、智能体、检索增强生成、函数调用与工具协议等核心概念。读者将清晰理解各技术的定义、差异、适用场景与选型依据,掌握从简单对话到复杂工具调用的架构决策思路。
在大语言模型(LLM)的应用开发中,开发者会接触到一系列听起来彼此独立、实则层层递进的技术概念:Prompt、Context、Memory、Agent、RAG、Function Calling、MCP 等。它们经常被并列提及,导致初学者误以为它们是同一层级的选择题——好像选了 Agent 就不需要 RAG,用了 MCP 就不需要 Function Calling。
事实并非如此。这些概念更像是同一栋建筑的不同楼层:底层是模型本身的“文字接龙”能力,上层是为了让模型胜任实际工作而逐步添加的工程封装。理解它们之间的层次关系与职责边界,比记住定义更重要。
本文将以“老板与员工”的比喻为主线,对比这些技术的核心差异、适用场景和选型逻辑,帮助开发者在架构设计时做出清晰判断。
在展开对比之前,先明确各对象的定位。
LLM(大语言模型):本质是文字接龙,根据已有文本预测下一个字。它不具备对话、记忆、联网或操作工具的能力,这些全部是外围工程赋予的。
Prompt(提示词):每一次发送给 LLM 的输入文本的统称。它是人与模型交互的载体。
Context(上下文):Prompt 中属于背景信息的部分,与最终指令相区分。例如“你是一位资深翻译”是 Context,“请翻译这句话”是指令。
Memory(记忆):为了解决单次对话无法追问的问题,将历史对话记录重新放入 Context,伪装成多轮对话。可对历史进行总结压缩以控制长度。
Agent(智能体):一段代理程序,负责解析 LLM 的需求、调用外部工具(如搜索)、再把结果喂回 LLM。它弥补了 LLM 无法直接上网或操作工具的缺陷。
RAG(检索增强生成):通过向量数据库检索本地文档中语义相近的内容,再交给 LLM 生成回答。它解决的是“模型参数之外的知识获取”问题。
Function Calling(函数调用):让 LLM 按固定格式(如 JSON)输出工具调用请求,方便程序解析。本质是前后端接口约定。
MCP(模型上下文协议):当工具调用逻辑从 Agent 中解耦为独立服务时,需要一套规范让 Agent 发现和调用这些工具。MCP 定义了工具列表、调用方法等接口规范。
尽管这些概念层次不同,但它们有几个共同的底层逻辑:
| 技术 | 层次定位 | 解决的问题 |
|---|---|---|
| Prompt | 输入层 | 如何向模型表达需求 |
| Context | 输入层细分 | 区分背景信息与指令 |
| Memory | 会话管理层 | 实现多轮对话与追问 |
| Agent | 代理层 | 让模型能操作外部工具 |
| RAG | 知识获取层 | 检索本地文档增强回答 |
| Function Calling | 接口约定层 | 规范模型输出格式 |
| MCP | 服务发现与调用层 | 解耦工具调用逻辑 |
从简单到复杂排序:
| 技术 | 典型适用场景 | 不适用场景 |
|---|---|---|
| Prompt | 简单问答、文本生成、翻译 | 需要多轮交互或外部工具 |
| Context | 需要角色设定、背景约束的任务 | 无需背景信息的简单指令 |
| Memory | 客服对话、多轮咨询、教学辅导 | 单次问答、无状态任务 |
| Agent | 需要联网搜索、操作数据库、调用 API 的任务 | 纯文本生成、无工具需求 |
| RAG | 企业知识库问答、文档检索、合规审查 | 通用知识问答、无私有文档 |
| Function Calling | 需要结构化输出的工具调用 | 纯自然语言回复 |
| MCP | 多工具、多 Agent 共享工具服务的架构 | 单一工具、简单集成 |
| 对比维度 | Prompt | Context | Memory | Agent | RAG | Function Calling | MCP |
|---|---|---|---|---|---|---|---|
| 核心职责 | 表达需求 | 区分背景与指令 | 管理多轮历史 | 代理工具调用 | 检索外部知识 | 规范输出格式 | 工具服务发现 |
| 技术门槛 | 极低 | 低 | 中 | 高 | 中高 | 中 | 高 |
| 复用性 | 无 | 无 | 会话级 | 业务级 | 跨 Agent | 模型级 | 跨 Agent |
| 是否需外部服务 | 否 | 否 | 可选 | 是 | 是 | 否 | 是 |
| 主要成本 | 人力 | 人力 | 存储+推理 | 推理+开发 | 基础设施 | 开发 | 开发+运维 |
| 解决 LLM 缺陷 | 表达 | 信息组织 | 无记忆 | 无行动力 | 无私有知识 | 输出不可解析 | 工具耦合 |
场景一:简单客服问答
只需 Prompt + Context 即可。用户问“退货政策是什么”,模型基于预设背景回答。无需 Memory,因为每次问题独立。
场景二:多轮技术咨询
需要 Memory。用户先问“什么是向量数据库”,再问“它和传统数据库有什么区别”。没有 Memory,第二问会丢失上下文。
场景三:企业知识库助手
需要 RAG + Memory + Prompt。RAG 检索内部文档,Memory 维持多轮对话,Prompt 控制回答风格。
场景四:自动化运维助手
需要 Agent + Function Calling + MCP。Agent 解析用户意图,Function Calling 生成结构化调用请求,MCP 发现并调用监控、日志、重启等工具服务。
场景五:跨部门工具共享平台
需要 MCP。多个 Agent 需要调用同一套工具服务,MCP 提供统一注册与发现机制,避免重复开发。
选型时建议按以下顺序自问:
条件化建议:
从简单 Prompt 迁移到 Agent + RAG + MCP 架构时,需注意:
从 Prompt 到 MCP,本质上是一条 “让只会文字接龙的模型逐步胜任实际工作” 的工程演进路径。每一层封装都针对 LLM 的一项固有缺陷:不能对话、不能记忆、不能行动、不能检索、输出不可解析、工具耦合过深。
选型的关键不是追求最新最复杂的技术,而是明确当前任务需要弥补哪些缺陷。简单问答用 Prompt 即可,多轮对话加 Memory,私有知识加 RAG,外部操作加 Agent,结构化调用加 Function Calling,多工具共享加 MCP。理解层次关系,才能避免过度设计或能力不足。