【生活娱乐赛道】入卷 —— AI 驱动的互动叙事平台,让每一个人都能"拥有并改变一个叙事世界

# 【生活娱乐赛道】入卷 —— AI 驱动的互动叙事平台,让每个人都能"拥有并改变一个叙事世界"

**标签**:`生活娱乐`

**赛道**:TRAE AI 创造力大赛 · 生活娱乐赛道

**作品形态**:Web 端正式产品(React + Express + TypeScript + 豆包大模型 SSE 流式叙事)

**体验方式**:本地启动前后端即可体验(后端 `http://localhost:3001` / 前端 `http://localhost:5173`),支持访客模式无需登录

-–

### 致评委与社区朋友

首先感谢 Trae 中国版团队与社区评委的辛勤付出。这是一个从"AI 玩具"走向"叙事引擎"的真实开发故事:项目初期我也曾以为"给 AI 一个对话框 + 一个世界设定"就能做出互动叙事,结果第一版 demo 翻车——AI 随意穿越视角、随机塞事件、叙事重复拖沓,用户 3 轮就出戏。这次初赛版本,我下定决心把 AI 关进叙事规则的笼子:叙事透镜后端逐句校验、六维质量门控、四维活力检测、因果链追踪、伏笔三层回收,并锁定了 5 个风格各异的官方世界。希望能给评委和社区朋友带来一种"卷入故事"的沉浸体验。

-–

### 一、项目基本信息

| 项目字段 | 内容 |

|—|—|

| 作品名称 | 入卷(RuJuan)—— AI 驱动的互动叙事平台 |

| 项目类型 | Web 互动叙事应用 / AI 内容生成 / 叙事沙盒 |

| 一句话简介 | 创作者构建世界,体验者沉浸式探索——用大模型替代固定剧情树,让每一次选择都真正改变故事走向,让每一个世界都成为可以被"卷入"的活生生的叙事空间。 |

| 作品形态 | Web 端正式产品,响应式设计,优先桌面浏览器,兼容移动端 |

| 技术栈 | React 18 + Vite + TypeScript + Zustand / Node.js + Express + TypeScript + SQLite / 豆包大模型 SSE 流式输出 |

| 浏览器要求 | Chrome / Edge / Safari / Firefox 及主流移动端浏览器 |

| 体验方式 | 本地启动前后端,访问 `http://localhost:5173` 即可体验 |

| 测试账号 | 手机号 `13900139000`,验证码 `123456`(也支持访客模式免登录体验) |

-–

### 二、Demo 简介

#### 2.1 是什么

入卷是一个 AI 驱动的互动叙事平台。用户以角色身份进入一个由创作者构筑的叙事世界,通过自然语言输入或选项点击做出行动决策,AI 引擎基于因果逻辑实时生成文学性叙事文本并推进故事。用户体验完整故事流程:

- 5 个风格各异的官方世界(历史 / 现代 / 仙侠 / 科幻 / 末世)

- 每轮 300-500 字流式叙事 + 3 选项分支(第 3 位固定为"保守观察型")

- 人物关系树、地点记忆碎片、物品叙事卡片、事件时间线等外显库可视化

- 撤回、断点续读、叙事回顾、小说导出、分享卡片等完整体验功能

#### 2.2 面向谁

- **资深小说阅读者**:不满足于被动阅读,有过"如果主角做了另一个选择会怎样"的念头

- **互动叙事爱好者**:厌倦了固定分支树和游戏化数值,想要真正的"在场感"

- **有创作欲望但缺乏能力的潜在创作者**:想用 AI 辅助"试玩"一个故事,验证其吸引力

- **AI 叙事能力的研究者**:关注大模型在长程因果一致性、视角约束、叙事节奏控制上的工程实践

#### 2.3 主要功能(推荐配截图说明)

