dify v1.8.1¶
为什么要使用 Dify¶
在人工智能应用开发如火如荼的今天,每一个开发者、每一个团队都面临一个核心矛盾:我们渴望快速构建功能强大、体验流畅的AI原生应用,却被复杂的工程细节、繁琐的模型调优和漫长的部署流程拖慢了脚步。我们想专注于创意和用户体验,却不得不深陷于技术实现的泥潭。
Dify 的出现,正是为了终结这种矛盾。
它不仅仅是一个工具,更是一种开发范式的革新。它让构建AI应用从“手工作坊”走向“现代化工厂”,将开发者从重复、低效的劳动中解放出来。你是否曾为了一个对话流程调试到深夜?是否曾在模型API、数据预处理、前后端联调之间疲于奔命?是否渴望快速迭代你的AI产品,却总被技术债拖累?
Dify 告诉你:是时候换一种方式了。
Dify 是什么¶
Dify 是一个开源的 LLM 应用开发平台。它旨在让开发者能够通过直观的图形界面,以“可视化”的方式快速构建、部署和管理基于大语言模型的 AI 应用,而无需深陷于繁杂的后端代码、基础设施维护和模型集成工作中。
你可以把它理解为你构建AI应用的“操作系统”或“工厂流水线”。它提供了从提示词编排、工作流设计、数据集管理到最终应用部署和监控的一站式服务,让你可以像搭积木一样组合出强大的AI功能。
入门示例¶
真实场景: 假设你是一家电商公司的开发者,需要快速为一个新上线的智能客服机器人增加“根据用户历史订单进行个性化商品推荐”的能力。
没有 Dify 时: 你需要自己编写代码调用LLM API,设计复杂的提示词来理解用户意图并查询订单数据库,处理对话状态管理,还要搭建一个后台来监控机器人的回答质量。整个过程耗时耗力。
使用 Dify 开发:
- 创建应用: 在 Dify 控制台创建一个新的“对话型”应用。
- 构建工作流: 使用可视化工作流编辑器:
- 拖入一个“用户问题”节点作为输入。
- 连接一个“代码”节点(或使用预置工具),编写一小段SQL查询,根据输入的用户名获取其历史订单。
- 将查询结果和用户当前问题一起,通过一个“提示词”节点编排成清晰的指令(例如:“用户的历史订单如下:{{orders}}。请根据用户的当前问题‘{{query}}’,为其推荐相关商品。”),发送给LLM(如GPT-4)。
- 最后用一个“回答”节点将LLM的输出返回给用户。
- 测试与部署: 在界面上直接与你的机器人对话测试。满意后,一键将其部署为API端点,或生成一个可嵌入的聊天窗口,集成到你的电商网站中。
整个过程,你几乎不需要写任何后端代码,而是通过图形化配置和少量的逻辑编排,就快速实现了一个复杂的功能,从而可以专注于优化推荐策略和用户体验本身。
Dify v1.8.1版本更新了什么¶
Dify v1.8.1 是一个以提升稳定性和开发者体验为核心的版本。它新增了从历史版本直接导出工作流DSL、支持点踩时提供具体原因等实用功能。在增强方面,优化了数据库查询性能,迁移至更现代的类型检查工具,并新增了印尼语支持。此版本还修复了若干关键问题,包括一个XSS安全漏洞和导致数据库会话“未绑定”错误的严重缺陷,为未来功能奠定了更坚实的基础。
更新日志¶
🌟 v1.8.1 版本新特性 🌟¶
欢迎来到 1.8.1 版本!🎉🎉🎉 本次发布专注于稳定性、性能改进和开发者体验增强。我们基于社区反馈构建了出色的功能并解决了关键的数据库问题。
🚀 功能¶
- 从历史记录导出 DSL:能够直接从版本历史面板导出工作流 DSL。
- 带理由的点踩功能:增强了反馈系统,允许用户在对回答点踩时提供具体原因。
- 多模态/文件:为多模态提示消息添加了文件名支持。
- 高级聊天文件处理:改进了高级聊天模式中的助手内容部件和文件处理。
⚡ 增强¶
- 数据库查询:优化了执行部分全表扫描的 SQL 查询。
- 类型检查:从 MyPy 迁移至 Basedpyright。
- 印尼语支持:新增印尼语 (id-ID) 语言支持。
- Jinja2 模板:LLM 提示的 Jinja2 模板现在支持更多变量。
🐛 修复¶
- 安全/XSS:修复了 block-input 和 support-var-input 组件中的 XSS 漏洞。
- 持久化会话管理:解决了导致出现“未绑定到会话”错误的关键数据库会话绑定问题。
- 工作流和 UI 问题:修复了工作流发布问题,解决了 UUID v7 冲突,并处理了各种 UI 组件问题,包括模态框处理和输入框改进。
Version 1.8.1 标志着平台稳定性和开发者体验向前迈出了重要一步。迁移到现代类型检查和数据库系统,结合全面的错误修复,为未来功能奠定了更坚实的基础。
衷心感谢所有使此版本成为可能的贡献者!我们欢迎您持续反馈,以帮助我们共同持续改进平台。
升级指南¶
Docker Compose 部署¶
- 备份你自定义的 docker-compose YAML 文件(可选)
- 从 main 分支获取最新代码
- 停止服务。请在 docker 目录下执行
- 备份数据
- 升级服务
源码部署¶
- 停止 API 服务器、Worker 和 Web 前端服务器。
- 从发布分支获取最新代码:
- 更新 Python 依赖:
- 然后,运行数据库迁移脚本:
- 最后,再次运行 API 服务器、Worker 和 Web 前端服务器。
变更内容¶
- feat: 数据集命中测试在文档...时检索分块详细答案
- feat: 将部分 Web API 模块迁移到 Flask-RESTX
- chore: 优化 pnpm 版本管理并从 next lint 迁移到 eslint cli
- Refactor: 用 exists() 替换 count() > 0 检查
- Fix: Web 应用认证错误
- 为 current_user 添加更多类型注解
- 修复令牌到期时间计算错误
- fix: JavaScript SDK 中的
files参数在 WebAPI 中被错误地标注为File类型 - fix: 工作流日志面板的圆角样式
- feat: 将部分 Web 聊天模块迁移到 Flask-RESTX
- refactor: 将部分 Web API 模块迁移到 Flask-RESTX
- 功能:为工作流服务添加测试容器
- 示例尝试移除 ignore
- 类型测试
- 移除额外强制转换的示例
- chore: Plugin_daemon 服务添加 Sentry 配置
- chore: 更新 supabase 和 pyjwt 版本并添加测试
- 修复追踪配置
- fix: 在聚合器节点中无法选择文件类型变量
- feat: 为 Claude Code 优化添加 MCP 配置
- refactor: 将中国 npm registry 配置重定位到基础镜像
- ✨fix: ChatMessageListApi 中的 has_more 逻辑,确保在没有更多消息时行为正确。
- 清理拼写错误的单词。
- fix: 在 Web 应用上开始新会话时输入变量的默认值为 null
- chore: 简化工作流详情逻辑
- chore: 修复部分 API 描述
- feat: 添加斜杠命令支持,优化命令选择器逻辑。
- chore: 使用 DataFrame.map 替代已弃用的 DataFrame.applymap
- chore: 清理导入中不必要的 mypy 抑制
- chore: 翻译 i18n