5.3 KiB
5.3 KiB
成员画像 Dify Workflow 设计
当前状态
- Dify app 信息已确认:
base_url:http://192.168.2.240/v1api_key:app-b2cj03DipGCIAmgBfcx7SKsTmode:workflow
- 当前接口探测结果:
GET /info正常,说明应用存在POST /workflows/run返回Workflow not published
- 结论:
- 插件侧已切为 workflow 调用模式
- 你需要在 Dify 后台把工作流发布,发布后插件才能真正调用
可直接导入的 DSL
仓库里已生成可导入文件:
你可以直接在 Dify 后台导入这个 DSL,再检查模型可用性并发布。
目标
将“群某一天的成员画像提取”从单大提示词,拆成 Dify 内部轻工作流,减少结果波动:
- 按
wxid作为唯一主键 - 不用昵称做唯一识别
- 优先提取稳定的行为信号
- 允许弱信号为空
- 输出严格 JSON 文本,供插件直接落库
建议工作流
1. Start 节点
输入变量建议如下:
query:文本,大段提示词正文,插件会直接传入chatroom_id:文本digest_date:文本,格式YYYY-MM-DDmember_labels:段落,候选成员列表,格式wxid | display_namecompressed_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..."
}
插件侧已对接的输出
插件会优先读取:
outputs.textoutputs.answeroutputs.result_jsonoutputs.result
如果你的工作流最终输出不是 text,请把
workflow_output_key = "text"
改成对应字段名。
为什么建议这样设计
相较于把所有事情都压进单次 completion:
- workflow 模式更适合后面继续拆节点
- 可以后续增加:
- JSON 清洗 Code 节点
- wxid 去重 Code 节点
- 质量分判断节点
- 插件侧已经兼容 workflow 调用,不需要再改主逻辑
你现在要做的最后一步
在 Dify 后台:
- 打开
member_context - 按上面结构补 Start / LLM / End
- 确保 End 输出字段叫
text - 点击 Publish 发布
发布完成后,插件就能直接调用。