中文版文檔
檢索增強生成(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和Qugke和Zhu、Zhongshu和Jiang、Zhouyu和Zhong、Ling和Qu 、袁和趙,培龍和博,中普和楊,金等人},journal={arXiv預印本arXiv:2409.13731},year={2024}}@article{yikgfabric,title={KGFabric:面向企業的可擴展知識圖倉庫資料互聯},作者={易、彭和梁、雷和大張、陳勇和朱、金業和劉、翔宇和唐、坤和陳、家林和林、郝和邱、雷傑和周、君}}
阿帕契許可證 2.0