Dify 1.1.0 重磅更新:知识检索迎来元数据过滤,安全性全面升级

638 阅读5分钟

近期Dify官方发布了1.1.0版本,我第一时间体验了一下,发现这次更新真的挺实用的。作为一款开源的LLM应用开发平台,Dify这次带来了不少改进,特别是知识库检索方面有了明显提升。我整理了一下这次更新的亮点,希望能给正在使用 Dify 的朋友们提供一些参考。

🌟 重点功能:知识检索的元数据过滤

这次更新中我最喜欢的是知识检索的元数据过滤功能。元数据本质上就是“关于数据的数据”。它为主要数据提供了额外的背景或属性标签,使搜索和检索更加精确。简单来说,就是现在可以通过文档的各种属性来筛选检索结果了,这对于管理大量文档的项目来说简直是救星。

接下来,我分享一下具体怎么用:

场景:技术文档知识库的精准检索

假设你有一个包含各部门技术文档的知识库,现在需要只检索研发部2024年1月之后发布的Python相关文档。

  1. 添加元数据字段 首先在知识库设置中添加自定义元数据字段。我添加了"部门"(department)、"发布日期"(publish_date)和"技术标签"(tech_tags)三个字段。

  1. 上传文档并设置元数据 上传文档时,为每份文档设置对应的元数据值。比如一份第三方Python接口文档,设置department="研发部",publish_date="2025-02-15",tech_tags="Python"。

  1. 使用元数据过滤进行检索 在执行检索时,添加元数据过滤条件:

    • 部门 = "研发部"
    • 发布日期 > "2024-02-27"
    • 技术标签 包含 "java"

image

image

执行测试的时候发现基于元数据过滤这种方式检索没生效,查看控制台日志发现报错,有bug......😂

禁用元数据过滤后,知识库搜索正常,这...

建议要使用元数据过滤功能的小伙伴等后续的修复版本,该版本元数据过滤有BUG,个人不建议使用该功能。

💪 其他实用功能与优化

除了知识检索的改进,这次更新还有几个我觉得挺实用的改进:

工作流优化

IF-ELSE节点现在可以处理缺失的文件变量了,这解决了我之前经常遇到的一个痛点。有次做一个文档处理流程,用户没上传可选文件时整个流程就崩了,现在这种情况能正常处理了。

并行分支数量增加也是个好消息,之前做复杂流程时总觉得分支不够用,现在终于不用为此头疼了。

HTTP请求节点支持跳过SSL验证,这个在内网测试环境特别有用,省去了配置证书的麻烦。

搜索体验提升

关键词搜索改进后,中文检索的效果明显好了。之前搜索某些中文词汇时总觉得结果不太准,现在匹配度高了不少。这应该是得益于pg_bigm关键词搜索集成的改进和Unicode处理的优化。

🛡️ 安全修复

这个版本修复了一个向量数据库中的SQL注入漏洞,这点必须要强调一下。如果你的Dify应用已经部署在生产环境,强烈建议尽快升级,安全问题不容忽视。

🔧 其他问题修复

还有一些小问题的修复也值得一提:

  • 解决了流式输出在条件分支中断的问题(这个bug困扰我好久了)
  • 修复了Trace返回空值导致页面崩溃的问题(上一篇文章中有提到我遇到这个问题时的临时解决方案)
  • 补全了一些缺失的翻译
  • 修复了Nginx模板环境变量替换的问题

这些看似小修小补,但对日常使用体验的提升还是很明显的。特别是那个流式输出的问题,之前总是在关键点断掉,用户体验很差,现在终于解决了。

📋 详细升级指南与代码

这里我把具体的升级步骤和代码整理了一下,方便大家参考。升级过程不复杂,但也要小心操作,特别是有自定义配置的用户。

Docker Compose 部署升级详解

我一直是使用docker方式进行部署,下面是我记录的升级过程:

  1. 首先,一定要备份你的配置文件和数据:
# 进入docker目录
cd /dify/docker

# 备份docker-compose配置(日期时间戳方便识别)
cp docker-compose.yaml docker-compose.yaml.bak.20250318

# 备份重要数据
mkdir -p dify-backups
tar -czvf dify-backups/dify-volumes-$(date +%Y%m%d).tar.gz volumes/

2. 然后拉取最新代码并重新部署:

# 拉取最新代码
git checkout main
git pull origin main

# 看一眼有什么变化(可选)
git log --oneline -n 10

# 停止当前服务
docker compose down

# 启动新版本(加上-d参数让它在后台运行)
docker compose up -d

# 查看服务启动状况
docker compose ps

3. 检查日志确认一切正常:

# 查看API服务日志
docker compose logs -f api

# 查看前端日志
docker compose logs -f web

有一次我在升级时遇到了数据库连接问题,检查日志发现是之前有自定义的环境变量没有正确迁移。如果你也遇到类似问题,可以对比一下旧的和新的docker-compose.yaml文件,看看有什么差异。

源码部署升级详解

源码部署的升级稍微麻烦一点,需要手动处理依赖和数据库迁移:

# 1. 停止当前运行的服务(根据你的具体部署方式可能不同)
supervisorctl stop dify-api
supervisorctl stop dify-worker
supervisorctl stop dify-web

# 2. 备份代码和数据库
pg_dump -U postgres -d dify > dify_backup_$(date +%Y%m%d).sql

# 3. 切换到新版本并更新代码
cd /dify
git fetch --all
git checkout 1.1.0  # 注意是直接切到1.1.0标签

# 4. 更新API服务依赖
cd api
poetry install

# 5. 执行数据库迁移
poetry run flask db upgrade

# 6. 更新前端依赖
cd ../web
npm install
npm run build

# 7. 重启服务
supervisorctl start dify-api
supervisorctl start dify-worker
supervisorctl start dify-web

# 8. 检查服务状态
supervisorctl status

升级后的验证

不管用哪种方式升级,完成后最好做个简单验证:

  1. 登录管理后台,看看是否正常
  2. 检查一下知识库功能,特别是新的元数据过滤
  3. 测试一下之前创建的应用是否还能正常工作
  4. 查看系统日志,确认没有异常错误

总结

Dify 1.1.0版本算是一次不大不小的更新,但带来的改进确实解决了不少实际问题。但是缺憾就是 知识检索的元数据过滤功能存在bug ....

升级过程总体来说比较顺利,大部分情况下30分钟左右就能搞定。即使你不是特别熟悉Linux和Docker,按照上面的步骤应该也能顺利完成。如果实在不放心,可以先在测试环境试一下。


如果你有什么Dify使用心得或者遇到升级问题,欢迎在评论区交流,我们一起探讨AI应用开发的最佳实践!