
一、RAG、MCP、Agent、Function Call分别是什么意思
1. 大语言模型(LLM)的"天赋缺陷"
LLM(如GPT-4、Claude、Gemini)本质上是一个 「超级文本预测器」,它的核心能力是:
✅ 根据输入的文字,预测最合理的下一段文字。
但它有三大硬伤:
缺陷1:知识截止性
- LLM的训练数据停留在某个时间点(比如GPT-4是2023年10月),无法主动获取新知识。
- 后果:问它"今天天气如何?"它只能回答:"根据我的知识库,2023年10月之前上海7月平均气温是..."
缺陷2:无法操作现实世界
- LLM只是一个"大脑",没有手和眼睛,不能:
- 调用API(比如查天气、发邮件)
- 读取本地文件(比如整理你的D盘)
- 控制智能家居(比如关灯)
缺陷3:短期记忆有限
-
LLM的上下文窗口(比如GPT-4-turbo是128K tokens)决定了它能"记住"的对话长度。
-
后果:聊到第50句时,它可能已经忘了你第1句说过"我对芒果过敏"。
2. 四大技术如何补足LLM?
(1)Agent(智能体)------ AI的"决策中枢"
核心作用:把用户指令拆解成可执行步骤,协调其他组件完成任务。
Agent的三大核心能力
1. 任务规划(Planning)
- 用户说:"帮我订一张明天北京飞上海的机票,选靠窗座位。"
- Agent拆解:
- ① 查航班(调用RAG或Function Call)
- ② 筛选符合时间的航班
- ③ 调用订票API(Function Call)
- ④ 确认座位偏好(MCP记忆用户喜欢靠窗)
2. 工具调用(Tool Use)
- Agent知道什么时候该用哪个外挂:
- 需要最新数据 → 调用RAG
- 需要操作现实世界 → 调用Function Call
- 需要记忆用户习惯 → 调用MCP
3. 自我反思(Self-Reflection)
- 如果任务失败(比如航班已售罄),Agent会尝试替代方案(查高铁票)。
Agent的典型架构
js
用户输入 → Agent大脑(LLM) → 决策
↓
RAG Function Call MCP
↓ ↓ ↓
查资料 调API 读记忆
(2)RAG(检索增强生成)------ AI的"实时搜索引擎"
核心作用:让LLM能访问最新或专有数据,避免"知识截止"问题。
RAG的工作流程
- 用户提问:"2024年欧洲杯冠军是谁?"
- 检索模块:
- 去数据库/互联网搜索"2024欧洲杯 冠军"
- 返回相关段落(比如:"西班牙2-1英格兰夺冠")
- 生成模块:LLM把检索结果整合成自然语言回答。
RAG的两种用法
- 主动式:用户明确要求查资料("帮我查最新的医保政策")
- 被动式:Agent自动触发(当LLM发现自己数据过时,悄悄让RAG补课)
RAG的局限性
- 依赖检索质量(如果数据库没更新,照样答错)
- 不适合动态数据(比如股票实时价格,更适合用Function Call调API)
(3)Function Call(函数调用)------ AI的"机械手"
核心作用:让LLM能操作外部工具,突破"纯文本"限制。
典型应用场景
用户指令 | Function Call 调用的API |
---|---|
"明天上海天气怎么样?" | 天气API(如OpenWeatherMap) |
"帮我发邮件给老板" | Gmail/SendGrid API |
"关掉客厅的灯" | 智能家居API(如Home Assistant) |
Function Call的执行流程
- LLM识别用户意图("这是一个天气查询请求")
- LLM生成结构化参数(
{ "location": "上海", "date": "2024-07-30" }
) - 系统调用天气API,返回数据(
{ "temp": 28℃, "rain": true }
) - LLM把API结果转换成人类语言:"明天上海28℃,有雨,记得带伞!"
为什么不能直接用API?
因为普通用户不会写代码!Function Call的本质是 "把自然语言翻译成API调用"。
(4)MCP(模型上下文协议)------ AI的"记忆增强"
核心作用:突破LLM的上下文窗口限制,实现长期记忆和个性化服务。
MCP的两种记忆类型
- 短期记忆:当前对话的上下文(比如聊了10句,它还记得第1句的内容)
- 长期记忆:跨会话存储的关键信息(比如用户说"我对花生过敏")
MCP的实现方式
- 向量数据库:把用户历史对话转换成向量存储,需要时检索相似内容。
- 结构化存储:直接记录用户偏好(
{ "user_id": 123, "allergies": "花生" }
)
MCP的典型应用
- 客服场景:记住用户上次的投诉记录,避免重复询问。
- 个性化推荐:知道用户喜欢科幻电影,优先推荐《奥本海默》。
3. 四大技术如何协同作战?
实战案例:用户说"帮我规划一个周末上海游"
-
Agent拆解任务:
- ① 查上海景点(RAG)
- ② 查用户偏好(MCP:上次用户说"讨厌排队")
- ③ 订门票/餐厅(Function Call)
-
RAG检索最新信息:
- 从旅游网站抓取"2024年上海必去景点",排除需要排队的。
-
Function Call执行操作:
- 调用携程API订外滩观景台门票
- 调用大众点评API订一家不排队的本帮菜
-
MCP持续记忆:
- 记录用户本次选择了"文艺路线",下次推荐博物馆而非游乐场。
-
LLM生成最终回复:
"为您规划了轻松文艺的上海周末游:
- 周六上午:参观浦东美术馆(已订票,免排队)
- 周六中午:在「老吉士」吃正宗本帮菜(已订座)
- 周日下午:漫步武康路历史街区(免费)
需要调整随时告诉我~"
- 未来趋势:更智能的AI Agent 现在的LLM+四大技术只是起点,未来会进化成:
- 全自动Agent:能自己上网查资料、对比价格、订酒店,完全不用人类插手。
- 多模态Agent:不仅能处理文本,还能看图片、听语音(比如用手机摄像头识别物品并购物)。
- 情感化MCP:记住用户的情绪状态(比如"上次用户因为航班延误很生气"),调整应答策略。
总结:AI从"书呆子"到"实干家"的进化之路
技术 | 作用 | 类比 |
---|---|---|
LLM | 大脑,负责生成文本 | 理论派学霸 |
Agent | 指挥官,拆解任务 | 项目经理 |
RAG | 实时补充知识 | 活体百科全书 |
Function Call | 操作现实世界 | 机械手 |
MCP | 长期记忆 | 超强备忘录 |
最终效果:让AI不仅"能说会道",还能"真办实事"! 🚀
二、细说rag和function call 的区别关系
RAG(检索增强生成)和Function Call(函数调用)是大模型的两大"外挂",一个负责知识补充,一个负责实际操作。它们经常被同时使用,但定位完全不同。下面用最直白的方式拆解它们的区别和协作关系。
1. 核心区别:一个"查资料",一个"干实事"
维度 | RAG | Function Call |
---|---|---|
核心功能 | 从外部知识库检索信息,增强生成内容 | 调用外部工具/API执行具体操作 |
输入输出 | 输入:用户问题;输出:文本片段 | 输入:结构化参数;输出:操作结果 |
数据时效性 | 依赖检索库的更新频率(可能滞后) | 实时获取最新数据(如股票价格) |
典型场景 | "2023年诺贝尔奖得主是谁?" | "帮我订明天北京的机票" |
人类类比 | 图书管理员(只会翻书告诉你答案) | 秘书(能打电话、发邮件、订酒店) |
2. 工作原理对比
RAG 的工作流程
- 用户提问:"特斯拉2023年财报的净利润是多少?"
- 检索:从财经数据库/网页抓取相关段落(如:"特斯拉2023年净利润150亿美元")。
- 生成:LLM将检索结果整合成自然语言回答。
✅ 优势:解决LLM知识陈旧的问题。
❌ 局限:如果检索库没有数据(比如查公司内部文件但未上传),RAG就无效。
Function Call 的工作流程
- 用户指令:"今天北京的温度是多少?"
- 参数化:LLM生成API调用参数:
js
{ "service": "weather", "location": "北京", "date": "2024-07-30" }
- 执行:系统调用天气API(如中国气象局接口),返回实时数据:
json
{ "temp": 32℃, "humidity": 65% }
- 回复:LLM将数据转换成人类语言:"今天北京32℃,湿度65%。"
✅ 优势:能获取动态数据或操作现实世界。 ❌ 局限:需要预先配置API权限和参数规则。
3. 关键区别点
(1) 数据来源不同
- RAG:从静态知识库(如PDF、网页、数据库)检索已有信息。
→ 适合回答"是什么"的问题(事实、概念、历史记录)。
- Function Call:从动态API获取实时数据或触发操作。
→ 适合回答"现在怎样"或"怎么做"的问题(天气、股价、订票)。
(2) 输出形式不同
- RAG:返回文本片段,由LLM加工后输出。
→ 答案可能包含冗余信息(比如检索到整段财报,LLM需提取关键数字)。
- Function Call:返回结构化数据(JSON/XML),直接用于操作。
→ 精确高效,但需要LLM做"翻译"才能人类可读。
(3) 失败处理方式不同
- RAG检索失败:LLM会fallback到自身知识库(可能给出过时答案)。
- Function Call失败:直接报错(如"机票已售罄"),需Agent重新规划。
4. 协作场景:它们如何配合?
案例:用户问_"帮我分析苹果公司最新财报,并预测明天股价"_
- RAG出手:
- 检索苹果公司最新财报PDF,提取关键数据(营收、利润)。
- Function Call出手:
- 调用股票API获取实时股价和分析师评级。
- LLM整合:
- 结合RAG的财报数据和Function Call的实时行情,生成分析报告。
💡 本质分工: - RAG解决"知识不足"(LLM不知道的事)。 - Function Call解决"能力不足"(LLM做不到的事)。
5. 什么时候用哪个?
用户需求 | 该用谁? | 原因 |
---|---|---|
"《奥本海默》豆瓣评分多少?" | RAG | 需要从影评网站抓取最新评分 |
"用Python画一个正弦波" | Function Call | 需调用代码执行环境 |
"拜登最近发表了什么演讲?" | RAG + Function Call | 先用RAG查演讲文本,再用Function Call翻译成中文 |
"删除我电脑里所有.txt文件" | Function Call | 需操作本地文件系统 |
6. 常见误区
❌ 误区1:"RAG和Function Call都能获取外部数据,随便用一个就行"
→ 实际上:RAG适合静态知识,Function Call适合动态服务。查天气永远该用API(Function Call),而不是RAG去翻过时的网页。
❌ 误区2:"Function Call比RAG更高级"
→ 实际上:它们互补!比如用户问_"爱因斯坦的相对论和杨振宁的贡献有什么关系?"_,这时需要RAG检索物理学论文,而Function Call毫无用武之地。
总结
- RAG是LLM的"外接硬盘",负责补充知识。
- Function Call是LLM的"机械臂",负责实际操作。
- Agent作为老板,决定什么时候让硬盘干活,什么时候让机械臂动手。 二者结合,才能让AI既"博学"又"能干"! 🛠️📚
三、MCP的具体作用
MCP(Model Context Protocol) 作为模型上下文协议和接口规范的双重身份,确实是一个关键设计。它既解决了LLM的"记忆管理"问题,又为外部系统提供了标准化交互方式。下面我们从技术本质、应用场景和行业实践三个层面展开分析:
1. MCP 的双重身份解析
(1) 作为模型上下文协议:AI的"记忆中枢"
- 核心作用:突破LLM的有限上下文窗口,实现长期记忆和跨会话状态管理。
- 技术实现:
- 短期上下文:通过键值对(Key-Value Cache)缓存当前对话的临时状态。
- 长期记忆:使用向量数据库(如FAISS)存储历史对话的语义化片段,支持相似性检索。
- 典型应用:
python
# 当用户说"我对花生过敏"时,MCP会存储:
{
"user_id": "123",
"context_type": "user_preference",
"key": "allergies",
"value": ["花生"],
"expire_time": "never" # 永久记忆
}
(2) 作为接口规范:生态系统的"通用语言"
-
核心作用:标准化LLM与外部服务(数据库、API、其他AI模型)的交互协议。
-
协议设计:
- 数据格式:通常采用JSON Schema或Protocol Buffers定义结构化输入输出。
- 操作类型:支持CRUD(Create/Read/Update/Delete)式的记忆管理。
-
示例接口:
json
// 外部系统调用MCP写入记忆的请求
{
"operation": "upsert",
"namespace": "medical",
"data": {
"user_id": "123",
"blood_type": "A+"
}
}
2. 为什么需要这种双重设计?
(1) 技术必要性
- LLM的局限性:原生模型无法主动维护记忆,需要外部系统介入。
- 生态协作需求:不同厂商的工具(如CRM、ERP)需要通过统一协议与AI交互。
(2) 商业价值
- 避免锁定:标准化协议让企业可自由切换LLM供应商(如从GPT-4换成Claude)。
- 模块化扩展:第三方开发者可基于协议开发插件(如医疗记忆模块、法律记忆模块)。
3. 行业中的MCP实现案例
(1) OpenAI的GPTs记忆管理
- 用户与GPTs的交互历史通过MCP规范存储,允许开发者自定义记忆字段:
yaml
# GPTs配置文件中定义记忆结构
memory_schema:
- name: "favorite_coffee"
type: "string"
description: "用户最喜欢的咖啡种类"
(2) LangChain的Memory Classes
- 提供了ConversationBufferMemory、EntityMemory等实现,本质上是对MCP的开源实践:
python
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
memory.save_context(
{"input": "我喜欢喝拿铁"},
{"output": "已记住您的咖啡偏好"}
)
(3) 企业级AI中台
- 某银行AI系统的MCP接口规范:
http
POST /api/memory/v1/update
Headers:
Authorization: Bearer <token>
Body:
{
"user": "customer_789",
"context": {
"last_transaction": "2024-03-15T11:30:00",
"risk_level": "medium"
}
}
4. MCP与其他技术的协同
(1) 与RAG的协作
- 场景:当RAG检索到用户病历历史时,通过MCP协议将关键信息结构化存储:
json
{
"operation": "create",
"namespace": "medical_history",
"data": {
"user": "patient_456",
"diagnosis": "type-2 diabetes",
"date": "2023-05-20"
}
}
(2) 与Function Call的集成
- 模式:Function Call执行后产生的数据(如订单号)通过MCP自动记录:
python
# 订票成功后写入记忆
def book_flight(...):
order_id = call_booking_api(...)
mcp_client.save(
namespace="travel",
key="latest_order",
value=order_id
)
5. 未来演进方向
- 动态记忆权重
- 根据信息重要性自动调整记忆强度(如用户说了3次"不要香菜"则提升该记忆优先级)。
- 多模态记忆
- 支持存储图片、语音等非结构化数据(如用户上传的处方照片)。
- 联邦化记忆
- 跨企业安全共享记忆(医院AI和药店AI通过加密协议交换患者过敏史)。
总结:MCP的产业价值
- 对开发者:相当于AI界的USB协议,让记忆管理可插拔。
- 对企业:打破数据孤岛,实现用户画像的跨系统延续。
- 对用户:获得真正"懂你"的AI服务(比如永远记得你咖啡加双份糖)。
这种协议层的设计,才是让AI从"玩具"变成"生产力工具"的关键基建。 🏗️