6.2 KiB
6.2 KiB
Custom World Agent 大模型对话恢复设计
日期:2026-04-22
1. 背景
当前 Rust server-rs 里的 Custom World Agent 聊天链路已经接上了会话、消息、operation 与 SSE 外壳,但并没有真正调用大模型生成聊天回复。
现状问题:
submit_custom_world_agent_message在spacetime-module中直接写死 assistant 回复。/api/runtime/custom-world/agent/sessions/:sessionId/messages/stream只是把最后一条 assistant 文案一次性回放给前端。- 旧
server-node已经实现过完整的大模型单轮推理链,包括:- 动态状态识别
- 原样提示词拼装
- 流式
replyText截取 - 回合结束后的 anchor / creator intent / readiness / clarification / suggested action 派生
用户本轮要求是:
- 恢复 Agent 聊天对话使用大模型推理生成回复。
- 把之前 Node 的提示词和后台流程恢复到 Rust 后端。
- 禁止修改提示词正文。
2. 目标
本轮只恢复 Custom World Agent 聊天主链的真实推理闭环:
- 用户发消息后,assistant 回复必须来自大模型。
- SSE
reply_delta必须来自真实流式推理增量。 - 回合结束后要把 session 派生状态一次性回写到 SpacetimeDB。
- 旧 Node
eightAnchorPrompts.ts的提示词正文保持原样,不改中文文案。
3. 约束
3.1 SpacetimeDB 约束
SpacetimeDB reducer / procedure 必须保持确定性,因此:
- 禁止在
spacetime-module内直接发起 LLM 网络请求。 - LLM 调用必须放在
api-server。 spacetime-module只负责提交消息、记录 operation、回写最终结果。
3.2 提示词冻结约束
本轮严格复用旧 Node 的以下提示词内容:
server-node/src/prompts/eightAnchorPrompts.tsBASE_SYSTEM_PROMPTGLOBAL_HARD_RULESMODE_RULESUSER_SIGNAL_RULESQUICK_FILL_EXTRA_RULESSTATE_INFERENCE_SYSTEM_PROMPTSTATE_INFERENCE_OUTPUT_CONTRACTOUTPUT_CONTRACT_REMINDER
允许做的只有:
- Rust 字符串字面量搬运
- Rust 函数式重组
- Rust/Serde 语法等价改写
不允许:
- 修改提示词正文
- 调整规则措辞
- 替换成新的 prompt 版本
4. 目标链路
恢复后的消息链路改成两阶段:
4.1 阶段 A:提交消息
submit_custom_world_agent_message
职责:
- 校验 session / message / operation id。
- 只写入 user message。
- 创建
process_messageoperation。 - operation 初始状态写为
running。 - 不直接写 assistant message。
- 不直接推进 progress / stage / current_turn。
4.2 阶段 B:完成单轮推理
finalize_custom_world_agent_message_turn
职责:
- 校验 session 与 operation 所属关系。
- 追加 assistant message。
- 回写 session 聚合字段:
current_turnprogress_percentstagefocus_card_idanchor_content_jsoncreator_intent_jsoncreator_intent_readiness_jsonanchor_pack_jsondraft_profile_jsonlast_assistant_replypending_clarifications_jsonsuggested_actions_jsonrecommended_replies_jsonquality_findings_jsonasset_coverage_json
- 更新对应 operation 为
completed或failed。
5. api-server 责任
api-server 新增 Custom World Agent turn service,负责:
- 读取当前 session 快照。
- 按旧 Node 逻辑构造 chat history。
- 先走“动态状态识别”推理。
- 再走“正式单轮输出”推理。
- 流式阶段从 JSON 片段里增量截取
replyText,持续往 SSE 发reply_delta。 - 回合结束后派生:
- creator intent
- readiness
- pending clarifications
- suggested actions
- anchor pack
- draft profile
- quality findings
- asset coverage
- 最后调用 SpacetimeDB finalize procedure 回写真相。
6. 旧 Node 逻辑恢复范围
本轮恢复以下旧 Node 行为:
eightAnchorPrompts.tseightAnchorSingleTurnService.tscustomWorldAgentMessageTurnService.tscustomWorldAgentClarificationService.tscustomWorldAgentIntentExtractionService.tscustomWorldAgentSuggestedActionService.tseightAnchorCompatibilityService.ts中聊天链需要的 anchor / progress 派生
本轮不强制一比一恢复整条结果页重编译链,只恢复聊天链真正依赖的最小派生结果。
7. SSE 口径
恢复后 /messages/stream 必须按以下顺序输出:
- 多个
reply_delta - 一个
session - 一个
done
错误时输出:
error
要求:
reply_delta.text来源于platform-llm.stream_text(...)的真实增量。session必须来自 finalize 完成后的最新 session 真相。
8. 验收
- 用户发一条 Agent 消息后,assistant 回复不再是固定文案。
quickFillRequested=true时,推理结果仍遵循旧 Node 的force_complete逻辑。- SSE 能先看到逐步增长的
reply_delta,而不是一次性整段返回。 - finalize 完成后,前端拿到的 session 中:
lastAssistantReplymessagescurrentTurnprogressPercentstagependingClarificationssuggestedActions已被真实更新。
- 提示词正文未被改写。
9. 当前实现状态
截至 2026-04-22,本方案已在 server-rs 完成以下落地:
submit_custom_world_agent_message已改为只提交 user message 与 running operation,不再写死 assistant 回复。api-server的 Custom World Agent turn service 已恢复:- 动态状态识别
- 正式单轮推理
replyText/progressPercent/nextAnchorContentJSON 解析- creator intent / readiness / clarification / suggested action 等最小派生
/api/runtime/custom-world/agent/sessions/:sessionId/messages/stream已改为真实 SSE 流:- 推理进行中实时输出累计
reply_delta - finalize 后输出最新
session - 最后输出
done
- 推理进行中实时输出累计
- 普通提交接口在 finalize 完成后返回最终 operation 快照,而不是 submit 阶段的 running 快照。
finalize_custom_world_agent_message_turn已负责把 assistant message、session 聚合字段与 operation 最终状态一次性回写到 SpacetimeDB。