---
name: update-knowledge-base
description: |
  更新剧本知识库。当用户要求"更新知识库"、"录入新剧本"、"把剧本写入知识库"、"更新chapters"、
  "更新角色登场记录"等指令时触发。功能包括：
  (1) 读取用户提供的飞书剧本文档链接，提取故事梗概/知识点/角色等信息
  (2) 将故事梗概写入 business_knowledge/chapters/ 对应的Unit文件
  (3) 更新已有角色的登场记录，补充值得记录的特性描述
  (4) 为新出现的角色创建档案文件
---

# 更新知识库

## 核心原则：严禁推测与杜撰（强制执行）

⚠️ **知识库中的所有内容必须来源于正式剧本原文，不得含有任何推测、杜撰的成分。**

此原则适用于本技能全部操作步骤：

1. **角色信息**（性格、外观、关系、对话风格、行为模式等）必须从剧本对话、动作描述、场景说明中逐条提取
2. **故事梗概**必须基于剧本中实际发生的情节概括，不得自行补充未在剧本中出现的事件或因果关系
3. **知识点**以文档开头标注的"知识点"表格为准，不得自行推断教学意图
4. **登场角色**以文档中"本关出场角色"表格及剧本正文中实际出现的对话者为准
5. **剧本中未明确的信息**，一律标注"待确认"，不得凭经验或角色设定进行补充推断
6. **禁止跨剧本迁移**：已有角色的登场记录仅以当前剧本内容为准，不得将其他剧集中该角色的表现引入

本原则优先级高于下方各步骤中的具体操作指引。任何步骤的输出内容若超出剧本原文范围，视为违规。

---

## 前置检查（强制）

执行任务前必须确认：
1. **用户是否提供了剧本文档链接？** 若未提供，立即向用户索要飞书知识库链接（`/wiki/` 格式）
2. **用户是否说明了这些剧本属于哪个Season/Unit？** 若未说明，从链接或文档标题中推断，推断不了则询问

## 工作流程

### Step 1: 下载剧本

使用 `lark_wiki_operate_as_bot` 技能读取飞书文档（Bot身份）：

```bash
# 获取obj_token
LARKSUITE_CLI_CONFIG_DIR=/root/.openclaw/credentials/xiaoyan \
  lark-cli wiki spaces get_node --params '{"token":"<wiki_token>"}' --as bot

# 读取文档
LARKSUITE_CLI_CONFIG_DIR=/root/.openclaw/credentials/xiaoyan \
  lark-cli docs +fetch --doc <obj_token> --as bot
```

将原始文档保存到 `tmp/lessons/S{n}/U{nn}/L{n}_{name}.md`。

### Step 2: 提取信息

> ⚠️ **再次提醒：所有提取内容必须严格来源于剧本原文，禁止推测或杜撰。见上方「核心原则」。**

从每个剧本文档中提取：

| 字段 | 提取位置 | 说明 |
|------|---------|------|
| 知识点（单词+句型）| 文档开头的"知识点"或"单元知识点"表格 | 每Lesson独立 |
| 登场角色 | "本关出场角色"表格 + 正文对话中的说话者 | 合并去重 |
| 故事梗概 | "剧情梗概/剧情概要"段 或 从TL对话段理解故事主线 | 2-3句话概括 |

**注意**：不同剧本的文档格式可能不一致（有些有"剧情梗概"段，有些只有剧本正文），需要灵活适配。当自动提取不到梗概时，阅读TL对话段理解故事后手写梗概。

### Step 3: 更新 chapters

章节文件位于 `business_knowledge/chapters/Level1/S{n}/` 目录。

**格式规范**（参照已有文件）：

```markdown
# Unit {N} {单元名}

## 整体梗概
3-4句话概括整个Unit的故事主线

## Lesson {N} {中文名} {英文名}
- **知识点：** 单词（xxx）；句型（xxx）
- **登场角色：** xxx, xxx, xxx
- **故事梗概：** 2-3句话概括本课故事
```

规则：
- 若该Unit的章节文件已存在，在末尾追加新Lesson
- 若不存在，创建新文件，文件名格式 `{NN}_{单元名}.md`
- 整体梗概在所有Lesson写完后补充/更新

### Step 4: 更新 characters

角色文件位于 `business_knowledge/characters/` 下两个子目录：
- `main/` — 主要角色
- `supporting/` — 配角

**4a. 已有角色 — 更新登场记录**

读取角色文件，在 `## 登场记录` 部分追加新条目：

```markdown
- S{n}E{nn} {Unit名} L{n} {Lesson名}: 角色在本课的作用/行为简述
```

同时检查剧本中该角色是否有新的性格表现、关系变化或值得记录的特性，若有则补充到对应section。

**4b. 新角色 — 创建档案**

参照已有角色文件格式创建：

```markdown
# {角色名}

## 基本信息
- 物种/外观：（从剧本中提取实际描述）
- 身份/职业：
- 居住地：

## 性格与行为
- 核心性格：（从剧本对话和行为中总结）
- 行为模式：
- 弱点/怪癖：

## 对话风格
- 说话特征：
- 典型台词：（引用剧本原文）

## 关系
- （与其他角色的关系）

## 登场记录
- （按上述格式填写）

## 创作备注
1. （供后续编剧参考的注意事项）
```

**⚠️ 严禁凭空编造角色信息。** 所有性格、外观、性别等必须从剧本原文中提取。剧本未明确的信息标注"待确认"而非臆测。

**4c. 更新索引**

在 `business_knowledge/characters/README.md` 的角色索引表格中添加新角色条目。

### Step 5: 反馈

完成后向用户报告：
1. 更新了哪些chapters文件（新增/修改）
2. 更新了哪些角色的登场记录
3. 新建了哪些角色档案
4. 是否发现需要用户确认的信息（模糊描述、缺失信息等）
