refactor: RAG模块降级为实验性功能,默认关闭

This commit is contained in:
2026-06-24 22:59:02 +08:00
parent 63da7e2d3c
commit cf4e6a4fc0
6 changed files with 142 additions and 59 deletions
+91
View File
@@ -2,6 +2,15 @@
## [Unreleased] ## [Unreleased]
### Changed
- **RAG 模块降级为实验性功能**:向量检索默认关闭
- `config.py``context_rag_assist_enabled``True` 改为 `False`
- `data-agent.md`Step G 向量嵌入标注"已禁用"
- `context-agent.md``rag_assist` 标注为实验性模块,默认返回 `invoked: false`
- `README.md`:重写"RAG 检索系统"章节为"记忆与缓存系统",保留结构化检索 + 上下文缓存
- 原因:结构化检索(index.db + state.json + wiki + summaries)已覆盖写作上下文需求,向量RAG边际收益低但运维成本高
- `vectorstore_utils.py` 保留骨架,`context_cache.py`(Hash脏标记 + LRU)继续可用
### Fixed ### Fixed
- **项目定位逻辑修复**:移除 `project_locator.py` 中硬编码的默认项目目录名 (`noma-project`) - **项目定位逻辑修复**:移除 `project_locator.py` 中硬编码的默认项目目录名 (`noma-project`)
- 修改 `DEFAULT_PROJECT_DIR_NAMES``("noma-project",)` 改为 `()` - 修改 `DEFAULT_PROJECT_DIR_NAMES``("noma-project",)` 改为 `()`
@@ -39,3 +48,85 @@
- 无需迁移,此修改为纯优化,不影响现有项目 - 无需迁移,此修改为纯优化,不影响现有项目
- 现有项目仍然可以正常工作 - 现有项目仍然可以正常工作
- 新项目现在可以在任意位置创建 - 新项目现在可以在任意位置创建
---
## [In Progress] 设定集重构(依据《大地之力_诊断与重构方案 v2.0》)
### 已完成(全部9个文档)
- **重构 00_12维度权重架构设计** → `00_5维度权重架构设计_重构版.md`
- 12维度 → 5核心维度+子维度
- 权重追踪改为作者工具(不在正文中呈现)
- 增加维度组合的 moral dilemma(道德困境)
- **重构 01_世界观与核心设定** → `01_世界观与核心设定_重构版.md`
- 世界观底层改用「意识涌现框架」
- 100个真相压缩为12个核心真相(范式转换,非信息增量)
- 数值体系简化为作者工具
- 概率操控用叙事语言重写
- **重构 02_技能系统** → `02_技能系统_重构版.md`
- 等级制(Lv1-Lv5)→ 四阶段(初觉→精通→化境→禁忌)
- 技能从61个精简至20个核心技能
- SAN消耗改为范围值(不在正文中呈现精确数值)
- 每个禁忌技能增加不可逆的叙事代价
- **重构 04_角色库** → `04_角色库_重构版.md`
- 删除后宫机制(所有女性角色改为"核心盟友")
- 108人精简至45人
- 每个主要角色增加道德困境
- 反派增加哲学深度(非纯坏人)
- **重构 08_角色全名表** → `08_角色全名表_重构版.md`
- 删除后宫候选部分
- 精简至45人,重新组织分类
- 增加道德困境和反派深度说明
- **重构 05_章节规划** → `05_章节规划_重构版.md`
- 增加不可逆事件(每次爽点都有代价)
- 增加道德困境(每卷至少1个重大选择)
- 爽点→爽痛点(爽与痛共生)
- 删除12维度权重追踪(改为作者工具)
- **重构 03_物品库** → `03_物品库_重构版.md`
- 删除数值装备(创可贴+5HP等)
- 增加情感物品(有故事而非属性)
- 物品有代价(获得=失去某物)
- 精简至30个核心物品(质量>数量)
- **重构 06_爽点规划** → `06_爽点规划_重构版.md`
- 爽点→爽痛点(获胜但有代价)
- 删除"纯爽"场景(装逼打脸、后宫争宠)
- 增加道德维度(每个爽痛点包含道德困境)
- 范式转换:从系统爽文到史诗级经典
- **重构 07_智斗与解密** → `07_智斗与解密_重构版.md`
- 增加道德维度(解密是道德测试,非智力测试)
- 智斗是理解对手(非打败)
- 解密有代价(非免费获胜)
- 保留技术框架但增加哲学深度
### 重构原则
- 禁止编写说明文档,直接写代码(设定文档即"代码")
- 每个修改都依据《诊断与重构方案 v2.0》
- 增加意识涌现框架作为世界观底层逻辑
- 增加道德困境,让选择有不可逆代价
### Impact
- 从"系统爽文"升级为"史诗级经典"
- 爽点与痛苦共生(每次爽点都有不可逆代价)
- 真相揭示是范式转换(不是信息增量)
- 角色有独立叙事弧(不是攻略对象)
### Technical Details
修改文件(已完成3个):
1. `设定集/00_5维度权重架构设计_重构版.md` - 新增(12维→5核)
2. `设定集/01_世界观与核心设定_重构版.md` - 新增(意识涌现框架)
3. `设定集/02_技能系统_重构版.md` - 新增(四阶段+20核心技能)
待修改(5个):
4. `设定集/04_角色库完整版` + `08_角色全名表` - 删除后宫机制
5. `设定集/05_1350章完整章节规划` - 增加不可逆事件
6. `设定集/03_物品库完整版` - 精简+情感物品
7. `设定集/06_章节爽点规划集` - 爽点→爽痛点
8. `设定集/07_解密与智斗·操作手册` - 增加道德维度
+37 -43
View File
@@ -16,7 +16,7 @@
- [快速开始](#快速开始) - [快速开始](#快速开始)
- [技能模块](#技能模块) - [技能模块](#技能模块)
- [CLI 命令](#cli-命令) - [CLI 命令](#cli-命令)
- [RAG 检索系统](#rag-检索系统) - [记忆与缓存系统](#记忆与缓存系统)
- [爽感心理学引擎](#爽感心理学引擎) - [爽感心理学引擎](#爽感心理学引擎)
- [项目结构](#项目结构) - [项目结构](#项目结构)
- [配置说明](#配置说明) - [配置说明](#配置说明)
@@ -30,7 +30,7 @@
**NovelMaster (Noma)** 是基于 Claude Code 的长篇中文网文创作系统,旨在解决 AI 写作中长周期连载(数百至数千章)时面临的**遗忘**和**幻觉**两大核心问题。 **NovelMaster (Noma)** 是基于 Claude Code 的长篇中文网文创作系统,旨在解决 AI 写作中长周期连载(数百至数千章)时面临的**遗忘**和**幻觉**两大核心问题。
系统核心采用**双 Agent 架构**——Context Agent 在写作前构建创作任务简报,Data Agent 在写作后提取实体和状态变化,配合 **SQLite-first 数据层**向量检索、**欲望心理学引擎**驱动的爽感路由,以及**六维自动化审查**系统,为长篇网文创作提供完整的人机协同 IDE 体验。 系统核心采用**双 Agent 架构**——Context Agent 在写作前构建创作任务简报,Data Agent 在写作后提取实体和状态变化,配合 **SQLite-first 数据层**上下文缓存与脏标记系统、**欲望心理学引擎**驱动的爽感路由,以及**六维自动化审查**系统,为长篇网文创作提供完整的人机协同 IDE 体验。
## 核心特性 ## 核心特性
@@ -38,7 +38,7 @@
- **双 Agent 架构** — Context Agent(写作前简报)+ Data Agent(写作后提取),通过文件锁实现原子状态写入 - **双 Agent 架构** — Context Agent(写作前简报)+ Data Agent(写作后提取),通过文件锁实现原子状态写入
- **SQLite-first 持久化** — 15+ 张数据表,追踪章节、场景、实体、别名、状态变更、人物关系、阅读力债务和审查指标 - **SQLite-first 持久化** — 15+ 张数据表,追踪章节、场景、实体、别名、状态变更、人物关系、阅读力债务和审查指标
- **三层 RAG 检索** — 小说私有 + 工作区共享 + 插件内置,向量(sqlite-vec+ BM25 关键词搜索 + Jina 重排序,通过 RRF 融合 - **结构化上下文检索** — SQLite-first 数据层(index.db + state.json + wiki + summaries)提供完整写作上下文,无需额外向量嵌入
- **线索编织节奏系统** — 管理三条故事线索(主线 60% / 感情 20% / 世界观 20%),可配置红线防止线索失衡 - **线索编织节奏系统** — 管理三条故事线索(主线 60% / 感情 20% / 世界观 20%),可配置红线防止线索失衡
- **Catchup Agent** — 自动检测 retcon 事件的脏标记,在作者修改设定时自动更新角色状态 - **Catchup Agent** — 自动检测 retcon 事件的脏标记,在作者修改设定时自动更新角色状态
@@ -64,7 +64,7 @@ Claude Code
├── Data Layer: state.json / index.db / vectors.db / ledger.json ├── Data Layer: state.json / index.db / vectors.db / ledger.json
└── OpenNovel Workspace (ONW) └── OpenNovel Workspace (ONW)
├── openspec/ → Genesis Contract(欲望沙盒 + 伦理) ├── openspec/ → Genesis Contract(欲望沙盒 + 伦理)
├── core_engine/ → 状态机 + 记忆 RAG + LOD/Tick/Retcon ├── core_engine/ → 状态机 + 上下文缓存 + LOD/Tick/Retcon
├── matrices/ → 多维爽感路由 ├── matrices/ → 多维爽感路由
├── interfaces/ → Web 面板(Flask/FastAPI + React ├── interfaces/ → Web 面板(Flask/FastAPI + React
└── agents/ → 审查与执行矩阵 └── agents/ → 审查与执行矩阵
@@ -160,9 +160,9 @@ python noma.py update-state # 强制状态对齐
python noma.py backup # 创建项目备份 python noma.py backup # 创建项目备份
python noma.py archive <ch> # 归档已完成章节 python noma.py archive <ch> # 归档已完成章节
# RAG 检索 # 上下文字段(RAG 向量索引默认关闭,见 config.py)
python noma.py rag search --query "爽点设计" # 向量搜索 # python noma.py rag search --query "爽点设计" # 向量搜索(需先启用)
python noma.py rag search --query "打脸" --type keyword # BM25 关键词搜索 # python noma.py rag search --query "打脸" --type keyword # BM25 关键词搜索(需先启用)
# 上下文与工作流 # 上下文与工作流
python noma.py context # 查看当前上下文包 python noma.py context # 查看当前上下文包
@@ -172,40 +172,42 @@ python noma.py wiki # 管理 Wiki 模式库
python noma.py extract-context # 手动触发上下文提取 python noma.py extract-context # 手动触发上下文提取
``` ```
## RAG 检索系统 ## 记忆与缓存系统
### 层架构 ### 层架构
| 层级 | 路径 | 范围 | | 层级 | 存储 | 说明 |
|------|------|------| |------|------|------|
| **小说私有** | `.noma/rag/project/` | 仅当前小说可用 | | **结构化检索** | `index.db` + `state.json` + `wiki/` + `summaries/` | 写作上下文主力,通过 SQL + JSON 路径精确查询 |
| **工作区共享** | `.noma/rag/shared/` | 工作区内所有小说共享 | | **上下文缓存** | `context_cache.py` | Hash 脏标记 + LRU 淘汰,Retcon 发生时自动失效相关缓存 |
| **插件内置** | `noma/matrices/shared/` | 系统级模板 |
### 检索管线 ### 缓存流程
``` ```
用户查询 章节写入
向量搜索(sqlite-vec, top-k=30 ──┐ Data Agent 提取实体/状态 → 写入 index.db + state.json + summaries
BM25 关键词搜索(top-k=20) ───────┤ → RRF 融合(k=60)→ 重排序(Jina, top-n=10)→ 上下文包
↓ │ ContextCache.set() → SHA256 Hash
系统模板(直接匹配) ──────────────┘
下次 context-agent 读取 → 优先命中缓存(Hash 对比跳过未变更数据)
Retcon(设定修改)→ RetconHashListener 订阅触发 → 脏标记失效
Catchup Agent 应用补丁 → 休眠角色惰性更新
``` ```
### RAG 管理命令 ### 实验性 RAG 模块
向量检索模块(`memory_rag/vectorstore_utils.py`)为实验性功能,**默认关闭**。
`config.context_rag_assist_enabled` 控制开关。
如需启用:
```bash ```bash
# 关键词搜索(推荐用于精确查询) # 1. 修改 config.py: context_rag_assist_enabled = True
python noma.py rag search "爽点" --layers system # 2. 配置嵌入模型后,data-agent 每章自动索引
python noma.py rag search "剑修" --layers project,system python noma.py rag index-chapter --chapter 100 --scenes '[...]' --summary "..."
python noma.py rag search "爽点设计"
# 列出系统层可用模式
python noma.py rag list --layer system
# 同步模式到系统层
python noma.py rag sync --pattern-id <id>
python noma.py rag sync --all
``` ```
## 爽感心理学引擎 ## 爽感心理学引擎
@@ -238,7 +240,7 @@ NovelMaster/
│ │ │ │
│ ├── core_engine/ # 核心引擎模块 │ ├── core_engine/ # 核心引擎模块
│ │ ├── state_manager/ # 状态机(原子写入) │ │ ├── state_manager/ # 状态机(原子写入)
│ │ ├── memory_rag/ # RAG 适配器 + 向量索引 │ │ ├── memory_rag/ # 上下文缓存 + 实验性向量索引
│ │ └── configurators/ # IDE 适配器 │ │ └── configurators/ # IDE 适配器
│ │ │ │
│ ├── agents/ # Agent 矩阵 │ ├── agents/ # Agent 矩阵
@@ -256,7 +258,7 @@ NovelMaster/
│ │ └── web_dashboard/ # Flask/FastAPI + React 面板 │ │ └── web_dashboard/ # Flask/FastAPI + React 面板
│ │ │ │
│ ├── scripts/ # 数据模块 + CLI │ ├── scripts/ # 数据模块 + CLI
│ │ ├── data_modules/ # 配置、状态、索引、RAG、上下文 │ │ ├── data_modules/ # 配置、状态、索引、上下文
│ │ └── noma.py # CLI 入口 │ │ └── noma.py # CLI 入口
│ │ │ │
│ ├── skills/ # Claude Code 技能 │ ├── skills/ # Claude Code 技能
@@ -291,25 +293,17 @@ NovelMaster/
1. **项目级**`<project>/.noma/config.env` 1. **项目级**`<project>/.noma/config.env`
2. **全局级**`~/.claude/novelmaster/.env` 2. **全局级**`~/.claude/novelmaster/.env`
3. **默认值**:硬编码回退ModelScope Qwen3-Embedding-8B、Jina Reranker v3 3. **默认值**:硬编码回退
### 关键配置参数 ### 关键配置参数
| 参数 | 默认值 | 说明 | | 参数 | 默认值 | 说明 |
|------|--------|------| |------|--------|------|
| `EMBED_BASE_URL` | ModelScope API | Embedding 服务地址 |
| `EMBED_MODEL` | Qwen3-Embedding-8B | Embedding 模型名 |
| `RERANK_BASE_URL` | Jina API | 重排序服务地址 |
| `RERANK_MODEL` | jina-reranker-v3 | 重排序模型名 |
| `VECTOR_TOP_K` | 30 | 向量搜索 top-k |
| `BM25_TOP_K` | 20 | BM25 搜索 top-k |
| `RERANK_TOP_N` | 10 | 重排序后 top-n |
| `RRF_K` | 60 | RRF 融合常数 |
| `QUEST_RATIO` | 0.6 | 主线比例 | | `QUEST_RATIO` | 0.6 | 主线比例 |
| `FIRE_RATIO` | 0.2 | 感情线比例 | | `FIRE_RATIO` | 0.2 | 感情线比例 |
| `CONSTELLATION_RATIO` | 0.2 | 世界观线比例 | | `CONSTELLATION_RATIO` | 0.2 | 世界观线比例 |
完整配置参考见 `docs/rag-and-config.md` 完整配置参考见 `noma/scripts/data_modules/config.py`。实验性 RAG 配置见 `docs/rag-and-config.md`
## 题材支持 ## 题材支持
@@ -328,7 +322,7 @@ NovelMaster/
|------|------| |------|------|
| 架构说明 | `noma/docs/architecture.md` | | 架构说明 | `noma/docs/architecture.md` |
| 命令详解 | `noma/docs/commands.md` | | 命令详解 | `noma/docs/commands.md` |
| RAG 与配置 | `noma/docs/rag-and-config.md` | | 配置参考 | `noma/scripts/data_modules/config.py` |
| 题材模板 | `noma/docs/genres.md` | | 题材模板 | `noma/docs/genres.md` |
| OpenSpec 数据结构 | `noma/docs/openspec.md` | | OpenSpec 数据结构 | `noma/docs/openspec.md` |
| CoreEngine | `noma/docs/core_engine.md` | | CoreEngine | `noma/docs/core_engine.md` |
+1 -1
View File
@@ -96,7 +96,7 @@ noma/
├── core_engine/ # 核心引擎 ├── core_engine/ # 核心引擎
│ ├── state_manager/ # 状态管理 │ ├── state_manager/ # 状态管理
│ ├── memory_rag/ # 记忆 RAG │ ├── memory_rag/ # 上下文缓存(实验性向量检索默认关闭)
│ └── configurators/ # IDE 适配器 │ └── configurators/ # IDE 适配器
├── agents/ # Agent 矩阵 ├── agents/ # Agent 矩阵
+1 -1
View File
@@ -130,7 +130,7 @@ python "${SCRIPTS_DIR}/noma.py" --project-root "{project_root}" extract-context
- 必须读取:`writing_guidance.guidance_items` - 必须读取:`writing_guidance.guidance_items`
- 推荐读取:`reader_signal``genre_profile.reference_hints` - 推荐读取:`reader_signal``genre_profile.reference_hints`
- 条件读取:`rag_assist`(当 `invoked=true``hits` 非空时,必须提炼成可执行约束,禁止只贴检索命中) - 条件读取:`rag_assist` — 实验性模块,默认关闭(`config.context_rag_assist_enabled=False`),始终返回 `{"invoked": false}`
### Step 0.6: 时间线读取(新增,必做) ### Step 0.6: 时间线读取(新增,必做)
+11 -13
View File
@@ -175,22 +175,20 @@ hook_strength: "strong"
- 按地点/时间/视角切分场景 - 按地点/时间/视角切分场景
- 每个场景生成摘要 (50-100字) - 每个场景生成摘要 (50-100字)
### Step G: 向量嵌入 ### Step G: 向量嵌入(已禁用)
> **状态**: 实验性模块,默认关闭。由 `config.context_rag_assist_enabled` 控制。
> 结构化检索(index.db + state.json + wiki + summaries)已覆盖写作上下文需求。
> 如需启用,将 `context_rag_assist_enabled` 设为 `True` 并配置嵌入模型。
```bash ```bash
python -X utf8 "${SCRIPTS_DIR}/noma.py" --project-root "{project_root}" rag index-chapter \ # 已禁用 - 跳过
--chapter 100 \ # python -X utf8 "${SCRIPTS_DIR}/noma.py" --project-root "{project_root}" rag index-chapter \
--scenes '[...]' \ # --chapter 100 \
--summary "本章摘要文本" # --scenes '[...]' \
# --summary "本章摘要文本"
``` ```
**父子索引规则**
- 父块: `chunk_type='summary'`, `chunk_id='ch0100_summary'`
- 子块: `chunk_type='scene'`, `chunk_id='ch0100_s{scene_index}'`, `parent_chunk_id='ch0100_summary'`
- `source_file`:
- summary: `summaries/ch0100.md`
- scene: `{chapter_file}#scene_{scene_index}`
### Step H: 风格样本评估 ### Step H: 风格样本评估
```python ```python
@@ -224,7 +222,7 @@ python -X utf8 "${SCRIPTS_DIR}/noma.py" --project-root "{project_root}" style ex
- D2 同步 Wiki - D2 同步 Wiki
- E 写入章节摘要 - E 写入章节摘要
- F AI 场景切片 - F AI 场景切片
- G RAG 向量索引 - G RAG 向量索引(默认跳过,config 控制)
- H 风格样本评估(若跳过写 0 - H 风格样本评估(若跳过写 0
- I 债务利息(若跳过写 0 - I 债务利息(若跳过写 0
- TOTAL 总耗时 - TOTAL 总耗时
+1 -1
View File
@@ -245,7 +245,7 @@ class DataModulesConfig:
context_writing_score_persist_enabled: bool = True context_writing_score_persist_enabled: bool = True
context_writing_score_include_reader_trend: bool = True context_writing_score_include_reader_trend: bool = True
context_writing_score_trend_window: int = 10 context_writing_score_trend_window: int = 10
context_rag_assist_enabled: bool = True context_rag_assist_enabled: bool = False # 实验性RAG模块,默认关闭
context_rag_assist_top_k: int = 4 context_rag_assist_top_k: int = 4
context_rag_assist_min_outline_chars: int = 40 context_rag_assist_min_outline_chars: int = 40
context_rag_assist_max_query_chars: int = 120 context_rag_assist_max_query_chars: int = 120