This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

HugeGraph-AI

请参阅 AI 仓库的 README 以获取最新的文档,官网会定期更新同步。

AI 总结项目文档:Ask DeepWiki

1. 摘要

hugegraph-llm 是一个用于实现和研究大语言模型相关功能的工具。 该项目包含可运行的演示(demo),也可以作为第三方库使用。

众所周知,图系统可以帮助大模型解决时效性和幻觉等挑战, 而大模型则可以帮助图系统解决成本相关的问题。

通过这个项目,我们旨在降低图系统的使用成本,并减少构建知识图谱的复杂性。 本项目将为图系统和大语言模型提供更多的应用和集成解决方案。

  1. 通过 LLM + HugeGraph 构建知识图谱
  2. 使用自然语言操作图数据库 (Gremlin/Cypher)
  3. 知识图谱补充答案上下文 (GraphRAG → Graph Agent)

2. 环境要求

[!IMPORTANT]

  • python 3.10+ (未在 3.12 中测试)
  • hugegraph-server 1.3+ (建议使用 1.5+)
  • uv 0.7+

3. 准备工作

3.1 Docker

Docker 部署      您也可以使用 Docker 来部署 HugeGraph-AI:    - 确保您已安装 Docker    - 我们提供两个容器镜像:      - 镜像 1: hugegraph/rag          用于构建和运行 RAG 功能,适合快速部署和直接修改源码      - 镜像 2: hugegraph/rag-bin          使用 Nuitka 编译的 C 二进制转译版本,性能更好、更高效    - 拉取 Docker 镜像:      bash      docker pull hugegraph/rag:latest # 拉取镜像1      docker pull hugegraph/rag-bin:latest # 拉取镜像2          - 启动 Docker 容器:      bash      docker run -it --name rag -v /path/to/.env:/home/work/hugegraph-llm/.env -p 8001:8001 hugegraph/rag bash      docker run -it --name rag-bin -v /path/to/.env:/home/work/hugegraph-llm/.env -p 8001:8001 hugegraph/rag-bin bash          - 启动 Graph RAG 演示:      ```bash      # 针对镜像 1      python ./src/hugegraph_llm/demo/rag_demo/app.py # 或运行 python -m hugegraph_llm.demo.rag_demo.app

     # 针对镜像 2      ./app.dist/app.bin      ```    - 访问接口 http://localhost:8001

