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格式變量。