English 简体中文 繁體中文 한국 사람 日本語 Deutsch русский بالعربية TÜRKÇE português คนไทย french
查看: 11|回复: 0

dify MCP工具调用

[复制链接]
查看: 11|回复: 0

dify MCP工具调用

[复制链接]
查看: 11|回复: 0

257

主题

0

回帖

781

积分

高级会员

积分
781
ic6WOhzBjf

257

主题

0

回帖

781

积分

高级会员

积分
781
2025-4-15 23:51:49 | 显示全部楼层 |阅读模式
一、概述

前面几篇文章,介绍了Cherry Studio客户端调用MCP,接下来介绍dify如何调用MCP
二、dify插件

需要安装2个插件,分别是:Agent 策略(支持 MCP 工具),MCP SSE
Agent 策略(支持 MCP 工具)

Agent 策略集合(支持 MCP SSE 发现和调用工具)
github地址:https://github.com/junjiem/dify-plugin-agent-mcp_sse
MCP SSE

通过 HTTP with SSE 传输使用 MCP 协议来发现和调用工具。
github地址:https://github.com/junjiem/dify-plugin-tools-mcp_sse
 
插件安装完成后,效果如下:

 点击插件MCP SSE,添加sse地址

 json内容如下:
{    "mysql_mcp_server_pro": {        "url": "http://172.16.0.45:9090/sse"    }}
点击保存,效果如下:

注意:这里的sse,是python代码执行的。
参考文章:https://www.cnblogs.com/xiao987334176/p/18822444
这里就不重复了,运行python代码即可
 
如果有多个mcp应用,json内容,可以添加多个,示例:
{  "server_name1": {    "url": "http://127.0.0.1:8000/sse",    "headers": {},    "timeout": 60,    "sse_read_timeout": 300  },  "server_name2": {    "url": "http://127.0.0.1:8001/sse"  }}
 
三、dify工作流配置

创建工作流

类型:Chatflow
名称:test-mcp-mysql8

 
 删除LLM节点,添加一个agnet,效果如下:

agent设置

agent策略

 重点看agent配置
AGENT策略必须选择ReAct (Support MCP Tools)

为什么一定要选ReAct,因为我发现FunctionCalling有问题,调用MCP一直提示找不到call_tool方法。
我是用fastmcp框架开发的,不需要指定call_tool方法。就算添加了call_tool方法,也依然提示找不到,懒得折腾了,直接选ReAct就好了。
 工具列表

工具列表,必须要选择!
点击右侧添加按钮,选择通过SSE发现和调用MCP工具
添加2个工具列表

MCP服务器

MCP服务器,这里添加你需要的即可
{    "mysql_mcp_server_pro": {        "url": "http://172.16.0.45:9090/sse"    }}
指令

指令必须要设置
指定,也就是提示词,参考文章:https://www.cnblogs.com/xiao987334176/p/18826422