3.2 从源码构建

  1. 启动 HugeGraph 数据库,您可以通过 Docker/二进制包 运行它。     有一个使用 docker 的简单方法:       bash    docker run -itd --name=server -p 8080:8080 hugegraph/hugegraph          更多指引请参阅详细文档 doc

  2. 配置 uv 环境,使用官方安装器安装 uv,其他安装方法请参见 uv 文档。     bash     # 如果遇到网络问题,可以尝试使用 pipx 或 pip 安装 uv,详情请参阅 uv 文档     curl -LsSf [https://astral.sh/uv/install.sh](https://astral.sh/uv/install.sh) | sh  - # 安装最新版本,如 0.7.3+    

  3. 克隆本项目     bash     git clone [https://github.com/apache/incubator-hugegraph-ai.git](https://github.com/apache/incubator-hugegraph-ai.git)    

  4. 配置依赖环境     bash     cd incubator-hugegraph-ai/hugegraph-llm     uv venv && source .venv/bin/activate     uv pip install -e .           如果由于网络问题导致依赖下载失败或过慢,建议修改 hugegraph-llm/pyproject.toml

  5. 启动 Graph RAG 的 Gradio 交互式演示,运行以下命令,然后在浏览器中打开 http://127.0.0.1:8001。     bash     python -m hugegraph_llm.demo.rag_demo.app  # 等同于 "uv run xxx"         默认主机是 0.0.0.0,端口是 8001。您可以通过传递命令行参数 --host--port 来更改它们。       bash     python -m hugegraph_llm.demo.rag_demo.app --host 127.0.0.1 --port 18001        

  6. 运行 Web 演示后,将在路径 hugegraph-llm/.env 下自动生成配置文件 .env。此外,还将在路径 hugegraph-llm/src/hugegraph_llm/resources/demo/config_prompt.yaml 下生成一个与提示(prompt)相关的配置文件 config_prompt.yaml。     您可以在网页上修改内容,触发相应功能后,更改将自动保存到配置文件中。您也可以直接修改文件而无需重启 Web 应用;刷新页面即可加载您的最新更改。     (可选) 要重新生成配置文件,您可以使用 config.generate 并加上 -u--update 参数。       bash     python -m hugegraph_llm.config.generate --update         注意:Litellm 支持多个 LLM 提供商,请参阅 litellm.ai 进行配置。

  7. (可选) 您可以使用     hugegraph-hubble     来访问图数据,可以通过 Docker/Docker-Compose     运行它以获取指导。(Hubble 是一个图分析仪表盘,包括数据加载/Schema管理/图遍历/展示功能)。

  8. (可选) 离线下载 NLTK 停用词       bash     python ./hugegraph_llm/operators/common_op/nltk_helper.py    

[!TIP]   您也可以参考我们的快速入门文档来了解如何使用它以及基本的查询逻辑 🚧

4. 示例

4.1 通过 LLM 在 HugeGraph 中构建知识图谱

4.1.1 通过 Gradio 交互界面构建知识图谱

参数说明:  

  • Docs(文档):   - text: 从纯文本构建 RAG 索引   - file: 上传文件,文件应为 .txt.docx (可同时选择多个文件)
  • Schema (模式): (除两种类型外)   - 用户自定义 Schema (JSON 格式, 遵循此模板进行修改)   - 指定 HugeGraph 图实例的名称,它将自动从中获取 Schema (例如 “hugegraph”)
  • Graph extract head (图谱抽取提示头): 用户自定义的图谱抽取提示
  • 如果已存在图数据,您应点击 “Rebuild vid Index” (重建顶点ID索引) 来更新索引

gradio-配置

4.1.2 通过代码构建知识图谱

KgBuilder 类用于构建知识图谱。以下是简要使用指南:

  1. 初始化: KgBuilder 类使用一个语言模型的实例进行初始化。该实例可以从 LLMs 类中获取。     初始化 LLMs 实例,获取 LLM,然后为图谱构建创建一个任务实例 KgBuilderKgBuilder 定义了多个算子,用户可以根据需要自由组合它们。(提示: print_result() 可以在控制台中打印每一步的结果,而不影响整体执行逻辑)

    python     from hugegraph_llm.models.llms.init_llm import LLMs     from hugegraph_llm.operators.kg_construction_task import KgBuilder         TEXT = ""     builder = KgBuilder(LLMs().get_chat_llm())     (         builder         .import_schema(from_hugegraph="talent_graph").print_result()         .chunk_split(TEXT).print_result()         .extract_info(extract_type="property_graph").print_result()         .commit_to_hugegraph()         .run()     )         gradio-配置-uml 2. 导入 Schema: import_schema 方法用于从一个来源导入 Schema。来源可以是一个 HugeGraph 实例、一个用户定义的 Schema 或一个抽取结果。可以链接 print_result 方法来打印结果。     python     # 从 HugeGraph 实例导入 Schema     builder.import_schema(from_hugegraph="xxx").print_result()     # 从抽取结果导入 Schema     builder.import_schema(from_extraction="xxx").print_result()     # 从用户定义的 Schema 导入     builder.import_schema(from_user_defined="xxx").print_result()     3. 分块切分: chunk_split 方法用于将输入文本切分成块。文本应作为字符串参数传递给该方法。     python     # 将输入文本切分成文档     builder.chunk_split(TEXT, split_type="document").print_result()     # 将输入文本切分成段落     builder.chunk_split(TEXT, split_type="paragraph").print_result()     # 将输入文本切分成句子     builder.chunk_split(TEXT, split_type="sentence").print_result()     4. 提取信息: extract_info 方法用于从文本中提取信息。文本应作为字符串参数传递给该方法。     python     TEXT = "Meet Sarah, a 30-year-old attorney, and her roommate, James, whom she's shared a home with since 2010."     # 从输入文本中提取属性图     builder.extract_info(extract_type="property_graph").print_result()     # 从输入文本中提取三元组     builder.extract_info(extract_type="property_graph").print_result()     5. 提交到 HugeGraph: commit_to_hugegraph 方法用于将构建的知识图谱提交到一个 HugeGraph 实例。     python     builder.commit_to_hugegraph().print_result()     6. 运行: run 方法用于执行链式操作。     python     builder.run()         KgBuilder 类的方法可以链接在一起以执行一系列操作。

4.2 基于 HugeGraph 的检索增强生成 (RAG)

RAGPipeline 类用于将 HugeGraph 与大语言模型集成,以提供检索增强生成的能力。 以下是简要使用指南:

  1. 提取关键词: 提取关键词并扩展同义词。     python     from hugegraph_llm.operators.graph_rag_task import RAGPipeline     graph_rag = RAGPipeline()     graph_rag.extract_keywords(text="告诉我关于 Al Pacino 的事情。").print_result()    
  2. 从关键词匹配顶点ID: 在图中用关键词匹配节点。     python     graph_rag.keywords_to_vid().print_result()    
  3. 查询图以进行 RAG: 从 HugeGraph 中检索相应的关键词及其多跳关联关系。      python      graph_rag.query_graphdb(max_deep=2, max_graph_items=30).print_result()      
  4. 重排搜索结果: 根据问题和结果之间的相似度对搜索结果进行重排序。      python      graph_rag.merge_dedup_rerank().print_result()      
  5. 综合答案: 总结结果并组织语言来回答问题。     python     graph_rag.synthesize_answer(vector_only_answer=False, graph_only_answer=True).print_result()    
  6. 运行: run 方法用于执行上述操作。     python     graph_rag.run(verbose=True)    

1 - GraphRAG UI Details

接续主文档介绍基础 UI 功能及详情,欢迎随时更新和改进,谢谢

1. 项目核心逻辑

构建 RAG 索引职责:

  • 文本分割和向量化
  • 从文本中提取图(构建知识图谱)并对顶点进行向量化

(Graph)RAG 和用户功能职责:

  • 根据查询从构建的知识图谱和向量数据库中检索相关内容,用于补充提示词。

2. (处理流程)构建 RAG 索引

从文本构建知识图谱、分块向量和图顶点向量。

image

graph TD;
    A[原始文本] --> B[文本分割]
    B --> C[向量化]
    C --> D[存储到向量数据库]

    A --> F[文本分割]
    F --> G[LLM 基于 schema 和分割后的文本提取图]
    G --> H[将图存储到图数据库,\n自动对顶点进行向量化\n并存储到向量数据库]
    
    I[从图数据库检索顶点] --> J[对顶点进行向量化并存储到向量数据库\n注意:增量更新]

四个输入字段:

  • 文档: 输入文本
  • Schema: 图的 schema,可以以 JSON 格式的 schema 提供,或提供图名称(如果数据库中已存在)。
  • 图提取提示词头部: 提示词的头部
  • 输出: 显示结果

按钮:

  • 获取 RAG 信息

    • 获取向量索引信息: 检索向量索引信息
    • 获取图索引信息: 检索图索引信息
  • 清除 RAG 数据

    • 清除分块向量索引: 清除分块向量
    • 清除图顶点向量索引: 清除图顶点向量
    • 清除图数据: 清除图数据
  • 导入到向量: 将文档中的文本转换为向量(需要先对文本进行分块,然后将分块转换为向量)

  • 提取图数据 (1): 基于 Schema,使用图提取提示词头部和分块内容作为提示词,从文档中提取图数据

  • 加载到图数据库 (2): 将提取的图数据存储到数据库(自动调用更新顶点嵌入以将向量存储到向量数据库)

  • 更新顶点嵌入: 将图顶点转换为向量

执行流程:

  1. 文档字段中输入文本。
  2. 点击导入到向量按钮,对文本进行分割和向量化,存储到向量数据库。
  3. 在 Schema 字段中输入图的 Schema
  4. 点击提取图数据 (1) 按钮,将文本提取为图。
  5. 点击加载到图数据库 (2) 按钮,将提取的图存储到图数据库(这会自动调用更新顶点嵌入以将向量存储到向量数据库)。
  6. 点击更新顶点嵌入按钮,将图顶点向量化并存储到向量数据库。

3. (处理流程)(Graph)RAG 和用户功能

前一个模块中的导入到向量按钮将文本(分块)转换为向量,更新顶点嵌入按钮将图顶点转换为向量。这些向量分别存储,用于在本模块中补充查询(答案生成)的上下文。换句话说,前一个模块为 RAG 准备数据(向量化),而本模块执行 RAG。

本模块包含两个部分:

  • HugeGraph RAG 查询
  • (批量)回测

第一部分处理单个查询,第二部分同时处理多个查询。以下是第一部分的说明。

image

graph TD;
    A[问题] --> B[将问题向量化并在向量数据库中搜索最相似的分块]

    A --> F[使用 LLM 提取关键词]
    F --> G[在图数据库中使用关键词精确匹配顶点;\n在向量数据库中执行模糊匹配(图顶点)]
    G --> H[使用匹配的顶点和查询通过 LLM 生成 Gremlin 查询]
    H --> I[执行 Gremlin 查询;如果成功则完成;如果失败则回退到 BFS]
    
    B --> J[对结果排序]
    I --> J
    J --> K[生成答案]

输入字段:

  • 问题: 输入查询
  • 查询提示词: 用于向 LLM 提出最终问题的提示词模板
  • 关键词提取提示词: 用于从问题中提取关键词的提示词模板
  • 模板数量: < 0 表示禁用 text2gql;= 0 表示不使用模板(零样本);> 0 表示使用指定数量的模板

查询范围选择:

  • 基础 LLM 答案: 不使用 RAG 功能
  • 仅向量答案: 仅使用基于向量的检索(在向量数据库中查询分块向量)
  • 仅图答案: 仅使用基于图的检索(在向量数据库中查询图顶点向量和图数据库)
  • 图-向量答案: 同时使用基于图和基于向量的检索

image

执行流程:

仅图答案:

  • 使用关键词提取提示词问题中提取关键词。

image

  • 使用提取的关键词:

    • 首先,在图数据库中进行精确匹配。
    • 如果未找到匹配,在向量数据库(图顶点向量)中进行模糊匹配以检索相关顶点。
  • text2gql: 调用 text2gql 相关接口,使用匹配的顶点作为实体,将问题转换为 Gremlin 查询并在图数据库中执行。

  • BFS: 如果 text2gql 失败(LLM 生成的查询可能无效),回退到使用预定义的Gremlin 查询模板执行图查询(本质上是 BFS 遍历)。

仅向量答案:

  • 查询转换为向量。
  • 在向量数据库的分块向量数据集中搜索最相似的内容。

排序和答案生成:

  • 执行检索后,对搜索结果进行排序以构建最终的提示词
  • 基于不同的提示词配置生成答案,并在不同的输出字段中显示:
    • 基础 LLM 答案
    • 仅向量答案
    • 仅图答案
    • 图-向量答案

image

4. (处理流程)Text2Gremlin

将自然语言查询转换为 Gremlin 查询。

本模块包含两个部分:

  • 构建向量模板索引(可选): 将示例文件中的查询/gremlin 对进行向量化并存储到向量数据库中,用于生成 Gremlin 查询时参考。
  • 自然语言转 Gremlin: 将自然语言查询转换为 Gremlin 查询。

第一部分较为简单,因此重点介绍第二部分。

image

graph TD;
    A[Gremlin 对文件] --> C[向量化查询]
    C --> D[存储到向量数据库]
    
    F[自然语言查询] --> G[在向量数据库中搜索最相似的查询\n(如果向量数据库中不存在 Gremlin 对,\n将自动使用默认文件进行向量化)\n并检索对应的 Gremlin]
    G --> H[将匹配的对添加到提示词中\n并使用 LLM 生成与自然语言查询\n对应的 Gremlin]

第二部分的输入字段:

  • 自然语言查询: 输入要转换为 Gremlin 的自然语言文本。

image

  • Schema: 输入图 schema。

执行流程:

  1. 自然语言查询字段中输入查询(自然语言)。
  2. Schema字段中输入图 schema
  3. 点击Text2Gremlin按钮,执行以下逻辑:
    1. 查询转换为向量。
    2. 构建提示词
      • 检索图 schema
      • 在向量数据库中查询示例向量,检索与输入查询相似的查询-gremlin 对(如果向量数据库中缺少示例,将自动使用resources文件夹中的示例进行初始化)。

image

  - 使用构建的提示词生成 Gremlin 查询。

5. 图工具

输入 Gremlin 查询以执行相应操作。