1. **5 个官方世界沉浸体验**——大秦变法(历史偏移 0.7)/ 1990年代(现实历史)/ 归尘录(修仙)/ 灵能纪元(科幻)/ 灰烬重生(末世)

2. **SSE 流式叙事生成**——AI 逐 chunk 推送,前端按句渲染,每轮 300-500 字 + 3 选项

3. **叙事透镜后端校验**——规则引擎逐句校验视角一致性,禁止全知旁白、他者心理描写,违规单句调用 Flash 模型修正

4. **六维质量门控 + 四维活力检测**——重复率 / 场景跳跃 / 信息过载 / 空段 / 格式 / 换行滥用六维检测;事件密度 / 内容重复 / 冲突状态 / 因果链活跃度四维活力检测

5. **外显库可视化**——人物关系树、地点记忆碎片、物品叙事卡片、事件时间线,所有叙事元素自动归档

6. **伏笔三层追踪与回收**——明伏笔(必须回收)/ 暗伏笔(藏于环境)/ 引导性暗示,短/中/长三层

7. **撤回引擎**——有痕迹撤回(无限制)/ 抹除痕迹撤回(限 3 次,保护因果链完整性)

8. **断点续读 + 叙事回顾 + 小说导出**——150 字续读摘要、虚拟滚动选择路径可视化、TXT/MD/EPUB 导出

9. **访客模式零门槛体验**——无需注册,IndexedDB 本地存储,注册时自动迁移至服务端

10. **世界创建四路径**——选模板改参数 / 选骨架自由填 / AI 协作五阶段 / 改编现有世界

-–

### 三、Demo 创作思路

#### 3.1 灵感来源

作为资深小说阅读者,我无数次在阅读中产生"如果主角做了另一个选择会怎样"的念头。小说的同质化趋势也让我思考:AI 时代是否能让每个读者都拥有独一无二的叙事体验?入卷的灵感正来源于此——用 AI 的因果叙事能力,让用户成为故事的"在场者",而不是旁观者。

#### 3.2 想解决的痛点

在项目初期 demo 发布后,我亲自反复体验,发现了 4 个真实痛点:

| # | 痛点 | 真实体感 |

|—|—|—|

| 1 | **AI 视角穿越** | 第一版 AI 经常突然切到全知旁白,描写主角不在场的场景,3 轮就让人出戏。这是大模型的通病——它默认是"讲故事的人",而不是"角色感知的呈现者"。 |

| 2 | **叙事重复拖沓** | AI 偷懒生成相似段落,连续 5 轮环境描写无事件推进,用户感觉"故事没动"。 |

| 3 | **游戏化陷阱** | 互动叙事产品普遍用积分/成就/排行榜把叙事异化为任务系统,沉浸感被数值驱散。 |

| 4 | **分支树局限** | 传统互动小说分支有限且缺乏文学性,作者预设的分支远不如 AI 因果生成的自由度。 |

#### 3.3 为什么做这个方向

- **赛道契合度高**:生活娱乐赛道的核心是"真实价值",而叙事消费是最大的娱乐共性之一,小说读者群体庞大但缺乏"在场感"产品。

- **痛点真实**:以上 4 个痛点都是我亲自体验后无法忍受的,不是为参赛而虚构。

- **技术可行性强**:大模型 + SSE 流式 + 规则引擎校验,工程上可落地。

- **可延展性强**:从"体验者"到"创作者"的渐进式引导路径,天然形成内容生态闭环。

-–

### 四、核心功能与创新亮点

#### 4.1 叙事透镜后端校验(核心创新)

这是本项目与"AI 聊天框式互动叙事"最本质的区别。

**实现方式**:规则引擎(非 AI 调用),逐句校验视角一致性。

**校验规则**

- **允许**:主角所见/闻/触/尝/嗅、内心想法/情绪/身体感受、观察他人表情动作做出的推测、从他人处听到的信息、回忆(需明确触发标记)

