【LLM】如何在Cursor中调用Dify工作流

这篇文章将通过一个接口文档知识库示例,带你了解如何在 Cursor 中通过 Mcp Server 调用 Dify 平台配置的工作流。

1. 准备工作

  • 需要准备文本生成模型、向量模型、Rerank 模型(可选),这些都可以在 阿里云百炼平台 申请免费使用额度。

  • 准备知识库文档,我这里使用 Dify 维护知识库API 文档进行展示。

  • 已熟悉使用 Cursor 。

我使用的文本生成模型为:qwen-plus-2025-04-28,向量模型:text-embedding-v4,rerank 模型:gte-rerank-v2。

1.1 如何将在线的 API 文档一键转换成 markdown 格式?

你可以通过我开发的 ' 顾得助手 ' (chrome 扩展程序)一键将网页内容转换为任意格式文档。该扩展程序已上架 chrome 应用商店,搜索 顾得助手 即可获得,也可以通过 github 下载体验最新功能,地址:https://github.com/herogus/good_ai_chrome_extension。我的这篇博客有详细介绍,感兴趣的可以点击阅读。

【Chrome】‘Good助手‘ 扩展程序使用介绍-CSDN博客文章浏览阅读902次,点赞12次,收藏16次。这是我自己开发的一款 Chrome 浏览器扩展程序,目前主要集成了‘AI对话‘,’总结页面’,‘基于页面问答’等功能,最近几天我也将写一篇介绍如何开发 chrome 扩展程序的博客,带你了解如何开发属于自己的插件。 https://blog.csdn.net/u013176571/article/details/149159198?spm=1001.2014.3001.5501

下图是简单的请求示例:

2. 知识库工作流搭建

2. 安装 Dify

windows 下需要安装 Docker destop,安装教程可参考我的博客:

【环境搭建】Java、Python、Nodejs等开发环境搭建_node.js python环境安装-CSDN博客文章浏览阅读1.1k次,点赞7次,收藏21次。最近新买了一台电脑,开发的同学都知道,重新在新电脑搭建开发环境是一件相对繁琐的事,这篇文章我将介绍如何搭建Java(jdk、maven等)、Python(uv、conda等)、Nodejs、Docker Desktop(wsl2、docker等)等环境和应用。_node.js python环境安装 https://blog.csdn.net/u013176571/article/details/148382037?spm=1001.2014.3001.5502

# 下载代码
git clone https://github.com/langgenius/dify.git
# 进入docker目录
cd docker
# 使用 docker compose 部署
cp .env.example .env
docker compose up -d

也可以体验官方提供的在线免费版(需科学上网):https://cloud.dify.ai/apps

2.2 知识库搭建

2.2.1 创建知识库

进入 Dify 首页 》 知识库 》 创建知识库 》 创建一个新的知识库

2.2.2 文本分段设置

上传文件后会进入到文本分割设置界面,点击‘预览块’支持查看分割详情。

  • 分段设置:用于设置 ' 文本分块 ' 规则,文本文档可以按照 \n\n,\n (段落、行) , markdown 文档按照标题分块 ##,###,####

  • Embedding 模型设置:这里配置向量模型,用于资源向量化。

  • 检索设置,支持以下几种检索方式:

  1. 向量检索:基于向量相似度检索方式。

  2. 全文索引:基于关键词倒排索引,类似 ES。

  3. 混合索引:同时执行全文检索和向量检索,最后通过 Rerank 模型对结果进行重排序。Top K 表示返回的结果数量(相似度得分最高的 K 个值)。

注:配置完之后,可以在 召回测试 中测试效果,如果效果不好,可以尝试调整 相似度阈值 (值越大,精确度越高)。

2.2.3 搭建知识库工作流

你可以在 ‘ 探索 ’ 模块使用已有的模板创建工作流或者在 ' 工作室 ' 模块创建一个新的工作流。

我这边使用最简单的配置,根据请求内容直接进行知识库检索,然后通过大模型总结后返回,你可以在 '知识检索' 之前,增加一个 '问题分类' 流程,让模型根据不同的输入内容,索引到不同的知识库。 

配置好后,点击 发布 按钮,发布自己的应用。

3. 配置MCP_SERVER

3.1 官方提供的 MCP 服务

3.1.1 入口

可以在 ' 编辑描述 ' 中说明工作流的功能以及调用说明。

3.1.2 cursor 配置

进入 cursor ,编辑 mcp.json,其中 url 为上图 ‘ 服务端点 URL ’。

