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://www.pswp.cn/pingmian/96514.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/96514.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/96514.shtml

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

相关文章

“移动零”思路与题解

给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。思路讲解&#xff1a;举例如下&#xff1a;实现代码是&#xff1a;class Solution { public:v…

关于行内元素,行内块元素和块级元素

1、什么是行内元素&#xff0c;什么是行内块元素&#xff0c;什么是块级元素行内元素的特点&#xff1a;不独占一行&#xff0c;相邻元素会在同一行显示&#xff0c;直到一行排不下才换行。宽度和高度由内容本身决定&#xff0c;无法通过width&#xff0c;height手动设置&#…

⽹络请求Axios的概念和作用

Axios 是一个基于 ​​Promise​​ 的轻量级、高性能 ​​HTTP 客户端库​​&#xff0c;主要用于在浏览器和 Node.js 环境中发起 HTTP 请求&#xff08;如 GET、POST、PUT、DELETE 等&#xff09;。它通过简洁的 API 和强大的功能&#xff0c;简化了前端与后端之间的数据交互过…

在AgentScope中实现结构化输出

在AgentScope中实现结构化输出 概述 在AgentScope框架中&#xff0c;结构化输出功能允许开发者定义明确的输出模式&#xff0c;确保AI模型的响应符合预期的格式和约束。本教程将介绍如何使用AgentScope的structured_model参数来实现结构化输出。 结构化输出的优势 数据一致性&a…

Linux 磁盘I/O高占用进程排查指南:从定位到分析的完整流程

在Linux服务器运维工作中&#xff0c;磁盘I/O瓶颈是导致系统性能下降的常见原因之一。当服务器出现响应缓慢、应用卡顿等问题时&#xff0c;及时定位并解决高I/O占用进程就显得尤为重要。本文将从核心思路出发&#xff0c;通过“确认问题-定位磁盘-锁定进程-深入分析”四个步骤…

解决React中通过外部引入的css/scss/less文件更改antDesign中Modal组件内部的样式不生效问题

不生效原因Ant Design 的 Modal 默认通过 ReactDOM.createPortal 挂在 <body> 下&#xff0c;与你的组件树平级&#xff0c;所以写在 .module.css / scoped less 里的选择器根本匹配不到它&#xff0c;就算写全局样式&#xff0c;也可能因为权重不足或异步挂载时机而“看…

day41 51单片机最小系统、GPIO控制、时序逻辑器件(74HC138/595)与LED点阵驱动原理

day41 51单片机最小系统、GPIO控制、时序逻辑器件&#xff08;74HC138/595&#xff09;与LED点阵驱动原理一、嵌入式系统基础概念 1.1 嵌入式系统定义先设计硬件&#xff0c;基于硬件设计软件实现一个具体的功能 —— 专用的计算机系统硬件/软件可剪裁&#xff1a;根据功能需求…

html列表总结补充

1.有序列表的type属性不同的type值表示不同的排序标号1 表示列表项目用数字标号&#xff08;1,2,3...&#xff09; 1 a 表示列表项目用小写字母标号&#xff08;a,b,c...&#xff09; 2 A 表示列表项目用大写字母标号&#xff08;A,B,C...&#xff09; 3 i 表示列表项目用小写罗…

smartctl Current_Pending_Sector 硬盘待处理扇区

smartctl -a /dev/sdae当前值: 312 个待处理扇区 严重警告信号&#xff0c;硬盘发现了 312 个可疑扇区&#xff0c;正在等待重新分配 197 Current_Pending_Sector 0x0022 100 100 000 Old_age Always - 312读取错误频发 错误计数: 38 次 ATA 错误 …

MATLAB1-基本操作和矩阵输入-台大郭彦甫

目录 基础的指令 format 矩阵和向量 找出某行某列的矩阵元素 快速打出多个矩阵或者向量 矩阵连接 矩阵计算 一些特殊矩阵fuction 矩阵相关函数 基础的指令 clc 清空命令行窗口 clear all 清空工作区的全部变量 who 将工作区的全部变量显示出来 whos 工作区的变量信息详…

【CSS 3D 交互】实现精美翻牌效果:从原理到实战

效果图 前言 在现代网页设计中&#xff0c;交互效果是提升用户体验的重要手段。3D 翻牌效果作为一种常见的交互模式&#xff0c;广泛应用于卡片展示、问答切换、产品详情等场景。本文将详细介绍如何使用 CSS 3D 技术实现一个精美的翻牌效果&#xff0c;并深入解析其实现原理。…

Python核心技术开发指南(062)——静态方法

版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 静态方法的定义 静态方法是类中定义的一种特殊方法,它不需要依赖类实例或类本身即可调用,也不隐含传递self(实例引用)或cls(类引用)参数。在Python中,通过@staticmethod装饰器来定义静态…

炒股进阶理论知识

学完前面的《从零开始学炒股》这样的入门课程后&#xff0c;你已經有了一个基本的框架&#xff0c;接下来需要做的是深化、拓展和建立自己的交易系统。以下是为你量身定制的后续学习路径和理论知识建议&#xff0c;分为几个核心模块&#xff1a;模块一&#xff1a;技术分析的深…

华为OD机试真题-跳马-OD统一考试(C卷)

题目描述: 马是象棋(包括中国象棋和国际象棋)中的棋子,走法是每步直一格再斜一格,即先横着或直着走一格,然后再斜着走一个对角线,可进可退,可越过河界,俗称“马走‘日’字。 给顶m行n列的棋盘(网格图),棋盘上只有有棋子象棋中的棋子“马”,并且每个棋子有等级之分,…

PyTorch 模型保存与加载 (速查版)

文章目录1. 推理用: 保存 & 加载权重 (最常见)2. 继续训练用: 保存 & 加载完整状态3. 微调用: 部分加载 (分类头不同等情况)1. 推理用: 保存 & 加载权重 (最常见) import torch import torch.nn as nnmodel nn.Linear(10, 2)# 保存权重 torch.save(model.state_d…

oneshape acad数据集 sam-dataset

Full Text Search - Hugging Face sketchai (Sketch AI)

0913刷题日记

今日计划10道1/10两眼一睁就是刷209. 长度最小的子数组target 396893380 超时头疼看下题解我的问题在于&#xff0c;中间有一个又写了一个遍历&#xff0c;思路和滑动窗口差不多&#xff0c;但是那个遍历就把时间倍数了。头疼还能做题&#xff0c;你很棒了,身体健康最重要。没…

【JAVA】网络编程

引言 在学习网络编程之前&#xff0c;我们编写的程序几乎都是“单机版”的——只能在本地运行&#xff0c;自娱自乐&#xff0c;无法与其他主机&#xff08;用户&#xff09;进行交互。 有些同学可能会产生误解&#xff1a;既然 Java 号称“一次编译&#xff0c;到处运…

HTML标签关系详解:构建网页的骨架结构

前言 在上一篇教程中&#xff0c;我们学习了HTML5的基本结构。今天&#xff0c;让我们深入探讨HTML标签之间的关系。理解HTML标签之间的关系对于构建结构清晰、语义明确的网页至关重要。就像在现实生活中&#xff0c;建筑物的各个部分需要按照一定的规则组合在一起一样&#x…

238 除自身以外数组的的乘积

我的解法&#xff08;没头绪&#xff0c;参考AI的思路&#xff09; 好奇怪啊&#xff0c;这个题目&#xff0c;没什么思路 题目的主要难点是&#xff0c;如何通过这个线性运算得出所有的乘积和&#xff0c;同时不适用除法。 问了下AI&#xff0c;这种题目我可以从什么方向入手&…