数据科学每日总结--Day52--Dify使用经验

相信大家在使用dify时,常常遇到配置一个智能体解决不够智能,但配置多个智能体又会耗费很多token的场景。

近期我在使用dify配置接口时,就遇到了这个问题,智能体根据问题判断用户意图,得出使用哪个接口还不够,还需要进一步将问题转换为接口所需参数。这个时候就有一个问题:按照工作流的流程去配置,那么每个http接口前需要放一个智能体来获取http的所有参数,再结合问题进一步解析所需参数,那在实际落地使用时就会产生巨额的token。

紧接着我便转换了思路,将接口配置为了自定义工具,将其作为工具提供给智能体,使其可以根据需求,自动决定用哪个工具,从而节省token的同时提高智能度。

但是dify平台在添加自定义工具后,虽然刚添加时还能配合提示词进行调试。但是离开界面后,不管有没有保存,回到该智能体编排界面都会显示黄色感叹号(工具已被移除)。在排除了异步检测接口(在离开界面后,dify里有一个异步检测工具能否使用的逻辑,会自行ping接口的url,如果连接不了,会自动移除工具)的原因后,黄色感叹号依然存在。

在排除了防火墙等通信问题后,终于在数据库的逻辑里发现了盲点:数据库里的工具id是api_provider.id,是一个UUID类型的值,而自定义工具在添加时的provider_id则是字符串类型,在添加自定义工具后,python后端尝试链接两个值时就会永远返回False(即使值相同,但是由于类型不同无法匹配),工具提供商被判定为"找不到",进而系统认为该工具的提供商已不存在,标记为deleted_tools,并在前端显示"工具已被移除"。

解决的办法如下,在终端进入dify目录下api的模型文件夹的路径,依次输入命令:

复制代码
# 第 1 步:修改源代码
cp ~/dify/api/models/model.py ~/dify/api/models/model.py.backup
sed -i '230s/api_provider\.id/str(api_provider.id)  # 转换为字符串以匹配 provider_id 的类型/' ~/dify/api/models/model.py

# 第 2 步:创建 Dockerfile.api-custom
cat > ~/dify/docker/Dockerfile.api-custom << 'EOF'
# API 后端自定义 Dockerfile - 修复 deleted_tools Bug
FROM langgenius/dify-api:1.11.2

# 切换到root用户以获得权限
USER root

# 复制修改后的 model.py(修复 UUID 类型不匹配的 Bug)
COPY api/models/model.py /app/api/models/model.py

# 清除 Python 缓存
RUN find /app/api/models -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true

# 切换回原用户
USER dify
EOF

# 第 3 步:构建自定义 API 镜像
cd ~/dify
docker build -f docker/Dockerfile.api-custom -t dify-api-custom:latest .

# 第 4 步:修改 docker-compose-template.yaml
cd ~/dify/docker
cp docker-compose-template.yaml docker-compose-template.yaml.backup
sed -i 's|langgenius/dify-api:1.11.2|dify-api-custom:latest|g' docker-compose-template.yaml

# 第 5 步:重新生成 docker-compose.yaml
./generate_docker_compose

# 第 6 步:重启服务
docker compose down
docker compose up -d

其实就是在匹配id处加上一个str()转换成字符串,并把设置一个自定义镜像就行,这样每次走本地的dify时都会用这个自定义镜像构建容器。

相关推荐
陈随易16 分钟前
MoonBit访谈:MoonBit开发moonclaw实现“养虾”自由
前端·后端·程序员
aq553560024 分钟前
Spring Boot中的404错误:原因、影响及处理策略
java·spring boot·后端
未秃头的程序猿31 分钟前
面试官:谈谈你对 MySQL 执行计划的理解?
后端·mysql·面试
BUG?不,是彩蛋!34 分钟前
AI智慧社区--从0到1开发柱状图数据接口
java·spring boot·后端·intellij-idea·mybatis
@PHARAOH1 小时前
HOW - Go 开发入门(二)
开发语言·后端·golang
用户69371750013841 小时前
微信悄悄搞大事!原生智能助手秘密研发,2026年改变亿人使用习惯
android·后端·微信小程序
小田学Python1 小时前
Dify+Ollama模型搭建攻略:本地环境实战指南
大模型·qwen·dify·ollama
Kilsme_Czy1 小时前
Lanchain4j的入门学习
后端
用户908324602731 小时前
Spring Boot 3 + WebSocket + STOMP + JWT 实现实时消息推送完整方案
vue.js·后端