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

DeepSeek实战--自定义工具

1. 背景

当前已经有很多AI基础平台(比如:扣子、Dify),用户可以快速搭建Agent,那怎样将已有的接口能力给大模型调用呢 ? 今天我们来探索一个,非常高效、快捷的方案:将http接口做成Dify平台的工具,然后编排到Agent中,实现对应业务功能。

2. 环境准备

  • python 版本:3.12.5
  • LLM: deepseek-chat
  • Dify:账号、地址
  • 依赖包:pip install fastapi uvicorn psutil

3. 实战

Step1:

通过Lingma写一个查询服务器配置的http接口代码
提示词

帮我用 FastAPI 开发一个HTTP Server,获取当前服务器cpu、内存情况。另外,你还需要把 OpenAPI 相关的配置写好,比如server,operator_id等。

生成代码

from fastapi import FastAPI
import psutil
import platform# 创建 FastAPI 应用实例
app = FastAPI(title="服务器监控API",description="用于获取服务器CPU和内存使用情况的API服务",version="1.0.0",servers=[{"url": "http://localhost:8100", "description": "本地开发服务器"},{"url": "http://<你服务器>:8100", "description": "生产服务器"}]
)# 添加自定义OpenAPI配置
app.openapi_tags = [{"name": "monitor","description": "服务器监控相关接口"}
]@app.get("/system/info", tags=["monitor"], summary="获取系统信息")
async def get_system_info(operator_id: str = None):"""获取服务器CPU和内存使用情况参数:- operator_id: 操作员ID(可选)返回:- cpu_percent: CPU使用率(%)- memory_percent: 内存使用率(%)- memory_total: 总内存(MB)- memory_available: 可用内存(MB)- memory_used: 已使用内存(MB)- platform: 系统平台信息- operator_id: 操作员ID(如果提供)"""# 获取CPU使用率cpu_percent = psutil.cpu_percent(interval=1)# 获取内存信息memory = psutil.virtual_memory()# 构造返回数据system_info = {"cpu_percent": cpu_percent,"memory_percent": memory.percent,"memory_total": round(memory.total / (1024 ** 2), 2),"memory_available": round(memory.available / (1024 ** 2), 2),"memory_used": round(memory.used / (1024 ** 2), 2),"platform": platform.platform(),}# 如果提供了operator_id,则添加到返回结果中if operator_id:system_info["operator_id"] = operator_idreturn system_info@app.get("/health", tags=["monitor"], summary="健康检查")
async def health_check():"""服务健康检查接口"""return {"status": "healthy"}# 如果需要自定义OpenAPI配置,可以重写openapi方法
def custom_openapi():# 修复递归调用问题:保存原始的openapi方法if app.openapi_schema:return app.openapi_schema# 调用FastAPI原始的openapi方法生成schemaopenapi_schema = FastAPI.openapi(app)openapi_schema["info"]["x-logo"] = {"url": "https://fastapi.tiangolo.com/img/logo-margin/logo-teal.png"}app.openapi_schema = openapi_schemareturn app.openapi_schema# 修复递归调用问题:只在openapi_schema为None时才执行自定义逻辑
app.openapi = custom_openapiif __name__ == "__main__":import uvicorn# 开发环境 - 仅本地访问(推荐)# uvicorn.run(app, host="127.0.0.1", port=8100)# 生产环境 - 建议通过反向代理(如nginx)访问,不直接对外# uvicorn.run(app, host="127.0.0.1", port=8100)# 开发/测试环境 - 允许外部访问uvicorn.run(app, host="0.0.0.0", port=8100)
Step2:部署到服务器,验证http服务

启动python应用
在这里插入图片描述

在浏览器输入 < 公网 IP>:8100/openapi.json 看看效果
在这里插入图片描述

Step3:Dify 自定义工具

1)自定义工具
在这里插入图片描述

2)配置Schema
在这里插入图片描述

Schema 内容就是上面,在浏览器输入 < 公网 IP>:8100/openapi.json 输出的结果

Step4:搭建Agent调用工具

1)创建一个 Agent 测试一下工具的调用
在这里插入图片描述
2)配置Agent在这里插入图片描述

