斗鱼日报切换Dify工作流并补齐迁移文档

1. douyu插件新增Dify专用日报调用封装,按provider分流,Dify走run(inputs)并传task_type与结构化payload。\n2. 修正斗鱼日报与弹幕总结生成路径,统一改为新封装,保证Dify workflow可接收完整提示词与元信息。\n3. 新增llm后端dify_workflow_douyu_daily_report模板配置,约定workflow_output_key=text与更高超时。\n4. 斗鱼插件report_api后端切换为dify_workflow_douyu_daily_report。\n5. 新增Dify工作流设计文档,包含输入字段、节点编排、代码节点示例与上线检查步骤。
This commit is contained in:
liuwei
2026-04-20 09:13:49 +08:00
parent 23d2f2562e
commit a933881ab9
5 changed files with 220 additions and 11 deletions

View File

@@ -0,0 +1,109 @@
# Dify 工作流设计:斗鱼日报迁移
## 1. 目标
-`plugins/douyu` 的日报生成从 OpenAI-compatible 切到 Dify Workflow。
- 同一个工作流同时处理两类任务:`daily_report`(整段日报)和 `danmu_summary`(图片上半部分弹幕总结)。
- 输出字段统一为 `text`,与项目内 `workflow_output_key` 对齐。
## 2. 项目侧输入约定
斗鱼插件会向 Dify Workflow 发送以下输入(`inputs`
- `task_type`: 任务类型,值为 `daily_report``danmu_summary`
- `query`: 用户提示词(等价于 `user_prompt`
- `system_prompt`: 系统提示词
- `user_prompt`: 用户提示词
- `report_payload`: 结构化 payload对象
- `report_payload_json`: payload 的 JSON 字符串
- `room_id`: 房间号
- `anchor_day`: 报告日期,例如 `2026-04-20`
- `nickname`: 主播昵称
- `max_length`: 最大输出长度(默认 1800
## 3. Dify 工作流节点编排
按以下顺序创建节点。
1. `Start`
- 输入变量按“项目侧输入约定”逐个创建。
2. `Code` 节点(命名建议:`build_prompt`
- 作用:根据 `task_type` 统一拼装最终 prompt避免在 LLM 节点里写复杂模板。
- 输入:`task_type``system_prompt``user_prompt``report_payload_json``max_length`
- 输出:
- `final_prompt`
- `safe_max_length`
- Python 示例:
```python
import json
def main(task_type: str, system_prompt: str, user_prompt: str, report_payload_json: str, max_length: int = 1800):
task = (task_type or "").strip().lower()
length = int(max_length or 1800)
payload_text = report_payload_json or "{}"
# 统一模板:保留项目侧 prompt同时附加长度约束。
if task == "danmu_summary":
suffix = "\\n\\n请严格输出弹幕总结不要输出运营策略不要使用代码块。"
else:
suffix = "\\n\\n请严格输出完整日报正文不要输出代码块。"
final_prompt = (
f"{system_prompt or ''}\\n\\n"
f"{user_prompt or ''}\\n\\n"
f"【输出长度约束】最多 {length} 字。\\n"
f"【结构化材料】{payload_text}"
f"{suffix}"
).strip()
return {
"final_prompt": final_prompt,
"safe_max_length": length,
}
```
3. `LLM` 节点(命名建议:`report_llm`
- 模型建议:你当前 Dify 可用的大模型里,优先选长上下文、中文稳定的模型。
- 输入:`build_prompt.final_prompt`
- 参数建议:
- Temperature`0.2 - 0.4`
- Max tokens`1200 - 2000`(按模型上限调整)
4. `Code` 节点(命名建议:`normalize_output`
- 作用:做统一清洗与截断,确保最终给项目的是纯文本。
- 输入:`report_llm.text``build_prompt.safe_max_length`
- 输出:`text`
- Python 示例:
```python
def main(text: str, safe_max_length: int = 1800):
value = (text or "").strip()
max_len = int(safe_max_length or 1800)
# 清理连续空行,避免图片模板排版过疏。
while "\\n\\n\\n" in value:
value = value.replace("\\n\\n\\n", "\\n\\n")
if len(value) > max_len:
value = value[: max_len - 20].rstrip() + "\\n...(已截断)"
return {"text": value}
```
5. `End`
- 输出变量固定为 `text`
## 4. 关键配置要求
- Dify 应用类型选择 `Workflow`
- API 路径使用 `/v1/workflows/run`
- 项目侧 `workflow_output_key` 必须为 `text`
- 响应模式建议 `blocking`,避免日报场景流式拼接不完整。
## 5. 仓库内已完成的切换项
- `plugins/douyu/main.py`:新增 Dify 专用输入封装与 provider 分流调用。
- `plugins/douyu/config.toml``report_api.backend` 已切换为 `dify_workflow_douyu_daily_report`
- `config.yaml`:新增 `llm.backends.dify_workflow_douyu_daily_report` 模板配置。
## 6. 上线前检查
1.`config.yaml` 填入 Dify 工作流真实 `api_key`
2. 执行群命令:`#强制斗鱼弹幕日报 2026-04-19`
3. 观察日志是否出现 `斗鱼每日报告 LLM 生成失败`
4. 若失败,先在 Dify 控制台手动 Run确认 `End.text` 有值。