LightRAG é uma estrutura "Simples e Rápida para Geração Aumentada por Recuperação" (Retrieval-Augmented Generation), desenvolvida pela Faculdade de Ciência de Dados da Universidade de Hong Kong (HKUDS). O projeto visa fornecer aos desenvolvedores um conjunto completo de soluções RAG (Retrieval-Augmented Generation), suportando indexação de documentos, construção de grafos de conhecimento e funcionalidades de perguntas e respostas inteligentes.
LightRAG suporta cinco modos de recuperação diferentes, atendendo a diferentes necessidades de cenário:
pip install "lightrag-hku[api]"
# Crie um ambiente virtual Python (se necessário)
# Instale no modo editável, incluindo suporte à API
pip install -e ".[api]"
import os
import asyncio
from lightrag import LightRAG, QueryParam
from lightrag.llm.openai import gpt_4o_mini_complete, openai_embed
from lightrag.kg.shared_storage import initialize_pipeline_status
from lightrag.utils import setup_logger
setup_logger("lightrag", level="INFO")
async def initialize_rag():
rag = LightRAG(
working_dir="your/path",
embedding_func=openai_embed,
llm_model_func=gpt_4o_mini_complete
)
await rag.initialize_storages()
await initialize_pipeline_status()
return rag
def main():
rag = asyncio.run(initialize_rag())
rag.insert("Your text")
result = rag.query(
"What are the top themes in this story?",
param=QueryParam(mode="mix")
)
print(result)
if __name__ == "__main__":
main()
# Crie o histórico de conversas
conversation_history = [
{"role": "user", "content": "What is the main character's attitude towards Christmas?"},
{"role": "assistant", "content": "At the beginning of the story, Ebenezer Scrooge has a very negative attitude towards Christmas..."},
{"role": "user", "content": "How does his attitude change?"}
]
# Crie parâmetros de consulta com o histórico de conversas
query_param = QueryParam(
mode="mix", # ou qualquer outro modo: "local", "global", "hybrid"
conversation_history=conversation_history, # Adicione o histórico de conversas
history_turns=3 # Número de turnos recentes da conversa a serem considerados
)
# Faça uma consulta que leve em consideração o histórico de conversas
response = rag.query(
"What causes this change in his character?",
param=query_param
)
# Crie uma nova entidade
entity = rag.create_entity("Google", {
"description": "Google is a multinational technology company specializing in internet-related services and products.",
"entity_type": "company"
})
# Crie outra entidade
product = rag.create_entity("Gmail", {
"description": "Gmail is an email service developed by Google.",
"entity_type": "product"
})
# Crie uma relação entre as entidades
relation = rag.create_relation("Google", "Gmail", {
"description": "Google develops and operates Gmail.",
"keywords": "develops operates service",
"weight": 2.0
})
O LightRAG Server fornece uma interface web completa, incluindo:
working_dir
: Caminho do diretório de trabalhoembedding_func
: Função de incorporação (embedding)llm_model_func
: Função do modelo de linguagem grande (LLM)vector_storage
: Tipo de armazenamento vetorialgraph_storage
: Tipo de armazenamento de grafosembedding_batch_size
: Tamanho do lote de incorporação (padrão 32)embedding_func_max_async
: Número máximo de processos de incorporação assíncronos simultâneos (padrão 16)llm_model_max_async
: Número máximo de processos LLM simultâneos (padrão 4)enable_llm_cache
: Se o cache LLM está habilitado (padrão True)Suporta a exportação de dados em vários formatos:
#Export data in CSV format
rag.export_data("graph_data.csv", file_format="csv")
# Export data in Excel sheet
rag.export_data("graph_data.xlsx", file_format="excel")
# Export data in markdown format
rag.export_data("graph_data.md", file_format="md")
# Export data in Text
rag.export_data("graph_data.txt", file_format="txt")
Ferramenta de monitoramento de consumo de tokens integrada:
from lightrag.utils import TokenTracker
# Create TokenTracker instance
token_tracker = TokenTracker()
# Method 1: Using context manager (Recommended)
# Suitable for scenarios requiring automatic token usage tracking
with token_tracker:
result1 = await llm_model_func("your question 1")
result2 = await llm_model_func("your question 2")
# Method 2: Manually adding token usage records
# Suitable for scenarios requiring more granular control over token statistics
token_tracker.reset()
rag.insert()
rag.query("your question 1", param=QueryParam(mode="naive"))
rag.query("your question 2", param=QueryParam(mode="mix"))
# Display total token usage (including insert and query operations)
print("Token usage:", token_tracker.get_usage())
LightRAG é uma estrutura RAG abrangente e fácil de usar, especialmente adequada para cenários que exigem a construção de sistemas de perguntas e respostas inteligentes e plataformas de gerenciamento de conhecimento. Seu design de arquitetura flexível e ricos recursos o tornam uma excelente solução de código aberto no campo RAG.