当前位置: 首页 > news >正文

使用Dify+fastmcp 实现mcp服务,内含详细步骤与源码

文章目录

    • 概要
    • 整体架构流程
    • 技术细节
      • 1.配置dify
        • 1.1 添加节点
        • 1.2 Agent节点配置
        • 1.3 Agent策略安装与配置
        • 1.4 Agent mcp服务配置
        • 1.5 查询配置
      • 2. 基于fastmcp进行mcp服务器搭建
        • 2.1 创建server.py函数
        • 2.2 启动mcp服务器
        • 2.3 进入dify进行测试
      • 小结

概要

使用dify+python-fastmcp完成mcp服务器,以实现运维智能客服免知识库进行运维数据获取与分析。

整体架构流程

问题: 配置本地知识库与dify知识库都是不小的工作量,而机器运维场景需要获取实时信息。

基本流程: 使用mcp服务器实现大模型实时根据接口返回数据进行分析,生成分析结果与建议再返回给用户。

场景详情: 本文给出一个运维使用场景,用户可以实时查询某台机器cpu,内存,磁盘使用情况。通过mcp服务器进行远程机器指令调用,将结果返回给agent,最后大模型根据返回结果自行整理语言进行返回

实现效果如下图:

在这里插入图片描述

技术细节

1.配置dify

如下图所示,简单在dify中配置mcp服务器配置信息,将dify作为mcp客户端使用。

1.1 添加节点

在dify中创建一个chatflow,然后添加Agent结点。
在这里插入图片描述

1.2 Agent节点配置

从这里进入Marketplace。如果发现自己dify没有Agent或者没有MarketPlace的,可能是dify版本过低。这里使用dify1.2版本。
在这里插入图片描述

1.3 Agent策略安装与配置

在Marketplace中安装Agent 策略
在这里插入图片描述
随后在Agent策略中选择刚刚安装的Agent策略,选择FunctionCalling支持MCP工具
在这里插入图片描述

1.4 Agent mcp服务配置

随后配置工具与MCP服务器配置,工具个人测试下来是可选配的。
后续再看看具体是什么功能。因为我把工具无论是删除还是禁用,也不影响mcp服务器的调用。如果有知道的大佬,可以评论区告知一下。
在这里插入图片描述

1.5 查询配置

查询这里就和其他的节点配置类似,选择开始的query就行。
在这里插入图片描述

2. 基于fastmcp进行mcp服务器搭建

环境:python >= 3.10 已安装fastmcp

2.1 创建server.py函数

使用FastMCP创建一个服务器,使用@mac_server.tool进行工具创建。
填写description进行描述,用来使用dify大模型更容易解析语言去定位使用哪个工具。
RemoteQuickHandler是使用paramiko实现远程调用目标机器类。
main函数中设置transport为sse对应上方dify agent配置中的transport 值
其他几个tool函数,是实现获取内存,cpu,磁盘信息的功能。


