Type something to search...
Kag Vs Rag:无与伦比的准确性知识扩充生成实用指南!

Kag Vs Rag:无与伦比的准确性知识扩充生成实用指南!

1. 什么是 KAG?

KAG 是一个基于 OpenSPG 引擎和大型语言模型的逻辑推理和问答框架,用于构建垂直领域知识库的逻辑推理和问答解决方案。KAG 可以有效克服传统 RAG 向量相似度计算的模糊性以及 OpenIE 引入的 GraphRAG 噪声问题。KAG 支持逻辑推理和多跳事实问答等,并且显著优于当前的 SOTA 方法。

KAG 的目标是在专业领域构建一个知识增强的 LLM 服务框架,支持逻辑推理、事实问答等。KAG 完全整合了 KGs 的逻辑和事实特征。其核心特性包括:

  • 知识与 Chunk 互索引结构,以整合更完整的上下文文本信息
  • 使用概念语义推理进行知识对齐,以减轻 OpenIE 引起的噪声问题
  • 基于模式约束的知识构建,以支持领域专家知识的表示和构建
  • 逻辑形式引导的混合推理和检索,以支持逻辑推理和多跳推理问答

2. 核心功能

2.1 知识表示

在私有知识库的背景下,非结构化数据、结构化信息和业务专家经验往往共存。KAG 参考 DIKW 层次结构,将 SPG 升级到对 LLM 友好的版本。

对于新闻、事件、日志和书籍等非结构化数据,以及交易、统计和审批等结构化数据,结合业务经验和领域知识规则,KAG 采用布局分析、知识提取、属性规范化和语义对齐等技术,将原始业务数据和专家规则整合为统一的业务知识图谱。

Image 40

这使其能够兼容同一知识类型(例如,实体类型、事件类型)上的无模式信息提取和有模式专业知识构建,并支持图结构与原始文本块之间的交叉索引表示。

这种互索引表示有助于基于图结构的倒排索引的构建,并促进逻辑形式的统一表示和推理。

2.2 混合推理由逻辑形式引导

Image 41

KAG 提出了一个逻辑形式引导的混合解决方案和推理引擎。

该引擎包括三种类型的操作符:规划、推理和检索,能够将自然语言问题转化为结合语言和符号的问题解决过程。

在这个过程中,每一步可以使用不同的操作符,例如精确匹配检索、文本检索、数值计算或语义推理,从而实现四种不同问题解决过程的整合:检索、知识图谱推理、语言推理和数值计算。

引擎与依赖镜像安装

  • 推荐系统版本:

    • macOS 用户:macOS Monterey 12.6 或更高版本
    • Linux 用户:CentOS 7 / Ubuntu 20.04 或更高版本
    • Windows 用户:Windows 10 LTSC 2021 或更高版本
  • 软件要求:

    • macOS / Linux 用户:Docker, Docker Compose
    • Windows 用户:WSL 2 / Hyper-V, Docker, Docker Compose

使用以下命令下载 docker-compose.yml 文件并使用 Docker Compose 启动服务。

## 设置 HOME 环境变量(仅 Windows 用户需要执行此命令)
## set HOME=%USERPROFILE%

curl -sSL https://raw.githubusercontent.com/OpenSPG/openspg/refs/heads/master/dev/release/docker-compose-west.yml -o docker-compose-west.yml
docker compose -f docker-compose-west.yml up -d

4.1.2 使用产品

使用浏览器导航到 KAG 产品的默认 URL:http://127.0.0.1:8887

有关详细介绍,请参见 KAG 使用(产品模式)

4.2 基于工具包的(针对开发者)

4.2.1 引擎及依赖镜像安装

请参考 3.1 节以完成引擎及依赖镜像的安装。

4.2.2 KAG的安装

macOS / Linux开发者

  1. 克隆代码:

    git clone https:
    
  2. 安装KAG:

    cd KAG && pip install -e .
    

Windows开发者

  1. 创建并激活Python venv:

    py -m venv kag-demo && kag-demo\Scripts\activate
    
  2. 克隆代码:

    git clone https:
    
  3. 安装KAG:

    cd KAG && pip install -e .
    