- **禁止**:全知旁白、他者心理描写、他处事件叙述、叙述者评论、他人视角切换、未标记的预知/闪回

**处理方式**:校验通过直接输出;校验失败仅对违规单句调用 Flash 模型修正(约 50-100 token),成本可控。

#### 4.2 因果逻辑 + 伏笔三层追踪(核心创新)

- **每个事件必须有清晰因果链**——禁止随机事件,每段叙事至少回答"为什么这件事会在这个时候发生?"

- **明伏笔**:用户主动发现并关注,必须追踪+回收,按层级分层(短期 3-10 轮 / 中期 10-25 轮 / 长期 25-50 轮)

- **暗伏笔**:藏于环境细节,记录档案但不强制回收,用户激活后转为明伏笔

- **引导性暗示**:即时性信息,帮助当前决策,不进入伏笔追踪系统

#### 4.3 历史偏移系统(核心创新)

**现实历史类世界**(大秦变法 / 1990年代)特有:

- 历史是默认走向,不是硬规范

- 用户的选择和行动必须对历史产生可见影响

- AI 不允许用巧合、外部力量强行让历史回归原轨道

- 小偏移随时间累积,可能导致历史重大分叉

- 后端检测 AI 试图维持历史原貌的模式,通过 Prompt 提醒遵守偏移规则

**偏移容忍度配置**:大秦变法 0.7(较大发挥空间)/ 1990年代 0.5(中等偏移)

#### 4.4 叙事节奏控制

- **开场钩子**(前 3 轮黄金窗口):第 1 轮打破日常、第 2 轮制造信息缺口、第 3 轮建立情感牵挂,前 3 轮不允许纯铺垫

- **情绪缺口规则**:80% 轮次留中等强度情绪缺口,10% 留强缺口(关键转折),10% 允许闭合(喘息)

- **三阶高潮结构**:情境顿悟(每轮至少一个)→ 小高潮(累积 3-5 轮 tension 后爆发,约 10-15 轮)→ 大高潮(多条关键冲突事件汇聚时触发,约 25-35 轮)

#### 4.5 反游戏化设计

**产品内核五大原则**(写在 PRD 第一章):

1. **叙事权威**——AI 决定"发生了什么",用户决定"做什么"

2. **叙事透镜**——只描述主角可感知的信息,渐进揭示

3. **因果逻辑**——每个事件必须有清晰因果链,禁止随机事件

4. **代价而非终局**——不存在 Game Over,错误选择导致负面后果但永远留下继续推进的可能性

5. **反游戏化**——不含积分、充值、虚拟货币、成就系统、排行榜、战斗系统

**不含**:HP/MP、任务列表、等级弹窗、积分体系、充值、虚拟货币、成就系统、排行榜、战斗系统。

**所有状态通过文学性叙事文本展现**,功能面板以"读者的笔记本"形态呈现。是叙事产品,不是游戏。

#### 4.6 AI 偷懒防护(四维活力检测)

| 维度 | 检测内容 | 响应 |

|—|—|—|

| 事件密度 | 最近 5 轮中 stateChanges 非空轮次 < 2 为偏低 | 轻度停滞(2 项异常)→ 温和 Prompt 提示 |

| 内容重复度 | 与最近 3 轮相似度 > 40% | 中度停滞(3 项异常)→ 加强引导 |

| 冲突状态 | 连续 5 轮无冲突事件标记为"安全区" | 重度停滞(4 项异常)→ 升级提示必须推进因果链 |

| 因果链活跃度 | 存在未回收明伏笔或待展开事件 | 检测器只提供 Prompt 引导,不直接生成或注入事件 |

#### 4.7 撤回引擎(跨章节级联回滚)

- **有痕迹撤回**:无限制,撤回行为记录在 undoHistory,AI 在叙事中反映世界痕迹

- **抹除痕迹撤回**:同一会话限 3 次,AI 叙事中完全不提及被撤回行为(保护因果链完整性)

