Dify到LangStudio迁移实践指南

如需将 Dify 应用迁移至 LangStudio,可通过本文提供的自动化脚本处理基础结构迁移,然后在此基础上进行手动配置和调试。

工作原理

迁移过程包含自动化转换与手动配置两个核心阶段。

  1. 自动化转换:自动化脚本会读取Dify DSL 文件,将其转换为 LangStudio 的应用流(Flow)格式,完成节点布局基础连接的初步迁移。

  2. 手动配置:由于两个平台的环境依赖(如 LLM 连接、知识库、MCP工具)和部分节点实现存在差异,您需要参照原 Dify 应用,在 LangStudio 中手动重新创建这些依赖,并对部分节点进行微调和测试,以确保应用功能完整、运行正确。

步骤一: 自动化转换

在 LangStudio 中导入脚本转换后的文件,您会得到一个初步的LangStudio应用流结构。

  1. Dify导出应用的 DSL 文件(通常为 .yml格式)。本文以QuestionClassifier+Knowledge+Chatbot模板搭建的Dify应用流为例,您可直接下载其DSL文件进行体验:QuestionClassifier+Knowledge+Chatbot.yml

  2. 下载迁移脚本dify_to_langstudio.py,并运行以下命令,将DSL文件转换为 LangStudio应用流。

    python dify_to_langstudio.py /path/to/dify_dsl.yml /path/to/output_dir

    其中:

    • /path/to/dify_dsl.yml:DSL文件路径。

    • /path/to/output_dir:指定的输出目录。执行成功后,可在其中找到langstudio_flow.zip文件。

  3. 登录LangStudio,进入新建应用流页面,选择OSS导入,选择应用流路径,上传刚刚生成的langstudio_flow.zip文件并选中,填写名称后即可完成创建。

    image.gif

  1. 生成的初版应用流如下。

    image

步骤二:手动配置

自动化转换后,需逐个检查并配置应用流中的节点。

开始

对应LangStudio节点:开始节点。

对于Dify中的系统变量,迁移方式如下:

  • sys.files:目前 LangStudio 仅支持单文件类型,如需要使用文件列表(Array[File]),需要通过创建多个单文件类型变量来实现。

  • sys.query:直接转换为输入字段question。

  • sys.dialogue_count/sys.conversation_id

    sys.user_id/sys.app_id/sys.workflow_id/sys.workflow_run_id :需通过LangStudio应用流全局配置中的会话变量来实现。

问题分类

对应LangStudio节点:意图识别。

  • 模型:对应模型设置。需要在LangStudio中创建和 Dify 中相同的LLM连接(参见连接配置),然后才可以在 LLM 节点上选择

  • 分类:对应多意图配置。确认分类与原Dify应用中一致。

  • 指令:对应意图识别节点的额外提示。

image.png

知识检索

对应LangStudio节点:知识库检索。

  • 需使用 LangStudio 提供的工具重新创建一个知识库,然后在节点进行配置。详情请参见知识库管理

  • 查询变量:等价于知识库检索节点的检索关键词

image.png

LLM

对应LangStudio节点:大模型

  • 模型:需在LangStudio中创建和 Dify 中相同的LLM连接(参见连接配置),然后才可以在节点上选择。

  • 提示词:LangStudio的大模型节点提示词中如需使用之前节点的输出变量,需先定义为输入变量。

  • 失败时重试:Dify 支持失败重试策略,LangStudio不支持。

  • 视觉:等价于大模型节点的视觉开关

  • 记忆:等价于大模型节点的记忆窗口开关(需先启用会话历史)。

  • 结构化输出:等价于大模型节点的输出变量定义

  • 输出变量:DifyLLM节点返回的数据包含生成内容与模型用量信息,但LangStudio仅返回模型回答正文。

image.png

直接回复

对应LangStudio节点:直接输出。

image.png

结束

对应LangStudio节点:结束节点。

