中文版文档
检索增强生成(RAG)技术促进了领域应用程序与大型语言模型的集成。但RAG存在向量相似度与知识推理关联性差距较大、对知识逻辑(如数值、时间关系、专家规则等)不敏感等问题,阻碍了专业知识服务的实施。
2024年10月24日,OpenSPG发布v0.5,正式发布知识增强生成(KAG)专业领域知识服务框架。 KAG旨在充分利用知识图谱和向量检索的优势,通过四个方面双向增强大型语言模型和知识图谱来解决RAG挑战:(1)LLM友好的知识表示,(2)知识图谱和原文片段之间的相互索引,(3)逻辑形式引导的混合推理引擎,(4)知识与语义推理的对齐。
KAG在多跳问答任务中明显优于NaiveRAG、HippoRAG等方法。 hotpotQA 上的 F1 得分相对提升了 19.6%,2wiki 上的 F1 得分相对提升了 33.5%。我们已成功将KAG应用于蚂蚁集团的两个专业知识问答任务,包括电子政务问答和电子健康问答,专业性相比RAG方法有了显着提升。
KAG框架包括三部分:kg-builder、kg-solver、kag-model。本次发布仅涉及前两部分,kag-model未来将逐步开源发布。
kg-builder 实现了对大规模语言模型(LLM)友好的知识表示。 IT基于DIKW(数据、信息、知识、智慧)层次结构,升级SPG知识表示能力,兼容无模式约束的信息抽取和同一知识类型(如实体类型)有模式约束的专业知识构建和事件类型),还支持图结构与原文块之间的互索引表示,支持推理问答阶段的高效检索。
kg-solver使用逻辑符号引导的混合求解和推理引擎,包括规划、推理和检索三种类型的算子,将自然语言问题转化为语言和符号相结合的问题解决过程。在此过程中,每一步都可以使用不同的算子,如精确匹配检索、文本检索、数值计算或语义推理,从而实现检索、知识图谱推理、语言推理和数值计算四种不同问题求解过程的集成。
在私有知识库的背景下,非结构化数据、结构化信息和业务专家经验常常共存。 KAG参考DIKW层次结构将SPG升级到对LLM友好的版本。对于新闻、事件、日志、书籍等非结构化数据,以及交易、统计、审批等结构化数据,结合业务经验和领域知识规则,KAG采用布局分析、知识抽取、属性归一化等技术,语义对齐,将原始业务数据和专家规则集成到统一的业务知识图谱中。
这使得它兼容相同知识类型(例如实体类型、事件类型)上的无模式信息提取和模式约束专业知识构建,并支持图结构和原始文本块之间的交叉索引表示。这种相互索引表示有助于基于图结构的倒排索引的构建,促进逻辑形式的统一表示和推理。
KAG 提出了一种逻辑形式引导的混合解决方案和推理引擎。该引擎包括三种类型的算子:规划、推理和检索,将自然语言问题转化为结合语言和符号的问题解决过程。在此过程中,每一步都可以使用不同的算子,如精确匹配检索、文本检索、数值计算或语义推理,从而实现检索、知识图谱推理、语言推理和数值计算四种不同问题求解过程的集成。
优化后,我们不仅验证了KAG在垂直领域的适应性,而且在一般数据集的多跳问答中与现有的RAG方法进行了比较。我们发现它明显优于SOTA方法,F1在2wiki上增加了33.5%,在hotpotQA上增加了19.6%。我们正在继续完善这个框架,并通过端到端实验和消融实验指标证明了其有效性。我们通过逻辑符号驱动的推理和概念对齐来证明该框架的有效性。
“赌博APP”识别规则定义
定义riskAppTaxo规则
Define (s:App)-[p:belongTo]->(o:`TaxOfRiskApp`/`GamblingApp`) {
Structure {
(s)
}
Constraint {
R1("risk label marked as gambling") s.riskMark like "%Gambling%"
}
}
定义“App开发者”身份识别规则
定义应用程序开发者规则
Define (s:Person)-[p:developed]->(o:App) {
Structure {
(s)-[:hasDevice]->(d:Device)-[:install]->(o)
}
Constraint {
deviceNum = group(s,o).count(d)
R1("device installed same app"): deviceNum > 5
}
}
明确“博彩类App开发者”认定规则
定义赌博应用规则的 RiskUser
Define (s:Person)-[p:belongTo]->(o:`TaxOfRiskUser`/`DeveloperOfGamblingApp`) {
Structure {
(s)-[:developed]->(app:`TaxOfRiskApp`/`GamblingApp`)
}
Constraint {
}
}
推理过程的关键步骤如下。
将自然语言问题转化为可执行的逻辑表达式,依赖项目下的Conceptual Modeling,参考黑品挖掘文档。
将转换后的逻辑表达式提交给OpenSPG推理机执行,得到用户分类结果。
生成用户分类结果的答案。
KAG结合OpenSPG概念建模,可以降低自然语言转换图查询难度,变面向数据的转换为面向分类概念的转换,在原有OpenSPG项目上快速实现自然语言问答的现场应用。
推荐系统版本:
macOS User:macOS Monterey 12.6 or later
Linux User:CentOS 7 / Ubuntu 20.04 or later
Windows User:Windows 10 LTSC 2021 or later
软件要求:
macOS / Linux User:Docker,Docker Compose
Windows User: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.yml -o docker-compose.yml docker compose -f docker-compose.yml up -d
使用浏览器导航至 KAG 产品的默认 URL:http://127.0.0.1:8887
详细介绍请参见产品指南。
参考3.1章节完成引擎及依赖镜像的安装。
macOS / Linux 开发人员
# Create conda env: conda create -n kag-demo python=3.10 && conda activate kag-demo
# Clone code: git clone https://github.com/OpenSPG/KAG.git
# Install KAG: cd KAG && pip install -e .
Windows 开发人员
# Install the official Python 3.8.10 or later, install Git.
# Create and activate Python venv: py -m venv kag-demo && kag-demoScriptsactivate
# Clone code: git clone https://github.com/OpenSPG/KAG.git
# Install KAG: cd KAG && pip install -e .
该工具包的详细介绍请参见快速入门指南。然后您可以使用内置组件重现内置数据集的性能结果,并将这些组件应用到新的业务场景中。
如果KAG提供的内置组件不能满足您的要求,您可以自行扩展kag-builder和kag-solver实现。请参阅KAG-Builder扩展和KAG-Solver扩展。
KAG 使用 BuilderChain 连接读取器、分割器、映射、提取器、对齐器和矢量化器等组件。开发者可以使用kag预定义的BuilderChain完成图的构建,也可以组装预定义的组件并获得BuilderChain。
同时,开发者可以自定义构建器中的组件,并将其嵌入到BuilderChain中执行。
kag
├──interface
│ ├── builder
│ │ ├── aligner_abc.py
│ │ ├── extractor_abc.py
│ │ ├── mapping_abc.py
│ │ ├── reader_abc.py
│ │ ├── splitter_abc.py
│ │ ├── vectorizer_abc.py
│ │ └── writer_abc.py
kag-solver 执行由推理器、生成器和反射器组件组成的求解器管道。 KAG 提供默认推理器、生成器和反射器。开发者还可以基于以下API提供自定义实现:
kag
├── solver
│ ├── logic
│ │ └── solver_pipeline.py
├── interface
├── retriever
│ ├── chunk_retriever_abc.py
│ └── kg_retriever_abc.py
└── solver
├── kag_generator_abc.py
├── kag_memory_abc.py
├── kag_reasoner_abc.py
├── kag_reflector_abc.py
└── lf_planner_abc.py
KAG支持与Qwen/DeepSeek/GPT等OpenAI服务兼容的MaaS API对接,也支持与vLLM/Ollama部署的本地模型对接。开发者可以基于llm_client接口添加对自定义模型服务的支持。
kag
├── common
├── llm
├── client
│ ├── llm_client.py
│ ├── ollama_client.py
│ ├── openai_client.py
│ ├── vllm_client.py
KAG支持调用OpenAI表征模型等,包括OpenAI嵌入服务、Ollama部署的bge-m3模型。它还支持加载和使用本地嵌入模型。
kag
├── common
├── vectorizer
│ ├── vectorizer.py
│ ├── openai_vectorizer.py
│ ├── local_bge_m3_vectorizer.py
│ ├── local_bge_vectorizer.py
与其他框架集成时,可以将外部业务数据和专家知识作为输入,调用kag-builder pipeline完成知识图谱构建。还可以调用kag-solver完成问答推理过程,并将推理结果和中间过程展现给业务系统。
其他框架集成kag的方式可以简单描述为:
领域知识注入,实现领域概念图与实体图的融合
kag-模型优化,提高KG构建和问答效率
知识逻辑约束的幻觉抑制
如果您使用该软件,请引用如下:
KAG:通过知识增强生成提升专业领域的法学硕士
KGFabric:企业数据互联的可扩展知识图谱仓库
@article{liang2024kag, title={KAG:通过知识增强一代提升专业领域的法学硕士},作者={Liang、Lei和Sun、Mengshu和Gui、Zhengke和Zhu、Zhongshu和Jiang、Zhouyu和Zhong、Ling和Qu、袁和赵,培龙和博,中普和杨,金等人},journal={arXiv预印本arXiv:2409.13731},year={2024}}@article{yikgfabric,title={KGFabric:面向企业的可扩展知识图仓库数据互联},作者={易、彭和梁、雷和大张、陈勇和朱、金业和刘、翔宇和唐、坤和陈、家林和林、郝和邱、雷杰和周、君}}
阿帕奇许可证 2.0