HistWeaver 不是一个网站的三个副本,而是由三个独立网站组成的一套历史互动叙事产品:路演站讲清项目价值,工作台把历史事件组织成可运行配置,独立 Demo 把配置呈现为玩家真正能进入的视觉小说体验。
| 网站 | 面向谁 | 作用 | 本地地址 | 原线上域名 |
|---|---|---|---|---|
| 路演展示站 | 评委、合作方、文旅与教育客户 | 解释问题、方案、商业价值和产品形态 | http://127.0.0.1:5175 |
https://bohack.codercat.site |
| 历史事件生成工作台 | 内容编辑、研究者、创作者 | 生成时间线、角色、节点、状态和结局配置,并即时预览 | http://127.0.0.1:5173 |
https://gamefac.codercat.site |
| 安史之乱独立 Demo | 最终玩家 | 以历史人物身份完成询问、决策和多结局体验 | http://127.0.0.1:5174 |
https://demo.codercat.site |
它们的关系很简单:
路演展示站 ── 讲清为什么值得做
│
├──▶ 历史事件生成工作台 ── 生产与校验内容配置
│ │
└──▶ 安史之乱独立 Demo ◀──────┘ 面向玩家交付体验
需要 Node.js 20.19+ 或 22.12+。
npm install
npm run dev默认使用 Mock 模式,一条命令同时启动三个网站及两个本地 API,不需要 API Key。
也可以单独启动:
npm run dev:workbench
npm run dev:demo
npm run dev:showcase它不是游戏本体,而是一页式产品叙事:从历史教育与文旅体验的痛点出发,展示 HistWeaver 的生成流程、交互形态、商业场景和两个实际产品入口。
工作台接收历史事件,组织并校验 HistoricalGameConfig:
type HistoricalGameConfig = {
timeline: TimelineEvent[];
roles: PlayableRole[];
npcs: NPCProfile[];
nodes: StoryNode[];
stateSchema: GameStateVariable[];
randomEvents: RandomEventRule[];
endings: EndingRule[];
};安史之乱只是内置样例。真正可复用的资产是“历史资料 → 角色有限视角 → 决策节点 → 状态变化 → 可解释结局”的配置与运行规则。
玩家可以扮演唐玄宗、安禄山、哥舒翰或杨贵妃。每个身份拥有不同目标、可见信息、询问对象和决策选项;AI 只参与决策前的有限询问,固定剧情、状态系统和结局规则仍由结构化内容控制。
- 尊重史实边界:正史是锚点,反事实分支必须说明成立条件与代价。
- AI 服务于决策:它扮演受身份、时代和知识范围约束的历史人物,不替代主线叙事。
- 用处境理解因果:同一事件从不同角色看,会呈现不同利益、盲区与压力。
- 面向真实交付:同一套方法可以扩展到博物馆展项、景区导览、历史课堂和研学任务。
| 模式 | 用途 | 启动方式 |
|---|---|---|
| Mock | 本地演示、开发、离线验收 | npm run dev |
| Live | 调用 OpenAI 兼容接口 | npm run dev:live |
Live 模式下,分别参考 apps/workbench/.env.example 和 apps/demo/.env.example。密钥只由服务端读取,不进入浏览器代码。
history2game/
├── apps/
│ ├── showcase/ # boHack 路演展示站
│ ├── workbench/ # 历史事件生成工作台
│ └── demo/ # 安史之乱独立视觉小说 Demo
├── docs/
│ ├── architecture.md
│ ├── images/ # README 视觉素材
│ └── screenshots/ # 产品验收截图
├── examples/ # 工作台生成配置样例
├── scripts/dev.mjs # 三站联合启动器
└── package.json # npm workspaces 入口
更多边界、端口和数据流说明见 docs/architecture.md。
npm run build
npm audit生产构建会分别检查工作台和独立 Demo;路演站是无构建依赖的静态页面。
MIT © 2026 CoderCat