from fastmcp import FastMCP
import psutil
from remote_excute import RemoteQuickHandler
# 创建一个MCP服务器实例
mcp_server = FastMCP(name = "My MCP Server",port=8002 , host = "0.0.0.0")#path = "/xxx" 这里可以自行配置path,不填默认sse# 定义一个工具
@mcp_server.tool(description = "这是一个计算两个数加法函数")
def add(a: int, b: int) -> int:return a + b@mcp_server.tool(description = "这是一个获取当前服务器CPU使用率以及前10高CPU进程信息的函数")
def get_cpu_usage() -> dict:"""获取当前服务器CPU总使用率及前10高CPU进程信息"""# 1. 获取整体CPU使用率(间隔0.1秒采样)total_cpu = psutil.cpu_percent(interval=0.1)# 2. 获取所有进程的CPU使用率(需处理权限问题)processes = []for proc in psutil.process_iter(['pid', 'name', 'cpu_percent']):try:# 进程CPU使用率需要主动更新(部分系统需要)proc.cpu_percent()  # 第一次调用初始化cpu_pct = proc.cpu_percent(interval=0.1)  # 第二次调用获取实际值processes.append({"pid": proc.info['pid'],"name": proc.info['name'],"cpu_percent": cpu_pct})except (psutil.NoSuchProcess, psutil.AccessDenied):# 跳过已结束或无权限访问的进程continue# 3. 按CPU使用率降序排序,取前10top_processes = sorted(processes, key=lambda x: x['cpu_percent'], reverse=True)[:10]# 返回结构化数据return {"total_cpu_usage": total_cpu,"top_10_cpu_processes": top_processes}@mcp_server.tool(description = "这是一个查询目标服务器CPU使用率以及前10高CPU进程信息的函数")
def get_host_cpu_usage(host_ip: str) -> dict:"""获取目标服务器C

文章转载自:
http://certification.hdqtgc.cn
http://booky.hdqtgc.cn
http://catenate.hdqtgc.cn
http://abdias.hdqtgc.cn
http://astringer.hdqtgc.cn
http://arecoline.hdqtgc.cn
http://angler.hdqtgc.cn
http://cetacea.hdqtgc.cn
http://chrismation.hdqtgc.cn
http://chalan.hdqtgc.cn
http://announceable.hdqtgc.cn
http://bashlyk.hdqtgc.cn
http://areometry.hdqtgc.cn
http://catholicity.hdqtgc.cn
http://changjiang.hdqtgc.cn
http://ademption.hdqtgc.cn
http://aplite.hdqtgc.cn
http://artlessly.hdqtgc.cn
http://briquet.hdqtgc.cn
http://cashmere.hdqtgc.cn
http://burble.hdqtgc.cn
http://byliner.hdqtgc.cn
http://banger.hdqtgc.cn
http://atebrin.hdqtgc.cn
http://castle.hdqtgc.cn
http://cameroon.hdqtgc.cn
http://acetylene.hdqtgc.cn
http://argufy.hdqtgc.cn
http://adventitious.hdqtgc.cn
http://academical.hdqtgc.cn
http://www.dtcms.com/a/280444.html

相关文章:

  • Windows远程FX的编解码器性能优化
  • 算法在前端框架中的集成
  • 三十二、【核心功能改造】数据驱动:重构仪表盘与关键指标可视化
  • 原型继承(prototypal inheritance)的工作原理
  • Java实现word、pdf转html保留格式
  • 19.如何将 Python 字符串转换为 Slug
  • 全面安装指南:在Linux、Windows和macOS上部署Apache Cassandra
  • 基于STM32与中航ZH-E3L字符卡通信在LED屏显示数据
  • 华为敏态开发流程敏捷开发费用估算敏态IT财务分析模板
  • 进程探秘:从 PCB 到 fork 的核心原理之旅
  • Lang3
  • Spring Ioc Bean 到底是什么
  • 朝鲜升级供应链恶意软件XORIndex,再次瞄准npm生态系统
  • 从springcloud-gateway了解同步和异步,webflux webMvc、共享变量
  • 四种高效搭建SpringBoot项目的方式详解
  • 基于UDP/IP网络游戏加速高级拥塞控制算法(示意:一)
  • SpringBoot 实现 Redis读写分离
  • 【PTA数据结构 | C语言版】根据前序序列重构二叉树
  • npm install failed如何办?
  • 【10】MFC入门到精通——MFC 创建向导对话框、属性页类、属性表类、代码
  • centos 安装java 环境
  • FreeRTOS学习笔记——总览
  • 【Docker基础】Dockerfile构建与运行流程完全指南:从原理到实践优化
  • CentOS 8-BClinux8.2更换为阿里云镜像源:保姆级教程
  • 【第二章自定义功能菜单_MenuItemAttribute_顶部菜单栏(本章进度1/7)】
  • Rust基础-part5-引用
  • 【jvm|基本原理】第四天
  • 游戏行业中的恶梦:不断升级的DDoS攻击
  • 深入理解C++11 std::iota:从原理到实践
  • UDP和TCP的主要区别是什么