🚀 将自然语言需求自动转换为可执行的 Dify 工作流
English | 中文文档
Dify.ai 是一个强大的 LLMOps 平台,提供了丰富的工作流编排功能。通过 Dify.ai,您可以:
- 可视化编排复杂的 AI 工作流
- 集成多种 LLM 模型和工具
- 快速部署和监控 AI 应用
本项目 Auto Dify 是一个智能工作流生成工具,能够根据用户的自然语言描述,自动生成符合 Dify 平台规范的工作流配置文件。借助大型语言模型的能力,它可以将简单的文本需求转换为复杂的工作流应用,大大降低了工作流开发的门槛。
注意:当前版本兼容 Dify 0.10.1,其他版本将在未来支持。
- 🧠 智能工作流生成:根据自然语言描述自动生成完整工作流
- 🧩 多节点类型支持:包括Start、LLM、Code、Template、End等多种节点类型
- 📊 自动布局:智能排列节点位置,生成美观的工作流图
- 🔄 Dify兼容:生成的YAML文件完全符合Dify平台规范(v0.10.1),可直接导入使用
- ⚙️ 灵活配置:多层次配置管理,支持自定义模型和参数
- 🛡️ 类型安全:使用Pydantic进行数据验证,确保生成的工作流配置正确
- 🔍 健壮的JSON解析:多层次JSON解析策略,确保即使大模型返回格式不正确的JSON也能正确处理
- 🐞 完善的调试机制:支持保存中间生成内容,便于分析和优化工作流生成过程
# 克隆仓库
git clone https://github.com/Chuyun-Shen/auto_dify.git
cd auto_dify
# 安装依赖
pip install -r requirements.txt
python main.py --requirement "创建一个简单工作流,接收用户输入的名字,使用LLM生成一句个性化的问候语,然后返回这句问候语。" --output output/greeting_workflow.yml
from workflow_generator import WorkflowGenerator
# 创建工作流生成器
generator = WorkflowGenerator(api_key="YOUR_API_KEY", model_name="my-gpt-4o")
# 用户需求
user_requirement = """
我需要一个工作流,可以接收两个数字作为输入,然后使用LLM生成一个计算这两个数字之和的Python函数,
接着执行这个函数,最后将结果格式化输出。
"""
# 生成工作流
generator.generate_workflow(user_requirement, "output/generated_workflow.yml")
python main.py --requirement "创建一个情感分析工作流,包含以下功能:接收用户输入的文本,分析文本的情感倾向(积极、消极或中性),根据LLM的分析结果,计算一个1-10的情感得分,格式化输出结果,包含情感类别和得分,返回格式化后的结果。" --output output/sentiment_workflow.yml
python main.py --requirement "创建一个问答工作流,接收用户的问题,使用LLM生成回答,然后返回格式化的回答。" --output output/qa_workflow.yml
配置加载 → 参数解析 → 资源准备 → 工作流生成 → YAML输出
工作流生成器采用多层次配置管理机制,从配置加载到YAML生成的完整流程如下:
- 配置初始化
- 加载分层配置文件
- 解析命令行参数
- 获取API密钥和用户需求
- 工作流生成
- 调用LLM生成工作流描述
- 解析LLM返回的JSON结构
- 生成节点和连接关系
- 应用布局算法
- 输出处理
- 将工作流转换为YAML格式
- 保存到指定路径
工作流生成器提供了完善的调试机制,可以保存工作流生成过程中的中间内容,便于分析和优化。
在 config/custom.yaml
中可以配置调试选项:
# 调试配置
debug:
enabled: false # 默认不启用调试模式,可通过命令行参数 --debug 启用
dir: debug/ # 调试信息保存目录
save_options: # 调试信息保存选项
prompt: true # 保存提示词
response: true # 保存大模型响应
json: true # 保存JSON解析过程
workflow: true # 保存工作流生成过程
case_id_format: "%Y%m%d_%H%M%S_%f" # 运行ID格式,使用datetime.strftime格式
通过命令行参数 --debug
启用调试模式:
python main.py --debug --requirement "创建一个简单的问候工作流" --output output/test_debug.yml
node_types
目录是本项目的核心组件之一,它定义了与Dify平台前端完全兼容的Python类型系统。这些类型定义确保生成的工作流可以无缝导入到Dify平台并正常运行。
-
类型映射关系:
- Python类型与Dify前端TypeScript类型一一对应
- 例如:
BlockEnum
枚举在两端保持一致,确保节点类型标识符完全匹配 - 所有节点类型都继承自
CommonNodeType
基类,与Dify前端的类型结构保持一致
-
主要节点类型:
StartNodeType
:工作流的入口节点,定义输入参数LLMNodeType
:大语言模型节点,包含模型配置、提示词模板等CodeNodeType
:代码执行节点,支持Python、JavaScript等语言TemplateTransformNodeType
:模板转换节点,用于格式化输出EndNodeType
:工作流的出口节点,定义输出参数- 以及其他高级节点类型(如条件判断、知识检索等)
在使用代码节点时,需要特别注意以下规则:
-
函数参数名称必须与变量名称一致:
- 代码节点中定义的
main
函数的参数名称必须与该节点中定义的变量名称完全一致 - 例如,如果代码节点定义了一个名为
input_text
的变量,那么函数参数也必须命名为input_text
- 正确示例:
def main(input_text): ...
,其中input_text
是该代码节点中定义的变量名
- 代码节点中定义的
-
返回值字典键名必须与输出变量名称一致:
- 代码节点返回的字典键名必须与该节点定义的输出变量名称完全一致
- 例如,如果代码节点定义了一个名为
sentiment_score
的输出变量,那么返回字典中必须包含键sentiment_score
- 正确示例:
return {"sentiment_score": score, "sentiment_category": category}
-
自动修复机制:
- 工作流生成器会自动检测并尝试修复函数参数名称不匹配的问题
- 如果发现函数参数名称与变量名称不一致,会自动替换函数参数名称并给出警告
- 这确保了即使大模型生成的代码不完全符合规范,工作流也能正常运行
遵循这些规则可以确保生成的工作流在 Dify 平台上正常运行,避免因参数名称不匹配导致的运行时错误。
python main.py [options]
参数说明:
--api-key
:大模型API密钥--api-key-path
:大模型API密钥文件路径--model
:使用的模型名称(默认为配置中指定的默认模型)--output
:输出文件路径(默认为output/generated_workflow.yml)--requirement
:用户需求描述(如果不提供,将使用默认需求)--debug
:启用调试模式,保存中间生成内容到debug目录
在 config
目录下创建 custom_config.yaml
文件来覆盖默认配置:
# 覆盖默认模型设置
workflow_generator:
models:
default: my-custom-model
available:
my-custom-model:
model_name: gpt-4-turbo
base_url: https://api.example.com/v1
key_path: ./my_api_key
max_tokens: 8192
# 自定义工作流节点配置
workflow_nodes:
llm:
provider: openai
model: gpt-4
max_tokens: 8192
temperature: 0.5
mode: chat
# 自定义输出配置
output:
dir: my_workflows/
filename: custom_workflow.yml
dify-workflow-generator/
├── config/ # 配置文件目录
│ ├── default.yaml # 默认配置
│ ├── custom.yaml # 自定义配置(可选)
│ └── custom_config.yaml # 高优先级配置(可选)
├── workflow_generator/ # 工作流生成器包
│ ├── __init__.py
│ ├── workflow_generator.py # 主类
│ ├── generators/ # 生成器
│ │ ├── __init__.py
│ │ ├── node_generator.py # 节点生成器
│ │ ├── edge_generator.py # 边生成器
│ │ └── layout_engine.py # 布局引擎
│ ├── models/ # 数据模型
│ │ ├── __init__.py
│ │ └── workflow_description.py # 工作流描述模型
│ └── utils/ # 工具函数
│ ├── __init__.py
│ ├── llm_client.py # 大模型客户端
│ ├── config_manager.py # 配置管理器
│ ├── debug_manager.py # 调试管理器
│ ├── prompts.py # 提示词构建
│ └── type_mapper.py # 类型映射
├── node_types/ # 节点类型定义(与Dify前端对应)
│ ├── __init__.py # 导出所有节点类型
│ ├── common.py # 通用类型定义
│ ├── start.py # 开始节点
│ ├── llm.py # LLM节点
│ ├── code.py # 代码节点
│ ├── template_transform.py # 模板节点
│ ├── end.py # 结束节点
│ └── ... # 其他节点类型
├── debug/ # 调试信息目录
├── output/ # 输出目录
├── main.py # 主程序
├── requirements.txt # 依赖
└── README.md # 说明文档
我们欢迎各种形式的贡献,无论是新功能、文档改进还是bug修复!
- Fork 本仓库
- 创建您的特性分支 (
git checkout -b feature/amazing-feature
) - 提交您的更改 (
git commit -m 'Add some amazing feature'
) - 推送到分支 (
git push origin feature/amazing-feature
) - 打开一个 Pull Request
MIT
在使用工具前,需要进行一些基本配置:
-
API密钥设置:
- 创建一个文本文件(默认为项目根目录下的
openai_key
),将你的API密钥写入该文件。 - 或者使用
--api-key
参数直接提供API密钥。 - 或者使用
--api-key-path
参数指定API密钥文件的路径。
- 创建一个文本文件(默认为项目根目录下的
-
配置文件:
- 项目使用分层配置系统,配置文件位于
config/
目录。 default.yaml
:包含默认配置,通常不需要修改。custom.yaml
:用于个人自定义配置,会覆盖默认配置。custom_config.yaml
:高优先级配置,会覆盖上述两个配置。
- 项目使用分层配置系统,配置文件位于
基本配置示例(config/custom.yaml
):
# 工作流生成器配置
workflow_generator:
# 模型配置
models:
# 默认使用的模型
default: my-gpt-4o
# 可用模型列表
available:
# 自定义模型配置
my-gpt-4o:
model_name: gpt-4o
base_url: https://api.openai.com/v1
key_path: ./openai_key # API密钥文件路径
max_tokens: 4096
生成的工作流文件(YAML格式)可以轻松导入到 Dify 平台中:
- 登录到 Dify.ai 平台
- 进入应用管理页面"工作室"
- 点击左上角的"导入 DSL 文件"按钮
- 选择并上传生成的 YAML 文件
- 导入成功后,您可以在可视化界面中查看和编辑工作流
导入后,您可以:
- 在可视化界面查看生成的工作流结构
- 调整节点配置和连接关系
- 测试工作流的运行效果
- 部署工作流到生产环境
更多 Dify 平台的使用说明,请参考 Dify 官方文档。