Agent + MCP工具实现数据库查询
目录
1. RAG
2. Function Calling(函数调用)
3. MCP(模型上下文协议)
4. 案例实践 (Dify+Agent +MCP数据查询)
5. 参考资料:
在大模型领域里,RAG和Function Calling是常见的概念,他们之间又是有区别的,RAG是为了让大模型获取足够的上下文,Function Calling 是为了让模型使用工具。在介绍案例之前,先回顾一下几个关键的概念:
1. RAG
RAG(Retrieval Augmented Generation ,检索增强生成),我们不需要训练和微调大模型,只需要提供和用户提问相关的额外的信息到提示词中,从而可以获得更高质量的回答。RAG原理图如下所示:
图片来源:https://www.dailydoseofds.com/content/images/size/w1000/2025/02/rag-diagram.webp
LLM 接收到用户的问题后,将首先基于关键词在知识库内检索内容。知识库将根据关键词,召回相关度排名较高的内容区块,向 LLM 提供关键上下文以辅助其生成更加精准的回答。
开发者可以通过此方式确保 LLM 不仅仅依赖于训练数据中的知识,还能够处理来自实时文档和数据库的动态数据,从而提高回答的准确性和相关性。
通过上述介绍,我们可以总结出来RAG的核心优势有以下几点
实时性:知识库中的数据可随时更新,确保模型获得最新的上下文。
精准性:通过检索相关文档,LLM 能够基于实际内容生成高质量的回答,减少幻觉现象。
灵活性:开发者可自定义知识库内容,根据实际需求调整知识的覆盖范围。
2. Function Calling(函数调用)
Function Calling 是一种允许大型语言模型(LLM)根据用户输入识别它需要的工具并决定何时调用该工具的机制,运行流程见下图所示:
图片来源:https://mmbiz.qpic.cn/mmbiz_gif/Z6bicxIx5naL2bakmHG7gRicob7WwaDUzeEOaOmlYcCrqIG37TO4Vub6uLFW2BiacbZaMc0ZXzkY5qY93b9Rcys4w/640?wx_fmt=gif&from=appmsg&wxfrom=5&wx_lazy=1&tp=webp
3. MCP(模型上下文协议)
模型上下文协议(Model Context Protocol,简称MCP)是一个由 Anthropic 在 2024 年 11 月 25 日开源的新标准。它是一个开放标准,旨在连接AI助手与数据所在的系统,包括内容存储库、业务工具和开发环境。其目标是帮助前沿模型产生更好、更相关的响应。
MCP 可以看作是 AI 应用程序的 "USB-C端口"。就像 USB-C 为连接设备与各种外设提供了标准化方式,MCP为 AI 模型连接不同数据源和工具提供了标准化方法。
4. 案例实践 (Dify+Agent +MCP数据查询)
介绍完以上概念后,我们来看一下基于Agent策略 + MCP工具实现自然语言查询数据库的一个案例,案例会用到两个插件
(插件离线安装请参考手册,跳转地址 :Dify安装插件实战:如何离线安装dify插件):
Agent 策略(支持 MCP 工具)和 MCP SSE / StreamableHTTP
启动一个MCP SERVER ,例如启动一个db查询的mcp server:
docker run -d --rm --init \--name dbhub \--publish 8080:8080 \bytebase/dbhub \--transport sse \--port 8080 \--dsn "mysql://user:password@localhost:3306/mcp_db?sslmode=disable"
下一步在dify中配置工作流,Dify中Agent节点的信息如下图所示,记得给MCP工具授权,配置mcp服务信息::
当我们运行时,Agent策略结合大模型会自动选择合适的工具来执行,运行效果如下所示:
5. 参考资料:
1、Dify安装插件实战:如何离线安装dify插件
2、https://marketplace.dify.ai/
3、https://www.dailydoseofds.com/content/images/size/w1000/2025/02/rag-diagram.webp
4https://mmbiz.qpic.cn/mmbiz_gif/Z6bicxIx5naL2bakmHG7gRicob7WwaDUzeEOaOmlYcCrqIG37TO4Vub6uLFW2BiacbZaMc0ZXzkY5qY93b9Rcys4w/640?wx_fmt=gif&from=appmsg&wxfrom=5&wx_lazy=1&tp=webp