{"mcpServers": {"OnlineDifyServer": {"url": "https://api.dify.ai/mcp/server/QfH9DT07Mf33kxCX/mcp"}
}

3.2 自己开发一个 MCP Server

3.2.1 python 源码

当然我喜欢自己自足,下面是我用 python 开发的一个调用 Dify 工作流(应用)的 Mcp Server 。

里面的 BASE_URL 是固定的,不同的工作流(应用)对应不同的 API_KEY。

import os
import uuid
from typing import Dict, Any, Optionalimport httpx
from dotenv import load_dotenv
from mcp.server.fastmcp import FastMCP# 定义一个 FastMCp 实例
mcp = FastMCP("DIFY_MCP_SERVER")# DIFY API配置信息
load_dotenv()
BASE_URL = "https://api.dify.ai/v1/chat-messages"
API_KEY = os.getenv("API_KEY")async def query_knowledge(query: str) -> Optional[Dict[str, Any]]:"""查询知识库信息"""if not API_KEY:return {"error": "API_KEY 未配置或为空"}headers = {"Authorization": f"Bearer {API_KEY}","Content-Type": "application/json",}data = {"query": query,"user": str(uuid.uuid4()),"inputs": {},"response_mode": "blocking","conversation_id": "",}try:async with httpx.AsyncClient(timeout=120.0) as client:response = await client.post(BASE_URL, headers=headers, json=data)response.raise_for_status()print(f"Response status: {response.status_code}")print(f"Response text: {response.text}")return response.json()except httpx.HTTPError as e:return {"error": f"查询知识库请求失败:{e}"}except Exception as e:return {"error": f"未知错误:{e}"}def format_response_data(response_data: Dict[str, Any]) -> str:"""格式化 Dify 返回数据"""event = response_data.get("event", "")if "error" == event:return str(response_data["message"])return response_data.get("answer", "")@mcp.tool()
async def query_dify_interface_info(query: str) -> str:"""用于查询 Dify 维护知识库接口文档参数:- query: 查询内容,str格式- 请求示例:1、通过文本创建文档2、通过文件创建文档3、创建空知识库4、知识库列表..."""response_data = await query_knowledge(query)return format_response_data(response_data)if __name__ == "__main__":# 运行 MCP 服务器,默认传输协议 stdiomcp.run(transport="stdio")

请求密钥在这里获取:

3.2.2 cursor 配置

{"mcpServers": {"LocalDifyServer": {"command": "uv","args": ["--directory","D:\\workspace\\project\\python\\2025\\good-agent-fastapi\\mcps","run","dify_mcp_server.py"],"env": {"API_KEY": "填写服务密钥"}}}
}

4. 验证Mcp Server是否加载

Cursor 设置界面,出现如下信息说明工具加载正常。

5. 执行效果

问:查询DIFY 创建空知识库接口文档

6. 拓展

6.1 如何提高查询匹配度?

在使用过程中,可能口语提问往往不能查询到自己想要的结果,可以尝试在每个文本分段中,增加常见问题段落以提高自然提问命中率,比如(以 ' 通过文本创建文档 ' 接口为例):

#### 💬 常见用户提问- 如何通过一段文本添加一个知识文档?
- 可以用 API 上传文字内容吗?
- 不上传文件,怎么创建文档?
- `create_by_text` 是什么用的?

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

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

相关文章

L1、L2正则化的几何解释

L2正则化: 图中用几何方式形象地解释了 Ridge 回归(L2正则化)的原理。 ① 阴影圆:可以理解为(w1^2 w2^2)​≤R^2,圆周表示目标函数的约束线,这个圆表示了我们的参数 (w1,w2)可以活动的范围。 …

【学习笔记】Java并发编程的艺术——第1章 并发编程的挑战

第1章 并发编程的挑战 1.1 上下文切换 即使是单核处理器也支持多线程执行代码,CPU给每个线程分配CPU时间片实现多线程,而每个时间片一般是几十毫秒,所以多个线程感觉是同时执行的 但同一个核切换线程执行时会保存运行状态,以便下次…

leecode3 无重复元素的最长子串

我的思路 原始代码 我发现我虽然解决问题了,但是我的思路不简洁,不明白。 这个题本质上还是滑动窗口的问题。 具体思路为先定义两个指针,对应滑动窗口的两个边界关键是:定义一个集合,来判断这个窗口中的元素是否存在重…

【嵌入式汇编基础】-ARM架构基础(三)

ARM架构基础(三) 文章目录 ARM架构基础(三) 7、AArch64 执行状态 7.3 程序计数器 7.4 堆栈指针 7.5 零寄存器 7.6 链接寄存器 7.7 帧指针 7.8 平台寄存器 (x18) 7.9 过程内调用寄存器 7.10 SIMD 和浮点寄存器 7.11 系统寄存器 7.13 PSTATE 7、AArch64 执行状态 7.3 程序计…

[buuctf-misc]喵喵喵

m题目在线评测BUUCTF 是一个 CTF 竞赛和训练平台,为各位 CTF 选手提供真实赛题在线复现等服务。https://buuoj.cn/challenges#%E5%96%B5%E5%96%B5%E5%96%B5BUUCTF 是一个 CTF 竞赛和训练平台,为各位 CTF 选手提供真实赛题在线复现等服务。https://buuoj.…

Vue 详情模块 2

Vue 渐进式JavaScript 框架 基于Vue2的移动端项目:详情基础内容,日期及电影描述 目录 详情 详情基础内容 初始化与赋值 渲染基础内容 详情样式 日期处理 安装moment 定义过滤器 使用过滤器 电影描述 总结 详情 详情基础内容 初始化与赋值 …

【MODIS数据】MYD03

🌍 遥感数据的“导航仪”:深入解析MYD03地理定位产品 在卫星遥感领域,精确的地理定位是数据应用的基础。作为Aqua卫星中分辨率成像光谱仪(MODIS)的核心支撑产品,MYD03虽不如地表温度或植被指数产品知名&am…

如何填写PDF表格的例子

实际应用场景中,我们会遇到需要根据会话内容自动填写表格的情况,比如:pdf 表格。假设根据会话内容已经获得相关信息,下面以填写个人信息为例来说明。个人信息表格.pdf填写后的效果:填写代码如下:from pdfrw…

2023年影响重大的网络安全典型案例

以下是2023年影响重大的网络安全典型案例,按时间顺序梳理事件经过及技术细节:---一、DeFi协议攻击:dForce借贷协议遭入侵(2023年4月)** - 时间线: - 4月19日08:58:黑客开始攻击Lendf.Me合约&…

Vue 响应式基础全解析2

DOM更新时机 修改响应式状态后,DOM更新不是同步的。Vue会缓冲所有修改,在"next tick"周期中统一更新,确保每个组件只更新一次。 如需在DOM更新后执行代码,可使用nextTick(): import {nextTick } from vueasync function increment() {count.value++

【黑马SpringCloud微服务开发与实战】(九)elasticsearch基础

1. 认识elasticsearch2. 认识和安装ES主播这里之前已经安装好了,资料包里面有镜像 docker run -d \--name es \-e "ES_JAVA_OPTS-Xms512m -Xmx512m" \-e "discovery.typesingle-node" \-v es-data:/usr/share/elasticsearch/data \-v es-plugin…

由浅入深地讲清楚浏览器缓存

一、什么是浏览器缓存?(入门级) 1. 浏览器缓存的定义浏览器缓存就是:浏览器把之前请求过的资源保存起来,下次访问同样的资源时可以直接用本地副本,而不是重新请求服务器。举个生活例子: 你第一次…

Linux I/O 多路复用机制对比分析:poll/ppoll/epoll/select

Linux I/O 多路复用机制对比分析:poll/ppoll/epoll/select 1. 概述 I/O 多路复用是现代高性能网络编程的核心技术,它允许单个线程同时监视多个文件描述符的状态变化,从而实现高效的并发处理。Linux 提供了多种 I/O 多路复用机制&#xff0c…

高防服务器租用:保障数据安全

您的网络速度是否卡顿,业务是否经常受到网络攻击的威胁呢?别担心,高防服务器租用能够帮助你解决这些困扰!高防服务器租用拥有着卓越的防御能力,可以帮助企业抵御各种网络攻击,能够轻松化解各种超大流量的网…

基于python多光谱遥感数据处理、图像分类、定量评估及机器学习方法应用

基于卫星或无人机平台的多光谱数据在地质、土壤调查和农业等应用领域发挥了重要作用,在地质应用方面,综合Aster的短波红外波段、landsat热红外波段等多光谱数据,可以通过不同的多光谱数据组合,协同用于矿物信息有效提取。第一&…

CSS content-visibility:提升页面渲染性能的 “智能渲染开关”

在前端开发中,你是否遇到过这样的问题:页面包含大量 DOM 元素(如长列表、复杂表格)时,滚动变得卡顿,交互响应迟缓?这往往是因为浏览器需要不断渲染屏幕外的元素,浪费了大量计算资源。…

Javascript面试题及详细答案150道之(016-030)

《前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs&…

仿真电路:(十七下)DC-DC升压压电路原理简单仿真

1.前言 升压的环境用的没降压的多,但是升压会用在LED的很多电路上,所以理解一下原理 2.DC-DC升压原理简单仿真 升压原理 下面还是对升压进行简单的仿真 拓扑结构以及原理和降压还是很相似的,只是位置不太一样,过程推导就不推导…

ros2--source

setup脚本类型 install下面会有几个setup.xxx的shell脚本。 setup.bash setup.ps1 setup.sh setup.zsh 什么区别呢 文件名 Shell 类型 适用场景 setup.bash Bash (Linux/macOS) 标准 Linux/macOS 终端(默认使用) setup.sh 通用 Shell 兼容性更广,但功能可能受限 setu…

40.MySQL事务

1.事务的作用事务用于保证数据的一致性,它由一组相关的 dml (update delete insert) 语句组成,该组的 dml (update delete insert) 语句要么全部成功,要么全部失败。如:转账就要用事务来处理,用以保证数据的一致性。假…