AI智能体应用:Dify工具的使用

natapp + FastAPI + Dify 自定义工具接入实战教程

作者:燐妤
来源:CSDN

目录

natapp + FastAPI + Dify 自定义工具接入实战教程

前言

准备工作

第一步:使用 FastAPI 编写天气接口

weather_api.py

这里有两个非常关键的地方

1、必须开启 CORS

2、host 必须写 0.0.0.0

启动服务

第二步:使用 natapp 暴露本地服务

1、注册 natapp

2、下载客户端

3、获取公网地址

测试公网访问

natapp 免费版的坑

第三步:在 Dify 中创建自定义工具

OpenAPI Schema 示例

Dify 创建步骤

1、点击「工具」

2、创建工具

3、保存

一个很容易踩的坑

第四步:Agent 调用工具测试

1、新建 Agent

2、添加工具

3、写系统提示词

4、开始测试

常见问题

项目结构

总结


前言

最近在折腾 Dify 的 Agent 功能,发现它最有意思的地方,其实不是聊天,而是“调用工具”。

简单来说,你可以把自己写的接口接入进去,让 AI 自动帮你查数据、调接口、执行操作。

刚开始我以为会很复杂,结果实际跑下来发现:

  • FastAPI 用来写接口
  • natapp 用来做内网穿透
  • Dify 用来接工具

三者组合起来,其实非常丝滑。

于是我拿一个“天气查询接口”做了完整测试,从本地开发到 Dify 成功调用,全部跑通。

这篇文章我尽量不用官方文档那种偏硬的写法,而是按照真实开发流程来讲,把踩过的坑也一起写进去,方便大家少绕路。


准备工作

开始之前,需要准备下面几个东西:

环境说明
Python建议 3.8+
FastAPI用来写接口
UvicornFastAPI 运行服务
natapp内网穿透
DifyAgent 平台

先检查 Python:

python --version

安装 FastAPI:

pip install fastapi uvicorn

后面天气接口还会用到 requests:

pip install requests

第一步:使用 FastAPI 编写天气接口

这里我使用的是天气 API 的免费接口。

FastAPI 最大的优点就是:

  • 上手快
  • 自动生成 OpenAPI
  • 天然适合接 Dify

下面直接上代码。

weather_api.py

from fastapi import FastAPI, Query
from fastapi.middleware.cors import CORSMiddleware
import requests
import uvicorn

app = FastAPI(
    title="天气查询 API",
    version="1.0.0",
    description="用于 Dify 调用的天气接口",
    servers=[{"url": "你的公网地址", "description": "natapp 公网服务"}]
)

# 允许跨域
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_methods=["*"],
    allow_headers=["*"],
)

@app.get("/weather")
def get_weather(city: str = Query(..., description="城市名称")):

    params = {
        "appid": "你的appid",
        "appsecret": "你的appsecret",
        "version": "day",
        "city": city
    }

    resp = requests.get("http://tianqiapi.com/xxxx", params=params)

    data = resp.json()

    return {
        "city": data.get("city"),
        "weather": data.get("wea"),
        "temperature": data.get("tem"),
        "humidity": data.get("humidity"),
        "wind": data.get("win_speed")
    }

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

这里有两个非常关键的地方

1、必须开启 CORS

很多人第一次接 Dify 工具时都会卡这里。

如果不加:

CORSMiddleware

后面 Dify 调接口时会直接跨域报错。


2、host 必须写 0.0.0.0

不要写:

127.0.0.1

否则 natapp 无法转发。

正确写法:

host="0.0.0.0"

启动服务

运行:

python weather_api.py

浏览器访问:

http://localhost:8000/weather?city=北京

如果能看到 JSON 返回,说明接口没问题。


第二步:使用 natapp 暴露本地服务

Dify 无法直接访问你本地电脑。

所以必须做“内网穿透”。

这里我用的是 natapp。

原因很简单:

  • 配置少
  • 上手快
  • 免费版够测试

1、注册 natapp

进入官网:

https://natapp.cn

注册账号。

然后创建免费隧道。


2、下载客户端

下载后解压。

打开命令行。