- **跨章节边界级联**:撤回导致 Chapter.endRound 超出当前最大轮次时,自动截断 endRound 并标记 summary/checkpoint 为 stale

#### 4.8 双库架构

- **内置库**(AI 专用):完整因果链、世界状态、人物关系全貌——保证叙事质量和一致性

- **外显库**(用户可见):以"读者的笔记本"形态呈现已揭示信息——人物关系树、地点记忆碎片、物品叙事卡片、事件时间线

- **信息只能从内置库"揭示"到外显库**,模拟"人在世界中探索"的真实体验

-–

### 五、技术架构与选型

#### 5.1 技术栈

| 层级 | 选型 | 说明 |

|—|—|—|

| 前端核心 | React 18 + Vite + TypeScript + Zustand + React Router 6 | 响应式设计,优先桌面浏览器 |

| 后端 | Node.js + Express + TypeScript | SSE 流式输出 |

| 数据库 | SQLite | 轻量持久化,10 个迁移文件 |

| AI 模型 | 豆包大模型(Doubao Pro 32k) | 主调用叙事生成 |

| AI 辅助 | 豆包 Flash 模型 | 叙事透镜违规修正(50-100 token) |

| 前端本地存储 | IndexedDB | 访客模式数据存储 |

| 字体 | Noto Serif SC + Noto Sans CJK SC + Inter | 均 SIL OFL 免费商用 |

#### 5.2 关键技术实现

##### 5.2.1 SSE 流式叙事生成

后端逐 chunk 推送叙事文本,前端按句渲染,避免一次性等待。关键代码在 `backend/src/sse/narrative.stream.ts` 中,包含 4 处 `await setGenerating(false)` 在 finally 块中确保所有路径(成功/错误/超时/中止)都重置生成状态。

##### 5.2.2 叙事透镜规则引擎

规则引擎(非 AI 调用)逐句校验视角一致性,违规才调用 Flash 模型修正:

```typescript

// 校验流程:提取叙事内容 → 查询主角位置/状态 → 获取感知范围 → 逐句校验

// 关键词匹配 / 位置关联判断 / 视角一致性 / 能力边界检查

// 校验通过 → 直接输出

// 校验失败 → 仅对违规单句调用 Flash 版修正(约 50-100 token)

```

##### 5.2.3 历史偏移检测

后端检测 AI 试图维持历史原貌的模式,通过 Prompt 提醒 AI 遵守偏移规则:

```typescript

// 历史是默认走向,非硬规范

// 用户影响力必须反映,禁止强行回归

// 偏移累积效应,小偏移随时间累积可能导致历史重大分叉

// 后端检测历史刚性,通过 Prompt 提醒 AI 遵守偏移规则

```

##### 5.2.4 撤回级联回滚

跨章节边界撤回时,自动处理三个路径的 stale 标记:

- Chapter 数据:截断 endRound 并标记 summary 为"需刷新"

- Checkpoint:保留但标记为 `stale: true`,叙事回顾中灰显

- NarrativeSummary:标记为 `stale: true`

##### 5.2.5 全局 CSS 变量体系

所有视觉属性走 CSS 变量,零硬编码,主题切换一行生效。字体体系使用 Noto Serif SC(中文正文)+ Noto Sans CJK SC(标题)+ Inter(英文/数字),均 SIL OFL 免费商用。

#### 5.3 项目结构

