Files
Genarrative/docs/technical/CREATION_AGENT_ANCHOR_TEMPLATE_COMMONIZATION_2026-04-24.md
kdletters cbc27bad4a
Some checks failed
CI / verify (push) Has been cancelled
init with react+axum+spacetimedb
2026-04-26 18:06:23 +08:00

3.6 KiB
Raw Blame History

创作模板 Agent 聊天共用化设计2026-04-24

背景

当前创作模板的 Agent 聊天链路不一致RPG 世界共创与拼图共创已经由后端调用模型推理生成回复和锚点状态,大鱼吃小鱼仍在 SpacetimeDB 过程内用规则推断锚点并返回固定回复。这样会导致同一入口下不同模板的共创体验不一致,也会让后续新增模板重复实现聊天流程。

目标

  1. 所有创作模板的 Agent 聊天都必须由后端模型推理生成回复与下一轮锚点状态。
  2. Agent 聊天能力对齐 RPG 世界共创的功能效果:后端负责模型调用、锚点更新、进度推进与落库,前端只消费 session snapshot。
  3. 不同模板在 Agent 聊天环节只允许通过“锚点问题配置”体现差异其余提示词骨架、流式回复、JSON 解析、失败兜底流程复用。
  4. 锚点配置必须从代码逻辑中抽离为独立配置文件,新增模板时优先新增配置而不是复制聊天代码。

首版落地范围

模板 现状 本次处理
RPG 世界共创 已走模型推理,八锚点结构最完整 保持现有流程,作为统一体验标杆
拼图共创 已走模型推理,但锚点问题硬编码在 Rust 提示词中 把 5 个锚点问题迁入配置文件,提示词读取配置
大鱼吃小鱼 规则推断 + 固定回复 新增模型推理 turn读取 4 个锚点配置,提交消息后再 finalize 落库

配置设计

配置文件路径固定为:server-rs/crates/api-server/src/creation_agent_anchor_templates.json

每个模板配置包含:

  • templateId:模板唯一标识。
  • displayName:用于后端提示词,不直接展示在 UI。
  • creationGoal:模板最终要收束出的可玩结果。
  • anchorQuestions:锚点问题列表,包含 key / label / question / requiredEffect

首版配置只存“问题与效果”,不存模型输出 schema。原因是各模板 session 的锚点结构不同schema 仍由各自 domain 类型约束,避免为了统一而牺牲类型安全。

共用聊天骨架

后端新增 creation_agent_anchor_templates 模块,提供:

  1. 读取并缓存配置文件。
  2. templateId 返回模板配置。
  3. 渲染统一的“锚点问题段落”。

各模板 agent turn 共用以下模型推理约束:

  1. 系统提示词说明当前模板目标。
  2. 插入配置文件中的锚点问题段落。
  3. 插入当前锚点状态与最近聊天记录。
  4. 要求模型只输出 JSON。
  5. 流式过程中只把 replyText 增量给前端。
  6. 完整响应解析后,由模板自身 domain 类型反序列化并落库。

大鱼吃小鱼落库调整

SpacetimeDB module 仍保持数据真相源职责,但不再在 submit_big_fish_message 内生成 assistant 回复与新锚点。流程调整为:

  1. submit_big_fish_message 只写入用户消息,保留原锚点与进度。
  2. api-server 调用模型生成 replyText / progressPercent / nextAnchorPack
  3. 新增 finalize_big_fish_agent_message_turn procedure把模型结果写回 assistant 消息、锚点、进度与 last_assistant_reply
  4. 模型失败时通过 finalize 记录失败提示,避免用户消息丢失。

约束

  • 前端不新增逻辑分支,不在 UI 中展示规则说明类文本。
  • 后端 prompt、配置与 Rust 代码必须保留中文注释或中文语义说明。
  • 配置文件是后端资产,不依赖前端动态编辑。
  • 若未来模板锚点结构统一,可以再把输出 schema 迁入配置;首版不做过度抽象。