RAGMCP基本原理说明和相关问题解惑

news2025/5/14 2:07:40

一、RAG架构原理和局限性

1.1 概念解释

RAG(Retrieval-Augmented Generation):检索增强生成,让大模型接受外部输入后,总结输出

向量数据库:向量数据通常是高维空间中的点,代表复杂的数据结构,如文本、图像、音频等,传统数据库通常基于精确匹配或范围查询,而向量数据库则专注于相似性搜索。
Dify的向量数据库Weaviate:结合了图数据库和向量数据库的功能,支持语义搜索。

嵌入模型:Embedding模型,将文本块向量化嵌入向量数据库。

重排序模型:Rerank模型,重排序模型将根据候选文档列表与用户问题语义匹配度进行重新排序,改变相似的排序Top K

1.2 RAG架构原理

参考: 本地知识库痛点与进阶方案
rag架构
在这里插入图片描述

1.3 RAG局限性
  • 检索精度不足:RAG核心流程中,大模型仅仅起到了总结的作用,而检索到信息的精准度大部分取决于向量的相似度匹配,检索结果可能包含无关内容(低精确率)或遗漏关键信息(低召回率)。
  • 切片很粗暴:切片的局部性注定了大模型无法看到整篇文档的信息,因此在回答列举XXX,总结XXX的时候回答是不完整的。故此不适合做结构化数据的统计,倒是适合做知识问答QA,智能客服这些。
  • 没有大局观:RAG没办法判断要用多少个分块来回答问题,也无法判断文档间的联系。
  • 微调和超大上下文模型?:这个能解决这个问题,相当于所有信息都抛给大模型,但是我每次想知道的新东西就要微调一下?微调成本很高,不然大家每天微调一下就好了,还要什么RAG。超大上下文模型,是能解决一部分问题,但是再大也有个上限,而且一次问答消耗的token数很高,也不现实。

二、MCP 的基础知识

2.1 Function Call

由openAI提出,提供大模型与外界系统交互的能力,主动调用预设的函数去获取外部数据。
但并没有想做成规范,导致各家大模型的Function Call的参数并不相同,使得服务方想提供调用就要给每个模型都做适配,成本很高
tips:所以之前有公司来做这种简化适配的事,比如dify的自定义工具功能,把swagger文档给dify制作成dify的工具,使dify上不同模型可以复用工具,不过问题是这个工具出了dify就没有用了,别家用不了。

模型想支持FunctionCall需要事先进行数据集的训练或微调才能稳定获得这种能力
想使用FunctionCall功能需要在与模型对话的消息体中增加一个tools字段,来描述自己的工具,如图:
在这里插入图片描述

2.2 Model Context Protocol

Model Context Protocol(模型上下文协议),就是约好模型怎么传参数,服务怎么返回信息。本来其实也没人重视,但是随之越来越多公司支持它,导致它现在成为了一个业内标准,进而使更多的AI应用程序也支持了它。

概念:

  • MCP Hosts:AI应用程序,如Cursor、Cline,其实就是内部支持了MCP Client
  • MCP Client:专门调用MCP Server的
  • MCP Server:轻量级程序,按协议公开特定功能,形态可以是个cli工具放在客户本地运行,也可以是个云服务远程访问。
    大致分三类:
    1.文件和数据访问类:让大模型能够操作、访问本地文件或数据库,如File System MCP Server
    2.Web自动化类:让大模型能够操作浏览器
    3.三方工具集成类:让大模型能够调用三方平台暴露的APl,如高德地图MCP Server,各家产品出的API封装,自己的openAPI可能比较复杂,这里简化,并且可能返回体都不一样,所以在这层去做大一统,预处理等等。
    在这里插入图片描述
    在这里插入图片描述
    关系流程:
    参考:https://zhuanlan.zhihu.com/p/1897306683727910356
    在这里插入图片描述

特点:

  • 协议标准化:统一工具调用格式
  • 生态兼容性:一次开发即可对接所有模型
  • 动态扩展:新增工具无需修改模型代码,即插即用

价值/解决的问题:

  • 数据孤岛 → 打通本地/云端数据源
  • 重复开发 → 开发者只需适配MCP协议
  • 生态割裂 → 形成统一工具市场
2.3 MCP 对比 Function Call

核心区别

对比维度Function CallMCP
标准化程度由厂商自定义(如 OpenAI 的 JSON 格式)开放标准(遵循 JSON-RPC 2.0)
交互方式同步调用,直接嵌入模型运行时异步通信,通过协议解耦
扩展性受限于模型接口,新增功能需适配即插即用,支持多数据源/工具动态接入
安全性需在客户端处理敏感逻辑(如 API 密钥)服务端隔离敏感操作,提升安全性

