Files
abot/plugins/member_context/DIFY_WORKFLOW.md
2026-04-08 10:27:14 +08:00

5.3 KiB
Raw Permalink Blame History

成员画像 Dify Workflow 设计

当前状态

  • Dify app 信息已确认:
    • base_url: http://192.168.2.240/v1
    • api_key: app-b2cj03DipGCIAmgBfcx7SKsT
    • mode: workflow
  • 当前接口探测结果:
    • GET /info 正常,说明应用存在
    • POST /workflows/run 返回 Workflow not published
  • 结论:
    • 插件侧已切为 workflow 调用模式
    • 你需要在 Dify 后台把工作流发布,发布后插件才能真正调用

可直接导入的 DSL

仓库里已生成可导入文件:

你可以直接在 Dify 后台导入这个 DSL再检查模型可用性并发布。

目标

将“群某一天的成员画像提取”从单大提示词,拆成 Dify 内部轻工作流,减少结果波动:

  1. wxid 作为唯一主键
  2. 不用昵称做唯一识别
  3. 优先提取稳定的行为信号
  4. 允许弱信号为空
  5. 输出严格 JSON 文本,供插件直接落库

建议工作流

1. Start 节点

输入变量建议如下:

  • query:文本,大段提示词正文,插件会直接传入
  • chatroom_id:文本
  • digest_date:文本,格式 YYYY-MM-DD
  • member_labels:段落,候选成员列表,格式 wxid | display_name
  • compressed_chat:段落,压缩后的群聊天文本

说明:

  • 当前插件已按上述字段调用 workflow
  • 为了兼容未来扩展,query 仍会保留

2. LLM 节点:群日画像批量提取

模型建议:

  • 上下文长度足够大的模型
  • 响应稳定、结构化能力强的模型

系统提示词建议:

你是微信群后台的成员日行为证据提取器。

任务:
根据给定的一天群聊记录,只按 wxid 识别成员,输出每个成员当天的结构化行为观察。

关键规则:
1. wxid 是唯一标识。display_name 仅用于展示,不用于身份判定。
2. 每个 wxid 最终只能输出一条记录,严禁重复输出同一个 wxid。
3. 请先按 wxid 汇总该成员全天发言,再提取结果。
4. 即使成员发言以短句为主,只要样本量足够,也必须尽量提炼:
   - topics
   - discussion_scenarios
   - skill_signals
   - problem_solving_signals
   - value_preferences
   - habit_signals
   - expression_markers
   - engagement_traits
   - reply_entry_points
   - social_role
   - temperament_signal
   - summary_text
5. identity_clues、family_signals、life_stage_signals 没有明确公开证据时允许为空。
6. 不允许因为“短句较多”就统一输出空数组和通用摘要。
7. 不做心理诊断、不做隐私猜测、不把玩笑当事实。
8. 只能输出候选成员列表中的 wxid。

输出要求:
- 只输出严格 JSON不要 markdown不要解释。
- 输出格式:
{
  "members": [
    {
      "wxid": "成员wxid",
      "display_name": "显示名",
      "topics": ["主题1"],
      "discussion_scenarios": ["场景1"],
      "identity_clues": ["身份线索1"],
      "skill_signals": ["技能信号1"],
      "problem_solving_signals": ["处理方式1"],
      "family_signals": ["家庭线索1"],
      "life_stage_signals": ["阶段线索1"],
      "value_preferences": ["价值偏好1"],
      "interaction_style": "一句中文",
      "message_pattern": "一句中文",
      "response_style_hint": "一句中文",
      "habit_signals": ["习惯1"],
      "expression_markers": ["表达标记1"],
      "engagement_traits": ["参与特征1"],
      "reply_entry_points": ["接话点1"],
      "decision_style": "一句中文",
      "social_role": "一句中文",
      "reply_taboos": ["避坑1"],
      "temperament_signal": "一句中文",
      "summary_text": "不超过100字",
      "representative_messages": ["原话1", "原话2"],
      "confidence": 0.95
    }
  ]
}

用户提示词建议:

群ID: {{chatroom_id}}
日期: {{digest_date}}

候选成员:
{{member_labels}}

压缩后的群聊记录:
{{compressed_chat}}

3. End 节点

输出变量建议:

  • text:直接输出 LLM 节点的文本结果

说明:

  • 插件默认读取 workflow outputs 中的 text
  • 如果你在 Dify 里把输出字段换成别的名字,例如 result_json,需要同步修改插件配置中的 workflow_output_key

插件侧已对接的输入

当前插件发给 workflow 的 inputs 如下:

{
  "query": "完整提示词文本",
  "chatroom_id": "45317011307@chatroom",
  "digest_date": "2026-04-01",
  "member_labels": "wxid_a | 张三\nwxid_b | 李四",
  "compressed_chat": "【09:20】...\n..."
}

插件侧已对接的输出

插件会优先读取:

  1. outputs.text
  2. outputs.answer
  3. outputs.result_json
  4. outputs.result

如果你的工作流最终输出不是 text,请把

workflow_output_key = "text"

改成对应字段名。

为什么建议这样设计

相较于把所有事情都压进单次 completion

  • workflow 模式更适合后面继续拆节点
  • 可以后续增加:
    • JSON 清洗 Code 节点
    • wxid 去重 Code 节点
    • 质量分判断节点
  • 插件侧已经兼容 workflow 调用,不需要再改主逻辑

你现在要做的最后一步

在 Dify 后台:

  1. 打开 member_context
  2. 按上面结构补 Start / LLM / End
  3. 确保 End 输出字段叫 text
  4. 点击 Publish 发布

发布完成后,插件就能直接调用。