DB-GPT项目中的Graph RAG应用开发指南
DB-GPT DB-GPT - 一个开源的数据库领域大模型框架,旨在简化构建数据库大模型应用的过程。 项目地址: https://gitcode.com/gh_mirrors/db/DB-GPT
引言
在当今知识密集型应用中,检索增强生成(RAG)技术已成为连接大型语言模型与外部知识库的重要桥梁。DB-GPT项目创新性地将图数据库技术引入RAG框架,开发出Graph RAG解决方案,有效解决了传统向量检索中存在的不确定性和可解释性问题。本文将深入解析如何在DB-GPT项目中开发基于图数据库的RAG应用。
核心概念解析
什么是Graph RAG?
Graph RAG是DB-GPT项目中提出的创新架构,它将知识以图结构存储在图数据库中,通过图查询而非向量相似度来检索相关信息。相比传统RAG,Graph RAG具有以下优势:
- 检索结果更具可解释性,可以清晰展示实体间的关系路径
- 能够处理复杂的多跳查询,发现隐藏的关联关系
- 支持结构化查询,减少幻觉现象
关键技术组件
DB-GPT的Graph RAG实现包含三个核心组件:
- 知识图谱构建:将非结构化文档转换为包含实体、关系的图结构
- 图检索引擎:支持多种检索模式,包括关键词检索、相似度检索和Text2GQL
- 社区摘要系统:对图结构进行智能摘要,提升检索效率
环境准备
依赖安装
首先需要安装DB-GPT的核心库及其扩展组件:
uv sync --all-packages --frozen \
--extra "proxy_openai" \
--extra "rag" \
--extra "storage_chromadb" \
--extra "dbgpts"
--extra "graph_rag"
图数据库部署
DB-GPT目前主要支持TuGraph图数据库,推荐使用Docker快速部署:
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
关键端口说明:
- 7687:Bolt协议端口(默认图数据库连接端口)
- 7070:HTTP接口端口
- 9090:RPC端口
核心开发流程
1. 配置连接参数
在项目根目录下的.env
文件中配置图数据库连接信息:
GRAPH_STORE_TYPE=TuGraph
TUGRAPH_HOST=127.0.0.1
TUGRAPH_PORT=7687
TUGRAPH_USERNAME=admin
TUGRAPH_PASSWORD=73@TuGraph
2. 知识图谱构建
DB-GPT提供了CommunitySummaryKnowledgeGraph
类来构建带有社区摘要功能的知识图谱:
from dbgpt.storage.knowledge_graph.community_summary import (
CommunitySummaryKnowledgeGraph,
CommunitySummaryKnowledgeGraphConfig,
)
def create_community_kg_connector():
return CommunitySummaryKnowledgeGraph(
config=CommunitySummaryKnowledgeGraphConfig(
name="my_knowledge_graph",
embedding_fn=DefaultEmbeddingFactory.openai(),
llm_client=llm_client,
model_name="gpt-4",
graph_store_type="TuGraphGraph",
)
)
3. 文档加载与处理
DB-GPT支持从多种格式的文档构建知识图谱:
from dbgpt_ext.rag import ChunkParameters
from dbgpt_ext.rag.assembler import EmbeddingAssembler
from dbgpt_ext.rag.knowledge import KnowledgeFactory
file_path = "path/to/your/document.md"
knowledge = KnowledgeFactory.from_file_path(file_path)
chunk_parameters = ChunkParameters(chunk_strategy="CHUNK_BY_MARKDOWN_HEADER")
assembler = await EmbeddingAssembler.aload_from_knowledge(
knowledge=knowledge,
chunk_parameters=chunk_parameters,
index_store=knowledge_graph,
retrieve_strategy=RetrieverStrategy.GRAPH,
)
await assembler.apersist()
支持的分块策略包括:
CHUNK_BY_MARKDOWN_HEADER
:按Markdown标题结构分块CHUNK_BY_SEPARATOR
:按分隔符分块CHUNK_BY_SIZE
:按固定大小分块
4. 知识检索与问答
构建完成后,可以通过图检索获取相关知识片段:
retriever = assembler.as_retriever(top_k=3)
chunks = await retriever.aretrieve_with_scores(question, score_threshold=0.3)
高级功能
相似度检索
在.env
中启用相似度检索功能:
SIMILARITY_SEARCH_ENABLED=True
KNOWLEDGE_GRAPH_SIMILARITY_SEARCH_TOP_SIZE=5
KNOWLEDGE_GRAPH_SIMILARITY_SEARCH_RECALL_SCORE=0.3
相似度检索相比关键词检索的优势:
- 能处理模糊查询,理解语义相似性
- 对非结构化查询更鲁棒
- 可结合预训练的嵌入模型提升效果
Text2GQL功能
Text2GQL允许将自然语言问题直接转换为图查询语句:
TEXT2GQL_SEARCH_ENABLED=True
适用场景:
- 查询明确的关系路径时
- 需要精确控制检索范围时
- 处理复杂多跳查询时
性能优化建议
- 批量处理:调整
KNOWLEDGE_GRAPH_EXTRACTION_BATCH_SIZE
参数优化处理吞吐量 - 索引策略:对高频查询属性建立图索引
- 缓存机制:对常见查询结果实施缓存
- 异步处理:使用异步API提高并发性能
典型应用场景
- 技术文档问答系统:精确回答API使用、配置等问题
- 企业知识管理:构建跨部门知识关联网络
- 学术研究助手:发现研究领域内的隐藏关联
- 金融风控系统:分析复杂的关系网络
总结
DB-GPT的Graph RAG框架为知识密集型应用提供了全新的解决方案。通过将图数据库的强大关联能力与大型语言模型的生成能力相结合,开发者可以构建出更智能、更可靠的知识应用系统。本文详细介绍了从环境准备到核心功能开发的完整流程,希望能为开发者提供有价值的参考。
DB-GPT DB-GPT - 一个开源的数据库领域大模型框架,旨在简化构建数据库大模型应用的过程。 项目地址: https://gitcode.com/gh_mirrors/db/DB-GPT
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考