Agent + MCP工具实现数据库查询

article/2025/8/6 3:31:09

目录

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


http://www.hkcw.cn/article/OYMwAJJitI.shtml

相关文章

【瑶池数据库训练营及解决方案本周精选(探索PolarDB,参与RDS迁移、连接训练营)】

一、训练营 数据库迁移训练营 自建数据库运维难?本次训练营教您迁移至云数据库 RDS,高可用架构跨区容灾,降本增效!模拟教程 实战演练,零基础也能上手。 (一)开营时间 2025年4月8日-6月2日16…

005学生心理咨询评估系统技术解析:搭建科学心理评估平台

学生心理咨询评估系统技术解析:搭建科学心理评估平台 在心理健康教育日益受重视的当下,学生心理咨询评估系统成为了解学生心理状态的重要工具。该系统涵盖试卷管理、试题管理等核心模块,面向管理员和用户两类角色,通过前台展示与…

为什么企业需要应用程序可观测性

当今数字经济的持续需求迫使企业不仅要确保其应用程序功能正常,还必须提供高可用性、无缝扩展性和最佳性能。无论是每秒处理数百万关键交易的复杂的金融平台,还是服务全球多元化客户群的电商网站,现代企业应用程序早已突破传统简单架构&#…

Open3D 最小二乘法拟合曲线——线性回归实现

目录 1. 前言 2. 线性回归法 2.1 模型假设 2.2 定义误差函数 2.3 求偏导并解方程 2.4 案例演示 2.4.1 使用 python 实现 2.4.2 使用库函数实现(更推荐) 1. 前言 最小二乘法拟合曲线与拟合直线的核心原理完全相同,都是基于最小化误差平方和的思想,使得所有数据点到…

JavaWeb开发基础Servlet生命周期与工作原理

Servlet生命周期 Servlet的生命周期由Servlet容器(如Tomcat、Jetty等)管理,主要包括以下5个阶段: 加载Servlet类 创建Servlet实例 调用init方法 调用service方法 调用destroy方法 加载(Loading): 当Servlet容器启动或第一次接收到对某个…

Electron-vite【实战】MD 编辑器 -- 系统菜单(含菜单封装,新建文件,打开文件,打开文件夹,保存文件,退出系统)

最终效果 整体架构 src/main/index.ts import { createMenu } from ./menu在 const mainWindow 后 // 加载菜单createMenu(mainWindow)src/main/menu.ts import { BrowserWindow, Menu, MenuItem, MenuItemConstructorOptions, dialog, shell } from electron import fs from…

天气预报中的AI:更准确的预测如何实现

如今的天气预报早已不是简单的看云识天气,而是变成了一场数据与算法的科技博弈。当你在手机App上查看未来两小时的降雨概率时,背后可能是AI模型分析了全球数万颗气象卫星的数据;当你收到台风路径预警短信时,或许是AI提前五天就锁定…

虚拟化数据恢复—XenServer虚拟机虚拟磁盘文件丢失的数据恢复案例

虚拟化环境: 某品牌720服务器中有一组通过型号为H710P的RAID卡4块STAT硬盘组建的RAID10,上层部署Xen Server服务器虚拟化平台。虚拟机安装的Windows Server系统,运行Web服务器。有系统盘 数据盘两个虚拟机磁盘。 虚拟化故障: 机…

Java 之殇:从中流砥柱到“被温柔替代”

—— 一位老派 Java 工程师的自述 今天看到一篇江苏的作者发出的《公司Rust团队全员被裁,只因把服务写得「太稳定」:“项目0故障、0报警,那养着3个Rust工程师没用啊”》帖子。看到那篇文章第一反应也是:这八成是 AI 编的。但说实…

vscode一直连接不上虚拟机或者虚拟机容器怎么办?

1. 检查并修复文件权限 右键点击 C:\Users\20325\.ssh\config 文件,选择 属性 → 安全 选项卡。 确保只有你的用户账户有完全控制权限,移除其他用户(如 Hena\Administrator)的权限。 如果 .ssh 文件夹权限也有问题,同…

