Step 1.1 · PDF → Markdown 结构化提取
- 工具选型:使用
docling(IBM 开源)或 marker(surya)做 layout-aware 提取,保留表格结构和章节层级
- 输出格式:Markdown + YAML front matter,包含 flash_name / vendor / version / page_count
- 质量控制:关键参数表(Register Table, Command Set, AC Timing)需人工抽样校验
| 技术栈 | doclingmarkerPyMuPDF |
| 输入 | SPEC PDF |
| 输出 | 结构化 Markdown 文件YAML metadata |
from docling.document_converter import DocumentConverter
converter = DocumentConverter()
result = converter.convert("MT29F8T08.pdf")
markdown = result.document.export_to_markdown()
Step 1.2 · 文本分块(Chunking)
- 分块策略:按 NAND SPEC 天然结构分段 — Register Table / Command Sequence / AC Timing / Feature Description
- Chunk 大小:800–1200 tokens,重叠 100 tokens
- Metadata 标注:每个 chunk 携带 flash_name / section / page_number / register_name(便于溯源)
Step 1.3 · 向量库构建
- Embedding 模型:本地部署 BGE-M3(中英双语,1024 维)或 OpenAI text-embedding-3-small
- 向量库:FAISS IndexFlatIP(内积检索),本地持久化为 .faiss + .pkl
- 索引构建脚本:遍历所有 Flash 的 md 文件 → 分块 → embedding → 入库
| 技术栈 | FAISSBGE-M3sentence-transformers |
| 输入 | 结构化 Markdown 文件 |
| 输出 | FAISS 向量索引chunk metadata 文件 |
Step 1.4 · RAG 查询管道
- 框架:LlamaIndex 或 LangChain,封装 query → retrieve → rerank → answer 流水线
- Retrieval:FAISS 向量检索 top-10 chunks
- Rerank:BGE-Reranker 对候选 chunk 重排序,取 top-3
- Answer:LLM 合成答案,强制引用来源 section + page_number
# RAG Pipeline
chunks = faiss_index.search(embed(query), k=10)
reranked = reranker.rerank(query, chunks)[:3]
answer = llm.generate(prompt, sources=reranked) # 引用 source + page
Step 1.5 · 提问库构建
- 整理 50–100 个工程高频问题模板(参数查询 / 对比查询 / 操作流程)
- 每个问题绑定 SPEC 章节路径(用于评测 RAG 准确率)
- 持续从实际使用中扩充(用户提问 → 人工标注标准答案)
| 技术栈 | LlamaIndexBGE-RerankerLLM (GPT/DeepSeek) |
| 输入 | 自然语言问题 |
| 输出 | 带溯源的答案来源 section + page |