使用GraphRAG服务
传统RAG(Retrieval Augmented Generation)因为上下文理解能力不足、文档相似性偏差等缺陷,在处理复杂关系、多跳推理和知识关联时存在局限性。GraphRAG在传统RAG检索路径的基础上,提供了基于知识图谱的索引、检索、生成能力,从而提升了对复杂数据的理解与生成的质量。
功能简介
GraphRAG支持以下功能:
索引:通过知识抽取模型,对文档进行知识抽取,生成知识图谱,保存到图分析引擎。
检索:通过知识抽取模型,对Query进行关键词提取,在AnalyticDB for PostgreSQL图分析引擎中遍历子图,搜索关联子图。
生成:将Query和关联子图上下文提交给大模型,并生成结果。
版本限制
内核版本为7.3.2.0及以上的AnalyticDB for PostgreSQL7.0版实例。
安装插件
安装plpython3u插件(默认已安装)。
检查插件是否安装成功:切换到指定数据库的public模式下,执行如下命令。
SELECT * FROM pg_extension WHERE extname = 'plpython3u';
返回如下结果,表示plpython3u插件已成功安装。如未返回结果,表示指定数据库的public模式下没有安装此插件。
oid | extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition -------+------------+----------+--------------+----------------+------------+-----------+-------------- 14674 | plpython3u | 10 | 11 | f | 1.0 | | (1 row)
安装age插件后,需要在数据库中将ag_catalog添加到search_path,以简化查询。以下是两种配置方式:
会话级别设置。
SET search_path TO public, ag_catalog;
数据库级别永久设置。
ALTER DATABASE <database_name> SET search_path TO public, ag_catalog;
(可选)使用初始账号或高权限用户RDS_SUPERUSER授权其他用户使用图插件。
GRANT USAGE ON SCHEMA ag_catalog TO <username>;
安装adbpg_graphrag插件,请提交工单联系技术支持协助安装此插件。
adbpg_graphrag插件依赖plpython3u、age插件,安装此插件前请先确认依赖插件完成安装。
使用提示
模型选择。
在模型选择方面,阿里云主要测试了qwen-max、qwen-plus-latest和qwen3-32b三款模型。
在回答质量方面,测试效果依次为:qwen-max > qwen-plus-latest > qwen3-32b。如需高质量输出,推荐使用qwen-max。
在生成速度方面,测试效果依次为:qwen3-32b > qwen-plus-latest > qwen-max。如更关注响应速度,建议选择qwen3-32b。
关于涉及图片的文档导入与处理。
当前系统对包含图片的文档支持有限。如需导入含图文档,建议使用多模态大模型(如qwen2.5-vl-72b-instruct)先将图片解析为文本描述后再上传。prompt指令参考如下。
你是一个专业的图片阅读助手,负责为下面提供的图片生成一个详细的解读与全面的总结。 ---要求--- 1. 如果图片中有模块区分,请分别抽取并尽可能多的提供每个模块详细的细节信息。 2. 根据以上抽取的信息,生成针对该模块的总结。 3. 如果图片中存在图表,请根据图表总结可用的细节信息。 4. 如果图片中存在有效图标,如国旗图标,象形图标,隐喻图标,工具图标和混合图标等,也需要关注图标来抽取细节信息。 5. 根据抽取的信息,进行总结并提供有效的全局信息。 ---备注--- 确保使用第三人称书写,并包含模块名称,以便我们拥有完整的上下文。 *识别图片中的主体语言*(占据80%以上的语言),使用*图片主体语言*作为输出语言。
操作步骤
初始化GraphRAG服务
语法
SELECT adbpg_graphrag.initialize(config json);
参数
adbpg_graphrag.initialize
函数入参是一个JSON变量,用于配置GraphRAG服务信息,配置参数说明如下。
参数 | 说明 |
llm_model | 用于指定GraphRAG使用的大模型,默认为qwen-max-2025-01-25。 |
llm_api_key | 调用大模型时需要使用的API Key。 |
llm_url | 大模型的API接口地址,默认使用阿里云百炼平台的API。 |
embedding_model | 用于指定GraphRAG使用的嵌入模型,默认为text-embedding-v3。 |
language | GraphRAG使用的默认语言,默认为英语。
|
entity_types | 指定解析文档生成知识图谱时,需要抽取的实体点的类型。 |
relationship_types | 指定解析文档生成知识图谱时,需要抽取的关系边的类型。 |
first_node_content | 在使用决策树模式(tree)时,指定初始节点回复,默认为“您好,请问您有什么问题?”。 |
end_node_content | 在使用决策树模式(tree)时,指定最终节点回复,默认为“请问还有什么其他问题吗?”。 |
global_distance_threshold | 在使用决策树模式(tree)时,指定在本地与全局结果中选择全局搜索结果阈值,默认为0.1,表示全局搜索与客户回复相似度与本地搜索相比大于0.1 时,选择全局搜索结果。 |
示例
SELECT adbpg_graphrag.initialize(
$$
{
"llm_model" : "qwen-max-2025-01-25",
"llm_api_key" : "sk-****************",
"llm_url" : "https://dashscope.aliyuncs.com/compatible-mode/v1",
"embedding_model" : "text-embedding-v3",
"language" : "Simplified Chinese",
"entity_types" : ["业务场景", "产品", "功能特点", "使用逻辑", "数据指标", "数据口径"],
"relationship_types": ["包含", "属于", "使用", "依赖", "关联", "解决"]
}
$$
);
上传文档
语法
SELECT adbpg_graphrag.upload(filename text, context text);
参数
adbpg_graphrag.upload
函数用于上传文件内容。上传文件后,GraphRAG会做文本切分、向量生成、知识图谱抽取等一系列工作。
filename:文件名称。
context:文件内容。
示例
SELECT adbpg_graphrag.upload('产品信息.txt', '小蜜客服系统可以提供问题解答,请假申请,知识库搜索等功能。');
问题查询
语法
SELECT adbpg_graphrag.query(query_str text);
SELECT adbpg_graphrag.query(query_str text, query_mode text);
参数
query_str:需要询问的问题
query_mode:查询模式。GraphRAG支持以下查询模式。
mix(默认):使用向量匹配与知识图谱来获取相关知识,并提供给大模型参考。
bypass:不使用任何向量或知识图谱查询,直接询问大模型。
naive:仅使用向量查询获取相关知识,并提供给大模型参考。
local:仅使用知识图谱中的实体点获取相关知识,并提供给大模型参考。
global:仅使用知识图谱中的关系边获取相关知识,并提供给大模型参考。
hybrid:使用知识图谱的实体点和关系边获取相关知识,并提供给大模型参考。
tree:决策树模式,将知识存储为问答树后,使用该模式进行查询与回答。
示例
SELECT adbpg_graphrag.query('小蜜有什么功能?', 'hybrid');