6.8 KiB
6.8 KiB
M4 module-ai SpacetimeDB 基座记录(2026-04-21)
更新时间:2026-04-21
0. 文档目标
本文件只记录一件事:
把 module-ai 从“只有领域模型和内存态服务”推进到“SpacetimeDB 侧已有最小 AI 任务真相表与 procedure 骨架”的真实落地结果。
本轮只做最小可编译基座,不扩到真实模型请求、SSE 输出或前端订阅联调。
1. 本轮落地范围
本轮只落实下面 5 件事:
- 在
server-rs/crates/module-ai/中补齐面向SpacetimeDB接线的输入类型。 - 在
server-rs/crates/spacetime-module/中新增ai_task / ai_task_stage / ai_text_chunk / ai_result_reference四张 private 表。 - 在
spacetime-module中新增 AI 任务的最小 reducer / procedure。 - 把
module-ai的领域快照与SpacetimeDB行结构之间的转换 helper 固定下来。 - 补充 crate README 与技术索引,明确当前 AI 真相源边界。
2. 新增的真实工程落点
2.1 module-ai
server-rs/crates/module-ai/src/lib.rs- 补充
AiTaskStartInput - 补充
AiTaskStageStartInput - 补充
AiTextChunkAppendInput - 补充
AiResultReferenceInput - 补充
AiTaskFinishInput - 补充
AiTaskCancelInput - 补充
AiTaskFailureInput - 补充
AI_TASK_STAGE_ID_PREFIX - 补充
AiTaskStageKind::as_str() - 补充
generate_ai_task_stage_id()
- 补充
2.2 spacetime-module
server-rs/crates/spacetime-module/src/lib.rs- 新增
ai_task - 新增
ai_task_stage - 新增
ai_text_chunk - 新增
ai_result_reference - 新增
create_ai_task - 新增
create_ai_task_and_return - 新增
start_ai_task - 新增
start_ai_task_stage - 新增
append_ai_text_chunk_and_return - 新增
complete_ai_stage_and_return - 新增
attach_ai_result_reference_and_return - 新增
complete_ai_task_and_return - 新增
fail_ai_task_and_return - 新增
cancel_ai_task_and_return
- 新增
3. 当前冻结的数据口径
3.1 ai_task
当前首版字段冻结为:
task_idtask_kindowner_user_idrequest_labelsource_modulesource_entity_idrequest_payload_jsonstatusfailure_messagelatest_text_outputlatest_structured_payload_jsonversioncreated_atstarted_atcompleted_atupdated_at
当前策略:
ai_task只保留任务级聚合字段,不在单行内嵌套Vec<stage>。- 阶段、增量文本、结果引用全部拆到独立表,避免后续更新整行大对象。
version继续沿用module-ai的任务快照版本语义。
3.2 ai_task_stage
当前首版字段冻结为:
task_stage_idtask_idstage_kindlabeldetailorderstatustext_outputstructured_payload_jsonwarning_messagesstarted_atcompleted_at
当前策略:
- 一条 stage 一行。
task_stage_id使用generate_ai_task_stage_id(task_id, stage_kind),保持同任务内幂等。- 当前不单独存“阶段版本”,统一归任务版本递增。
3.3 ai_text_chunk
当前首版字段冻结为:
text_chunk_row_idchunk_idtask_idstage_kindsequencedelta_textcreated_at
当前策略:
chunk_id保留领域侧 ID 语义。- 表级主键使用
text_chunk_row_id,避免generate_ai_text_chunk_id(seed, sequence)在不同任务之间碰撞。 - 流式文本聚合结果仍写回
ai_task_stage.text_output和ai_task.latest_text_output。
3.4 ai_result_reference
当前首版字段冻结为:
result_reference_row_idresult_ref_idtask_idreference_kindreference_idlabelcreated_at
当前策略:
result_ref_id保留领域侧 ID 语义。- 表级主键使用
result_reference_row_id,避免只按时间种子生成的领域 ID 在并发情况下直接作为主键带来碰撞风险。
4. 当前 reducer / procedure 口径
4.1 create_ai_task
当前负责:
- 校验
AiTaskCreateInput - 拒绝重复
task_id - 写入
ai_task - 按蓝图写入
ai_task_stage
4.2 start_ai_task
当前负责:
- 校验目标任务存在
- 把
ai_task.status从Pending推进到Running - 填充
started_at
4.3 start_ai_task_stage
当前负责:
- 校验目标任务与目标阶段存在
- 推进任务为
Running - 推进对应 stage 为
Running
4.4 append_ai_text_chunk_and_return
当前负责:
- 校验任务与阶段存在
- 追加
ai_text_chunk - 按
task_id + stage_kind + sequence聚合文本 - 回写
ai_task_stage.text_output - 回写
ai_task.latest_text_output
4.5 complete_ai_stage_and_return
当前负责:
- 更新 stage 状态、阶段输出、warning 列表
- 回写
ai_task.latest_text_output - 回写
ai_task.latest_structured_payload_json - 递增任务版本
4.6 attach_ai_result_reference_and_return
当前负责:
- 追加
ai_result_reference - 更新任务
updated_at - 递增任务版本
4.7 complete_ai_task_and_return
当前负责:
- 推进任务为
Completed - 填充
completed_at
4.8 fail_ai_task_and_return
当前负责:
- 推进任务为
Failed - 写入
failure_message - 填充
completed_at
4.9 cancel_ai_task_and_return
当前负责:
- 推进任务为
Cancelled - 填充
completed_at
5. 当前刻意未做
本轮明确没有扩到以下范围:
- 还没有做 AI 任务公开订阅表。
- 还没有做
api-server的 AI facade 路由。 - 还没有做
platform-llm真实流式回调接线。 - 还没有做 story / custom-world / quest / runtime-item 对 AI 任务的自动建链。
- 还没有做清理旧任务、旧 chunk 的 schedule reducer。
也就是说,本轮只是把 AI 任务真相表和最小写入口立起来,不宣称已经完成 AI runtime 主链迁移。
6. 当前边界判断
当前仍保持以下职责划分:
module-ai- 负责领域模型、校验、快照结构与最小内存服务。
spacetime-module- 负责任务真相表、事务性持久化与 procedure 聚合返回。
platform-llm- 后续负责真实模型调用、超时、重试、供应商错误。
api-server- 后续负责 HTTP / SSE / 鉴权与外部 contract。
7. 下一步建议
按当前节奏,后续应继续按下面顺序推进:
- 先把
platform-llm的文本网关正式接到append_ai_text_chunk_and_return / complete_ai_stage_and_return。 - 再给
api-server增加 AI 任务 facade,把 HTTP/SSE 对外 contract 冻结下来。 - 再把 story、custom-world、quest、runtime-item 各自的 AI 编排入口切到
module-ai + spacetime-module。 - 最后再根据订阅需求评估是否补 public projection 表或事件表。