适用场景
• Function Call 更适合:
✅ 简单、低延迟任务(如实时翻译、数学计算)
✅ 封闭生态内的功能扩展(如 OpenAI 生态的专属 API 调用)
• MCP 更适合:
✅ 复杂任务协作(如跨平台数据整合、多步骤流程)
✅ 企业级系统集成(如 CRM、ERP 对接,需统一协议)
✅ 高安全性需求场景(如医疗、金融数据隔离)

三、MCP Server如何开发

  • 可以使用任意语言编写
  • 两种模式:stdio、sse即本地cli命令行工具或提供sse服务
    示例:
    其实就是写一些方法函数,接受入参处理后返回,代码可以是一个cli工具,也可以监听一个端口
    在这里插入图片描述
    详细的可以看一个天气的MCP-Server是怎么写的:
    https://github.com/MrCare/mcp_tool/blob/main/src/weather_server/server.py

四、Q&A

4.1 MCP Client 调用本地/其它工具的方式?

MCP Client 通过获取工具列表和工具描述,由大模型确定使用哪个工具并组合入参。如下:

  • 工具列表获取:MCP Client 从本地或远程获取可用的工具列表,每个工具都有详细的描述信息。
  • 工具选择:大模型根据任务需求和分析工具描述,选择最合适的工具。
  • 参数组合:大模型根据任务需求,组合生成调用工具所需的参数。
4.2 MCP Client 与 Server 的通信方式?

MCP Client 与 Server 的通信主要通过以下两种方式实现:

  • 本地 CLI 调用:MCP Client 通过本地命令行接口 (CLI) 直接调用 MCP Server。
  • SSE 长连接:MCP Client 与 MCP Server 之间建立 Server-Sent Events (SSE) 长连接,实现实时通信。
4.3 MCP Server 的实现方式?

MCP Server 的实现遵循规范要求,可以使用以下两种方式:

  • 标准输入输出 (stdio):MCP Server 通过标准输入输出与外部工具或服务进行交互。
  • SSE 工具:MCP Server 支持 SSE 协议,实现与客户端的实时通信。

MCP Server 可以本地cli工具,也可以作为云服务提供接口访问。

4.4 MCP Server 的调用方式?

MCP Server 的调用由 MCP Client 发起

  • 请求发送:MCP Client 向 MCP Server 发送请求,请求中包含任务描述和所需工具。
  • 任务处理:MCP Server 根据请求内容,调用相应的工具或服务进行处理。
  • 结果返回:MCP Server 将处理结果返回给 MCP Client,完成整个调用流程。
4.5 MCP依赖FunctionCall吗?

可依赖可不依赖,两种东西不冲突。
DeepseekR1不支持FunctionCall,但是可以调用MCP,原理是和AI应用程序的实现方式有关,比如cline插件是将MCP的工具信息写到系统提示词中,所以只要模型够聪明就可以调用,而5ire则是将工具信息写到模型交互的tools字段中,也就是依赖了模型的FunctionCall能力

4.5 为什么有FunctionCall了还要MCP?

FunctionCall扩展性不好,没有形成标准,各家都有自己的规范,开发者需要为不同模型适配不同代码,以往智能考dify或扣子这样的应用程序实现一个工具多个模型使用,但是脱离dify就又不能用了。MCP实现大一统,开发者开发一次,模型和AI应用程序也按规范支持,使得大家都能共用

五、MCP 的基本使用

5.1 环境准备
  • 如果使用的MCP Server启动命令是npx,证明是js写的MCP Server则需要node环境和npx命令。
  • 如果是uv或uvx则证明是python写的,那就需要安装uv。uv是新的python包管理工具,可以理解成pip升级版。
  • 未验证:用golang写完交叉编译后,不需要安装任何环境
5.2 在 Cherry Studio 中使用 MCP

Cherry Studio 是一个支持 MCP 的AI聊天软件,小白友好,因为mcp需要安装一下环境,这个软件可以在界面上操作安装。
但是需要自己有模型的api token
具体操作网上很多,就是下载软件后点点点。

5.3 在VS Code+Cline插件使用MCP

也需要自己有模型的api token,没办法白嫖。
这个是使用教程最多的,因为Cline开源免费。
在这里插入图片描述

5.4 在VS Code + 腾讯云CodeBuddy使用MCP(推荐,免费)