```

backend/

├── src/

│ ├── config/ # 环境变量 + AI 配置集中管理

│ ├── controllers/ # 8 个业务控制器

│ ├── engine/ # 透镜引擎 + 叙事引擎 + 质量引擎 + 能量引擎

│ ├── middleware/ # 认证 + 错误 + 限流 + 校验

│ ├── models/ # 21 个数据模型

│ ├── repositories/ # 23 个数据仓库

│ ├── routes/ # 8 个路由模块

│ ├── seed/ # 5 个官方世界种子数据

│ ├── services/ # 30+ 业务服务(含 AI / 撤回引擎 / 伏笔 / 透镜等)

│ ├── sse/ # SSE 流式叙事

│ └── types/ # 类型定义

├── migrations/ # 10 个数据库迁移文件

└── db/rujuan.sqlite # SQLite 数据库

frontend/

├── src/

│ ├── api/ # 后端 API 调用

│ ├── components/ # 通用组件 + 叙事组件 + UI 组件

│ ├── hooks/ # useNarrativeStream 核心流式 Hook

│ ├── pages/ # NarrativePage / HomePage / WorldDetailPage 等

│ ├── types/ # 类型定义

│ └── utils/ # IndexedDB 管理等工具

└── vite.config.ts

```

-–

### 六、Trae AI 赋能开发全纪实(核心加分项)

本项目是人机协同开发(Human-AI Co-creation)的典型范例。Trae IDE 内置大模型作为"数字架构师与调试专家",在以下维度发挥了决定性作用。

#### 6.1 关键任务 Session 概览

以下为本次初赛版本开发过程中的关键任务,均在 Trae IDE 中完成:

| 序号 | 任务描述 | 关键产出 |

|—|—|—|

| ① | 5 P0 阻断修复(SSE 连接 / is_generating 状态 / 端口配置等) | 叙事流式输出稳定可用 |

| ② | is_generating 不重置修复(async setGenerating 未 await) | 4 处 finally 块全部 `await setGenerating(false)` |

| ③ | 叙事精简优化(100-500 字 + prompt 规则 + PRD 同步) | 后续轮次 < 50s + 300-500 字 |

| ④ | 重启失败 + 叙事回顾返回触发重新生成修复 | 已体验世界可正常重启 + 返回不触发重新生成 |

| ⑤ | 8 场景全场景修复(useNarrativeStream 状态管理) | 首次进入 / 续读 / 回顾返回 / 重启 / 刷新 / 重入 / 新世界 / 无效会话 |

| ⑥ | option 格式转换修复(string[] → NarrativeOption[]) | 叙事回顾返回 + 刷新 + 重入均正常显示选项 |

| ⑦ | 73 任务最终验证 | 29 项抽查 100% 通过 |

#### 6.2 开发关键步骤截图(不少于 3 张)

以下截图建议从 Trae IDE 实际开发过程中截取:

##### 截图 1:编写核心文档完成,进行第一步开发

1004334681163536:17d306859a7825fee4aa6565bfc28208_6a48b88273cad11f4c9d92b4.6a4a3be798d33abece483360.6a4a3be798d33abece48335e:TRAE Work CN.0.1.34.no_sid.no_ppe.T(2026/7/5 19:11:35)

##### 截图 2:大模型封装

1004334681163536:a670695d5785bb44976bf110808074af_6a48b88273cad11f4c9d92b4.6a4e2d6ba8c71964696c77a1.6a4e2d6ba8c71964696c779f:TRAE Work CN.0.1.34.no_sid.no_ppe.T(2026/7/8 18:58:51)

##### 截图 3:综合回归测试

1004334681163536:2400aff7de983cf6ab62eda86ee35ad9_6a48b88273cad11f4c9d92b4.6a5251094c482afee597b6e9.6a5251094c482afee597b6e7:TRAE Work CN.0.1.34.no_sid.no_ppe.T(2026/7/11 22:19:53)

##### 截图 4:73 任务最终验证报告

1004334681163536:ac3616e790f3feaab0b0deb0f3292f45_6a48b88273cad11f4c9d92b4.6a54dd5585f051185a361664.6a54dd5585f051185a361662:TRAE Work CN.0.1.34.no_sid.no_ppe.T(2026/7/13 20:43:01)

#### 6.3 Trae 在关键节点的赋能

##### 6.3.1 识破 is_generating 卡死根因

