本章节将带你完成以下目标:

  • 学习什么是tools
  • 使用 FastAPI 创建一个爬虫程序
  • 使用 natapp 将本地服务暴露到公网
  • Dify 中通过 OpenAPI Schema 创建自定义工具,让 Agent 自动调用

前言:Tools介绍

1、什么是 Agent 里的工具?

在 Agent 系统里,工具就是让模型“做事”的能力扩展。

模型本身擅长:

  • 理解问题
  • 推理
  • 生成文本
  • 规划步骤

但它通常不能直接

  • 上网查实时信息
  • 读取网页内容
  • 调用外部 API
  • 访问数据库
  • 执行代码
  • 操作文件系统

这时就需要工具。

你可以把 Agent 想成一个“会思考的助手”,而工具就是它的“手脚”。

2、为什么 Agent 需要工具?

只靠语言模型,很多任务做不了或者做不准,比如:

  • 查今天的天气
  • 查某家公司最新融资
  • 读取一个网页内容
  • 从文档里抽取信息
  • 计算复杂结果
  • 发请求到你的业务系统

工具让 Agent 能把“想法”变成“行动”。

3、常见工具类型

工具类型 作用 适合场景
搜索工具 用于查找互联网信息 最新新闻、产品信息、人物/公司资料、精确事实核验
页面读取工具 用于打开某个具体网页并读取内容 用户给了一个 URL、需要总结网页、需要提取页面中的具体字段
代码执行工具 用于运行代码、计算、处理数据 数学计算、数据分析、批量文本处理、文件转换
API / 业务工具 用于连接你的业务系统 查订单、创建工单、发邮件、查库存、订会议
文件工具 用于读写本地或云端文件 读 PDF、读表格、生成报告、保存结果

4. 工具在 Agent 中怎么工作?

一个典型流程是:

  1. 用户提问
  2. Agent 判断是否需要工具
  3. 选择合适工具
  4. 调用工具
  5. 读取工具结果
  6. 继续推理
  7. 输出答案

例如:

用户:
“帮我查一下某公司最新产品是什么?”

Agent 可能会:

  • 先用搜索工具查最新信息
  • 再用页面读取工具看官网
  • 最后总结回答

5、工具调用的核心思路

Agent 调工具,本质上是三步:

  • 识别需求:这个问题能不能仅靠模型回答?
  • 选择工具:需要搜索、读取网页、还是算数?
  • 整合结果:把工具返回的信息变成最终答案

这叫 Tool UseFunction 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 客户端

3.4、启动 natapp

先启动fastapi程序

在这里插入图片描述

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

natapp -authtoken=你的authtoken

在这里插入图片描述

成功后会显示:

在这里插入图片描述

如果失败了,就换成自己的wifi热点

四、在 Dify 中创建自定义工具

4.1、先访问fastapi docs文档

image.png

img

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

4.2、创建自定义工具

img

img

img

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

img

4.3、进行测试

未使用工具时

img

使用工具时

img

img

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

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