Proactive AI
更新

一张插件,让 AI 变身游戏:修仙插件是如何实现的

以官方修仙插件为例,拆解业务模型的四层设计(世界/角色/纪元/回合)、8 个工具各自对应的游戏环节,以及注册上下文、Flow 节点与 UI 消息的实现细节。

插件如何工作

插件为场景注册一个上下文:独立的系统提示词、可见工具集与压缩配置。宿主的对话循环在回合内自动进入、退出该上下文,游戏逻辑与编码场景互不污染。

注册上下文时,插件也注册工具Flow 图。工具的 run() 内部就是一张图——把「生成、记账、渲染」拆为节点,由宿主托管执行:

flowchart LR
    LLM[llm 节点: AI 旁白生成] --> S[static 节点: 境界/修为记账]
    S --> R[render 节点: UI 消息推送]
    R --> W[聊天区: 文本消息 + UI 消息]

业务模型:四层设计

修仙世界的业务模型没有让 AI 自由发挥,而是拆成四层,各自有明确边界:

内容 谁负责
世界 区域、宗门、城镇、出身/天资池、NPC 池 静态规则 + LLM 生成
角色 姓名、境界、修为、生命、功法、丹药 静态规则(LLM 不碰数值)
纪元 五十年大事件时间线、纪元史(多周目) 静态规则 + LLM 叙事
回合 当前事件、闭关/行动推进、好感/道侣/记忆 Flow 图串起 LLM 与规则

核心原则:LLM 只负责叙事与判断,数值一律静态节点结算——筑基三层 · 经验 2400/5000HP 78/100 由规则确定,行为可预期、回放可复现。

8 个工具:每个对应一个游戏环节

插件注册了 8 个工具,分别覆盖业务模型的各个环节:

工具 对应环节 说明
create_world 开局创世 清空世界 → 生成世界骨架、出身/天资池、推世界屏;成功后紧跟 NPC 与大事件生成
create_character 建角 从出身/天资池选出身天资、取名建角、推首屏
reset_character 重来本世 保留世界与大事件,仅清空角色从池中重建
era_rebirth 百年轮回 推演指定时间后演化新世界新角色,保留纪元史(多周目)
generate_npcs 生态扩充 生成一批 NPC(凡人 2 + 修士 7 + 大修士 1),自动防重名,可多批扩充
generate_major_events 大事件时间线 生成未来五十年 15-30 条大事件(at/by/type/summary),补充世界时间线
game_turn 回合推进 推进剧情:加月、切主修/突破、闭关时长;搜刮丹药功法、好感/道侣/记忆在此表达
game_query 静态查问 纯静态 LLM 查询:世界观/数值/档案/NPC 信息,不推时间

分工逻辑:初始化链(create_world → generate_npcs → generate_major_events)由规则约束时序;玩法主循环由 game_turn 承担;元操作(reset/rebirth)单独成工具,避免污染主流程。

三种节点

LLM 生成节点

调用宿主 LLM 生成剧情文本。提供 JSON Schema 时要求结构化输出,校验失败自动重试(默认 2 次),保证叙事与分支稳定。文本以文本消息流式渲染进聊天区。

静态逻辑节点

纯函数:维护玩家状态(姓名、修为、境界、生命值),做门控与结算。筑基三层 · 经验 2400/5000HP 78/100 这样的进度由静态节点确定,AI 只负责叙事,不负责算数——行为可预期,回放可复现。

渲染终止节点

把状态与选项经 push 通道推成 UI 消息:PlayerStatus 状态栏、StorySummary 剧情摘要、ChoiceCardList 选项卡片,直渲染进对话流,与文本消息共同落库、可回放。

交互流程

剧情推进 → 文本消息: 完整旁白 + UI 消息: 状态栏/选项卡片
  → 用户点击选项卡片
  → 新剧情生成 → 聊天区追加新的文本消息
  → UI 消息更新状态栏与选项

记忆与压缩

  • 慢变记忆(世界设定卡)写入 host_memory,按会话 + 上下文分层,注入游戏上下文的稳定系统提示词前缀
  • 压缩层按游戏上下文单独配置:剧情史摘要槽位、预算与保留 token——长剧情不丢关键状态,token 也花在刀刃上

源码在哪?

proactive-ai-cultivation 是完整的官方示例:从上下文注册、8 个工具与 Flow 定义,到 UI 消息与记忆写入都有清晰范例。