摘要:本文介绍了 Dify.AI v0.4.1 版本的核心更新。本次发布全面重构了模型运行时(Model Runtime)架构,弃用 LangChain,采用更轻量、解耦且贴合业务逻辑的自定义实现。新架构简化了配置流程,统一了模型接口,并大幅提升了代码可维护性与开源贡献友好度。
Dify.AI v0.4.1 发布:模型运行时架构重构
今天,我们很高兴与大家分享代码库的重大更新。我们正式推出了全新的 Model Runtime 架构,全面替换了此前基于 LangChain 构建的模型接口。此次重构旨在简化开发流程,提升代码库的健壮性,并降低社区贡献门槛。接下来,我们将详细解读这次更新的核心内容及其重要意义。

Model Runtime 为开发者提供了一套统一的接入方案。无论是自定义模型还是预定义模型,均可无缝集成。
告别旧架构
我们决定告别 LangChain。它曾是一款非常优秀的脚手架工具,帮助我们快速交付了诸多产品功能。但如今,到了分道扬镳的时候。原因何在?LangChain 的更新往往带有不可预测性,频繁引入破坏性变更,严重打乱了我们的开发节奏。此外,其底层结构较为脆弱,与 Dify 的产品逻辑契合度不高。随着我们计划开放流水线中的部分环节以支持深度定制,LangChain 的组件限制逐渐显现。我们必须转向一个更贴合业务、更具灵活性的框架。简而言之,旧架构已成为发展的瓶颈。
迎接新架构
全新的 Model Runtime 彻底解决了上述问题。这并非简单的界面优化,而是一次彻底的重构,带来以下显著优势:
- 更少的依赖:大幅降低对外部第三方包的依赖,避免代码冲突。
- 更高的契合度:Model Runtime 专为 Dify 的开发需求量身打造。修复底层问题更少,开发新功能的时间更多。
- 更友好的开源生态:结构更清晰,贡献指南更完善。我们将为开源社区铺平道路,吸引更多开发者共同参与,推动开源 AI 的发展。
核心变更详解

我们重点优化了以下几个关键领域:
前端解耦:模型现在可以在后端完全定义和配置,无需修改前端代码。这将模型逻辑与 UI 彻底分离,代码模块化程度更高,贡献者的开发周期也更短。
统一接口:为所有模型类型提供单一、精简的交互接口。无论是文本 Embedding 还是推理任务,均可通过一致的方式调用。
class AnthropicLargeLanguageModel(LargeLanguageModel):
# _invoke() 是与所有模型交互的统一入口。
# 对于 LLM,这通常以文本生成的形式发生。
def _invoke(self):
# 处理输入/输出转换、流式输出、Token 计数等...
# 具体逻辑取决于所选模型
# ...其他函数
YAML 简化配置:我们定义了一套自定义 DSL,用于声明式配置 Provider 和模型。这为代码库带来了清晰的结构,并实现了新增模型的标准化管理。Provider 的声明示例如下,可读性大幅提升:
provider: anthropic
description:
en_US: Anthropic’s powerful models, such as Claude 2 and Claude Instant.
supported_model_types:
- llm
# ...
credential_form_schemas:
- variable: anthropic_api_key
label:
en_US: API Key
type: secret
input: # ...
# ...other variables
此外,本次更新还包含多项重要升级:
- 全面支持兼容 OpenAI API 的所有模型。
- 新增大量内置模型,包括 Google Gemini。
- 模型调用时返回更详细的错误信息。
- 针对内置模型 Provider,我们整理了完整的支持模型列表及配置指南,帮助用户快速了解 Dify 的兼容范围。
- 完全开放模型参数的暴露与访问权限。

更完善的日志记录:新增 LangSmith 集成,大幅提升调试与日志追踪体验。
如果您希望将自定义模型或 Provider 接入 Dify,请参阅我们的贡献指南。若您希望快速上手,可直接从已支持的 15+ 模型 Provider(包括 OpenAI、Anthropic、Azure 等)中选择,即刻开始实验。
总结
此次架构重构是我们迈出的重要一步。我们的目标是构建一套健壮、高度可定制且面向未来的底层架构。我们非常期待此次更新能带来哪些新可能,更期待看到社区开发者踊跃贡献。
请持续关注后续更新。一如既往,祝大家开发顺利 🛠️