AI群聊的三种技术实现:为什么我们选择了这条路

Reverie Team

Reverie Team

12/9/2025

#技术架构#AI工程#群聊#技术深度解析
AI群聊的三种技术实现:为什么我们选择了这条路

一切的起点

"为什么不能像其他应用那样,每个角色一条单独的消息?"

我们经常收到这个问题。说实话,这是个好问题。大多数聊天应用都是一人一条消息气泡,那我们的群聊为什么要把多个角色的回复放在一条消息里?

答案不是偷懒,也不是疏忽。这是一个深思熟虑的工程选择,源于我们对三种截然不同的技术方案进行了数月的实验。

三种技术架构

构建多角色 AI 对话时,每个平台都面临同样的抉择。实现方式只有三种,每种都对成本、质量和用户体验有着深远影响。

1. 结构化输出(JSON 数组)

行业内最常见的做法。让 AI 返回一个 JSON 数组,每个元素代表一个角色的回复:

[
  {
    "speaker": "夏洛克",
    "emotion": "好奇",
    "content": "有意思。这泥土的纹路说明..."
  },
  {
    "speaker": "华生",
    "emotion": "困惑",
    "content": "福尔摩斯,你什么意思?"
  }
]

优点:

  • 单次 API 调用,积分只消耗一次
  • 便于解析,可以渲染成独立的消息气泡
  • 可以包含丰富的元数据(情绪、动作、场景描写)
  • 适合生成用户回复建议

现实情况:

  • 只有昂贵的高级模型(Claude、GPT-4)能可靠地支持结构化输出——大多数平价模型难以保持一致的 JSON 格式
  • 格式错误会导致整个回复失败
  • JSON 格式指令会消耗 token,挤占创作空间
  • 模型被格式"束缚"——创意往往受限
  • 内容限制变得更严格:结构化输出模式往往会触发更激进的内容过滤,让成人向或边缘化的角色扮演场景更容易失败
  • 上下文污染:对话历史里充满了 JSON 结构
  • 错误处理复杂:流式输出时解析失败怎么办?

大多数第三方角色对话平台都采用这种方案。能用,但限制是真实存在的。

2. 工具调用(Agent 模式)

最"智能"的方案。AI 自主决定下一个该说话的角色,调用工具指定角色,然后生成该角色的回复。如此循环直到场景完整。

AI 思考:"华生应该对这个发现做出反应"
→ 调用工具:next_speaker("华生")
→ 生成华生的回复
→ AI 思考:"现在夏洛克会插话"
→ 调用工具:next_speaker("夏洛克")
→ 生成夏洛克的回复
...

优点:

  • 对话流程最自然
  • AI 完全掌控场景节奏
  • 每个角色的回复都能获得专注的生成质量
  • 天然产出独立的消息

现实情况:

  • 多次 API 调用 = 多次积分消耗
  • 延迟累积:N 个角色 = N 次网络往返
  • 只有高端模型(Claude、GPT-4)能可靠地处理工具调用——便宜的模型经常失败或产生幻觉式的工具调用
  • 跨调用的状态管理很复杂
  • 有无限循环或异常终止的风险
  • 调试噩梦:问题难以复现

这是纸面上最美好的"梦想架构",但在规模化运营时会带来巨大的运维压力。

3. 自由文本输出(我们当前的选择)

最简单的方案。让 AI 自然地写出场景,由它决定如何在流畅的文字中呈现多个角色:

夏洛克身体前倾,目光锐利。"有意思。这泥土的纹路
说明我们的嫌疑人是从东边过来的。"

华生皱起眉头。"福尔摩斯,你什么意思?这不就是泥巴吗。"

"不就是泥巴?"夏洛克微微一笑。"亲爱的华生,
这世上没有什么是'不就是'的。"

优点:

  • 兼容所有 AI 模型,无需特殊功能支持
  • 创作自由度最高——AI 自然书写
  • 干净的上下文:对话历史读起来像小说
  • 流式输出体验极佳
  • 单次调用,成本可预测
  • 实现和维护最简单

