上文《人工智能AI本地大模型系列(十)Dify的内置工具》我们介绍了dify内置的工具,但是既然是在本地部署大模型,那么就会涉及到比如调用某个服务的接口,然后解析数据,这里的话就没有通用的工具了,只能自己自定义工具了,所以这里我们来介绍下如何在dify中自定义工具。
前提说明
假设我们现在的需求是调用第三方接口,获取对应的ip地址归属地,那么我们可以在网上查找到相关的开放接口,比如下面的接口:
http://whois.pconline.com.cn/ipJson.jsp?ip=113.142.207.41&json=true
这个地址我们请求的时候,就可以获取到我们制定的ip对应的归属地,如下图:
这里我们访问这个地址,传入相关的ip,他就如上图返回了对应ip的归属地了。
那么我们现在需要把这个接口融入到dify中,自定义一个工具,使其调用这个接口,返回来对应的ip归属地,步骤如下:
一、打开dify的dashboard
这里我们打开dify的dashboard,找到工具,自定义工具
然后我们点击创建自定义工具
就会进入dify自定义工具的界面
二、自定义schema
接下来就是自定义schema环节了,这里自定义schema环节的他,目前dify主要是遵循OpenAPI schema的规范,那么我们如何把上面的接口转换成OpenAPI的schema呢,步骤如下;
1、打开apipost
把这个地址输入进去,然后请求测试一下:
可以看到能测试成功。
2、转换curl
这里需要把上面的请求转换成curl,点击apipost右侧的生成代码按钮
点击之后,生成的第一个代码就是curl的
3、使用deepseek生成openapi schema
这里我们复制curl的命令,放到deepseek中,让他生成一个openapi schema
然后deepseek就会帮助我们生成Open API schema
4、填写schema
这里把deepseek生成的OpenAPI schema填写到刚才的dify自定义工具的schema里面
填写完成之后,可以看到下面自动形成了一个可用工具,我们可以点击测试
这里整个openapi schema可输入参数有点多,我们可以根据实际修改下,比如只要输入ip和json即可,最后修改的Open API schema示例如下:
openapi: 3.0.3 info: title: IP Geolocation API version: 1.0.0 servers: - url: http://whois.pconline.com.cn paths: /ipJson.jsp: get: summary: Get IP geolocation information parameters: - name: ip in: query required: true schema: type: string example: 113.142.207.41 - name: json in: query required: true schema: type: string enum: ["true"] example: "true" responses: '200': description: Successful response content: application/json: schema: type: object properties: # Add actual response structure here example: ip: "113.142.207.41" pro: "北京市" proCode: "110000" city: "北京市" cityCode: "110000" region: "" regionCode: "0" addr: "北京市 电信" regionNames: "" err: ""
填写进去,再点击测试,可以看到只有2个参数了:
随便输入一个ip测试下
可以看到有调用成功,测试结果中把json数据返回了。
5、保存自定义工具
最后退出测试,输入一个工具名称
点击保存后就可以使用了
以上就是使用dify自定义工具的过程,大家可以根据案例实操下。
总结备注:
1、自定义工具是本地大模型应用中非常有用的工具,因为每个人的实际需求都是不一样的,而且流程复杂。
2、自定义工具这块的使用主要是在工作流里面使用。
3、这里测试的时候返回了2次,这是因为dify版本的bug问题,使用的时候分割下或者等版本修复了再说。或者换其他的测试地址,比如:
https://ip-moe.zerodream.net/?ip=110.184.43.3
转换成openapi schema之后,示例数据是:
openapi: 3.0.3 info: title: IP Geolocation API version: 1.0.0 servers: - url: https://ip-moe.zerodream.net paths: /: get: summary: Get IP geolocation information description: Retrieve geolocation data for a specified IP address operationId: getIpLocation parameters: - name: ip in: query description: The IP address to lookup required: true schema: type: string format: ipv4 example: "110.184.43.3" responses: '200': description: Successful IP geolocation response content: application/json: schema: type: object properties: # Example response structure - adjust based on actual API response ip: type: string example: "110.184.43.3" country: type: string example: "China" region: type: string example: "Sichuan" city: type: string example: "Chengdu" isp: type: string example: "China Telecom" '400': description: Invalid IP address provided '500': description: Server error
测试之后可看到只调用了一次
这里反正大家多尝试即可。
4、在保存之前,可以设置是否需要鉴权,如果是内部使用的话,可以设置无,或者选择其他的鉴权模式。
还没有评论,来说两句吧...