面试中的项目经验考查:如何让实战经历成为你的决胜王牌

阅读原文 "你在项目中遇到的最大困难是什么?" 当面试官抛出这个问题时,你是否曾感到一阵心虚?是否担心自己的回答显得单薄无力?在竞争激烈的技术岗位面试中,项目经验往往是决定成败的关键因素。资深HR甚至建…

基于Java(SSH框架)+MySQL 实现(Web)公司通用门户(CMS)网站

一、公司通用门户网站的设计与实现 摘要:随着IT应用的深入普及,各行各业都积累了大量的信息资源,实现企业内部信息技术资源的有效整合和精益化管理,是越来越多公司企业的迫切需求。公司门户网站是一个企业向外宣传企业品牌和展示…

vue3实现鼠标悬浮div动画效果

需求 鼠标悬浮在div上显示下载按钮和信息&#xff0c;同时保持下面的div位置不变&#xff1b;当鼠标移走的时候就隐藏恢复原样。 效果&#xff1a; 代码 <script setup> const software ref([{id: "one",title: "软件",container: [{id: "123…

数据结构与算法之单链表面试题(新浪、百度、腾讯)

单链表面试题&#xff08;新浪、百度、腾讯&#xff09; 求单链表中的有效节点的个数 public int getCount(HeroNode head) {Hero1 cur head.getNext();int count 0;while(cur ! null) {count;cur cur.getNext();}return count;}查找单链表中的倒数第k个结点【新浪面试题】…

Google Play推出新功能:用户可直接向Gemini提问应用相关问题

5 月 30 日消息&#xff0c;谷歌在Google Play中广泛推出了由 Gemini AI 提供支持的“向Google Play询问此应用”功能&#xff0c;该功能已正式出现在Google Play的46.1.39-31 版本中。 “向Google Play询问此应用”这项功能&#xff0c;将 Gemini AI 直接集成到Google Play中&…

PyTorch学习(1):张量(Tensor)核心操作详解

PyTorch学习(1)&#xff1a;张量&#xff08;Tensor&#xff09;核心操作详解 一、张量&#xff08;Tensor&#xff09;核心操作详解 张量是PyTorch的基础数据结构&#xff0c;类似于NumPy的ndarray&#xff0c;但支持GPU加速和自动微分。 1. 张量创建与基础属性 import to…

农村土地承包经营权二轮延包—生成地块的KJZB字段

"关于地块的空间坐标&#xff08;KJZB&#xff09;字段&#xff0c;可能稍微复杂一点&#xff0c;用脚本生成较好。空间坐标&#xff0c;目前有两种表达&#xff1a;方案一&#xff0c;根据地块上界址点的个数依次填上&#xff08;如4个为J1/J2/J3/J4&#xff09;&#xf…

时空数据智能分析的原理和案例分享

在当今数字化时代,时空数据如同隐藏在海量信息中的宝藏,蕴含着丰富的价值,等待我们去挖掘和利用。从城市交通的实时监测与优化,到自然灾害的预警与防范,从精准农业的智能管理,到金融市场的动态分析,时空数据的身影无处不在,深刻地影响着我们生活的方方面面。DeepSeek,…

专场回顾 | 重新定义交互,智能硬件的未来设计

自2022年起&#xff0c;中国智能硬件行业呈现出蓬勃发展的态势&#xff0c;市场规模不断扩大。一个多月前&#xff0c;“小智AI”在短视频平台的爆火将智能硬件带向了大众视野&#xff0c;也意味着智能硬件已不再仅仅停留在概念和技术层面&#xff0c;而是加速迈向实际落地应用…

解决访问网站提示“405 很抱歉,由于您访问的URL有可能对网站造成安全威胁,您的访问被阻断”问题

一、问题描述 本来前几天都可以正常访问的网站&#xff0c;但是今天当我们访问网站的时候会显示“405 很抱歉&#xff0c;由于您访问的URL有可能对网站造成安全威胁&#xff0c;您的访问被阻断。您的请求ID是&#xff1a;XXXX”&#xff0c;而不能正常的访问网站&#xff0c;如…