不需要api token,可以使用免费的hunyuan或者Deepseek,全都免费。

六、实践:使用 MCP 调用MySQL数据库

6.1 VsCode + 腾讯云CodeBuddy

插件中搜索‘腾讯云代码助手’,如果用cline,就搜cline
在这里插入图片描述

6.2 在 CodeBuddy 中配置 mysql_mcp_server
  • 找到MySql的MCP Server
    如:mysql_mcp_server_pro
    https://github.com/wenb1n-dev/mysql_mcp_server_pro

以下直接参考仓库的readme配置,下面是我的配置方式:

  • 安装环境:uv/npx
安装uv:
brew install uv
# OR
curl -LsSf https://astral.sh/uv/install.sh | sh
# OR
打开PowerShell,执行:
irm https://astral.sh/uv/install.ps1 | iex
  • 配置Setting
    在这里插入图片描述
{
  "mcpServers": {
    "operateMysql": {
      "name": "operateMysql",
      "description": "",
      "isActive": true,
      "url": "http://localhost:9000/sse",
    }
  }
}
6.3 基础 Prompt 优化查询效果

在系统提示词中将数据库的表结构加进去,并且告诉大模型他们的关系关联性等等。

6.4 MCP+DB检索效果

实操

6.5 目前的局限性
  • 切忌让A!检索过大的数据,因为这种方式不像RAG,每次只检索一小部分需要的内容,它是真正的会执行SQL,你要多少数据,就查多少数据,如果一次查询数据量过大,会消耗大量Token,甚至让MCP客户端卡死
  • 很多MCP客户端是依靠大量系统提示词来实现与MCP工具的通信,所以一旦使用MCP,Token的消耗量一定会大幅增长

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2373825.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java学习手册:服务注册与发现

一、服务注册与发现的概念 在微服务架构中,服务注册与发现是核心功能之一。由于微服务架构中服务实例的数量和位置是动态变化的,服务注册与发现机制允许服务实例在启动时自动注册到注册中心,并在停止时自动注销。其他服务可以通过查询注册中…

双向Transformer:BERT(Bidirectional Encoder Representations from Transformers)

基于Transformer架构,通过双向上下文建模训练,提高完成任务的性能。 一 BERT的核心理念 1.1双向上下文建模依赖 之前讲的双向递归是用两个RNN进行,而BERT是通过Transformer的自注意力机制同时捕捉上下文信息。 1.1.1掩码语言模型&#xf…

EdgeOne Pages MCP 入门教程

什么是MCP? MCP (Model Context Protocol) 是一个开放协议,允许 AI 模型安全地与本地和远程资源进行交互。通过在支持 MCP 的客户端(如 Cline、Cursor、Claude 等)上进行统一配置,可以让 AI 访问更多资源并使用更多工…

Maven 公司内部私服中央仓库搭建 局域网仓库 资源共享 依赖包构建共享

介绍 公司内部私服搭建通常是为了更好地管理公司内部的依赖包和构建过程,避免直接使用外部 Maven 中央仓库。通过搭建私服,团队能够控制依赖的版本、提高构建速度并增强安全性。公司开发的一些公共工具库更换的提供给内部使用。 私服是一种特殊的远程仓…

1688代采系统:技术架构与应用实践