初版的最大问题是 chat 完成后无法继续操作——`is_generating` 卡在 1。Trae 定位到根因:`setGenerating` 是 async SQLite 操作,但 5 处调用都没有 `await`,导致 finally 块执行时数据库写入还未完成。统一加 `await` + try/catch 后彻底解决。

##### 6.3.2 8 场景状态管理统一

`useNarrativeStream` hook 在加载已有 rounds 时状态为空。Trae 分析了 8 个场景的路由逻辑,设计了 `initialContent` / `initialOptions` 参数 + `getLastRound` API 的统一方案,所有调用点自动受益,未来新增的 options 来源(重新生成、撤回、改编等)都不用单独处理。

##### 6.3.3 option 格式归一化

`getLastRound` 返回 `string[]` 但组件期望 `NarrativeOption[]`。Trae 在 useEffect 中统一做归一化,兼容两种格式,并在渲染层和点击层加防御性 fallback,即使后端返回异常也不会发 `undefined` 给后端。

##### 6.3.4 叙事精简 prompt 工程

AI 叙事动辄 1000+ 字,响应慢且体验拖沓。Trae 在 `prompt-builder.service.ts` 中加入【叙事长度】规则(后续轮次 300-500 字),配合 `.env.local` 的 `AI_NARRATIVE_MAX_TOKENS=1000` 兜底,实测后续轮次 < 50s + 300-500 字。

##### 6.3.5 PRD 与代码同步

所有修复都同步更新 PRD 文档(第 9.10 章叙事长度规则 + 第 23 章叙事生成参数表),确保文档与代码一致。Trae 在修改代码后主动提示更新对应文档章节。

-–

### 七、Demo 体验指南

#### 7.1 运行环境

- **启动方式**:本地启动前后端

- 后端:`npm run dev`(监听 3001 端口)

- 前端:`npm run dev`(监听 5173 端口)

- **推荐浏览器**:Google Chrome、Microsoft Edge、Safari 或主流手机浏览器

- **网络要求**:需联网(调用豆包大模型 API)

#### 7.2 API Key 配置说明(重要)

**出于安全考虑,提交版本已删除所有真实 API Key。评委/体验者需要自行申请并配置后才能完整体验叙事功能。**

##### 7.2.1 为什么需要 API Key

入卷的叙事生成依赖大模型 API(默认使用豆包大模型)。没有 API Key 时:

- 后端可以正常启动(仅 warn 提示)

- 前端页面可以打开,但****进入叙事页后无法生成叙事文本****(AI 接口调用失败)

##### 7.2.2 API Key 申请指引

**推荐方案:豆包大模型(火山引擎 Ark)**

1. 访问火山引擎控制台: 账号登录-火山引擎

2. 注册/登录火山引擎账号(支持手机号注册,新用户有免费额度)

3. 进入「模型推理」→「接入点管理」→ 创建接入点

4. 选择模型:**Doubao-pro-32k**(主模型,用于叙事生成)

5. 建议同时创建:**Doubao-pro-128k****Doubao-lite-32k**(辅助模型,用于透镜校验修正)

6. 在「API Key 管理」中创建 API Key,复制保存

**替代方案**:项目也支持 OpenAI 兼容接口(通过 `AI_PROVIDER=openai` 切换),但 prompt 针对豆包模型优化,建议优先使用豆包。

##### 7.2.3 配置步骤

**第 1 步:创建环境配置文件**

在项目根目录下创建 `.env.local` 文件(与 `.env.example` 同级)。

**第 2 步:填入配置**

