1. 项目概述
在信息爆炸的时代,我们每天都在处理海量的知识碎片——会议记录、技术文档、研究论文、个人笔记等等。传统的知识管理方式往往止步于"存储"和"检索",却难以建立知识之间的有机联系。这正是我着手构建"私有第二大脑"的初衷:一个不仅能存储信息,更能理解信息间关联的智能知识系统。
Graph-RAG(图检索增强生成)技术为解决这一问题提供了新思路。与传统的RAG(检索增强生成)相比,Graph-RAG不仅能够找到相关文本片段,还能揭示这些片段背后的实体关系网络。想象一下,当你查询"Graph-RAG"时,系统不仅能告诉你它的定义,还能展示它与知识图谱、Neo4j、传统RAG等技术的关系链——这正是知识工作者梦寐以求的"关联式思考"能力。
本文将分享如何从零开始搭建一个最小可用的本地Graph-RAG系统。这个系统具备以下核心能力:
- 原始文本的清洗与结构化存储
- 基于语义的向量检索
- 实体关系的自动抽取与图谱构建
- 智能问答的流程编排
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心架构设计
2.1 四层架构解析
我们的系统采用分层设计,每层各司其职:
-
原始文本层:作为知识源头,存储Markdown、TXT及PDF转换后的纯文本,保留完整的原始信息。关键设计点在于为每篇文档维护可追溯的元数据,包括:
- doc_id:唯一文档标识
- title:文档标题
- source:来源路径
- created_at:创建时间戳
- content:清洗后的正文内容
-
向量检索层:使用轻量级的Chroma实现语义搜索。这一层的核心价值是将用户查询转换为向量后,从海量文本中快速召回最相关的片段。我们特别设计了chunk机制:
- 动态切块(600字符/块,重叠120字符)
- 保留段落完整性
- 每个chunk附带来源信息
-
图谱层:基于Neo4j构建的知识网络。这里我们不仅存储实体本身,更重要的是捕获实体间的关系类型:
mermaid复制graph LR Document-->|HAS_CHUNK|Chunk Chunk-->|MENTIONS|Entity Entity-->|RELATED_TO|Entity Entity-->|PART_OF|Entity -
Agent编排层:用LangGraph实现的智能流程控制器。它像乐队的指挥,协调各个组件的协作:
- 接收用户问题
- 调用向量检索
- 识别核心实体
- 查询关系网络
- 生成最终答案
2.2 技术选型考量
在选择技术栈时,我们特别考虑了以下因素:
| 组件 | 候选方案 | 选择理由 |
|---|---|---|
| 向量库 | Chroma/FAISS | Chroma的本地持久化和Python集成更友好 |
| 图数据库 | Neo4j/ArangoDB | Neo4j的Cypher查询语言对关系查询更直观 |
| 本地模型 | Ollama/sentence-transformers | 平衡性能与资源消耗 |
| 流程编排 | LangGraph/Pure Python | LangGraph提供可视化调试优势 |
提示:在验证阶段,建议选择文档齐全、社区活跃的工具,这能显著降低排错成本。