在电商领域,1688 作为国内领先的 B2B 电商平台,拥有海量的商品信息。这些数据对于企业采购决策、市场分析、价格监控和供应链管理具有重要价值。本文将详细介绍如何使用 Python 爬虫技术,通过 1688 的商品详情接口(item_search 和…

一种混沌驱动的后门攻击检测指标

摘要 人工智能(AI)模型在各个领域的进步和应用已经改变了我们与技术互动的方式。然而,必须认识到,虽然人工智能模型带来了显著的进步,但它们也存在固有的挑战,例如容易受到对抗性攻击。目前的工作提出了一…

【2025最新】为什么用ElasticSearch?和传统数据库MySQL与什么区别?

Elasticsearch 深度解析:从原理到实践 一、为什么选择 Elasticsearch? 数据模型 Elasticsearch 是基于文档的搜索引擎,它使用 JSON 文档来存储数据。在 Elasticsearch 中,相关的数据通常存储在同一个文档中,而不是分散…

c++的模板和泛型编程

c的模板和泛型编程 泛型编程函数模板函数模板和模板函数函数模板的原理函数模板的隐式、显式实例化模板参数的匹配原则 类模板类模板的实例化模板的使用案例用函数模板运行不同的模板类用函数模板运行不同的STL容器 模板的缺省参数非类型模板参数模板的特化函数模板的特化类模板…

Java从入门到精通 - 数组

数组 此笔记参考黑马教程,仅学习使用,如有侵权,联系必删 文章目录 数组1. 认识数组2. 数组的定义和访问2.1 静态初始化数组2.1.1 数组的访问2.1.1 定义代码实现总结 2.1.2 数组的遍历2.1.2.1 定义代码演示总结 案例代码实现 2.2 动态初始化…

MySql事务索引

索引 1.使用 创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建 对应列的索引。 2.创建索引(普通索引) 事务:要么全部…

八股文-js篇

八股文-js篇 1. 延迟执行js的方式2. js的数据类型3. null 和 undefined的区别4. 和 的区别5. js微任务和宏任务6. js作用域7. js对象9. JS作用域this指向原型8. js判断数组9. slice作用、splice是否会改变原数组10. js数组去重11. 找出数组最大值12. 给字符串新增方法实现功能…

【2025五一数学建模竞赛B题】 矿山数据处理问题|建模过程+完整代码论文全解全析

你是否在寻找数学建模比赛的突破点?数学建模进阶思路! 作为经验丰富的美赛O奖、国赛国一的数学建模团队,我们将为你带来本次数学建模竞赛的全面解析。这个解决方案包不仅包括完整的代码实现,还有详尽的建模过程和解析&#xff0c…

智能制造环形柔性生产线实训系统JG-RR03型模块式环形柔性自动生产线实训系统

智能制造环形柔性生产线实训系统JG-RR03型模块式环形柔性自动生产线实训系统 一、产品概述 (一)组成 柔性系统须有五个分系统构成即:数字化设计分系统、模拟加工制造分系统、检测装配分系统、生产物分流系统和信息管理分系统。它应包含供料检测单元,操作…

1.2.2.1.4 数据安全发展技术发展历程:高级公钥加密方案——同态加密

引言 在密码学领域,有一种技术被图灵奖得主、著名密码学家Oded Goldreich誉为"密码学圣杯",那就是全同态加密(Fully Homomorphic Encryption)。今天我们就来聊聊这个神秘而强大的加密方案是如何从1978年的概念提出&…

Lua再学习

因为实习的项目用到了Lua,所以再来深入学习一下 函数 函数的的多返回值 Lua中的函数可以实现多返回值,实现方法是再return后列出要返回的值的列表,返回值也可以通过变量接收到,变量不够也不会影响接收对应位置的返回值 Lua中传…

GitLab搭建与使用(SSH和Docker)两种方式

前言 目前公共的代码仓库有很多,比如:git、gitee等等仓库但是我们在公司中,还是要搭建属于本公司自己的一个代码仓库,原因有如下几点 代码私密性,我们公司开发的代码保密性肯定一级重要,那么我们放到公网上&#xff0c…

Linux数据库篇、第零章_MySQL30周年庆典活动

MySQL考试报名网站 Oracle Training and Certification | Oracle 中国 活动时间 2025年 MySQL的30周年庆典将于2025年举行。MySQL于1995年首次发布,因此其30周年纪念日是2025年。为了庆祝这一里程碑,MySQL将提供免费的课程和认证考试,活动…

Windows ABBYY FineReader 16 Corporate 文档转换、PDF编辑和文档比较

作为一名合格的工人,日常工作肯定离不开PDF文件,所以今天给大家找来了一款全新的PDF处理工具,保证能给你带来不一样的体验。 软件介绍 这是一个全能型的PDF处理器,集优秀的文档转换、PDF编辑和文档比较等功能于一身,…

【每日一题 | 2025年5.5 ~ 5.11】搜索相关题

个人主页:Guiat 归属专栏:每日一题 文章目录 1. 【5.5】P3717 [AHOI2017初中组] cover2. 【5.6】P1897 电梯里的尴尬3. 【5.7】P2689 东南西北4. 【5.8】P1145 约瑟夫5. 【5.9】P1088 [NOIP 2004 普及组] 火星人6. 【5.10】P1164 小A点菜7. 【5.11】P101…

多模态大语言模型arxiv论文略读(六十九)

Prompt-Aware Adapter: Towards Learning Adaptive Visual Tokens for Multimodal Large Language Models ➡️ 论文标题:Prompt-Aware Adapter: Towards Learning Adaptive Visual Tokens for Multimodal Large Language Models ➡️ 论文作者:Yue Zha…