DifyChatflow不支持结束节点,但LangStudio应用流必须有一个结束节点,请将逻辑结束节点连接到结束节点,以显示声明执行结束。image.png

代码执行

对应LangStudio节点:Python。

把 Dify 的 Python代码复制到 LangStudio,并增加@tool 的装饰以及输出类定义。

  • Dify根据设置的输入变量会解析成Python代码的入参,LangStudio正相反,您需要先在代码中定义好输入输出,在运行时启动的情况下,会自动解析代码生成输入输出参数。

  • LangStudio 不支持 NodeJS。

Agent

对应LangStudio节点:Agent

  • Agent策略:Dify支持多种策略,LangStudio 仅支持functioncall/react两个策略。

  • 模型:需要在LangStudio中创建和 Dify 中相同的LLM连接(参见连接配置),然后才可以在 LLM 节点上选择。

  • 工具列表:Dify 支持选择内置的多种 Tool 与 MCP,而LangStudio仅支持MCP,且需要先在 LangStudio创建 MCP 连接。

  • 指令/查询:等价于LangStudio Agent节点的提示词。

  • 记忆:等价于Agent节点的memory开关。

迭代

对应LangStudio节点:循环。

需要额外在循环节点配置一个 index 变量,实现对一个 List 对象的遍历过程,模拟迭代节点的逻辑。

文档提取器

对应LangStudio节点:文档解析

  • 选择文档解析节点的文档。

  • 模型:需要在LangStudio中创建OpenSearch 连接,用于解析文档。

条件分支

对应LangStudio节点:条件分支

需根据Dify中条件,在LangStudio中配置。

更多节点说明

更多功能说明

语音与文字转换

  • 语音转文字:LangStudio可通过增加语音识别节点实现。

  • 文字转语音:可在全局配置中设置。

    image

文件上传开关

Dify在开始节点中有默认变量sys.files接受上传文件列表,LangStudio需要预定义 File 类型的字段。如上传多个文档,需定义多个 File 类型的字段。

步骤三:联调测试

完成所有节点的配置后,进行全面的联调测试,以确保应用能够稳定运行。

  • 全流程联调:连接所有节点,通过观察日志排查变量未定义、数据未按预期传递等问题。

  • 覆盖测试:模拟真实用户会话、异常及重试场景,确保应用鲁棒性。

单击右上角运行按钮进行调试,如果配置有误,会有对应的错误提醒,请根据提示进行修正。image.png

生产应用建议

  • 优先迁移简单应用:如果您首次迁移,建议选择一个结构简单的应用练手,以熟悉完整流程。

  • 充分联调测试:自动转换只是第一步。Dify 和 LangStudio 在某些功能(如文件上传、错误重试机制)的实现上存在差异。在投产前,务必进行完整的端到端测试,特别注意检查变量传递、节点逻辑和数据格式是否符合预期。

常见问题

  • 问:为什么迁移脚本不能 100% 自动完成所有工作?

    答:因为 Dify 和 LangStudio 在环境依赖(如 API 密钥、数据库连接)和部分核心功能(如知识库实现、Python 代码规范)上存在差异。脚本负责转换与平台无关的应用结构,而环境相关的配置则需要您手动在新的目标环境中重建,以确保安全和正确性。

  • 问:如果 Dify 中的某个节点在 LangStudio 不支持怎么办?

    答:请查阅附录中的功能对照表。对于不支持的节点(如 HTTP Request),您通常可以使用 LangStudio 的“Python 节点”编写少量代码来模拟其功能,或者寻找其他节点组合来实现相同的业务逻辑。

  • 问:从 Dify 复制的 Python 代码在 LangStudio 中运行报错,该如何解决?

    答:LangStudio 的 Python 节点有特定的代码规范,例如,函数需要使用 @tool 装饰器,并且需要明确定义输出的数据结构。请参考代码执行的迁移说明进行适配。