196 lines
5.3 KiB
Markdown
196 lines
5.3 KiB
Markdown
# 成员画像 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
|
||
|
||
仓库里已生成可导入文件:
|
||
|
||
- [member_context_workflow.yml](/d:/learn/abot/plugins/member_context/member_context_workflow.yml)
|
||
|
||
你可以直接在 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 节点:群日画像批量提取
|
||
|
||
模型建议:
|
||
- 上下文长度足够大的模型
|
||
- 响应稳定、结构化能力强的模型
|
||
|
||
系统提示词建议:
|
||
|
||
```text
|
||
你是微信群后台的成员日行为证据提取器。
|
||
|
||
任务:
|
||
根据给定的一天群聊记录,只按 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
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
用户提示词建议:
|
||
|
||
```text
|
||
群ID: {{chatroom_id}}
|
||
日期: {{digest_date}}
|
||
|
||
候选成员:
|
||
{{member_labels}}
|
||
|
||
压缩后的群聊记录:
|
||
{{compressed_chat}}
|
||
```
|
||
|
||
### 3. End 节点
|
||
|
||
输出变量建议:
|
||
|
||
- `text`:直接输出 LLM 节点的文本结果
|
||
|
||
说明:
|
||
- 插件默认读取 workflow outputs 中的 `text`
|
||
- 如果你在 Dify 里把输出字段换成别的名字,例如 `result_json`,需要同步修改插件配置中的 `workflow_output_key`
|
||
|
||
## 插件侧已对接的输入
|
||
|
||
当前插件发给 workflow 的 inputs 如下:
|
||
|
||
```json
|
||
{
|
||
"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`,请把
|
||
|
||
```toml
|
||
workflow_output_key = "text"
|
||
```
|
||
|
||
改成对应字段名。
|
||
|
||
## 为什么建议这样设计
|
||
|
||
相较于把所有事情都压进单次 completion:
|
||
|
||
- workflow 模式更适合后面继续拆节点
|
||
- 可以后续增加:
|
||
- JSON 清洗 Code 节点
|
||
- wxid 去重 Code 节点
|
||
- 质量分判断节点
|
||
- 插件侧已经兼容 workflow 调用,不需要再改主逻辑
|
||
|
||
## 你现在要做的最后一步
|
||
|
||
在 Dify 后台:
|
||
|
||
1. 打开 `member_context`
|
||
2. 按上面结构补 Start / LLM / End
|
||
3. 确保 End 输出字段叫 `text`
|
||
4. 点击 Publish 发布
|
||
|
||
发布完成后,插件就能直接调用。
|