中文版文档
A tecnologia Retrieval Augmentation Generation (RAG) promove a integração de aplicações de domínio com grandes modelos de linguagem. No entanto, o RAG tem problemas como uma grande lacuna entre a similaridade vetorial e a correlação do raciocínio do conhecimento, e a insensibilidade à lógica do conhecimento (como valores numéricos, relações temporais, regras especializadas, etc.), que dificultam a implementação de serviços de conhecimento profissional.
Em 24 de outubro de 2024, o OpenSPG lançou a v0.5, lançando oficialmente a estrutura de serviço de conhecimento de domínio profissional de geração aumentada de conhecimento (KAG). O KAG visa aproveitar ao máximo as vantagens do Knowledge Graph e da recuperação de vetores e aprimorar bidirecionalmente grandes modelos de linguagem e gráficos de conhecimento por meio de quatro aspectos para resolver os desafios do RAG: (1) representação de conhecimento amigável ao LLM, (2) Knowledge Graph e texto original O índice mútuo entre fragmentos, (3) um motor de raciocínio híbrido guiado por formas lógicas, (4) alinhamento do conhecimento com o raciocínio semântico.
KAG é significativamente melhor que NaiveRAG, HippoRAG e outros métodos em tarefas de perguntas e respostas multi-hop. A pontuação F1 no hotpotQA aumentou relativamente em 19,6%, e a pontuação F1 no 2wiki aumentou relativamente em 33,5%. Aplicamos com sucesso o KAG às duas tarefas de perguntas e respostas de conhecimento profissional do Ant Group, incluindo perguntas e respostas sobre governo eletrônico e perguntas e respostas sobre saúde eletrônica, e o profissionalismo foi significativamente melhorado em comparação com o método RAG.
A estrutura KAG inclui três partes: kg-builder, kg-solver e kag-model. Esta versão envolve apenas as duas primeiras partes, o modelo kag será gradualmente lançado em código aberto no futuro.
kg-builder implementa uma representação de conhecimento que é amigável para modelos de linguagem de grande escala (LLM). Com base na estrutura hierárquica do DIKW (dados, informações, conhecimento e sabedoria), a TI atualiza a capacidade de representação de conhecimento do SPG e é compatível com extração de informações sem restrições de esquema e construção de conhecimento profissional com restrições de esquema no mesmo tipo de conhecimento (como tipo de entidade e tipo de evento), também suporta a representação de índice mútuo entre a estrutura do gráfico e o bloco de texto original, o que suporta a recuperação eficiente da pergunta de raciocínio e do estágio de resposta.
kg-solver usa um mecanismo lógico de resolução e raciocínio híbrido guiado por símbolos que inclui três tipos de operadores: planejamento, raciocínio e recuperação, para transformar problemas de linguagem natural em um processo de resolução de problemas que combina linguagem e símbolos. Neste processo, cada etapa pode utilizar diferentes operadores, como recuperação de correspondência exata, recuperação de texto, cálculo numérico ou raciocínio semântico, de modo a realizar a integração de quatro processos diferentes de resolução de problemas: recuperação, raciocínio do Knowledge Graph, raciocínio de linguagem e cálculo numérico. .
No contexto de bases de conhecimento privadas, frequentemente coexistem dados não estruturados, informações estruturadas e experiência de especialistas em negócios. KAG faz referência à hierarquia DIKW para atualizar o SPG para uma versão que seja amigável para LLMs. Para dados não estruturados, como notícias, eventos, registros e livros, bem como dados estruturados, como transações, estatísticas e aprovações, juntamente com experiência de negócios e regras de conhecimento de domínio, a KAG emprega técnicas como análise de layout, extração de conhecimento, normalização de propriedade, e alinhamento semântico para integrar dados comerciais brutos e regras especializadas em um gráfico unificado de conhecimento de negócios.
Isso o torna compatível com a extração de informações sem esquema e com a construção de conhecimento restrito por esquema no mesmo tipo de conhecimento (por exemplo, tipo de entidade, tipo de evento) e suporta a representação de índice cruzado entre a estrutura do gráfico e o bloco de texto original. . Esta representação de índice mútuo é útil para a construção de índices invertidos com base na estrutura gráfica e promove a representação unificada e o raciocínio de formas lógicas.
KAG propõe uma solução híbrida guiada logicamente formal e um mecanismo de inferência. O mecanismo inclui três tipos de operadores: planejamento, raciocínio e recuperação, que transformam problemas de linguagem natural em processos de resolução de problemas que combinam linguagem e notação. Neste processo, cada etapa pode utilizar diferentes operadores, como recuperação de correspondência exata, recuperação de texto, cálculo numérico ou raciocínio semântico, de modo a realizar a integração de quatro processos diferentes de resolução de problemas: recuperação, raciocínio do Knowledge Graph, raciocínio de linguagem e cálculo numérico. .
Após a otimização, não apenas verificamos a adaptabilidade do KAG em campos verticais, mas também o comparamos com o método RAG existente nas perguntas e respostas multi-hop de conjuntos de dados gerais. Descobrimos que é obviamente melhor que o método SOTA, com F1 aumentando 33,5% no 2wiki e 19,6% no hotpotQA. Continuamos a refinar esta estrutura e demonstramos sua eficácia por meio de experimentos completos e métricas de experimentos de ablação. Demonstramos a validade desta estrutura por meio de raciocínio baseado em símbolos lógicos e alinhamento conceitual.
definição de regras de identificação de "APP de jogos de azar"
definir regra de riscoAppTaxo
Define (s:App)-[p:belongTo]->(o:`TaxOfRiskApp`/`GamblingApp`) {
Structure {
(s)
}
Constraint {
R1("risk label marked as gambling") s.riskMark like "%Gambling%"
}
}
definir as regras de identificação do "desenvolvedor de aplicativos"
definir regra de desenvolvedor de aplicativo
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
}
}
definir as regras para a identificação de "desenvolvedores de aplicativos de jogos de azar"
definir uma regra de aplicativo RiskUser de jogos de azar
Define (s:Person)-[p:belongTo]->(o:`TaxOfRiskUser`/`DeveloperOfGamblingApp`) {
Structure {
(s)-[:developed]->(app:`TaxOfRiskApp`/`GamblingApp`)
}
Constraint {
}
}
As principais etapas do processo de raciocínio são as seguintes.
Converta problemas de linguagem natural em expressões lógicas executáveis, que dependem da Modelagem Conceitual no projeto, e consulte o documento de mineração de produtos Black.
Envie a expressão lógica convertida ao raciocinador OpenSPG para execução e obtenha o resultado da classificação do usuário.
Gere respostas aos resultados de classificação do usuário.
Combinado com a modelagem de conceito OpenSPG, o KAG pode reduzir a dificuldade de consulta de gráfico de conversão de linguagem natural, alterar a conversão orientada a dados para conversão orientada a conceito de classificação e realizar rapidamente a aplicação de campo de perguntas e respostas em linguagem natural no projeto OpenSPG original.
Recomendar versão do sistema:
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
Requisitos de software:
macOS / Linux User:Docker,Docker Compose
Windows User:WSL 2 / Hyper-V,Docker,Docker Compose
Use os comandos a seguir para baixar o arquivo docker-compose.yml e iniciar os serviços com Docker Compose.
# defina a variável de ambiente HOME (somente usuários do Windows precisam executar este comando)# 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
Navegue até o URL padrão do produto KAG com seu navegador: http://127.0.0.1:8887
Consulte o guia do produto para uma introdução detalhada.
Consulte a seção 3.1 para concluir a instalação do mecanismo e da imagem dependente.
Desenvolvedores 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 .
Desenvolvedores do 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 .
Consulte o guia de início rápido para uma introdução detalhada do kit de ferramentas. Em seguida, você poderá usar os componentes integrados para reproduzir os resultados de desempenho dos conjuntos de dados integrados e aplicar esses componentes a novos cenários de negócios.
Se os componentes integrados fornecidos pelo KAG não atenderem aos seus requisitos, você poderá estender a implementação do kag-builder e do kag-solver por conta própria. Consulte Extensão KAG-Builder e Extensão KAG-Solver.
KAG usa BuilderChain para concatenar componentes como leitor, divisor, mapeamento, extrator, alinhador e vetorizador. Os desenvolvedores podem usar o BuilderChain predefinido pelo kag para concluir a construção do gráfico ou montar componentes predefinidos e obter o BuilderChain.
Ao mesmo tempo, os desenvolvedores podem personalizar os componentes do construtor e incorporá-los no BuilderChain para execução.
kag
├──interface
│ ├── builder
│ │ ├── aligner_abc.py
│ │ ├── extractor_abc.py
│ │ ├── mapping_abc.py
│ │ ├── reader_abc.py
│ │ ├── splitter_abc.py
│ │ ├── vectorizer_abc.py
│ │ └── writer_abc.py
O kag-solver executa pipelines de resolução que consistem em componentes de raciocínio, gerador e refletor. KAG fornece raciocinador, gerador e refletor padrão. Os desenvolvedores também podem fornecer implementações personalizadas com base nas seguintes APIs:
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 suporta acoplamento com APIs MaaS compatíveis com serviços OpenAI, como Qwen/DeepSeek/GPT, e também suporta acoplamento com modelos locais implantados por vLLM/Ollama. Os desenvolvedores podem adicionar suporte para serviços de modelo customizados com base na interface llm_client.
kag
├── common
├── llm
├── client
│ ├── llm_client.py
│ ├── ollama_client.py
│ ├── openai_client.py
│ ├── vllm_client.py
KAG suporta a chamada de modelos representacionais OpenAI e similares, incluindo serviços de incorporação OpenAI, modelo bge-m3 implantado por Ollama. Ele também oferece suporte ao carregamento e ao uso de modelos de incorporação local.
kag
├── common
├── vectorizer
│ ├── vectorizer.py
│ ├── openai_vectorizer.py
│ ├── local_bge_m3_vectorizer.py
│ ├── local_bge_vectorizer.py
Quando integrados com outras estruturas, dados de negócios externos e conhecimento especializado podem ser usados como entrada para chamar o pipeline do kag-builder para concluir a construção do gráfico de conhecimento. Você também pode chamar o kag-solver para concluir o processo de raciocínio de perguntas e respostas, e o resultado do raciocínio e o processo intermediário são revelados ao sistema de negócios.
A forma como outras estruturas integram o kag pode ser simplesmente descrita como:
injeção de conhecimento de domínio para realizar a fusão do gráfico de conceito de domínio e gráfico de entidade
otimização do modelo kag para melhorar a eficiência da construção do KG e perguntas e respostas
inibição de alucinação de restrições lógicas de conhecimento
Se você usa este software, cite-o conforme abaixo:
KAG: Impulsionando LLMs em Domínios Profissionais por meio da Geração Aumentada de Conhecimento
KGFabric: um armazém escalonável de Knowledge Graph para interconexão de dados corporativos
@artigo{liang2024kag, título={KAG: Impulsionando LLMs em Domínios Profissionais via Geração Aumentada de Conhecimento}, autor={Liang, Lei e Sun, Mengshu e Gui, Zhengke e Zhu, Zhongshu e Jiang, Zhouyu e Zhong, Ling e Qu, Yuan e Zhao, Peilong e Bo, Zhongpu e Yang, Jin e outros}, diário={pré-impressão arXiv arXiv:2409.13731}, ano={2024}}@article{yikgfabric, title={KGFabric: um armazém escalonável de gráfico de conhecimento para empresas Interconexão de dados}, autor = {Yi, Peng e Liang, Lei e Da Zhang, Yong Chen e Zhu, Jinye e Liu, Xiangyu e Tang, Kun e Chen, Jialin e Lin, Hao e Qiu, Leijie e Zhou, Jun}}
Licença Apache 2.0