```bash

# ===== 入卷 后端环境配置 =====

# ----- 服务配置 -----

PORT=3001

NODE_ENV=development

# ----- 安全配置(必填,启动时会校验) -----

JWT_SECRET=请修改为任意随机字符串

# ----- 数据库配置 -----

DB_PATH=./backend/db/rujuan.sqlite

# ----- AI 模型配置(必填) -----

AI_API_KEY=你申请的豆包 API Key

AI_BASE_URL=https://ark.cn-beijing.volces.com/api/v3

AI_PROVIDER=doubao

AI_MODEL=doubao-pro-32k

AI_LIGHT_MODEL=doubao-pro-32k

AI_MAX_TOKENS=1000

AI_TEMPERATURE=0.7

AI_TIMEOUT=60000

# 叙事场景参数(可选,建议按以下设置以保证体验)

AI_NARRATIVE_MAX_TOKENS=1000

# ----- CORS 配置 -----

CORS_ORIGIN=*

```

**第 3 步:验证配置**

启动后端,看到以下日志说明配置成功:

```

[INFO] [server] 服务已启动,监听端口: 3001 (env=development)

```

如果看到以下警告,说明 API Key 未配置或配置错误:

```

[warn] [config/ai] AI_API_KEY 未配置,AI 相关功能将不可用

```

##### 7.2.4 原始配置模板

项目根目录已提供 `.env.example` 模板文件,可参考其字段说明。**注意:`.env.example` 中的默认值是 OpenAI 配置,如使用豆包请按 7.2.3 的示例填写。**

##### 7.2.5 配置要求与注意事项

| 要求 | 说明 |

|—|—|

| **必填字段** | `AI_API_KEY`(豆包 API Key)、`JWT_SECRET`(JWT 密钥,任意随机字符串) |

| **模型要求** | 必须使用 **doubao-pro-32k** 或更高版本,不支持 lite 版(叙事质量不达标) |

| **Token 限制** | 建议保持 `AI_MAX_TOKENS=1000` / `AI_NARRATIVE_MAX_TOKENS=1000`,过高会导致响应变慢 |

| **安全要求** | `.env.local` 已在 `.gitignore` 中,不会提交到仓库;请勿将 API Key 提交到代码或贴在帖子中 |

| **费用说明** | 豆包大模型按 token 计费,单轮叙事约消耗 8K-16K token,新用户免费额度可体验约 50-100 轮叙事 |

| **替代模型** | 如需使用 OpenAI 兼容接口,设置 `AI_PROVIDER=openai` + 对应的 `AI_BASE_URL` 和 `AI_MODEL`,但叙事效果可能有所差异 |

##### 7.2.6 无 API Key 时的体验范围

如果没有 API Key,评委仍可体验以下功能:

- :white_check_mark: 首页 5 个官方世界卡片展示

- :white_check_mark: 世界详情页完整内容

- :white_check_mark: 叙事页 UI 框架(输入框、选项卡片样式、外显库面板等)

- :white_check_mark: 访客模式 UI(IndexedDB 本地存储逻辑)

- :cross_mark: 叙事文本生成(需要 API Key)

- :cross_mark: 撤回 / 重新生成(依赖叙事生成)

-–

### 八、Demo 体验指南(续)

#### 8.1 快速上手(评委第一体验路径)

**前置条件**:已按 7.2 配置好 API Key 并启动前后端。

1. **第一步**:访问 `http://localhost:5173`

2. **第二步**:点击"体验世界",选择任一官方世界(推荐先试"大秦变法"或"1990年代")

3. **第三步**:无需登录即可开始叙事(访客模式,数据存于 IndexedDB)

4. **第四步**:阅读开场叙事(流式渲染,每轮 300-500 字)

5. **第五步**:在 3 个选项中选择一个,或直接在输入框输入自然语言行动指令

6. **第六步**:AI 生成下一轮叙事,观察选项如何真正改变故事走向

7. **第七步**:点击右上角"菜单"查看外显库(人物关系树 / 事件时间线等)

#### 8.2 高级体验

##### 8.2.1 登录保存进度

- 点击"登录/注册",使用测试账号 `13900139000` / 验证码 `123456`

- 注册后自动迁移访客模式数据至服务端

- 支持断点续读、叙事回顾、小说导出、分享卡片