Step5:检阅成果

在这里插入图片描述

4. 总结

1)将python代码部署到服务器后,无法通过公网ip访问,折腾了1~2h,结果发现是FastAPI 默认只能在本地访问;
2)在Dify 配置Agent的时候,发现llm节点,调用工具后,无法透传到后续节点,然后将工具节点加载到llm节点前解决;
3)Dify 上下变量引用,无法在llm节点提示词中,引用json格式数据。研究了一下发现是,Dify的bug ,用占位符可以正常引入json格式变量。


文章转载自:

http://R857JAl4.bkjhx.cn
http://Mnzy4CCh.bkjhx.cn
http://mOc4lKqA.bkjhx.cn
http://PUnzmSdO.bkjhx.cn
http://zRUGFuzB.bkjhx.cn
http://T3YT8ztT.bkjhx.cn
http://UZhwd26f.bkjhx.cn
http://4phLh6zA.bkjhx.cn
http://419aGqva.bkjhx.cn
http://zqTkSu7X.bkjhx.cn
http://0v2EJ7LN.bkjhx.cn
http://nsCGSKzK.bkjhx.cn
http://K5fKETc1.bkjhx.cn
http://cmz0Bmkq.bkjhx.cn
http://OWdN83hT.bkjhx.cn
http://XvGzcC0h.bkjhx.cn
http://VE6JyBGj.bkjhx.cn
http://DiJVg4IM.bkjhx.cn
http://bu1YsfwW.bkjhx.cn
http://l6SlwZVa.bkjhx.cn
http://XRYQgyji.bkjhx.cn
http://Z6is2hgC.bkjhx.cn
http://nzjJlPZx.bkjhx.cn
http://7IdMXLBz.bkjhx.cn
http://j8VVnm3J.bkjhx.cn
http://LsBtZAUb.bkjhx.cn
http://E6buA4GU.bkjhx.cn
http://Cz5mi6ci.bkjhx.cn
http://SiEvEjBQ.bkjhx.cn
http://lHMhYzOH.bkjhx.cn
http://www.dtcms.com/a/382347.html

相关文章:

  • 同位素分离
  • PID算法:从理论到实践的全面解析
  • 0x03-g a+b ib
  • 【Linux】初识Linux
  • Tomcat介绍与核心操作讲解(以Rhel9.3为例)
  • @RequiredArgsConstructor使用
  • 脉冲串函数在数字信号处理中的核心应用与价值
  • AI助力HTML5基础快速入门:从零开始理解网页结构
  • 大数据与财务管理专业如何转型做金融科技?
  • 【开题答辩全过程】以 高校实习信息管理系统为例,包含答辩的问题和答案
  • 贪心算法应用:推荐冷启动问题详解
  • “单标签/多标签” vs “二分类/多分类”
  • 多商户异次元发卡网是啥啊?
  • 使用 Anaconda Distribution 安装 Python + GDAL并在vscode配置开发环境(完整版)
  • 先进电机拓扑及控制算法介绍(3)——以“数据”驱动电机实现真正的无模型
  • 进程卡顿怎么办?Process Lasso 免费功能实测解析
  • Grafana配置连接时候证书与mongosqld启动证书的关系
  • XWiki Platform 路径遍历漏洞分析 | CVE-2025-55747CVE-2025-55748
  • Python快速入门专业版(二十九):函数返回值:多返回值、None与函数嵌套调用
  • DBSCAN 聚类:以“热闹”划界,任意形状成团,孤立点全当噪声
  • 设计模式:从Collections.synchronizedCollection()出发了解【装饰器模式】
  • CSS3的新特性
  • Python的包管理工具uv下载python版本慢问题解决
  • K8s学习笔记(二):Pod
  • 贪心算法应用:异常检测阈值调整问题详解
  • C++ stack和queue的使用及模拟实现
  • 【面试题】RAG核心痛点
  • 2025年特种作业操作证考试题库及答案(低压电工作业)
  • PCIE基础学习之物理层学习基础
  • Day 02 geant4如何构建几何模型以及材料填充-------以B1为实例