执行:

natapp -authtoken=你的authtoken

看到:

Tunnel Status Online

说明成功了。


3、获取公网地址

你会看到类似:

http://xxxxx.natappfree.cc

这个地址非常重要。

后面:

  • OpenAPI
  • Dify
  • servers

都要用它。


测试公网访问

浏览器打开:

http://你的natapp域名/weather?city=上海

如果能正常返回数据,说明穿透成功。


natapp 免费版的坑

免费版域名会变。

基本三天左右就换一次。

所以如果你发现:

  • 昨天还能调用
  • 今天突然 404

先别怀疑代码。

大概率是域名变了。


第三步:在 Dify 中创建自定义工具

FastAPI 会自动生成 OpenAPI 文档。

访问:

http://你的natapp域名/openapi.json

就能看到。


OpenAPI Schema 示例

下面是一个精简后的版本:

{
  "openapi": "3.1.0",
  "info": {
    "title": "天气查询 API",
    "version": "1.0.0",
    "description": "用于 Dify 调用的天气接口"
  },
  "servers": [
    {
      "url": "http://你的natapp域名",
      "description": "natapp 公网服务"
    }
  ],
  "paths": {
    "/weather": {
      "get": {
        "summary": "获取天气",
        "description": "输入城市名,返回天气信息",
        "operationId": "get_weather",
        "parameters": [
          {
            "name": "city",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "城市名称"
          }
        ],
        "responses": {
          "200": {
            "description": "成功返回天气信息"
          }
        }
      }
    }
  }
}

Dify 创建步骤

进入 Dify 后:

1、点击「工具」

进入:

工具 -> 自定义工具

2、创建工具

填写:

  • 工具名称
  • Schema
  • 鉴权方式

鉴权直接选:

即可。


3、保存

如果能看到:

get_weather

说明创建成功。


一个很容易踩的坑

很多人会漏掉:

servers

结果 Dify 一直报错。

一定要写:

"servers": [
  {
    "url": "你的公网地址"
  }
]

第四步:Agent 调用工具测试

工具创建完成后。

接下来让 Agent 使用它。


1、新建 Agent

创建:

Agent 类型应用

2、添加工具

在工具栏中勾选:

天气查询

3、写系统提示词

这一部分非常重要。

很多时候不是接口有问题,而是提示词没写明白。

我这里的提示词很简单:

你是一个智能天气助手。

当用户询问天气时,
请使用 get_weather 工具查询。

city 参数需要传入城市名称。

查询后,用友好的语气回复用户。

其实不用写太复杂。

核心就几点:

  • 用哪个工具
  • 参数叫什么
  • 什么情况下调用

说清楚就够了。


4、开始测试

输入:

上海今天天气怎么样?

正常情况下。

Agent 会自动调用:

get_weather

然后返回:

上海今天小雨,18℃,
东北风3级,湿度85%。

常见问题

问题原因解决方法
Dify 创建失败没写 servers补充 servers
工具列表为空paths 写错检查 operationId
调用返回 404natapp 域名变化更新公网地址
Agent 不调用工具提示词不明确重写提示词
浏览器跨域错误没开启 CORS添加 CORSMiddleware
本地正常,公网失败host 写成 127.0.0.1改成 0.0.0.0

项目结构

fastapi-dify-demo/
│
├── weather_api.py
├── openapi.json
└── README.md

结构很简单。

基本一个 py 文件就能跑。


总结

整个流程其实并不复杂。

核心就三步:

  1. FastAPI 写接口
  2. natapp 暴露公网
  3. Dify 接 OpenAPI

真正容易卡人的地方其实只有两个:

  • CORS
  • natapp 域名变化

其它部分基本都比较顺。

等你把这套流程跑通后,其实已经不仅仅是“天气查询”了。

你完全可以继续扩展:

  • 公司内部系统
  • CRM
  • 数据接口
  • 自动化流程
  • 数据分析接口

都可以接入 Dify。

本质上:

就是把 AI 和你的业务系统连接起来。

后面能玩的东西会非常多。


每日励志文案:

半山腰总是最拥挤的,你得去山顶看看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值