写在前面
构建一个具有"记忆能力"的 AI 知识库,核心挑战不是选择某一个"最好的"数据库,而是根据知识库的规模、能力需求和团队条件,设计出一套合理的数据库组合方案。
一个完整的 AI 知识库通常需要三类数据存储能力协同工作:
存储类型 | 解决的问题 | 典型技术 |
向量数据库 | "这段内容和用户的问题语义上有多相关?" | Milvus、Qdrant、Weaviate、pgvector |
图数据库 | "这个知识点和哪些其他知识有关联?关系链是什么?" | Neo4j、NebulaGraph、Apache AGE |
关系型数据库 | "这条知识是谁创建的?属于哪个空间?什么时候修改的?" | PostgreSQL、MySQL |
本文将分别总结主流向量数据库和图数据库的核心特点,然后给出不同等级 AI 知识库的选型建议。
第一部分:向量数据库 —— 语义检索的基石
1.1 为什么 AI 知识库需要向量数据库
传统的关键词检索(如 BM25)只能匹配字面表述。而用户提问的方式千变万化——"公司的带薪休假政策"和"年假怎么请"说的是同一件事,但关键词完全不同。向量数据库通过将文本转化为高维向量(Embedding),用数学上的距离度量(余弦相似度、欧几里得距离等)来衡量语义相关性,从而实现"理解含义"的检索。
在 RAG(检索增强生成)架构中,向量数据库扮演的角色是:将用户查询向量化 → 在知识库的向量索引中找到最相关的文本片段(Chunk)→ 将这些片段作为上下文喂给 LLM 生成回答。
1.2 主流开源向量数据库特点速览
Milvus —— 企业级大规模向量检索
- 定位: 为处理亿级~万亿级向量数据而设计的分布式向量数据库
- 核心优势: GPU 加速、计算存储分离、支持 IVF/HNSW/PQ/CAGRA 多种索引、原生分布式分片、多语言 SDK(Python/Java/Go)
- 性能参考: 插入吞吐约 12 万条/秒,查询延迟约 20ms(大规模场景)
- 适用场景: 多租户企业级知识库、亿级以上向量规模、需要 GPU 加速的场景
- 注意事项: 分布式部署运维复杂度较高,需要专门的运维能力
Qdrant —— 高性能与开发体验的平衡
- 定位: 基于 Rust 的高性能向量数据库,专注混合搜索和元数据过滤
- 核心优势: Rust 实现带来极致的内存安全和资源利用率、丰富的负载过滤(嵌套条件、地理位置、数值范围)、HNSW 高召回率、REST/gRPC API
- 适用场景: 百万~十亿级向量、需要复杂元数据过滤的混合搜索、多租户应用、推荐系统
- 注意事项: 运维简洁,适合中等规模团队;水平扩展能力不如 Milvus
Weaviate —— 内置向量化的语义知识库
- 定位: 将对象与向量结合的"语义知识图谱"式向量数据库
- 核心优势: 内置向量化模块(对接 OpenAI/Cohere/HuggingFace,导入时自动 Embedding)、BM25 + 向量混合搜索、GraphQL API、模块化架构
- 适用场景: 想减少 Embedding 管线开发工作量的团队、GraphQL 技术栈、需要混合搜索
- 注意事项: GraphQL 查询方式有一定学习成本
Chroma —— 轻量级开发者友好
- 定位: 为 LLM 和 RAG 应用设计的轻量嵌入数据库
- 核心优势: API 极简(几行代码即可上手)、与 LangChain/LlamaIndex 深度集成、支持内存或磁盘持久化
- 适用场景: 原型验证、个人知识库、数据量在百万级以下的小型项目
- 注意事项: 不适合大规模生产部署,缺乏分布式能力
pgvector —— PostgreSQL 生态的向量扩展
- 定位: 为 PostgreSQL 增加向量相似度搜索能力的扩展
- 核心优势: 零额外基础设施、SQL + 向量混合查询、配合 pgvectorscale 性能大幅提升(5000 万向量下可达 471 QPS / 99% 召回率)
- 适用场景: 已有 PostgreSQL 基础设施、数据量在千万级以下、追求架构极简
- 注意事项: 超过千万级向量后性能下降明显,无 GPU 加速,单机架构
FAISS —— 极致性能的底层搜索库
- 定位: Meta 开源的向量搜索库(非数据库),C++ 实现 + Python 绑定
- 核心优势: CPU/GPU 双优化、多种索引类型、极高的批量搜索性能
- 适用场景: 嵌入到自研系统中、离线批量计算、学术研究
- 注意事项: 是库不是服务,没有持久化、API、权限管理等数据库能力
1.3 向量数据库关键维度对比
维度 | Milvus | Qdrant | Weaviate | Chroma | pgvector | FAISS |
实现语言 | Go/C++ | Rust | Go | Python | C/SQL | C++/Python |
分布式能力 | 原生分布式 | 水平扩展 | 集群 | 不支持 | 随PG(单机) | 不支持 |
HNSW 支持 | ✓ | ✓(默认) | ✓(默认) | ✓ | ✓ | ✓ |
混合搜索 | 支持 | 优秀 | 优秀 | 基础 | SQL+向量 | 不支持 |
适合向量规模 | 亿~万亿 | 百万~十亿 | 百万~十亿 | 万~百万 | 万~千万 | 亿(离线) |
运维复杂度 | 高 | 中低 | 中 | 极低 | 极低 | 无需运维 |
托管服务 | Zilliz Cloud | Qdrant Cloud | Weaviate Cloud | 有 | 各PG云 | 无 |
第二部分:图数据库 —— 知识关联与推理的引擎
2.1 为什么 AI 知识库需要图数据库
向量检索能找到"语义相关"的内容,但无法回答"这个概念和那个概念之间有什么关系"、"沿着这条关系链能推导出什么结论"这类问题。图数据库正是解决这一问题的利器。
在 GraphRAG 架构中,图数据库的角色是:存储从文档中提取的实体和关系 → 当用户提问时,先识别查询中的实体 → 在图谱中做多跳遍历找到关联知识 → 与向量检索结果融合后喂给 LLM。
GraphRAG 相比传统 RAG 的核心优势在于:能回答需要跨多个文档、多步推理才能得出答案的复杂问题。
2.2 主流图数据库特点速览
Neo4j —— 生态最成熟的图数据库
- 定位: 最广泛采用的图数据库,开发者体验和工具生态最佳
- 核心优势: 原生图存储(index-free adjacency)、Cypher 声明式查询语言、GDS 库含 70+ 图算法(PageRank/社区检测/最短路径/节点嵌入)、5.x 起内置 HNSW 向量索引、LangChain/LlamaIndex 原生集成
- 性能参考: LDBC SNB 基准测试中查询执行时间、CPU 和内存消耗均最优(单机场景)
- 适用场景: GraphRAG(最佳选择)、知识图谱、推荐系统、欺诈检测
- 注意事项: 社区版不支持集群,水平扩展需企业版(商业许可)
NebulaGraph —— 大规模分布式图数据库
- 定位: 面向千亿节点、万亿边的开源分布式图数据库
- 核心优势: 存算分离原生分布式架构、完全开源(Apache 2.0,社区版即支持分布式)、大数据量性能优异、nGQL + 兼容 openCypher
- 性能参考: 腾讯云实测大数据量下查询性能显著优于 Neo4j;美团从 30+ 图数据库中选型最终采用
- 适用场景: 超大规模知识图谱(十亿级+)、安全反欺诈、国产化选型
- 注意事项: 图算法库不如 Neo4j 丰富,运维复杂度较高
TigerGraph —— 极致并行的图分析引擎
- 定位: 为大规模图分析和深度遍历设计的分布式图数据库
- 核心优势: 原生并行处理、深度遍历(10+ 跳)性能极强、GSQL 图灵完备查询语言、自动分区、GraphStudio 可视化
- 适用场景: 超大规模图分析、实时深度遍历、金融风控、图机器学习
- 注意事项: GSQL 为专有语言(厂商锁定风险),社区版功能受限
JanusGraph —— 可插拔存储的分布式图数据库
- 定位: 基于 TinkerPop/Gremlin 生态的可插拔架构图数据库
- 核心优势: 存储后端可选 Cassandra/HBase/Bigtable、索引后端可选 ES/Solr、Gremlin 查询语言跨平台通用
- 适用场景: 已有 Cassandra/HBase 基础设施、需要 Gremlin 可移植性
- 注意事项: 查询性能相对较弱(非原生图存储),运维复杂度最高,社区活跃度下降
Amazon Neptune —— AWS 全托管图服务
- 定位: AWS 生态下零运维的图数据库托管服务
- 核心优势: 全托管(自动备份/复制/故障转移)、同时支持 Gremlin/SPARQL/openCypher、AWS 生态深度集成
- 适用场景: 全栈 AWS 团队、零运维需求、中小规模图数据
- 注意事项: 完全绑定 AWS,成本不透明,图算法库有限
Apache AGE —— PostgreSQL 的图扩展
- 定位: 在 PostgreSQL 内提供 Cypher 图查询能力
- 核心优势: 零额外基础设施、SQL + Cypher 混合查询、继承 PG 全部能力(ACID/备份/复制)、可与 pgvector 配合
- 适用场景: 已有 PG 基础设施、简单图查询(1-2 跳)、架构极简化需求
- 注意事项: 图查询性能远弱于原生图数据库,无内置图算法,成熟度有待提升
2.3 图数据库关键维度对比
维度 | Neo4j | NebulaGraph | TigerGraph | JanusGraph | Neptune | Apache AGE |
开源程度 | 社区版开源 | 完全开源 | 社区版免费 | 完全开源 | 商业 | 完全开源 |
分布式能力 | 仅企业版 | 原生分布式 | 原生分布式 | 依赖存储后端 | 云托管 | 随PG(单机) |
查询语言 | Cypher | nGQL/Cypher | GSQL | Gremlin | 多语言 | Cypher(SQL内) |
内置图算法 | 极丰富(70+) | 基础 | 丰富 | 无 | 有限 | 无 |
GraphRAG 生态 | 最佳 | 有集成 | 有限 | 有限 | 有限 | 早期 |
向量索引支持 | 内置HNSW | 无 | 无 | 无 | 有 | 配合pgvector |
适合数据规模 | 百万~千万 | 亿~千亿 | 亿~百亿 | 亿级 | 百万~亿 | 百万以下 |
第三部分:不同等级 AI 知识库的选型方案
根据知识库的规模、团队能力和功能需求,我们将 AI 知识库分为五个等级,从简到繁,给出具体的数据库选型建议。
L1 级:个人知识助手
场景画像: 个人用户或小团队,知识量在几千到几万条,主要是文档问答和笔记检索,不需要知识图谱。
核心需求: 基础 RAG 语义检索、简单的知识记录和查询、快速上手。
推荐方案:
┌─────────────────────────────────────────┐│ PostgreSQL (单实例) ││ ┌──────────┐ ┌──────────┐ ││ │ 结构化数据 │ │ pgvector │ ││ │ 元数据/用户│ │ 向量检索 │ ││ └──────────┘ └──────────┘ │└─────────────────────────────────────────┘ │ ▼ LLM (RAG 问答)组件 | 选择 | 理由 |
向量检索 | pgvector | 一个 PG 实例搞定一切,零额外运维 |
结构化存储 | PostgreSQL | 同一实例 |
图数据库 | 不需要 | 此阶段知识关联需求简单,SQL JOIN 即可 |
LLM 编排 | LangChain / LlamaIndex | 成熟的 RAG 框架 |
成本与复杂度: ★☆☆☆☆(一台服务器即可运行)
升级信号: 当向量数量超过 500 万、或者出现"需要跨多个文档推理"的查询需求时,考虑升级到 L2。
L2 级:团队知识库
场景画像: 中小企业或部门级使用,知识量在几十万到几百万条,需要多用户协作、基础的知识分类和偏好个性化。
核心需求: 高质量 RAG 检索、多用户权限隔离、知识分类和标签、用户画像初步应用。
推荐方案:
┌──────────────┐ ┌──────────────┐│ PostgreSQL │ │ Qdrant ││ 结构化元数据 │ │ 向量检索 ││ 用户/权限 │ │ HNSW索引 ││ 知识条目 │ │ 元数据过滤 │└──────┬───────┘ └──────┬───────┘ │ │ └──────┬──────────────┘ ▼ Retrieval Service (多路检索 + RRF融合) │ ▼ LLM (RAG 问答)组件 | 选择 | 理由 |
向量检索 | Qdrant | 性能优秀、元数据过滤丰富(支持按 space_id 分区隔离)、运维简洁 |
结构化存储 | PostgreSQL | 用户/权限/知识条目等结构化数据 |
图数据库 | 暂不引入 | 可用 PostgreSQL 邻接表做简单的知识关联 |
缓存 | Redis | 热点查询缓存、会话管理 |
备选向量库: 如果团队已有 PostgreSQL 且向量规模在 500 万以下,可继续用 pgvector + pgvectorscale 作为过渡。
成本与复杂度: ★★☆☆☆(两个核心服务:PG + Qdrant)
升级信号: 当出现"需要理解知识之间的关联关系"、"需要社区检测做知识聚类"等 GraphRAG 需求时,升级到 L3。
L3 级:智能知识空间(引入 GraphRAG)
场景画像: 企业级知识管理平台,知识量达百万~千万级,需要 GraphRAG 提升复杂问题的回答质量,需要知识自动整理、冲突检测、用户画像。
核心需求: 向量检索 + 图检索双通道 RAG、知识图谱构建与维护、知识冲突检测、社区检测与知识聚类、用户画像驱动的个性化回答。
推荐方案:
┌──────────────┐ ┌──────────────┐ ┌──────────────┐│ PostgreSQL │ │ Qdrant │ │ Neo4j ││ 结构化元数据 │ │ 向量检索 │ │ 知识图谱 ││ 用户/权限 │ │ HNSW索引 │ │ 实体-关系 ││ 画像/Agent │ │ Chunk向量 │ │ 图算法(GDS) │└──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │ │ │ └─────────┬────────┴──────────────────┘ ▼ Retrieval Service ┌────────────────────────────┐ │ 向量检索路: Query→Qdrant │ │ 图检索路: 实体→Neo4j遍历 │ │ 关键词路: BM25 (ES/PG) │ │ ──→ RRF 融合排序 ──→ │ └────────────┬───────────────┘ ▼ Prompt 组装 (系统Prompt + 画像 + 上下文) │ ▼ LLM 生成回答组件 | 选择 | 理由 |
向量检索 | Qdrant 或 Milvus | Qdrant 运维简洁适合多数场景;向量超千万可选 Milvus |
图数据库 | Neo4j | GraphRAG 生态最佳、GDS 图算法库最丰富(社区检测/PageRank 是 GraphRAG 核心依赖)、内置向量索引可做图+向量联合查询 |
结构化存储 | PostgreSQL | 元数据、用户、权限、Agent 配置、冲突日志等 |
全文检索 | Elasticsearch 或 PostgreSQL FTS | BM25 关键词检索,与向量检索互补 |
缓存 | Redis | 查询缓存、画像缓存、会话管理 |
消息队列 | RabbitMQ / Kafka | 文件解析、知识整理等异步任务 |
为什么此阶段选 Neo4j 而不是 NebulaGraph:
- GraphRAG 的核心操作是社区检测(Louvain/Leiden 算法)和知识摘要,Neo4j GDS 原生支持,NebulaGraph 需要自行实现
- Neo4j 是 LangChain/LlamaIndex 对图数据库集成支持最好的选项
- 此阶段数据规模(百万~千万节点)在 Neo4j 单机能力范围内
- Neo4j 5.x 内置向量索引,可在一条 Cypher 查询中同时做图遍历和向量搜索,简化架构
成本与复杂度: ★★★☆☆(三个核心数据库:PG + Qdrant/Milvus + Neo4j)
升级信号: 当知识图谱节点超过亿级、或需要多数据中心部署、或 Neo4j 企业版成本不可接受时,升级到 L4。
L4 级:企业级知识平台(大规模分布式)
场景画像: 大型企业或 SaaS 平台,多租户、知识量达亿级以上,需要高可用、弹性扩缩容、多数据中心部署。
核心需求: 全分布式架构、多租户强隔离、亿级向量和图谱的高性能检索、99.9%+ 可用性。
推荐方案:
┌──────────────┐ ┌──────────────┐ ┌──────────────┐│ PostgreSQL │ │ Milvus │ │ NebulaGraph ││ (主从集群) │ │ (分布式集群) │ │ (分布式集群) ││ 结构化元数据 │ │ 向量检索 │ │ 知识图谱 ││ RLS行级隔离 │ │ GPU加速 │ │ 存算分离 │└──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │ │ │ └─────────┬────────┴──────────────────┘ ▼ Retrieval Service (集群) │ ▼ LLM 编排层 (多模型路由 + 成本优化)组件 | 选择 | 理由 |
向量检索 | Milvus | 亿级向量原生分布式、GPU 加速、多种索引组合灵活调优 |
图数据库 | NebulaGraph | 完全开源分布式(无许可费)、存算分离架构弹性扩展、大数据量性能优于 Neo4j |
结构化存储 | PostgreSQL 集群 | Patroni/Citus 实现高可用和水平扩展 |
全文检索 | Elasticsearch 集群 | 分布式 BM25 + 聚合分析 |
缓存 | Redis Cluster | 分布式缓存 |
对象存储 | MinIO / S3 | 原始文件存储 |
为什么此阶段从 Neo4j 迁移到 NebulaGraph:
- Neo4j 社区版不支持分布式,企业版许可费高昂
- NebulaGraph 完全开源,社区版即支持分布式,无许可费用
- 存算分离架构在弹性扩缩容方面更灵活
- 亿级以上数据导入和查询性能优于 Neo4j
注意事项: NebulaGraph 的图算法能力弱于 Neo4j GDS,GraphRAG 中的社区检测等算法可能需要通过 Spark + GraphX 等外部计算框架补充。
成本与复杂度: ★★★★☆(需要专业的运维团队)
L5 级:AI 原生知识中枢(前沿架构)
场景画像: 超大规模平台或研究型项目,追求最前沿的知识管理能力,包括多模态知识、知识自动演化、跨语言知识融合等。
核心需求: 在 L4 基础上,增加多模态向量检索(图片/音频/视频)、知识图谱自动演化、实时流式知识更新、图神经网络推理。
在 L4 基础上的增强:
增强方向 | 技术选择 | 说明 |
多模态向量 | Milvus(支持多向量字段)+ CLIP/ImageBind Embedding | 同一知识条目存储文本向量和图片向量 |
实时知识流 | Kafka + Flink + Milvus Streaming Ingestion | 知识实时写入,毫秒级可检索 |
图神经网络 | NebulaGraph + DGL / PyG | 图嵌入用于知识推荐和补全 |
知识演化 | 时序图谱(带时间戳的边)+ 定时 LLM 整理任务 | 追踪知识变化历史,自动发现过时知识 |
跨语言融合 | 多语言 Embedding(BGE-M3)+ 语言无关的向量空间 | 不同语言的知识在同一向量空间中检索 |
成本与复杂度: ★★★★★(需要 AI 工程和数据库双重专业团队)
第四部分:选型决策总览
4.1 一张图看全局
知识规模 向量数据库 图数据库 架构复杂度─────────────────────────────────────────────────────────────< 50万条 pgvector 不需要/AGE ★☆☆☆☆ (PG一站式) (PG内嵌)50万~500万 Qdrant 不需要 ★★☆☆☆ (独立部署) (PG邻接表)500万~5000万 Qdrant/Milvus Neo4j ★★★☆☆ + BM25(ES) (GraphRAG)5000万~10亿 Milvus NebulaGraph ★★★★☆ (分布式集群) (分布式集群)> 10亿 Milvus(GPU) NebulaGraph ★★★★★ + 多模态 + 图计算框架4.2 关键决策因素清单
在做最终选型时,建议按以下优先级逐项评估:
第一优先级:数据规模
- 这是最硬性的约束。pgvector 在千万级以上力不从心,Neo4j 社区版在亿级以上力不从心。选错了后期迁移成本极高。
第二优先级:功能需求
- 是否需要 GraphRAG?如果是,必须引入图数据库。
- 是否需要复杂的图算法(社区检测、PageRank)?如果是,Neo4j GDS 是最省力的选择。
- 是否需要向量+关键词混合搜索?如果是,优先选支持混合搜索的方案。
第三优先级:团队能力
- 团队有几个人?能承受多大的运维复杂度?
- 对分布式系统的运维经验如何?
- 对 Cypher/Gremlin/nGQL 的学习意愿如何?
第四优先级:已有基础设施
- 已有 PostgreSQL → pgvector/AGE 起步成本最低
- 已有 Cassandra → JanusGraph 可复用
- 全栈 AWS → Neptune 最省心
- 已有 Kubernetes → 各种自建部署都方便
第五优先级:预算约束
- Neo4j 企业版需要商业许可(不便宜)
- Milvus/NebulaGraph/Qdrant 完全开源,无许可费
- 云托管服务(Zilliz Cloud/Qdrant Cloud/Neo4j Aura)按量付费,小规模友好但大规模可能比自建贵
第五部分:务实建议 —— 从简单开始,按需演进
构建 AI 知识库最常见的错误是过度设计。很多团队一上来就想搭建 L4 级别的全分布式架构,结果在基础功能都没跑通之前就被运维复杂度拖垮了。
我们的核心建议是:从 L1 或 L2 开始,快速验证核心价值,然后根据真实的规模增长和功能需求逐步升级。
具体来说:

- 第一步:用 PostgreSQL + pgvector 快速搭建 MVP,验证 RAG 的基本效果和用户需求。这可能只需要一个周末。
- 第二步:当 pgvector 性能不够或需要更强的混合搜索时,引入 Qdrant 作为独立的向量数据库。PostgreSQL 继续负责结构化数据。
- 第三步:当需要 GraphRAG 能力时,引入 Neo4j。这是架构复杂度增加最大的一步,但也是知识库智能化的关键一步。
- 第四步:当数据规模突破单机极限时,考虑向 Milvus + NebulaGraph 的分布式架构迁移。
每一步都有清晰的"升级信号",不需要提前规划好所有细节,只需要在架构设计时留好扩展口(比如通过统一的 knowledge_item_id 关联各存储层,通过 Retrieval Service 抽象检索逻辑)。
数据库是手段,不是目的。让知识库先跑起来、产生价值,比选一个"完美"的数据库组合重要得多。