案例拆解
Dify 长文案编写 Agent
用 Dify advanced-chat workflow 把「写长文」拆成可控的迭代循环:先大纲、再分段扩写、最后跑风格校验工具,每一步独立可观察可干预。
DifyDeepSeekWorkflowIterationStyle Checker
写长文是 LLM 的经典失败模式——飘、重复、3 段之后忘了之前说过什么。这套方案把写文流程做成 Dify advanced-chat 工作流:大纲 / 扩写 / 风格校验各成一个节点,迭代状态用类型化变量管理。
为什么不直接「写一篇 5000 字的 X」
单 prompt 让模型自己写长文 = 抛硬币。它自己决定什么时候停、哪段保持连贯、哪段展开。Workflow 路线强制 3 个属性:
- 显式状态:草稿 + 大纲 + 每段进度全是 Dify 变量,不在模型 context 里
- 每步模型可选:大纲 / 扩写 / 风格校验不必同一个模型——扩写用 DeepSeek(长上下文便宜),风格校验用更小模型
- 可恢复:某段失败重启那一段,不是从零
3 个工作流(真实 YAML)
# 循环扩充文本.yml — 主控循环
app:
mode: advanced-chat # 支持分支 / 迭代 / 代码节点
name: 循环扩充文本
dependencies:
- type: marketplace
value:
marketplace_plugin_unique_identifier: langgenius/deepseek:0.0.6@...
workflow:
conversation_variables:
- name: zishu # 已写字数预算
id: 7a9d78e7-...
nodes:
- type: iteration # 关键:Dify 原生迭代节点
input_selector: outline.sections
max_iterations: 8
body:
- type: llm # 调 DeepSeek 扩写当前段
provider: langgenius/deepseek
model: deepseek-chat
- type: code # Python 节点:累加字数 + 更新 state
- type: if-else # 字数达标 → break
3 个文件分工:
| 文件 | 角色 |
|---|---|
长文本扩展.yml | 单段扩写工具——传入「主题 + 当前段落标题 + 已写内容」,吐扩展段 |
循环扩充文本.yml | 主控 workflow——管大纲、迭代、字数预算 |
Tool-StyleChecker.yml | 风格 / 重复 / 矛盾自检工具——每写完 N 段调一次 |
价值点
- 可设计 Dify 复杂 workflow:分支 / 迭代 / 代码节点 / 类型化变量
- 状态和模型调用分离:进行中的文章是 Dify 变量,不是模型 chat context
- 按步选工具:扩写长上下文模型、校验小模型、loop 控制走 code 节点
Demo strategy
Demo 真实材料对应
互动 Demo 复演的是 循环扩充文本.yml 在一个样例故事主题上的运行轨迹:开始节点读入字数预算 → 循环里「文章扩充节点(deepseek) → 节点统计 len(history) → 条件分支 ≥ 预算」反复迭代 → 退出后 Tool-StyleChecker 输出 JSON 结论。循环、字数统计、退出条件都是真实节点行为,不调真实 Dify/DeepSeek。
Public preview can be enabled later without redesigning the case-study layout