最近我发现了一款国产开源AI知识库框架:KAG(Knowledge Augmented Generation)知识增强生成。

KAG是蚂蚁集团、浙江大学等多方组织、机构联合推出的一款专业领域知识增强服务框架。专门用于构建垂直领域的知识库,论文中号称在电子政务达到了 91.6 的准确率,电子医疗各个问答也有出色的表现。

本篇会从KAG原理、使用场景,和RAG的对比,以及安装使用【喂饭级教程】、效果演示来带你沉浸式体验蚂蚁的这款开源KAG到底怎么样,想使用AI打造专有知识库的朋友一定不要错过~

什么是KAG

KAG(Knowledge Augmented Generation)是一个基于OpenSPG引擎和大型语言模型(LLM)的推理问答框架,旨在通过结合知识图谱和向量检索的优势,提供更加严谨的决策支持和信息检索服务。

KAG通过四个关键方面来增强LLM和知识图谱

1.对LLM友好的知识表示;

2.知识图谱与原文片段之间的互索引;

3.逻辑形式引导的混合推理引擎;

4.以及与语义推理的知识对齐。

简单来说,KAG就是通过创新技术,更好的融合了知识图谱和向量检索诞生的一个知识库框架,并可以通过LLM逻辑推理结合知识图谱本身的推理去完成信息的检索,并且当知识图谱无法提供足够的信息时,KAG 会利用向量检索来找到相关的文本片段作为补充。

整体架构如下

KAG 框架由知识构建(kg-builder)和问题求解(kg-solver)两大模块组成。其中 kg-builder 针对 LLM 优化了知识表示方式,支持灵活的知识构建和双向索引;kg-solver 则通过混合推理引擎,集成了检索、图谱推理、语言推理和数值计算等多种求解能力。第三个模块 kag-model 将在后续开源。

KAG和RAG对比

1.知识表示:

  • RAG:主要依赖向量相似度进行检索,无法很好地处理需要多跳推理的问题。

  • KAG:采用对LLM友好的知识表示,兼容无模式和有模式约束的知识,支持图结构知识与文本知识的互索引结构。

2.推理能力:

  • RAG:对知识的逻辑关系不敏感,难以处理需要复杂推理的专业问题。

  • KAG:引入了逻辑符号引导的混合推理引擎,能够进行复杂的逻辑推理和多跳事实问答。

3.性能:

  • RAG:在多跳任务和跨段落任务中表现不佳,生成的文本缺乏连贯性和逻辑性。

  • KAG:在多跳任务和跨段落任务中表现优异,显著提升了推理准确性和信息覆盖度。

4.应用场景:

  • RAG:适用于一般的文本生成和检索任务,但在专业领域如法律、医学和科学等需要复杂推理的场景中表现不佳。

  • KAG:特别适用于需要复杂推理和多跳事实问答的专业领域,如金融、医疗、法律等。

光说不练假把式!接下来开始"喂饭"~

KAG安装、使用、演示

KAG的Github地址:https://github.com/OpenSPG/KAG

官网:https://spg.openkg.cn/

官方给出的硬件要求:

CPU ≥ 8 cores;

RAM ≥ 32 GB;

Disk ≥ 100 GB;

这个要求还真是不低,主要是32G的内存,不过我在我本地windows电脑上也能正常使用(我的是16G内存)

所以本篇教程是在windows上安装使用KAG

首先需要安装docker-desktop

docker-destop安装启动之后,我们打开D盘:创建一个文件夹KAG

然后在KAG文件夹内创建一个文件,文件名:docker-compose.yml

把如下内容复制到docker-compose.yml文件中,保存

version: "3.7"``services:`  `server:`    `restart: always`    `image: spg-registry.cn-hangzhou.cr.aliyuncs.com/spg/openspg-server:latest`    `container_name: release-openspg-server`    `ports:`      `- "8887:8887"`    `depends_on:`      `- mysql`      `- neo4j`      `- minio`    `# volumes:`      `# - /etc/localtime:/etc/localtime:ro`    `environment:`      `TZ: Asia/Shanghai`      `LANG: C.UTF-8`    `command: [`      `"java",`      `"-Dfile.encoding=UTF-8",`      `"-Xms2048m",`      `"-Xmx8192m",`      `"-jar",`      `"arks-sofaboot-0.0.1-SNAPSHOT-executable.jar",`      `'--server.repository.impl.jdbc.host=mysql',`      `'--server.repository.impl.jdbc.password=openspg',`      `'--builder.model.execute.num=5',`      `'--cloudext.graphstore.url=neo4j://release-openspg-neo4j:7687?user=neo4j&password=neo4j@openspg&database=neo4j',`      `'--cloudext.searchengine.url=neo4j://release-openspg-neo4j:7687?user=neo4j&password=neo4j@openspg&database=neo4j'`    `]``   `  `mysql:`    `restart: always`    `image: spg-registry.cn-hangzhou.cr.aliyuncs.com/spg/openspg-mysql:latest`    `container_name: release-openspg-mysql`    `volumes:`      `- mysql_data:/var/lib/mysql``    environment:`      `TZ: Asia/Shanghai`      `LANG: C.UTF-8`      `MYSQL_ROOT_PASSWORD: openspg`      `MYSQL_DATABASE: openspg`    `ports:`      `- "3306:3306"`    `command: [`      `'--character-set-server=utf8mb4',`      `'--collation-server=utf8mb4_general_ci'`    `]``   `  `neo4j:`    `restart: always`    `image: spg-registry.cn-hangzhou.cr.aliyuncs.com/spg/openspg-neo4j:latest`    `container_name: release-openspg-neo4j`    `ports:`      `- "7474:7474"`      `- "7687:7687"`    `environment:`      `- TZ=Asia/Shanghai`      `- NEO4J_AUTH=neo4j/neo4j@openspg`      `- NEO4J_PLUGINS=["apoc"]`      `- NEO4J_server_memory_heap_initial__size=1G`      `- NEO4J_server_memory_heap_max__size=4G`      `- NEO4J_server_memory_pagecache_size=1G`      `- NEO4J_apoc_export_file_enabled=true`      `- NEO4J_apoc_import_file_enabled=true`      `- NEO4J_dbms_security_procedures_unrestricted=*`      `- NEO4J_dbms_security_procedures_allowlist=*`    `volumes:`      `- neo4j_logs:/logs`      `- neo4j_data:/data``   `  `minio:`    `image: spg-registry.cn-hangzhou.cr.aliyuncs.com/spg/openspg-minio:latest`    `container_name: release-openspg-minio`    `command: server --console-address ":9001" /data`    `restart: always`    `environment:`      `MINIO_ACCESS_KEY: minio`      `MINIO_SECRET_KEY: minio@openspg`      `TZ: Asia/Shanghai`    `ports:`      `- 9000:9000`      `- 9001:9001`    `volumes:`      `- minio_data:/data``   ``volumes:`  `mysql_data:`  `neo4j_logs:`  `neo4j_data:`  `minio_data:

