使用GraphRAG服务

更新时间:

传统RAG(Retrieval Augmented Generation)因为上下文理解能力不足、文档相似性偏差等缺陷,在处理复杂关系、多跳推理和知识关联时存在局限性。GraphRAG在传统RAG检索路径的基础上,提供了基于知识图谱的索引、检索、生成能力,从而提升了对复杂数据的理解与生成的质量。

功能简介

GraphRAG支持以下功能:

  • 索引:通过知识抽取模型,对文档进行知识抽取,生成知识图谱,保存到图分析引擎。

  • 检索:通过知识抽取模型,对Query进行关键词提取,在AnalyticDB for PostgreSQL图分析引擎中遍历子图,搜索关联子图。

  • 生成:将Query和关联子图上下文提交给大模型,并生成结果。

image

版本限制

内核版本为7.3.2.0及以上的AnalyticDB for PostgreSQL7.0版实例。

说明

您可以在控制台实例的基本信息页查看内核小版本。如不满足上述版本要求,需要您升级内核小版本

安装插件

  1. 安装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)
  2. 安装age插件

    1. 安装age插件后,需要在数据库中将ag_catalog添加到search_path,以简化查询。以下是两种配置方式:

      • 会话级别设置。

        SET search_path TO public, ag_catalog;
      • 数据库级别永久设置。

        ALTER DATABASE <database_name> SET search_path TO public, ag_catalog;
    2. (可选)使用初始账号高权限用户RDS_SUPERUSER授权其他用户使用图插件。

      GRANT USAGE ON SCHEMA ag_catalog TO <username>;
  3. 安装adbpg_graphrag插件,请提交工单联系技术支持协助安装此插件。

    adbpg_graphrag插件依赖plpython3u、age插件,安装此插件前请先确认依赖插件完成安装。

使用提示

  • 模型选择。

    在模型选择方面,阿里云主要测试了qwen-max、qwen-plus-latestqwen3-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使用的默认语言,默认为英语。

  • 英语:English。

  • 简体中文:Simplified Chinese。

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');