##### 8.2.2 撤回与重新生成

- 点击"菜单" → “撤回”,选择"有痕迹撤回"(无限制)或"抹除痕迹撤回"(限 3 次)

- 点击"重新生成"重新生成本轮叙事(仅重写 aiNarrative,状态字段不变)

##### 8.2.3 历史偏移体验

- 在"大秦变法"中做出偏离历史的选择(如拒绝商鞅变法方向)

- 观察 AI 是否强行让历史回归原轨(不应该)

- 体验偏移累积效应:小偏移随时间累积可能导致历史重大分叉

#### 8.3 体验验证清单

评委可对照以下清单快速验证 demo 是否符合承诺:

- [ ] 首页显示 5 个官方世界卡片

- [ ] 点击世界进入详情页,封面图与简介正常显示

- [ ] 点击"开始体验"进入叙事页,开场叙事流式渲染

- [ ] 每轮叙事 300-500 字 + 3 个选项(第 3 位为"保守观察型")

- [ ] 点击选项正常进入下一轮(无"缺少 user_input 参数"错误)

- [ ] 输入框可输入自然语言行动指令

- [ ] 访客模式 banner 显示"访客模式 - 你的体验数据仅保存在本地"

- [ ] F5 刷新后正确加载最后一轮内容 + 3 选项文本完整

- [ ] 叙事回顾返回后正确加载最后一轮(不触发重新生成)

- [ ] 控制台无 error 级别日志

-–

### 九、产品哲学

> 叙事本身就是奖励。

我们相信,真正打动人的不是"再玩一局就能升级"的焦虑,而是"这一次选择真的改变了故事"的沉浸。入卷不是游戏,是一个可以卷入的叙事空间。我们把 AI 关进叙事规则的笼子,让它服务于故事,而不是让故事迁就 AI 的随机性。

如果你也相信叙事的力量,欢迎入卷。

-–

### 十、后续迭代内容

以下功能已完成 UI 框架开发,但因时间限制尚未接入实际数据或完整逻辑,将作为下一阶段迭代重点:

| 功能 | 当前状态 | 后续计划 |

|—|—|—|

| **外显库数据同步** | UI 框架完整,当前显示演示数据 | 接入后端外显库 API,实现叙事过程中自动归档人物/地点/物品/事件 |

| **高亮名词解析** | UI 框架就绪 | 接入 AI 名词解析能力,点击高亮名词显示类型和摘要 |

| **叙事卡片分享** | UI 框架就绪 | 实现 1200×630px 卡片生成、下载、链接复制 |

| **小说导出** | 后端接口就绪 | 前端导出 UI + 润色功能集成 |

| **改编世界** | UI 框架就绪 | 接入后端改编 API,支持创建私有衍生世界 |

-–

**项目名称**:入卷(RuJuan)

**项目类型**:AI 互动叙事平台

**技术栈**:React + Express + TypeScript + 豆包大模型

**作者**:个人参赛

报名帖地址:【TRAE AI 创造力大赛报名】入卷 —— AI 驱动的互动叙事平台 - TRAE AI 创造力大赛 / 【大赛报名专区】 - TRAE 官方中文社区

文件下载地址:通过网盘分享的文件:AI叙事平台.zip
链接: 百度网盘 请输入提取码 提取码: mtpi

开发有点赶,服务器没配置好,就先上传整个文件(文件压缩包超过允许上传的大小,按照弹窗建议上传了云共享链接)了。

挺有趣的,给你投了一票,加油!祝你顺利晋级,希望能互相支持,给我也投一票,【学习工作赛道】英语星图 · 小学英语AI闯关学习舱,AI闯关系统,带你在星空中学习。 - TRAE AI 创造力大赛 / 【大赛初赛专区】 - TRAE 官方中文社区

给你个建议,你的介绍页面的文字有点乱,你剋以重新梳理一遍,再发第二版。