然后在KAG路径的 地址栏中输入cmd ,回车

就进入了KAG所在目录的控制台,输入:docker-compose up -d,回车,KAG就开始自动安装部署啦~

等一会儿,当出现如下mysql、neo4j、openspg-server、minio这四个服务都显示Created时,就代表安装完成了。

这时,我们打开浏览器,输入地址:127.0.0.1:8887 就能打开KAG的后台操作页面。

默认用户名:openspg

默认密码:openspg@kag

登录进入首页,首先点击全局配置

先进行通用配置

图存储配置

database:neo4j

password:neo4j@openspg

uri:neo4j://release-openspg-neo4j:7687

user:neo4j

提示词中英文配置

biz_scene:default

language:zh

向量配置(免费的向量模型api调用)

type:openai

model:BAAI/bge-large-zh-v1.5

base_url:https://api.siliconflow.cn/v1

api_key:去硅基流动获取

上面的向量配置,我们可以去硅基流动这个平台 获取免费的向量模型apikey

硅基流动地址:https://siliconflow.cn/zh-cn/

登录硅基流动之后按照如下图就能看到这个免费的模型

我们在API秘钥这里新建一个apikey,就可以复制填写到上面的全局配置->向量配置中啦

接下来我们进行模型配置,点击添加maas模型(兼容openai接口)

这里我用的是gpt-4o,配置好点击确定保存

顺便说一下,大家如果有各个厂商大模型API调用需求,可以使用我的API中转站(KG高速AI_API中转站),兼容openai接口,并且在不改动代码的情况下,可以随意切换市面上主流的国内外大模型,同时也包含mj,sd,suno等绘图、音乐创作功能接口。价格相比官方更实惠

**KG高速AI_API中转站:**https://kg-api.cloud/

**老规矩base_url要加个v1:**https://kg-api.cloud/v1

工作台->API令牌这里创建、管理apikey

配置好大模型之后,我们回到首页,点击创建知识库

随便给知识库起个名字,点击保存

等待一下,创建好之后首页就会展示刚刚新建的知识库,我们点击知识库构建

创建任务

将我的最新产品 微信AI助理 相关文档丢进去(不过有个弊端,就是现在一次只能上传、解析一个文档),所以我是一个一个丢进去的。。。不过丢一次之后不用等它完成,也可以丢第二个。

大家有什么好用免费的文件合并工具也可以分享在评论区哦~

下一步之后,这里可以勾选:根据文档语义切分段落。这样不容易丢段落的上下文连续性。

抽取模型,选择default(默认配置的即可)

提示词,我理解是AI做文档拆分时用到的提示词,我这里就简单写了个问答拆分(理解不一定对,欢迎指正)。

点击完成,KAG就开始抽取、解析这个文件了,这个过程稍微有点慢

分为了如下图中的6个步骤

等到任务状态变成 完成,就代表录入成功啦(一直没有显示完成可尝试刷新页面)

接下来我们看看效果

首先是知识抽取出来的关联关系效果图

先上一个简单的问题:“简单介绍一下个微AI助理”,效果如下,会先进行一段思考、推理,然后检索得出答案,确实得出了一个还算不错的答案,但是速度比较慢,约40秒(所以我认为它不适合用在简单问题上)

第二个问题:个微AI助理 如何配置AI全家桶秘钥?,确实回答出来了但是耗时也不短。

好了,直接说结论吧,体验下来,我觉得蚂蚁的这个KAG知识库目前还不是特别完善(毕竟刚出不久),很多功能和体验都还不太OK(比如知识库参数调整不完善,知识库创建之后无法编辑、修改已有的知识),使用过程中发现还有一些bug没有处理。不过我看github的提交记录,这个项目的开发者们最近也在积极更新代码。我相信这个创新技术方向是OK的,但是就像RAG要出好的效果一样,是需要高质量知识库数据,以及模型的加持、参数的调优。

以及KAG确实不适合简单问答(毕竟太慢),还是和文章开头说的一样,更适合医疗、金融、法律、政务等需要复杂推理的一些场景。

KAG目前还没有开放API出来,后续有API之后我觉得可以集成到agent里面,用一个问题识别来将简单问题和复杂问题区分开来回答,复杂问题走KAG。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