走进AI(1):细说RAG、MCP、Agent、Function Call

一、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的工作流程

  1. 用户提问:"2024年欧洲杯冠军是谁?"
  2. 检索模块:
    • 去数据库/互联网搜索"2024欧洲杯 冠军"
    • 返回相关段落(比如:"西班牙2-1英格兰夺冠")
  3. 生成模块: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的执行流程

  1. LLM识别用户意图("这是一个天气查询请求")
  2. LLM生成结构化参数({ "location": "上海", "date": "2024-07-30" }
  3. 系统调用天气API,返回数据({ "temp": 28℃, "rain": true }
  4. LLM把API结果转换成人类语言:"明天上海28℃,有雨,记得带伞!"

为什么不能直接用API?

因为普通用户不会写代码!Function Call的本质是 "把自然语言翻译成API调用"。


(4)MCP(模型上下文协议)------ AI的"记忆增强"

核心作用:突破LLM的上下文窗口限制,实现长期记忆和个性化服务。

MCP的两种记忆类型

  1. 短期记忆:当前对话的上下文(比如聊了10句,它还记得第1句的内容)
  2. 长期记忆:跨会话存储的关键信息(比如用户说"我对花生过敏")

MCP的实现方式

  • 向量数据库:把用户历史对话转换成向量存储,需要时检索相似内容。
  • 结构化存储:直接记录用户偏好({ "user_id": 123, "allergies": "花生" }

MCP的典型应用

  • 客服场景:记住用户上次的投诉记录,避免重复询问。
  • 个性化推荐:知道用户喜欢科幻电影,优先推荐《奥本海默》。

3. 四大技术如何协同作战?

实战案例:用户说"帮我规划一个周末上海游"

  1. Agent拆解任务:

    • ① 查上海景点(RAG)
    • ② 查用户偏好(MCP:上次用户说"讨厌排队")
    • ③ 订门票/餐厅(Function Call)
  2. RAG检索最新信息:

    • 从旅游网站抓取"2024年上海必去景点",排除需要排队的。
  3. Function Call执行操作:

    • 调用携程API订外滩观景台门票
    • 调用大众点评API订一家不排队的本帮菜
  4. MCP持续记忆:

    • 记录用户本次选择了"文艺路线",下次推荐博物馆而非游乐场。
  5. LLM生成最终回复:

    "为您规划了轻松文艺的上海周末游:

    • 周六上午:参观浦东美术馆(已订票,免排队)
    • 周六中午:在「老吉士」吃正宗本帮菜(已订座)
    • 周日下午:漫步武康路历史街区(免费)
      需要调整随时告诉我~"

  1. 未来趋势:更智能的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 的工作流程
  1. 用户提问:"特斯拉2023年财报的净利润是多少?"
  2. 检索:从财经数据库/网页抓取相关段落(如:"特斯拉2023年净利润150亿美元")。
  3. 生成:LLM将检索结果整合成自然语言回答。

✅ 优势:解决LLM知识陈旧的问题。

❌ 局限:如果检索库没有数据(比如查公司内部文件但未上传),RAG就无效。

Function Call 的工作流程
  1. 用户指令:"今天北京的温度是多少?"
  2. 参数化:LLM生成API调用参数:
js 复制代码
{ "service": "weather", "location": "北京", "date": "2024-07-30" }
  1. 执行:系统调用天气API(如中国气象局接口),返回实时数据:
json 复制代码
{ "temp": 32℃, "humidity": 65% }
  1. 回复: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. 协作场景:它们如何配合?

案例:用户问_"帮我分析苹果公司最新财报,并预测明天股价"_

  1. RAG出手:
    • 检索苹果公司最新财报PDF,提取关键数据(营收、利润)。
  2. Function Call出手:
    • 调用股票API获取实时股价和分析师评级。
  3. 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. 未来演进方向

  1. 动态记忆权重
    • 根据信息重要性自动调整记忆强度(如用户说了3次"不要香菜"则提升该记忆优先级)。
  2. 多模态记忆
    • 支持存储图片、语音等非结构化数据(如用户上传的处方照片)。
  3. 联邦化记忆
    • 跨企业安全共享记忆(医院AI和药店AI通过加密协议交换患者过敏史)。

总结:MCP的产业价值

  • 对开发者:相当于AI界的USB协议,让记忆管理可插拔。
  • 对企业:打破数据孤岛,实现用户画像的跨系统延续。
  • 对用户:获得真正"懂你"的AI服务(比如永远记得你咖啡加双份糖)。

这种协议层的设计,才是让AI从"玩具"变成"生产力工具"的关键基建。 🏗️

相关推荐
Entropy-Lee15 分钟前
JavaScript 语句和函数
开发语言·前端·javascript
Wcowin1 小时前
MkDocs文档日期插件【推荐】
前端·mkdocs
xw52 小时前
免费的个人网站托管-Cloudflare
服务器·前端
网安Ruler2 小时前
Web开发-PHP应用&Cookie脆弱&Session固定&Token唯一&身份验证&数据库通讯
前端·数据库·网络安全·php·渗透·红队
!win !2 小时前
免费的个人网站托管-Cloudflare
服务器·前端·开发工具
饺子不放糖2 小时前
基于BroadcastChannel的前端多标签页同步方案:让用户体验更一致
前端
饺子不放糖2 小时前
前端性能优化实战:从页面加载到交互响应的全链路优化
前端
Jackson__2 小时前
使用 ICE PKG 开发并发布支持多场景引用的 NPM 包
前端
饺子不放糖2 小时前
前端错误监控与异常处理:构建健壮的Web应用
前端
cos2 小时前
FE Bits 前端周周谈 Vol.1|Hello World、TanStack DB 首个 Beta 版发布
前端·javascript·css