DB-GPT Graph RAG 部署指南:基于 TuGraph 图数据库的知识图谱检索实战
【免费下载链接】DB-GPTopen-source agentic AI data assistant for the next generation of AI + Data products.项目地址: https://gitcode.com/GitHub_Trending/db/DB-GPT
本文是一份面向开发者的 Graph RAG 安装与配置指南,完整讲解如何在 DB-GPT 中以 TuGraph 图数据库为底层存储构建知识图谱检索(Graph RAG)能力。你将学会:通过uv sync安装 graph_rag 相关依赖、用 Docker 拉起 TuGraph 实例、在dbgpt-graphrag.toml中正确配置图存储连接,并理解从"文档加载 → 三元组抽取 → 图谱存储 → 图谱召回"的完整链路,最终启动 WebServer 让 RAG 应用跑通图谱检索。
为什么用 Graph RAG:从向量检索到图谱检索
DB-GPT 默认的 RAG 方案基于向量数据库,通过把文档切块后向量化来实现语义相似度召回。然而向量检索存在两个天然短板:不确定性(相似度打分缺少可解释性)与可解释性不足(难以向用户说明"为什么召回这一段")。
Graph RAG 的解决思路是:用图数据库来承载知识。文档被 LLM 抽取为(实体、关系、实体)三元组并写入图存储,查询时先在图上做实体/关键词定位,再沿关系边扩展子图召回。这种结构化的检索路径比纯粹的向量近似更可控,也便于溯源——这也是文档中明确指出的核心动机:"Using a graph database to implement RAG can, to some extent, alleviate the uncertainty and interpretability issues brought about by vector database retrieval."
DB-GPT 目前内置的图谱索引体系由多类子图构成(详见 Knowledge Base Indexing Principles):
- LLM 三元组图谱(语义层):
(entity) -predicate- (entity),由 LLM 从文本抽取; - 文档-段落图谱(结构层):
document -include- chunk、chunk -next- chunk,记录文档与切块的包含、阅读顺序关系; - Markdown 标题图谱:
file → H1 → H2 → H3的contains层级; - 代码图谱:基于 AST(tree-sitter)解析出的
function/class节点与defines边。
其中三元组图谱与文档-段落图谱存放在图数据库(TuGraph / Neo4j / Memgraph)中,这正是本篇文章要安装与配置的部分。
第一步:安装 graph_rag 依赖
在仓库根目录执行以下uv sync命令,一次性拉取 base、RAG、图存储、示例运行所必需的全部可选依赖:
uv sync --all-packages \ --extra "base" \ --extra "proxy_openai" \ --extra "rag" \ --extra "storage_chromadb" \ --extra "dbgpts" \ --extra "graph_rag"各 extra 的作用:
| extra | 用途 |
|---|---|
base | DB-GPT 基础运行环境 |
proxy_openai | 通过 OpenAI 兼容接口调用 LLM(用于三元组抽取与问答生成) |
rag | RAG 检索框架(切块、组装器、检索器) |
storage_chromadb | Chroma 向量存储(Graph RAG 示例中向量召回部分依赖) |
dbgpts | DB-GPT 插件/技能体系 |
graph_rag | Graph RAG 专项支持,包含图存储适配与知识图谱构建 |
提示:
graph_ragextra 会引入与 TuGraph 交互的图存储实现,代码位于 packages/dbgpt-ext/src/dbgpt_ext/storage/graph_store/tugraph_store.py。若运行示例时提示缺少dbgpt_tugraph_plugins包,可按源码中的提示安装dbgpt-tugraph-plugins==0.1.1——该包提供 community 检测所需的leiden插件二进制(见TuGraphStore._upload_plugin的实现逻辑)。
第二步:用 Docker 准备 TuGraph 图数据库
TuGraph 是 DB-GPT 支持的首个图数据库。文档建议使用4.5.1 及以上版本的 TuGraph 镜像。最直接的方式是拉取官方运行时镜像并启动容器:
docker pull tugraph/tugraph-runtime-centos7:4.5.1 docker run -d -p 7070:7070 -p 7687:7687 -p 9090:9090 \ --name tugraph_demo \ tugraph/tugraph-runtime-centos7:latest \ lgraph_server -d run --enable_plugin true端口说明:
7070:TuGraph 可视化 Web 管理界面;7687:Bolt 协议端口(默认连接端口),DB-GPT 通过该端口写入与查询图谱;9090:TuGraph HTTP API 端口。
命令中的--enable_plugin true非常关键:DB-GPT 的社区检测(community detection)需要向图数据库动态上传leiden等 C++ 插件,若未开启插件能力,enable_summary等依赖社区摘要的功能将无法工作。
镜像下载提示:若 docker hub 拉取困难,文档同时给出了 OSS 离线包方案——直接下载对应 tar 包并
docker load导入:wget 'https://tugraph-web.oss-cn-beijing.aliyuncs.com/tugraph/tugraph-4.5.1/tugraph-runtime-centos7-4.5.1.tar' -O tugraph-runtime-centos7-4.5.1.tar docker load -i tugraph-runtime-centos7-4.5.1.tar
容器启动后可用curl http://127.0.0.1:7070或直接访问 Web 界面验证服务可用,再进入下一步配置。
第三步:在 dbgpt-graphrag.toml 中配置 TuGraph 连接
仓库根目录已提供 Graph RAG 专属配置模板 configs/dbgpt-graphrag.toml。核心的图存储连接配置如下:
[rag.storage.graph] type = "TuGraph" host = "127.0.0.1" port = 7687 username = "admin" password = "73@TuGraph" enable_summary = "True" enable_similarity_search = "True"其中type需与 tugraph_store.py 中TuGraphStoreConfig.__type__ = "tugraph"对应的注册类型保持一致,源码对大小写做了兼容处理(config.get_type_value() or os.getenv("GRAPH_STORE_TYPE"),见 knowledge_graph.py)。
连接参数源码级解读
TuGraphStoreConfig 的字段可通过配置文件或环境变量两种途径生效,环境变量优先级低于显式配置(config.host or os.getenv("TUGRAPH_HOST")):
| 参数 | 默认值 | 说明 |
|---|---|---|
host | 127.0.0.1 | TuGraph 主机地址,环境变量TUGRAPH_HOST |
port | 7687 | Bolt 协议端口,环境变量TUGRAPH_PORT |
username | admin | 登录用户名,环境变量TUGRAPH_USERNAME |
password | 73@TuGraph | 登录密码,环境变量TUGRAPH_PASSWORD |
vertex_type | entity | 实体顶点类型名 |
document_type | document | 文档顶点类型名 |
chunk_type | chunk | 切块顶点类型名 |
edge_type | relation | 关系边类型名 |
include_type | include | 包含边类型名(document→chunk) |
next_type | next | 顺序边类型名(chunk 阅读顺序) |
plugin_names | ['leiden'] | 启动时自动上传的图算法插件列表(环境变量TUGRAPH_PLUGIN_NAMES) |
enable_summary | True | 是否启用图社区摘要(环境变量GRAPH_COMMUNITY_SUMMARY_ENABLED) |
enable_similarity_search | False | 是否启用图谱向量相似度检索(环境变量SIMILARITY_SEARCH_ENABLED) |
更多高级参数(模板中默认注释)
dbgpt-graphrag.toml中还提供了丰富的进阶配置项,按需取消注释即可启用:
# enable_summary = "True" # community_topk = 20 # 社区召回数量 # community_score_threshold = 0.3 # 社区召回分数阈值 # triplet_graph_enabled = "True" # 启用三元组子图 # extract_topk = 20 # 三元组抽取召回 top-k # document_graph_enabled = "True" # 启用文档-段落结构子图 # knowledge_graph_chunk_search_top_size = 20 # knowledge_graph_extraction_batch_size = 20 # enable_similarity_search = "True" # 启用相似度检索 # knowledge_graph_embedding_batch_size = 20 # similarity_search_topk = 5 # extract_score_threshold = 0.7 # enable_text_search = "True" # 启用文本检索 # text2gql_model_enabled = "True" # 启用 Text2GQL 模型 # text2gql_model_name = "qwen2.5:latest"这些参数与 CommunitySummaryKnowledgeGraph 的构造参数一一对应(如kg_community_top_k、kg_extract_top_k、kg_triplet_graph_enabled、kg_document_graph_enabled、kg_text2gql_model_name等),每个参数在初始化时都会回退到对应环境变量读取,例如kg_community_top_k对应KNOWLEDGE_GRAPH_COMMUNITY_SEARCH_TOP_SIZE。
第四步:启动 WebServer
配置完成后,使用--config指定 Graph RAG 配置启动服务:
uv run python packages/dbgpt-app/src/dbgpt_app/dbgpt_server.py --config configs/dbgpt-graphrag.toml启动后默认监听0.0.0.0:5670([service.web]配置段),服务会将 RAG 相关请求路由到启用了图谱检索的知识库上。
备选方案:若你已有自己的 LLM 服务配置(如 OpenAI 代理),也可以直接使用通用代理配置启动:
uv run python packages/dbgpt-app/src/dbgpt_app/dbgpt_server.py --config configs/dbgpt-proxy-openai.toml两种方式的差异在于模型来源配置(
[models]段),图谱存储配置段([rag.storage.graph])需要保持相同。
从源码理解 Graph RAG 的完整工作流
仓库提供了可直接运行的官方示例 examples/rag/graph_rag_example.py,其核心流程清晰地展示了"写入图谱 → 图谱召回 → LLM 作答"三步走:
# 1. 构建知识图谱连接器(三元组图谱) kg = BuiltinKnowledgeGraph( config=TuGraphStoreConfig(), name="naive_graph_rag_test", embedding_fn=None, llm_client=llm_client, llm_model=model_name, ) # 2. 文档 -> 切块 -> 图谱持久化 assembler = await EmbeddingAssembler.aload_from_knowledge( knowledge=knowledge, chunk_parameters=chunk_parameters, index_store=kg, retrieve_strategy=RetrieverStrategy.GRAPH, # 指定 GRAPH 检索策略 ) await assembler.apersist() # 3. 图谱召回并交给 LLM 生成答案 retriever = assembler.as_retriever(1) chunks = await retriever.aretrieve_with_scores(question, score_threshold=0.3) print(await ask_chunk(chunks[0], question))示例中内置了两组测试用例(可用pytest -s examples/rag/graph_rag_example.py运行),可对照理解两种图构建模式:
| 测试函数 | 图类型 | 切块策略 | 特点 |
|---|---|---|---|
test_naive_graph_rag | BuiltinKnowledgeGraph | CHUNK_BY_SIZE(按固定大小切块) | 仅构建 LLM 三元组图谱,无需 embedding |
test_community_graph_rag | CommunitySummaryKnowledgeGraph | CHUNK_BY_MARKDOWN_HEADER(按标题切块) | 在基础图谱上叠加社区检测与摘要,需 embedding 函数 |
示例使用的测试数据为 examples/test_files/graphrag-mini.md,其内容本身就是"TuGraph 项目生态图谱"与"DB-GPT 项目生态图谱"的实体-关系清单,例如(TuGraph-family/tugraph-db#common_developer#vesoft-inc/nebula),非常适合验证三元组抽取与图谱召回效果。
底层实现链路
- 三元组抽取:BuiltinKnowledgeGraph 在
load_document/aload_document中调用TripletExtractor对每个 chunk 抽取(subject, predicate, object)三元组,再通过GraphStoreAdapter.insert_triplet写入图库。 - 关键词召回:检索阶段
asimilar_search_with_scores先用KeywordExtractor从问题中抽取关键词,再调用explore_trigraph在图库中定位实体并扩展子图,最后把子图以实体/关系列表的形式构造成 context chunk(见 knowledge_graph.py)。 - 社区摘要:启用
enable_summary后,CommunitySummaryKnowledgeGraph会利用leiden插件做社区发现,并对每个社区生成 LLM 摘要,检索时按community_topk与community_score_threshold召回社区摘要,从而覆盖三元组无法直接命中的宏观问题。 - 多路召回组合:图检索器支持
triplet_graph_enabled(三元组子图)与document_graph_enabled(文档结构子图)同时开启,并结合向量相似度搜索(similarity_search_topk)做混合召回,相关逻辑位于 packages/dbgpt-ext/src/dbgpt_ext/rag/retriever/graph_retriever/graph_retriever.py。
参数速查:TuGraphStoreConfig
完整的参数参考可查看 TuGraphStoreConfig 配置文档,核心可配项即上表所列。注意enable_similarity_search默认值为False,示例配置文件显式置为"True"是为了让图谱召回同时享受向量语义检索的增益——该能力要求你同时在[models.embeddings]段配置好 embedding 模型。
相关阅读
- Knowledge Base Indexing Principles —— 文档从"原始文件"到"可检索索引"的完整索引原理,涵盖向量、关键词、知识图谱三类持久化索引与结构树、代码图谱两类叠加能力;
- Agentic RAG Conversation Principles —— 问题如何经过 agentic 检索循环最终变成带引用的回答;
- RAG module reference —— RAG 模块整体参考文档,包含检索器、组装器与存储抽象。
【免费下载链接】DB-GPTopen-source agentic AI data assistant for the next generation of AI + Data products.项目地址: https://gitcode.com/GitHub_Trending/db/DB-GPT
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考