数据科学每日总结--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时都会用这个自定义镜像构建容器。

相关推荐
止语Lab2 小时前
好的 DX 不等于少写代码——三种语言的摩擦力设计课
后端
吃饱了得干活2 小时前
别再手动解析 LLM 输出了!LangChain 四种结构化输出方案对比
后端·python·langchain
程序员天天困2 小时前
Arthas trace 命令怎么用?一行定位最慢那行代码
jvm·后端
Huiturn2 小时前
GPT 5.6 连续编码 10 小时,纯 Python 啃下 Word 二进制格式——doc2docx 实现拆解
后端
用户298698530142 小时前
Python 实现 Excel 与 Markdown 互转的实用指南
后端·python·excel
用户77283104908402 小时前
krono-job:零侵入、单二进制交付的分布式任务调度平台(开源)
后端
Conan在掘金2 小时前
鸿蒙报错速查:Function lacks ending return statement,返回路径漏 return 就炸,根因 + 真解法
后端
人间凡尔赛3 小时前
AI-Native 云原生架构:2026 年从容器编排到智能体编排的范式革命
后端·云原生·架构
IT_陈寒3 小时前
Vue的响应式让我加班到凌晨3点,原来问题出在这
前端·人工智能·后端
卷无止境3 小时前
提升 Python 代码健壮性的方法大盘点
后端·python