现实情况:

  • 所有角色在一个消息块里
  • 无法单独重新生成某个角色的回复
  • UI 灵活性受限
  • 习惯聊天式气泡的用户可能会困惑

我们是踩过坑的

这是我们之前没有公开分享过的:我们群聊的第一个版本用的就是工具调用。

我们曾经相信"梦想架构"。AI 决定谁来发言,每个角色获得专属的生成质量,漂亮的独立消息气泡。它很优雅,很智能。但在生产环境中,它是一场灾难。

用户遭遇了不可预测的成本——有时同样的对话要多花 3 倍的积分。响应时间也随着 AI 决定让多少角色参与而剧烈波动。便宜的模型会产生幻觉式的工具调用,或者陷入死循环。我们的错误日志里塞满了从未预料到的边缘情况。

在几个月的修补和变通之后,我们做出了艰难的决定:从头开始,用自由文本输出重建。这感觉像是退步。但有时候,"不那么智能"的方案反而是更明智的选择。

我们为什么做出这个选择

在充分测试了三种方案——并把其中一种推上了生产环境——之后,我们为群聊选择了自由文本输出。原因如下:

稳定性优先 - 结构化输出会不可预测地失败。当群聊在对话中途崩溃时,用户不会在乎独立气泡了——他们只想让它正常工作。自由文本永远不会因为格式问题而失败。

质量优先 - 格式约束会微妙地降低 AI 的创造力。对比输出后我们发现,自由文本始终能产出更生动、更自然的角色互动。AI 可以专注于讲故事,而不是 JSON 语法。

成本可预测 - Agent 模式按角色按回复收费。一个五角色场景可能比预期贵 5-10 倍。用户应该享有可预测的定价。

通用兼容 - 我们支持多种 AI 模型。不是所有模型都同样支持结构化输出或工具调用。自由文本到处都能用,给用户更多模型选择。

我们接受的取舍

是的,我们牺牲了"每个角色一个气泡"的体验。但我们获得了:

  • 坚如磐石的可靠性
  • 更好的创作质量
  • 可预测的成本
  • 更广泛的模型支持
  • 更干净的对话历史

对于群聊角色扮演来说,沉浸感最重要,我们相信这个取舍是值得的。

即将推出:故事模式

这里有个令人兴奋的消息:我们正在构建一个使用结构化输出的全新故事模式。

为什么采用不同的方案?因为故事模式有不同的优先级:

  • 精确的场景控制比自由创作更重要
  • 丰富的元数据(镜头角度、音乐提示、章节划分)能增加价值
  • 格式更可预测(清晰的章节/场景结构)
  • 用户期待更"精心制作"的体验

不同的使用场景需要不同的架构。我们不迷信任何单一方案——我们选择最能服务用户的那个。

诚实的真相

多角色 AI 对话没有完美的解决方案。每种方案都在用一些有价值的东西换取另一些。

那些展示独立气泡的平台?他们很可能在用结构化输出,并接受其局限性。那些有更"智能"场景控制的平台?大概是工具调用,伴随着更高的成本和延迟。

我们选择了优先考虑用户最看重的东西的道路:可靠、有创意、成本可控的群聊角色扮演。

独立气泡的体验确实不错。但不值得牺牲所有其他东西。

我们在探索的方向

我们正在实验混合方案:

  • 后处理解析:使用轻量模型在生成后将自由文本拆分成角色片段
  • 可选结构化模式:让高级用户在需要精确控制时选择结构化输出
  • 智能场景检测:自动识别自然的分割点,提供更好的 UI 呈现

目标不是找到"正确"答案,而是在保持有效方案的同时持续改进体验。


对群聊应该如何运作有想法?我们很想听听你的意见。

准备体验动态AI对话了吗?

加入成千上万的用户,一起探索无限个性和引人入胜的互动体验。

AI群聊的三种技术实现:为什么我们选择了这条路 | Reverie