第 5 章 · 工程内幕:分包、运行时、增量与代码地图
这章讲什么: 前四章讲"算法怎么跑",这章讲"工程怎么搭"——GraphRAG 为什么拆成 8 个包、流水线运行时怎么做到可续跑、存储/缓存/向量库怎么被抽象成可换实现、增量更新怎么只处理新文档。最后给一张贯穿全项目的总代码地图。
5.1 monorepo:按"能力"切成 8 个包
仓库是 uv workspace(pyproject.toml 的 [tool.uv.workspace] members = ["packages/*"])。8 个包各管一件事,主包 graphrag 是"编排壳",其余是可独立复用的能力包:
| 包 | 管什么 | 关键入口 |
|---|---|---|
graphrag | 主壳:workflow 编排、query、CLI、config、data_model | api/,index/,query/,cli/ |
graphrag-chunking | 文本切块策略(token/句子) | chunker_factory.create_chunker |
graphrag-llm | LLM 补全/嵌入、tokenizer、指标、消息构造 | completion.create_completion,CompletionMessagesBuilder |
graphrag-vectors | 向量库抽象 + 多后端实现 | vector_store_factory,VectorStore |
graphrag-cache | LLM 结果缓存(内存/JSON…) | cache_factory,Cache |
graphrag-storage | 输出存储 + 表抽象(文件/blob/cosmos) | storage_factory,TableProvider,Table |
graphrag-input | 读入原始文档(csv/txt/json/parquet…) | input_reader,TextDocument |
graphrag-common | 跨包公共件(哈希、配置加载、通用工厂基类) | hasher,load_config,factory |
贯穿全项目的模式:工厂 + 注册表。 PipelineFactory(workflow)、create_chunker、create_completion、vector_store_factory、cache_factory、storage_factory 全是同一套路:按配置里的"类型名"造实现,且允许注册自定义实现。带来的性质是每个能力都可替换——想换向量库/换缓存后端/加自定义 workflow,都不用改主流程。