完整内容如下:
使用中文回复。当用户提问中涉及学生、教师、成绩、班级、课程等实体时,需要使用 MySQL MCP 进行数据查询和操作,表结构说明如下:# 学生管理系统数据库表结构说明## 1. 教师表 (teachers)| 字段名 | 类型 | 描述 | 约束 | 示例 ||--------|------|------|------|------|| id | varchar | 教师ID | 主键 | "T001" || name | varchar | 教师姓名 | 必填 | "张建国" || gender | enum | 性别 | """" | "" || subject | varchar | 教授科目 | 必填 | "数学" || title | varchar | 职称 | 必填 | "教授" || phone | varchar | 联系电话 | 必填 | "13812345678" || office | varchar | 办公室位置 | 必填 | "博学楼301" || wechat | varchar | 微信(可选) | 可选 | "lily_teacher" || isHeadTeacher | enum | 是否为班主任,"true""false" | 可选 | true |## 2. 班级表 (classes)| 字段名 | 类型 | 描述 | 约束 | 示例 ||--------|------|------|------|------|| id | varchar | 班级ID | 主键 | "202301" || className | varchar | 班级名称 | 必填 | "2023级计算机1班" || grade | int | 年级 | 必填 | 2023 || headTeacherId | varchar | 班主任ID | 外键(teachers.id) | "T003" || classroom | varchar | 教室位置 | 必填 | "1号楼302" || studentCount | int | 学生人数 | 必填 | 35 || remark | varchar | 备注信息 | 可选 | "市级优秀班集体" |## 3. 课程表 (courses)| 字段名 | 类型 | 描述 | 约束 | 示例 ||--------|------|------|------|------|| id | varchar | 课程ID | 主键 | "C001" || courseName | varchar | 课程名称 | 必填 | "高等数学" || credit | int | 学分 | 必填 | 4 || teacherId | varchar | 授课教师ID | 外键(teachers.id) | "T001" || semester | varchar | 学期 | 格式"YYYY-N" | "2023-1" || type | enum | 课程类型 | "必修""选修" | "必修" || prerequisite | varchar | 先修课程ID | 可选,外键(courses.id) | "C003" |## 4. 学生表 (students)| 字段名 | 类型 | 描述 | 约束 | 示例 ||--------|------|------|------|------|| id | varchar | 学号 | 主键 | "S20230101" || name | varchar | 学生姓名 | 必填 | "王强" || gender | enum | 性别 | """" | "" || birthDate | date | 出生日期 | 必填 | date("2005-01-15") || enrollmentDate | date | 入学日期 | 必填 | date("2023-8-1") || classId | varchar | 班级ID | 外键(classes.id) | "202301" || phone | varchar | 联系电话 | 必填 | "13812345678" || email | varchar | 电子邮箱 | 必填 | "20230101@school.edu.cn" || emergencyContact | varchar | 紧急联系人电话 | 必填 | "13876543210" || address | varchar | 家庭住址 | 必填 | "北京市海淀区中关村大街1栋101室" || height | int | 身高(cm) | 必填 | 175 || weight | int | 体重(kg) | 必填 | 65 || healthStatus | enum | 健康状况 | 必填,"良好""一般‌""较差""良好" |## 5. 成绩表 (scores)| 字段名 | 类型 | 描述 | 约束 | 示例 ||--------|------|------|------|------|| id | varchar | 成绩记录ID | 主键 | "S20230101C001" || studentId | varchar | 学生ID | 外键(students.id) | "S20230101" || courseId | varchar | 课程ID | 外键(courses.id) | "C001" || score | int | 综合成绩 | 0-100 | 85 || examDate | date | 考试日期 | 必填 | date("2024-5-20") || usualScore | int | 平时成绩 | 0-100 | 90 || finalScore | int | 期末成绩 | 0-100 | 80 |### 补考成绩记录说明补考记录在_id后添加"_M"后缀,如"S20230101C001_M"## 表关系说明1. **一对多关系**:   - 一个班级(classes)对应多个学生(students)   - 一个教师(teachers)可以教授多门课程(courses)   - 一个学生(students)有多条成绩记录(scores)2. **外键约束**:   - students.classId → classes.id   - courses.teacherId → teachers.id   - scores.studentId → students.id   - scores.courseId → courses.id   - classes.headTeacherId → teachers.id
 
 查询

这里输入变量query即可

 最大迭代次数

最大迭代次数是一个重要的参数,用于控制工具调用的深度和复杂性。它主要用于防止无限循环或过度调用工具,从而避免资源浪费或系统性能问题。
 
默认是3,也必须要设置一下,否则无法保存

 
最后连接直接回复
选择变量Agent.text

 
点击发布预览

 
四、dify工作流测试

哪个老师学生最多

效果如下:

 哪个学生成绩最好


总成绩最好的是哪个班级


 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

257

主题

0

回帖

781

积分

高级会员

积分
781

QQ|智能设备 | 粤ICP备2024353841号-1

GMT+8, 2025-5-1 21:43 , Processed in 3.542328 second(s), 24 queries .

Powered by 智能设备

©2025