技术架构

Image 42

KAG 框架包括三个部分:kg-builder、kg-solver 和 kag-model。本次发布仅涉及前两部分;kag-model 将在未来逐步开源。

kg-builder 实现了一种对大型语言模型(LLM)友好的知识表示。基于 DIKW(数据、信息、知识和智慧)的层次结构,IT 提升了 SPG 知识表示能力,并兼容无模式约束的信息提取和对同一知识类型(如实体类型和事件类型)有模式约束的专业知识构建。它还支持图结构与原始文本块之间的互索引表示,支持推理问答阶段的高效检索。

kg-solver 使用逻辑符号引导的混合求解和推理引擎,包括三种类型的操作符:规划、推理和检索,将自然语言问题转化为结合语言和符号的问题解决过程。在这个过程中,每一步可以使用不同的操作符,如精确匹配检索、文本检索、数值计算或语义推理,实现四种不同问题解决过程的整合:检索、知识图谱推理、语言推理和数值计算。

3.1 创建知识库

3.1.1 全局配置

Image 43

通用配置:用户可以在通用配置中自定义数据库、向量模型和提示。

NOO4J:1/RELOASE-OPENSPG-NEO4J:7687
API_KEY
BAAI/BGE-M3
[HTTPS://API.SILLICONFLOW.CN/V1](http://https//API.SILLICONFLOW.CN/V1)

Image 44

数据库配置:默认情况下,可以填写本地 openspg-neo4j 图存储数据库。示例:

{
    "database": "neo4j",  // 默认数据库名称,将被知识库的命名空间替换
    "uri": "neo4j://release-openspg-neo4j:7687",  // neo4j 服务器地址,可以替换为可访问的自定义 neo4j 服务器
    "user": "neo4j",  // neo4j 用户名,默认为 neo4j
    "password": "neo4j@openspg"  // neo4j 密码,默认为 neo4j@openspg
}
  • 向量配置
{
    "type": "openai",  // KAG 支持 openai 兼容的嵌入服务接口
    "model": "BAAI/bge-m3",  // 嵌入服务的模型名称
    "base_url": "[https://api.siliconflow.cn/v1](https://api.siliconflow.cn/v1)",  // 嵌入服务的 URL
    "api_key": "your api key"
}
  • 提示

必填。用于确定在调用模型时是否使用中文(zh)或英文(en)。示例:

{
    "biz_scene": "default",  // kag 模板的 biz_scene
    "language": "en"  // en 表示英文,zh 表示中文
}
  • 模型配置

KAG 支持与 Open-AI 兼容的生成模型 API(chatgpt、deepseek、qwen2 等),提供 maas、vllm、ollama 等模式。有关详细信息,请参阅 生成(聊天)模型配置

Image 45

  • maas
{
    "model": "deepseek-chat",
    "base_url": "[https://api.deepseek.com](https://api.deepseek.com/)",
    "api_key": "deepseek api key"
}
  • 用户配置

用户配置中可以进行账户管理,包括创建/删除用户、修改密码等。

Image 46

新知识库

用户可以使用特定知识库的全局配置,或自定义新的配置。

Image 47

  • 命名空间和图存储配置

    我们可以使用在全局配置中设置的默认配置,默认数据库名称将被知识库的名称替换。

Image 48

  • 向量配置与提示

    我们可以使用在全局配置中设置的默认配置。

    特别注意: 不同表示模型生成的嵌入向量不能混合,即使它们具有相同的维度;因此,在知识库配置中,与表示模型相关的配置一旦设置后不能修改。

Image 49

3.2 导入文档

创建构建任务

进入知识库构建 => 创建任务以启动知识构建任务。用户可以下载示例文件 📎David Eagleman.txt📎Karl Deisseroth.txt📎Thomas C. Sudhof.txt 进行多跳问答任务测试。

Image 50

检查知识提取结果。用户可以通过点击产品侧的 [知识探索] 菜单查看图形数据。用户可以参考 知识探索 文档以获取详细信息。

中文

TUTORIAL

知识库构建

网站

TCDEMO1

配置

OPENSPG

知识库构建

知识探索

知识模型

知识名称:

知识类型: 所有

重置

THOMAS C SUDHOF

知识探索

过滤

可以按知识过滤…

知识列表 6

  • 类型名称
  • THOMAS C. SUDHOF
  • C89953D2415051A6A007EB3…
  • THOMAS C. SUDHOF
  • TCDEMO1.CHUNK
  • THOMAS CHRISTIAN SUDHOF 是
  • TCDEMO1.PERSON
  • THOMAS C SUDHOF
  • 生物化学家
  • THOMAS C SUDHOF
  • THOMAS C.S.的出生日期…
  • TCDEMO1.DATE
  • 出生日期:
  • 1955年12月22日
  • THOMAS C. SUDHOF
  • THOMAS C. SUDHOF
  • THOMAS CHRISTIAN SUDHOF
  • TCDEMO1.PERSON
  • THOMAS CHRISTIAN SUDHOF
  • 生物化学家
  • SUDHOF的研究

Image 51

知识库构建

配置

THOMAS C SUDHOF

推理问答

基本信息

知识库构建

知识探索

实体类型: 人物 (TCDEMO1.PERSON)

知识模型

返回表格

静态属性

知识探索

基本属性

  • 属性 (CHI…
  • 属性 (EN…

实体主链

名称: THOMAS C SUDHOF

描述: 1956年12月22日

巴路北京自由自由

Image 52

3.3 推理问答

输入问题“哪位斯坦福大学教授研究阿尔茨海默病?”并等待结果返回。

TUTORIAL

网站

中文

推理问答

配置

OPENSPG

知识库构建

新查询对话框

X

子问题 1

哪位斯坦福大学教授研究阿尔茨海默病?

问题描述

我最喜欢的

历史

哪位斯坦福大学教授研究阿尔茨海默病?

问题回答

子问题 2

研究阿尔茨海默病的斯坦福大学教授是

这些教授中哪位研究阿尔茨海默病?

为什么?

证据记忆明确指出THOMAS C. SUDHOF是一位研究阿尔茨海默病的斯坦福大学教授。它将他描述为一位著名的德裔美国生物化学家,在斯坦福医学院的多个部门任职。他的研究显著推动了对阿尔茨海默病的理解,并且他继续在霍华德休斯医学研究所进行相关研究。这使他成为斯坦福大学阿尔茨海默病研究的关键人物。

问题回答

问题: 哪位斯坦福大学教授研究阿尔茨海默病?

Image 53

4 KAG使用(开发者模式)

在私有领域知识库的背景下,图形构建和基于推理的问答的有效性与模式设计、知识提取提示、表示模型的选择、问题规划提示、图形检索算法和答案生成提示密切相关。这些自定义尚未在产品侧公开,用户需要利用KAG开发者模式来实现他们的自定义。当使用开发者模式时,用户在本地环境中执行KAG Python包代码。OpenSPG服务器仅提供模式管理、推理执行和图形数据库适配等功能。在知识提取和图形推理阶段,对生成模型和表示模型的调用是在本地环境中发起的。

环境配置

4.1.1 预依赖

  • OpenSPG-Server

KAG 依赖 OpenSPG-Server 进行元数据管理和图像存储服务。请参考本文件的第一部分和第二部分以完成服务器部署。

4.1.2 虚拟环境安装

安装 conda

Conda 安装: https://docs.anaconda.com/miniconda/

安装 Python 虚拟环境

conda create -n kag-demo python=3.10 && conda activate kag-demo

代码克隆

git clone [https://github.com/OpenSPG/KAG.git](https://github.com/OpenSPG/KAG.git)

KAG 安装

cd ./KAG && pip install -e .

确认

knext --version
knext --help

用法: knext [OPTIONS] COMMAND [ARGS]…

选项:

  • —version 显示版本并退出。
  • —help 显示此消息并退出。

命令:

  • project 项目客户端。
  • reasoner 推理客户端。
  • schema 模式客户端。
  • thinker 思考客户端。

创建知识库

新项目

  • 进入项目示例目录
$ cd kag/examples
  • 编辑项目配置
$ vim ./example_config.yaml
## — — — — — — 项目配置开始 — — — — — — — — #
openie_llm: &openie_llm
  api_key: key
  base_url: https://api.deepseek.com
  model: deepseek-chat
  type: maas

chat_llm: &chat_llm
  api_key: key
  base_url: https://api.deepseek.com
  model: deepseek-chat
  type: maas

vectorize_model: &vectorize_model
  api_key: key
  base_url: https://api.siliconflow.cn/v1/
  model: BAAI/bge-m3
  type: openai
  vector_dimensions: 1024
  vectorizer: *vectorize_model

log:
  level: INFO

project:
  biz_scene: default
  host_addr: http://127.0.0.1:8887
  id: "1"
  language: en
  namespace: TwoWikiTest
## — — — — — — 项目配置结束 — — — — — — — — #

## — — — — — — kag-builder 配置开始 — — — — — — — — #
kag_builder_pipeline:
  chain:
    type: unstructured_builder_chain
    extractor:
      type: schema_free_extractor
      llm: *openie_llm
      ner_prompt:
        type: default_ner
      std_prompt:
        type: default_std
      triple_prompt:
        type: default_triple
    reader:
      type: dict_reader
    post_processor:
      type: kag_post_processor
    similarity_threshold: 0.9
    splitter:
      type: length_splitter
      split_length: 100000
      window_length: 0
    vectorizer:
      type: batch_vectorizer
      vectorize_model: *vectorize_model
    writer:
      type: kg_writer
    num_threads_per_chain: 1
    num_chains: 16
    scanner:
      type: 2wiki_dataset_scanner
## — — — — — — kag-builder 配置结束 — — — — — — — — #

## — — — — — — kag-solver 配置开始 — — — — — — — — #
search_api: &search_api
  type: openspg_search_api

graph_api: &graph_api
  type: openspg_graph_api

exact_kg_retriever: &exact_kg_retriever
  type: default_exact_kg_retriever
  el_num: 5
  llm_client: *chat_llm
  search_api: *search_api
  graph_api: *graph_api

fuzzy_kg_retriever: &fuzzy_kg_retriever
  type: default_fuzzy_kg_retriever
  el_num: 5
  vectorize_model: *vectorize_model
  llm_client: *chat_llm
  search_api: *search_api
  graph_api: *graph_api

chunk_retriever: &chunk_retriever
  type: default_chunk_retriever
  llm_client: *chat_llm
  recall_num: 10
  rerank_topk: 10

kag_solver_pipeline:
  memory:
    type: default_memory
    llm_client: *chat_llm
  max_iterations: 3
  reasoner:
    type: default_reasoner
    llm_client: *chat_llm
  lf_planner:
    type: default_lf_planner
    llm_client: *chat_llm
    vectorize_model: *vectorize_model
  lf_executor:
    type: default_lf_executor
    llm_client: *chat_llm
    force_chunk_retriever: true
  exact_kg_retriever: *exact_kg_retriever
  fuzzy_kg_retriever: *fuzzy_kg_retriever
  chunk_retriever: *chunk_retriever
  merger:
    type: default_lf_sub_query_res_merger
    vectorize_model: *vectorize_model
    chunk_retriever: *chunk_retriever
  generator:
    type: default_generator
    llm_client: *chat_llm
    generate_prompt:
      type: resp_simple
    reflector:
      type: default_reflector
      llm_client: *chat_llm
## — — — — — — kag-solver 配置结束 — — — — — — — — #

* **创建项目**(与产品中的知识库一对一映射):

```bash
$ knext project create --config_path ./example_config.yaml
  • 目录初始化

创建项目后,将在 kag/examples 目录下创建一个与项目配置中的 namespace 字段同名的目录(例如示例中的 TwoWikiTest),并初始化 KAG 项目代码框架。

用户可以修改以下一个或多个文件,以自定义特定业务的知识图谱构建和基于推理的问题回答。

TwoWikiTest
├── builder
│   ├── data
│   ├── indexer.py
│   └── prompt
│       ├── ner.py
│       ├── std.py
│       └── tri.py
├── kag_config.cfg
├── reasoner
├── schema
│   ├── TwoWikiTest.schema
└── solver
    ├── evaForHotpotqa.py
    └── prompt
        ├── logic_form_plan.py
        └── resp_generator.py

更新项目 (可选)

如果有任何配置更改,您可以参考本节的内容在服务器端更新配置。

  • 进入项目示例目录
$ cd kag/examples/TwoWikiTest
  • 编辑项目配置

注意:由于不同表示模型的使用差异,不建议在项目创建后更新 vectorizer 配置。如果需要更新 vectorizer 配置,建议创建一个新项目。

$ vim ./kag_config.yaml

请再次确保所有 api-key 字段已正确填写。

  • 运行命令:
$ knext project update proj_path ./

导入文档

进入项目目录

$ cd kag/examples/TwoWikiTest

获取语料文件

2wiki 数据集的测试语料数据位于 examples/2wiki/builder/data/2wiki_corpus.json,包含 6,119 个文档和 1,000 对问答。为了快速完成整个过程,目录中还有一个 2wiki_sub_corpus.json 文件,仅包含 3 个文档。我们将使用这个较小的数据集作为实验示例。

将语料文件复制到 TwoWikiTest 项目的相应目录中:

$ cp ../2wiki/builder/data/2wiki_sub_corpus.json builder/data/

编辑模式(可选)

提交更新的模式到 SPG 服务器

$ knext schema commit

执行构建任务

builder/indexer.py 文件中定义构建脚本:

$ vim ./builder/indexer.py
import os
import logging
from kag.common.registry import import_modules_from_path
from kag.builder.runner import BuilderChainRunner

logger = logging.getLogger(__name__)

def buildKB(file_path):
    from kag.common.conf import KAG_CONFIG

    runner = BuilderChainRunner.from_config(KAG_CONFIG.all_config["kag_builder_pipeline"])
    runner.invoke(file_path)

    logger.info(f"\n\nbuildKB successfully for {file_path}\n\n")

if __name__ == "__main__":
    import_modules_from_path(".")
    dir_path = os.path.dirname(__file__)  # 将 `file_path` 设置为之前准备的语料文件的路径。
    file_path = os.path.join(dir_path, "data/2wiki_sub_corpus.json")

    buildKB(file_path)

构建链运行

运行 indexer.py 脚本以完成非结构化数据的图构建:

$ cd builder
$ python ./indexer.py

一旦构建脚本启动,任务的检查点目录将会在当前工作目录下生成(即 ./builder),记录构建管道的检查点和统计信息。

builder
├── ckpt
│   ├── chain
│   ├── extractor
│   ├── kag_checkpoint_0_1.ckpt
│   ├── postprocessor
│   ├── reader
│   └── splitter
├── data
│   ├── 2wiki_sub_corpus.json
│   ├── indexer.py

使用以下命令查看提取任务的统计信息,例如从每个文档中提取了多少节点/边:

$ less ckpt/kag_checkpoint_0_1.ckpt

Image 54

使用以下命令检查成功处理并写入图数据库的文档条目数量:

$ wc -l ckpt/kag_checkpoint_0_1.ckpt

Image 55

KAG 框架提供基于检查点的恢复功能。如果任务因程序错误或其他外部原因(如 LLM 余额不足)中断,可以重新执行 indexer.py。KAG 将自动检测检查点文件并重用现有结果。

结果检查

Image 56

Image 57

推理问题与答案

  • 进入项目目录
cd kag/examples/TwoWikiTest
  • 编辑 QA 脚本
$ vim ./solver/qa.py

将以下内容粘贴到 qa.py 中。

import json
import logging
import os
import time
from concurrent.futures import ThreadPoolExecutor, as_completed

from tqdm import tqdm

from kag.common.benchmarks.evaluate import Evaluate
from kag.solver.logic.solver_pipeline import SolverPipeline
from kag.common.conf import KAG_CONFIG
from kag.common.registry import import_modules_from_path

from kag.common.checkpointer import CheckpointerManager

logger = logging.getLogger(__name__)

class EvaFor2wiki:
    """ init for kag client """

    def __init__(self):
        pass

    """ qa from knowledge base, """

    def qa(self, query):
        resp = SolverPipeline.from_config(KAG_CONFIG.all_config["kag_solver_pipeline"])
        answer, traceLog = resp.run(query)

        logger.info(f"\n\nso the answer for ‘{query}’ is: {answer}\n\n")
        return answer, traceLog

if __name__ == "__main__":
    import_modules_from_path("./prompt")
    evalObj = EvaFor2wiki()

    evalObj.qa("Which Stanford University professor works on Alzheimer’s?")

GitHub 链接: https://github.com/OpenSPG/KAG?tab=readme-ov-file

URL: https://openspg.yuque.com/ndx6g9/docs_en/rs7gr8g4s538b1n7#cikso

Related Posts

结合chatgpt-o3-mini与perplexity Deep Research的3步提示:提升论文写作质量的终极指南

结合chatgpt-o3-mini与perplexity Deep Research的3步提示:提升论文写作质量的终极指南

AI 研究报告和论文写作 合并两个系统指令以获得两个模型的最佳效果 Perplexity AI 的 Deep Research 工具提供专家级的研究报告,而 OpenAI 的 ChatGPT-o3-mini-high 擅长推理。我发现你可以将它们结合起来生成令人难以置信的论文,这些论文比任何一个模型单独撰写的都要好。你只需要将这个一次性提示复制到 **

阅读更多
让 Excel 过时的 10 种 Ai 工具:实现数据分析自动化,节省手工作业时间

让 Excel 过时的 10 种 Ai 工具:实现数据分析自动化,节省手工作业时间

Non members click here作为一名软件开发人员,多年来的一个发现总是让我感到惊讶,那就是人们还在 Excel

阅读更多
使用 ChatGPT 搜索网络功能的 10 种创意方法

使用 ChatGPT 搜索网络功能的 10 种创意方法

例如,提示和输出 你知道可以使用 ChatGPT 的“搜索网络”功能来完成许多任务,而不仅仅是基本的网络搜索吗? 对于那些不知道的人,ChatGPT 新的“搜索网络”功能提供实时信息。 截至撰写此帖时,该功能仅对使用 ChatGPT 4o 和 4o-mini 的付费会员开放。 ![](https://images.weserv.nl/?url=https://cdn-im

阅读更多
掌握Ai代理:解密Google革命性白皮书的10个关键问题解答

掌握Ai代理:解密Google革命性白皮书的10个关键问题解答

10 个常见问题解答 本文是我推出的一个名为“10 个常见问题解答”的新系列的一部分。在本系列中,我旨在通过回答关于该主题的十个最常见问题来分解复杂的概念。我的目标是使用简单的语言和相关的类比,使这些想法易于理解。 图片来自 [Solen Feyissa](https://unsplash.com/@solenfeyissa?utm_source=medium&utm_medi

阅读更多
在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和科技这样一个动态的行业中,保持领先意味着不断提升你的技能。无论你是希望深入了解人工智能模型性能、掌握数据分析,还是希望通过人工智能转变传统领域如法律,这些课程都是你成功的捷径。以下是一个精心策划的高价值课程列表,可以助力你的职业发展,并让你始终处于创新的前沿。 1. 生成性人工智能简介课程: [生成性人工智能简介](https://genai.works

阅读更多
揭开真相!深度探悉DeepSeek AI的十大误区,您被误导了吗?

揭开真相!深度探悉DeepSeek AI的十大误区,您被误导了吗?

在AI军备竞赛中分辨事实与虚构 DeepSeek AI真的是它所宣传的游戏规则改变者,还是仅仅聪明的营销和战略炒作?👀 虽然一些人将其视为AI效率的革命性飞跃,但另一些人则认为它的成功建立在借用(甚至窃取的)创新和可疑的做法之上。传言称,DeepSeek的首席执行官在疫情期间像囤积卫生纸一样囤积Nvidia芯片——这只是冰山一角。 从其声称的550万美元培训预算到使用Open

阅读更多
Type something to search...