Dify自定义工具
摘要 本文介绍了如何为AI Agent构建自定义工具,主要包括四个部分:1) 讲解Agent工具的概念与作用,2) 使用FastAPI创建天气查询API接口,3) 通过natapp将本地服务暴露到公网,4) 在Dify平台集成自定义工具。通过具体案例演示了从API开发到工具集成的完整流程,包括代码实现、服务部署和接口测试,使AI Agent能够扩展实时数据查询等实际功能。文中提供了详细的配置步骤和
本章节将带你完成以下目标:
- 学习什么是tools
- 使用 FastAPI 创建一个爬虫程序
- 使用 natapp 将本地服务暴露到公网
- 在 Dify 中通过 OpenAPI Schema 创建自定义工具,让 Agent 自动调用
前言:Tools介绍
1、什么是 Agent 里的工具?
在 Agent 系统里,工具就是让模型“做事”的能力扩展。
模型本身擅长:
- 理解问题
- 推理
- 生成文本
- 规划步骤
但它通常不能直接:
- 上网查实时信息
- 读取网页内容
- 调用外部 API
- 访问数据库
- 执行代码
- 操作文件系统
这时就需要工具。
你可以把 Agent 想成一个“会思考的助手”,而工具就是它的“手脚”。
2、为什么 Agent 需要工具?
只靠语言模型,很多任务做不了或者做不准,比如:
- 查今天的天气
- 查某家公司最新融资
- 读取一个网页内容
- 从文档里抽取信息
- 计算复杂结果
- 发请求到你的业务系统
工具让 Agent 能把“想法”变成“行动”。
3、常见工具类型
| 工具类型 | 作用 | 适合场景 |
|---|---|---|
| 搜索工具 | 用于查找互联网信息 | 最新新闻、产品信息、人物/公司资料、精确事实核验 |
| 页面读取工具 | 用于打开某个具体网页并读取内容 | 用户给了一个 URL、需要总结网页、需要提取页面中的具体字段 |
| 代码执行工具 | 用于运行代码、计算、处理数据 | 数学计算、数据分析、批量文本处理、文件转换 |
| API / 业务工具 | 用于连接你的业务系统 | 查订单、创建工单、发邮件、查库存、订会议 |
| 文件工具 | 用于读写本地或云端文件 | 读 PDF、读表格、生成报告、保存结果 |
4. 工具在 Agent 中怎么工作?
一个典型流程是:
- 用户提问
- Agent 判断是否需要工具
- 选择合适工具
- 调用工具
- 读取工具结果
- 继续推理
- 输出答案
例如:
用户:
“帮我查一下某公司最新产品是什么?”
Agent 可能会:
- 先用搜索工具查最新信息
- 再用页面读取工具看官网
- 最后总结回答
5、工具调用的核心思路
Agent 调工具,本质上是三步:
- 识别需求:这个问题能不能仅靠模型回答?
- 选择工具:需要搜索、读取网页、还是算数?
- 整合结果:把工具返回的信息变成最终答案
这叫 Tool Use 或 Function Calling。
一、准备工作
1.1、安装 Python 环境
确保已安装 Python 3.8 或以上版本。
python --version
1.2、安装 FastAPI 和 Uvicorn
pip install fastapi uvicorn
二、创建API本地接口
2.1、打开pycharm,创建FastAPI项目

2.2、修改main.py
天气API网站:http://tianqiapi.com/index/doc?version=day
注册账号就可以调用
将APPID、APPSecret替换到下面的代码中
天气API参考文档:http://tianqiapi.com/index/doc
from fastapi import FastAPI
import uvicorn
import requests
app = FastAPI(
title="天气查询",
version="0.0.1",
description="天气查询接口",
servers=[
{
# url填写你的公网服务
"url": "xxxx",
"description": "natapp 公网服务",
}
],
)
# 查询api的方法
def get_weather(city):
# appid 和 appsecret 提换成自己的
url = f"http://v1.yiketianqi.com/free/day?appid=xxxx&appsecret=xxxx&unescape=1&city={city}"
re = requests.get(url)
datas = re.json()
data = {
# 城市 更新数据 天气 温度
"city": datas["city"],
"update_time": f'{datas["date"]}/{datas["update_time"]}',
"weather": datas["wea"],
"tem": datas["tem"]
}
return data
# 查询天气的接口
@app.get("/Getweather")
async def Getweather(city: str):
res = get_weather(city)
return res
if __name__ == '__main__':
uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True)

三、使用 natapp 暴露本地服务
3.1、注册 natapp 账号
访问 https://natapp.cn/注册账号(手机号注册即可)。
3.2、获取 authtoken
登录后,在后台找到 我的隧道 → 购买免费隧道 → 记录 authtoken。



3.3、下载 natapp 客户端
-
下载 Windows 版本

-
解压到文件夹

3.4、启动 natapp
先启动fastapi程序

打开命令行,进入 natapp.exe所在的目录,然后再运行:
natapp -authtoken=你的authtoken

成功后会显示:

如果失败了,就换成自己的wifi热点
四、在 Dify 中创建自定义工具
4.1、先访问fastapi docs文档


将这个json进行复制,它可以用于dify自定义工具的创建。
4.2、创建自定义工具



要多测试几次(开始会报错是正常的)

4.3、进行测试
未使用工具时

使用工具时


至此关于如何再Dify中自定义一个接口工具就完成了。
更多推荐




所有评论(0)