docs(rag): add MemoryBear RAG implementation docs v1.0
Some checks failed
Sync to Gitee / sync (push) Has been cancelled

Submit the formed RAG documentation set produced across Sprint-1/2/3
(WS-12 through WS-26) under docs/rag/. Includes:

- README.md / INDEX.md: landing + total index (responsibility matrix,
  review verdicts, dual-link to source issues)
- overview/: full-pipeline architecture (4 .mmd diagrams),
  11-stage boundary contracts, doc map, source-code inventory
- pipeline/: 5 deep-dives (Loader/Parser/Chunking, Embedding,
  VDB & retrieval, GraphRAG, Rerank/Prompt/LLM)
- graphrag/, end-to-end/: v1.0 formal versions with full source
  retained as reference
- evolution/: 11 architecture-refactor proposals,
  6-direction roadmap, capability map
- review/: S3-T1 / S3-T2 final reviews, S2-T7 final summary
- _indexes/: glossary (81 terms), source->doc reverse index, chart index
- _release/: v1.0-RC1 release manifest, versioning convention,
  ops & freshness plan
- _meta/README.md: placeholder noting WS-12 governance assets gap

Aggregate review score 92.6/100 (8/8 PASS, 31/31 source-code spot
checks hit). The legacy docs/ ignore in .gitignore is narrowed to
docs/* with an explicit allowlist for docs/rag/.

Refs: WS-26
Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
Multica PM Agent
2026-05-09 10:51:48 +08:00
parent feae2f2e1e
commit 343a5eebe3
33 changed files with 8410 additions and 1 deletions

194
docs/rag/overview/DocMap.md Normal file
View File

@@ -0,0 +1,194 @@
# DocMap — MemoryBear RAG 文档目录大纲
> **定位**Sprint-2 深度文档化的任务拆解输入。每行 = 一篇待写文档,标题格式与 [S1-T1] 统一模板兼容。
> **责任人草拟**:基于当前 Sprint-1 分工建议,实际分配由项目经理确认。
> **目录结构**`docs/rag/<stage>/<topic>.md`
---
## 文档目录总览
```
docs/rag/
├── _meta/ # [S1-T1] 模板与评分卡(由 @知识运营与治理专家 维护)
├── 01-loader/
│ ├── 01-web-crawler.md # Web 爬虫URL 发现、内容提取、速率控制
│ ├── 02-feishu-integration.md # 飞书集成API 调用、鉴权、文档导出
│ ├── 03-yuque-integration.md # 语雀集成:知识库同步、文档下载
│ └── 04-file-upload.md # 文件上传与预处理本地文件系统、NFS 兼容)
├── 02-parser/
│ ├── 01-pdf-parser.md # PDF 解析OCR + Layout + Table 流水线
│ ├── 02-docx-parser.md # DOCX 解析:段落提取、图片嵌入
│ ├── 03-html-md-parser.md # HTML / Markdown / TXT 解析
│ ├── 04-excel-parser.md # Excel 解析:行列转表格结构
│ └── 05-vision-pipeline.md # 视觉模块OCR、布局识别、表格结构识别
├── 03-chunking/
│ ├── 01-chunking-strategies.md # 分块策略全景naive_merge、层级分块、树分块
│ ├── 02-task-type-adapters.md # 文档类型适配器book / paper / laws / qa / one
│ ├── 03-tokenizer.md # RagTokenizer中文分词、英文处理、fine_grained
│ └── 04-multimodal-chunking.md # 多模态分块:图片 VLM 描述、音频转文本
├── 04-embedding/
│ ├── 01-embedding-model-arch.md # Embedding 模型架构Base 接口 + 10+ Provider
│ ├── 02-provider-guide.md # Provider 接入指南OpenAI / HuggingFace / 国产模型
│ └── 03-auto-questions.md # 自动问题生成并发策略、LLM 缓存
├── 05-vdb/
│ ├── 01-elasticsearch-schema.md # ES 索引 Schema字段定义、mapping、analyzer
│ ├── 02-hybrid-search.md # 混合检索BM25 + Vector 加权融合
│ └── 03-storage-connections.md # 存储连接层ES、Redis、DocStore
├── 06-graphrag/
│ ├── 01-graphrag-overview.md # GraphRAG 总览Light vs General 对比
│ ├── 02-entity-relation-extraction.md # 实体关系抽取Extractor 流程、Prompt 工程
│ ├── 03-graph-merge-and-rank.md # 图合并与 PageRank子图合并、实体消歧
│ ├── 04-community-reports.md # 社区报告Leiden 聚类、LLM 报告生成General only
│ └── 05-knowledge-graph-search.md # KG 检索Query 分析、实体匹配、N-hop 扩展
├── 07-retrieval/
│ ├── 01-retrieval-api.md # 检索 APIknowledge_retrieval()、Dealer.search()
│ ├── 02-query-understanding.md # Query 理解:关键词提取、同义词扩展
│ └── 03-multi-kb-retrieval.md # 多知识库检索:结果合并、去重策略
├── 08-reranking/
│ ├── 01-rerank-architecture.md # 重排序架构:内置评分 vs 外部 Rerank 模型
│ └── 02-rerank-providers.md # Rerank ProviderJina / DashScope / Xinference
├── 09-prompt/
│ ├── 01-prompt-system.md # Prompt 模板系统template.py + generator.py
│ ├── 02-citation-prompts.md # 引用标注 Promptcitation_prompt / citation_plus
│ └── 03-toc-prompts.md # 目录相关 PromptTOC 检测、提取、相关性
├── 10-llm/
│ ├── 01-llm-chat-model.md # Chat 模型架构Base.chat() / chat_streamly()
│ ├── 02-llm-providers.md # Chat Provider 全景OpenAI / Azure / 国产模型
│ └── 03-vision-model.md # 视觉模型VLM 描述、图片理解
├── 11-e2e/
│ ├── 01-indexing-pipeline.md # 端到端入库流程Celery 任务链、错误处理、进度追踪
│ ├── 02-query-pipeline.md # 端到端检索流程Workflow Node → 检索 → 生成
│ └── 03-answer-postprocess.md # 回答后处理:引用插入、缓存、流式输出
└── 12-architecture-evolution/
├── 01-modularization-roadmap.md # 模块化拆分建议
├── 02-performance-optimization.md # 性能优化方向
└── 03-future-extensions.md # 未来扩展:多模态检索、混合搜索、对话记忆
```
---
## 文档详细定义
### 01-loader
| 序号 | 标题 | 范围边界 | 关联源码模块 | 责任人草拟 | 备注 |
|------|------|----------|-------------|-----------|------|
| 01-01 | Web 爬虫 | **写**URL 规范化、robots.txt 检查、速率限制、HTTP 抓取、内容提取、去重策略。**不写**搜索引擎索引、分布式爬虫、JS 渲染。 | `crawler/web_crawler.py`, `crawler/http_fetcher.py`, `crawler/content_extractor.py`, `crawler/rate_limiter.py`, `crawler/robots_parser.py` | Python 工程师 | 需覆盖 CrawledDocument 数据结构 |
| 01-02 | 飞书集成 | **写**App 鉴权、文件夹遍历、文档导出PDF/DOCX/Sheet、异步轮询下载。**不写**:飞书审批流、机器人消息推送。 | `integrations/feishu/client.py`, `integrations/feishu/retry.py`, `integrations/feishu/models.py` | Python 工程师 | 需说明 `_export_file` vs `_download_file` 区别 |
| 01-03 | 语雀集成 | **写**:个人 Token 鉴权、知识库遍历、文档详情获取、多种格式下载MD/HTML/Excel。**不写**:语雀协作编辑、版本管理。 | `integrations/yuque/client.py`, `integrations/yuque/retry.py`, `integrations/yuque/models.py` | Python 工程师 | lakesheet 解压逻辑需重点说明 |
| 01-04 | 文件上传 | **写**文件上传接口、NFS 同步等待、binary 读取策略、进度追踪。**不写**CDN 分发、大文件分片上传。 | `controllers/document_controller.py`, `utils/file_utils.py`, `tasks.py:213` | Python 工程师 | 30s NFS 等待逻辑是 MemoryBear 特有 |
### 02-parser
| 序号 | 标题 | 范围边界 | 关联源码模块 | 责任人草拟 | 备注 |
|------|------|----------|-------------|-----------|------|
| 02-01 | PDF 解析 | **写**PDF 渲染、OCR 文本检测、布局分类、表格结构识别、文本合并策略。**不写**PDF 生成/编辑、数字签名验证。 | `deepdoc/parser/pdf_parser.py`, `deepdoc/vision/ocr.py`, `deepdoc/vision/layout_recognizer.py`, `deepdoc/vision/table_structure_recognizer.py` | Python 工程师 | 核心中的核心,需重点投入 |
| 02-02 | DOCX 解析 | **写**段落提取、图片提取、超链接提取、OLE 嵌入文件。**不写**DOCX 生成、样式渲染。 | `deepdoc/parser/docx_parser.py`, `utils/file_utils.py:extract_embed_file` | Python 工程师 | 需与 `app/naive.py` 的 vision_figure_parser 联动说明 |
| 02-03 | HTML/MD/TXT 解析 | **写**HTML 标签清洗、Markdown 结构化解析、纯文本处理。**不写**CSS 样式解析、JS 执行。 | `deepdoc/parser/html_parser.py`, `deepdoc/parser/markdown_parser.py`, `deepdoc/parser/txt_parser.py` | Python 工程师 | 合并为一篇即可 |
| 02-04 | Excel 解析 | **写**行列读取、Sheet 遍历、表头检测、Markdown 表格转换。**不写**:公式计算、图表提取。 | `deepdoc/parser/excel_parser.py` | Python 工程师 | 轻量 |
| 02-05 | 视觉流水线 | **写**OCR 模型ONNXRuntime、布局识别模型、表格结构模型、图像预处理。**不写**:模型训练、模型量化。 | `deepdoc/vision/*.py` | Python 工程师 | 含模型加载、推理、后处理 |
### 03-chunking
| 序号 | 标题 | 范围边界 | 关联源码模块 | 责任人草拟 | 备注 |
|------|------|----------|-------------|-----------|------|
| 03-01 | 分块策略全景 | **写**naive_merge、naive_merge_with_images、hierarchical_merge、tree_merge 的实现与选择策略。**不写**:通用 NLP 分词算法原理。 | `nlp/__init__.py:562+`, `nlp/rag_tokenizer.py` | Python 工程师 | 需附决策树:何时用哪种策略 |
| 03-02 | 文档类型适配器 | **写**book/paper/manual/laws/qa/one/picture/audio 各自的分块逻辑、数据结构差异。**不写**:业务场景适配(如医疗/法律专有分块)。 | `app/naive.py:508`, `app/book.py`, `app/paper.py`, `app/manual.py`, `app/laws.py`, `app/qa.py`, `app/one.py`, `app/picture.py`, `app/audio.py` | Python 工程师 | 核心章节,需逐一说明 |
| 03-03 | RagTokenizer | **写**中文分词Huqie/datrie、英文处理nltk/Porter/WordNet、fine_grained_tokenize、分词对检索的影响。**不写**:分词算法数学推导。 | `nlp/rag_tokenizer.py` | Python 工程师 | 与 ES ik_max_word 的对比 |
| 03-04 | 多模态分块 | **写**:图片 VLM 描述调用链、音频 sequence2txt 转录、视频处理(如有)。**不写**VLM/ASR 模型内部原理。 | `app/picture.py`, `app/audio.py`, `llm/cv_model.py`, `llm/sequence2txt_model.py`, `deepdoc/parser/figure_parser.py` | Python 工程师 | 需说明 vision_model 注入机制 |
### 04-embedding
| 序号 | 标题 | 范围边界 | 关联源码模块 | 责任人草拟 | 备注 |
|------|------|----------|-------------|-----------|------|
| 04-01 | Embedding 模型架构 | **写**Base.encode() 接口、批次处理、Token 截断8000/2048、返回格式。**不写**Embedding 模型原理Word2Vec/BERT 等)。 | `llm/embedding_model.py` | Python 工程师 | 重点讲接口契约 |
| 04-02 | Provider 接入指南 | **写**10+ Provider 的配置方式、API Key 管理、Base URL 设置、批次大小差异。**不写**:各厂商 API 的通用文档。 | `llm/embedding_model.py` 各子类 | Python 工程师 | 表格形式列出即可 |
| 04-03 | 自动问题生成 | **写**并发生成策略ThreadPoolExecutor、LLM 缓存机制redis、问题注入到 chunk metadata。**不写**:问题生成质量评估。 | `tasks.py:323+`, `prompts/generator.py:question_proposal()` | Python 工程师 | 与检索效果的关系 |
### 05-vdb
| 序号 | 标题 | 范围边界 | 关联源码模块 | 责任人草拟 | 备注 |
|------|------|----------|-------------|-----------|------|
| 05-01 | ES 索引 Schema | **写**字段定义、mapping 类型、ik_max_word analyzer、dense_vector cosine 配置、动态维度。**不写**ES 集群运维、分片策略。 | `vdb/field.py`, `vdb/elasticsearch/elasticsearch_vector.py:653+` | Python 工程师 | 需附完整 mapping 示例 |
| 05-02 | 混合检索 | **写**BM25 + Vector 加权融合0.05:0.95、FusionExpr、score 归一化、降级策略。**不写**BM25 算法数学推导、近似最近邻算法。 | `nlp/search.py:439`, `vdb/elasticsearch/elasticsearch_vector.py:374`, `utils/doc_store_conn.py:FusionExpr` | Python 工程师 | 核心章节,需讲清楚为什么权重是 0.05:0.95 |
| 05-03 | 存储连接层 | **写**ES 连接、Redis 缓存、DocStore 抽象。**不写**:连接池调优、网络安全配置。 | `utils/es_conn.py`, `utils/redis_conn.py`, `utils/doc_store_conn.py` | Python 工程师 | 轻量 |
### 06-graphrag
| 序号 | 标题 | 范围边界 | 关联源码模块 | 责任人草拟 | 备注 |
|------|------|----------|-------------|-----------|------|
| 06-01 | GraphRAG 总览 | **写**Light vs General 架构对比、适用场景、配置开关use_graphrag/resolution/community。**不写**:图数据库选型对比(已选 ES。 | `graphrag/light/`, `graphrag/general/`, `graphrag/search.py` | Python 工程师 | 必须包含对比表格 |
| 06-02 | 实体关系抽取 | **写**Extractor 基类、_process_single_content 流程、Gleaning Loop、Prompt 工程、LLM 输出解析。**不写**:信息抽取的通用 NLP 方法。 | `graphrag/light/graph_extractor.py`, `graphrag/general/graph_extractor.py`, `graphrag/general/extractor.py` | Python 工程师 | 核心章节 |
| 06-03 | 图合并与 PageRank | **写**merge_subgraph 流程、nx.Graph 操作、PageRank 计算、实体消歧EntityResolution。**不写**PageRank 数学推导。 | `graphrag/general/index.py`, `graphrag/entity_resolution.py` | Python 工程师 | 需附图数据结构示例 |
| 06-04 | 社区报告 | **写**Leiden 层次聚类、社区报告 Prompt、报告数据结构、存储方式。**不写**:社区发现算法数学原理。 | `graphrag/general/leiden.py`, `graphrag/general/community_reports_extractor.py`, `graphrag/general/community_report_prompt.py` | Python 工程师 | General only |
| 06-05 | KG 检索 | **写**KGSearch.retrieval() 流程、Query Rewrite、实体匹配、N-hop 扩展、社区报告检索。**不写**:图遍历算法通用理论。 | `graphrag/search.py:130` | Python 工程师 | 与标准检索的交互关系 |
### 07-retrieval
| 序号 | 标题 | 范围边界 | 关联源码模块 | 责任人草拟 | 备注 |
|------|------|----------|-------------|-----------|------|
| 07-01 | 检索 API | **写**knowledge_retrieval() 接口、Dealer.search() 内部实现、MatchDenseExpr / MatchTextExpr / FusionExpr。**不写**:信息检索通用理论。 | `nlp/search.py:36`, `nlp/search.py:349`, `utils/doc_store_conn.py` | Python 工程师 | 核心章节 |
| 07-02 | Query 理解 | **写**关键词提取、同义词扩展、查询改写、min_match 阈值调整。**不写**NLP 句法分析。 | `nlp/query.py`, `nlp/synonym.py`, `nlp/term_weight.py` | Python 工程师 | 轻量 |
| 07-03 | 多知识库检索 | **写**Folder 类型递归检索、跨 KB 结果去重、权限过滤。**不写**:权限系统的 RBAC 设计。 | `workflow/nodes/knowledge/node.py:195`, `knowledge_repository.py` | Python 工程师 | 需说明 Folder 类型的特殊处理 |
### 08-reranking
| 序号 | 标题 | 范围边界 | 关联源码模块 | 责任人草拟 | 备注 |
|------|------|----------|-------------|-----------|------|
| 08-01 | 重排序架构 | **写**内置重排token+vector 相似度融合vs 外部 Rerank 模型、调用时机、容错降级。**不写**Learning-to-Rank 通用理论。 | `nlp/search.py:606`, `models/rerank.py` | Python 工程师 | 需对比两种方式的适用场景 |
| 08-02 | Rerank Provider | **写**JinaRerank、DashScopeRerank 的 API 调用、参数映射。**不写**:各厂商 API 通用文档。 | `models/rerank.py:57+` | Python 工程师 | 轻量 |
### 09-prompt
| 序号 | 标题 | 范围边界 | 关联源码模块 | 责任人草拟 | 备注 |
|------|------|----------|-------------|-----------|------|
| 09-01 | Prompt 模板系统 | **写**template.py 的 .md 文件加载机制、generator.py 的函数式 Prompt 组装、参数替换。**不写**Prompt Engineering 通用方法论。 | `prompts/template.py`, `prompts/generator.py` | Python 工程师 | 需列出全部模板清单 |
| 09-02 | 引用标注 Prompt | **写**citation_prompt / citation_plus 的输入输出、引用格式、上下文窗口管理。**不写**:学术论文引用规范。 | `prompts/generator.py:citation_prompt()` | Python 工程师 | 与 insert_citations 联动 |
| 09-03 | 目录相关 Prompt | **写**TOC 检测、提取、层级分配、基于 TOC 的 chunk 相关性筛选。**不写**:目录生成算法。 | `prompts/generator.py` TOC 系列函数 | Python 工程师 | 轻量 |
### 10-llm
| 序号 | 标题 | 范围边界 | 关联源码模块 | 责任人草拟 | 备注 |
|------|------|----------|-------------|-----------|------|
| 10-01 | Chat 模型架构 | **写**Base.chat() / chat_streamly() / chat_with_tools() 接口、返回格式、流式输出。**不写**Transformer 模型原理。 | `llm/chat_model.py` | Python 工程师 | 重点讲接口契约 |
| 10-02 | Chat Provider 全景 | **写**:各 Provider 配置、温度/TopP/MaxTokens 参数透传、错误处理。**不写**:各厂商 API 通用文档。 | `llm/chat_model.py` 各子类 | Python 工程师 | 表格形式 |
| 10-03 | 视觉模型 | **写**CV 模型接口、VLM 描述调用、图片理解。**不写**CNN/ViT 原理。 | `llm/cv_model.py` | Python 工程师 | 轻量 |
### 11-e2e
| 序号 | 标题 | 范围边界 | 关联源码模块 | 责任人草拟 | 备注 |
|------|------|----------|-------------|-----------|------|
| 11-01 | 端到端入库流程 | **写**Celery 任务链、parse_document 完整流程、进度追踪、错误处理、GraphRAG 异步触发。**不写**Celery 分布式队列原理。 | `tasks.py` | Python 工程师 | 核心章节,需附时序图 |
| 11-02 | 端到端检索流程 | **写**Workflow Knowledge Node 完整流程、检索模式选择、结果组装。**不写**Workflow Engine 通用设计。 | `workflow/nodes/knowledge/node.py` | Python 工程师 | 核心章节 |
| 11-03 | 回答后处理 | **写**:引用插入、缓存策略、流式输出处理。**不写**WebSocket 通用原理。 | `nlp/search.py:489`, `utils/redis_conn.py` | Python 工程师 | 轻量 |
### 12-architecture-evolution
| 序号 | 标题 | 范围边界 | 关联源码模块 | 责任人草拟 | 备注 |
|------|------|----------|-------------|-----------|------|
| 12-01 | 模块化拆分建议 | **写**:当前耦合点识别、建议的接口抽象(如 ParserInterface、ChunkerInterface、拆分优先级。**不写**:微服务拆分方案。 | 全局代码分析 | AI 知识库专家 | 架构建议,无代码 |
| 12-02 | 性能优化方向 | **写**Embedding 批处理优化、ES 查询优化、GraphRAG 并发优化、缓存命中率提升。**不写**:通用性能优化方法论。 | 全局代码分析 | AI 知识库专家 | 需量化当前瓶颈假设 |
| 12-03 | 未来扩展 | **写**:多模态检索、混合搜索增强、对话记忆优化、知识图谱演进方向。**不写**:产品需求文档。 | 全局代码分析 | AI 知识库专家 | 架构建议,无代码 |
---
## 工作量估算
| 阶段 | 文档数 | 预估 Sprint-2 人天(每篇 0.5~1d |
|------|--------|----------------------------------|
| 01-loader | 4 | 2d |
| 02-parser | 5 | 3d |
| 03-chunking | 4 | 2.5d |
| 04-embedding | 3 | 1.5d |
| 05-vdb | 3 | 2d |
| 06-graphrag | 5 | 3d |
| 07-retrieval | 3 | 2d |
| 08-reranking | 2 | 1d |
| 09-prompt | 3 | 1.5d |
| 10-llm | 3 | 1.5d |
| 11-e2e | 3 | 2d |
| 12-architecture-evolution | 3 | 1.5d |
| **合计** | **41** | **~23.5d** |
> Python 工程师承担约 30 篇技术实现细节AI 知识库专家承担约 8 篇(架构/优化/扩展方向)。具体分配由项目经理确认。