AI 群聊模拟
WeLink 支持基于真实群聊记录,用 AI 模拟群友继续聊天。AI 会学习每个成员的说话风格、用词习惯和发言频率,生成"如果群友们继续聊下去"的模拟对话。
功能入口
在群聊详情弹窗中,点击顶部的 「AI 群聊」 Tab 即可进入。
使用方法
1. 选择参考消息数
控制 AI 读取多少条历史消息来学习群友风格:
| 选项 | 说明 | 适合场景 |
|---|---|---|
| 500 条 | 轻量模式,速度快 | 快速体验、小群 |
| 1000 条 | 推荐,平衡速度和风格准确度 | 日常使用 |
| 2000 条 | 深度模式,风格更准 | 大群、想要更真实的效果 |
| 3000 条 | 最深度,token 消耗大 | 对风格还原度要求高 |
2. 选择每次生成轮数
每轮模拟一位群友发言,可选 5/10/15/20 轮。
3. 选择参与成员
从群成员排行中勾选要参与模拟的成员(默认 top 10),取消勾选的成员不会发言。
4. 设定话题和氛围(可选)
- 话题/场景:输入具体话题(如"讨论周末去哪吃饭"),不填则自由发挥
- 聊天氛围:可选 自然 / 日常闲聊 / 激烈讨论 / 深夜吐槽 / 搞笑段子 / 正经严肃
5. 点击"开始模拟"
AI 会:
- 读取最近的群聊记录
- 分析选中成员的发言比例和说话风格
- 按概率随机选择群友,逐轮生成模拟消息
6. 加入群聊
底部输入框可以随时发消息"加入"群聊。发送后 AI 会基于你的消息内容,让群友自然回应。
7. 继续聊
点击"继续聊"可以在已有对话基础上继续模拟更多轮次。
技术原理
成员风格画像
WeLink 从历史消息中提取每个成员的量化风格特征:
- 消息长度:平均字数 → 判断是"惜字如金"还是"长篇大论"
- 表情使用频率:含表情/emoji 的消息占比
- 提问频率:含问号的消息占比 → 判断是否"爱提问"
- 语气强度:含感叹号的消息占比
- 简短回复倾向:5 字以内消息的占比
这些特征被转化为自然语言标签(如"惜字如金,回复简短、爱用表情"),与 10 条精选说话样本一起构成每个人的风格画像。
发言概率
每轮选择哪个成员发言,基于该成员在历史消息中的发言占比。例如某成员占全群发言量的 35%,那么每轮有 35% 的概率被选中发言。
多轮对话记忆
模拟过程使用 LLM 的多轮对话(multi-turn)机制:
- 每轮生成的消息作为 assistant 回复保留在对话历史中
- LLM 能"记住"已经说过什么,避免重复
- 用户发的消息也会加入对话历史,群友的后续回应会考虑用户说的内容
系统 Prompt 结构
[规则] 区分成员风格、承接上文、回应用户消息、避免重复
[成员画像]
## Saka(发言占比 35%)
性格特征:话多、爱用表情、语气强烈
说话样本:「xxx」「yyy」...
## Ødegaard(发言占比 20%)
性格特征:惜字如金、很少用表情
说话样本:「xxx」...
[最近 50 条群聊记录作为上下文]注意事项
- 需要先在设置中配置 LLM 提供商(DeepSeek / Kimi / OpenAI / Claude / Gemini / MiniMax / GLM / Grok / Ollama / 自定义)
- 消息越多,AI 学习的风格越准确,但 token 消耗也越大
- 模拟结果仅供娱乐,不代表真实群友的真实想法
- 支持所有 WeLink 已适配的 LLM 提供商
- 模拟过程中可随时点击"停止"
API 接口
POST /api/ai/group-sim
发起群聊模拟,返回 SSE 流。
请求体:
json
{
"group_username": "xxx@chatroom",
"message_count": 1000,
"profile_id": "profile-uuid",
"user_message": "可选,用户加入群聊的消息",
"history": [
{ "speaker": "Saka", "content": "之前模拟的消息" }
],
"rounds": 10,
"topic": "可选,话题/场景设定,如:讨论周末去哪吃饭",
"mood": "可选,聊天氛围:casual / heated / latenight / funny / serious",
"members": ["Saka", "Ødegaard", "Saliba"]
}| 字段 | 类型 | 说明 |
|---|---|---|
group_username | string | 群聊 username(必填) |
message_count | number | 参考消息条数,默认 1000 |
profile_id | string | LLM 配置 ID |
user_message | string | 用户加入群聊的消息(可选) |
history | array | 已有的模拟对话历史(前端维护) |
rounds | number | 每次生成轮数,默认 5,最多 20 |
topic | string | 话题/场景设定(可选,不填则自由发挥) |
mood | string | 聊天氛围(可选):casual=日常、heated=激烈、latenight=深夜、funny=搞笑、serious=严肃 |
members | string[] | 指定参与成员名单(可选,为空则自动取 top 10) |
SSE 响应:
每条 data: 为一个 JSON 对象:
json
{"speaker": "Saka", "content": "模拟的消息内容"}最后一条:
json
{"done": true}