Construímos para desenvolvedores que precisam de uma camada de dados confiável e pronta para produção para aplicações de IA
A Cognee implementa pipelines ECL (Extract, Cognify, Load) escaláveis e modulares que permitem interconectar e recuperar conversas, documentos e transcrições de áudio anteriores, reduzindo alucinações, esforço do desenvolvedor e custos. Experimente em um notebook Google Colab ou dê uma olhada em nossa documentação
Se você tiver dúvidas, junte-se à nossa comunidade Discord
pip instalar cognee
pip instalar 'cognee[postgres]'
poesia adicionar cognee
poesia adicionar cognee -E postgres
import os os.environ["LLM_API_KEY"] = "YOUR OPENAI_API_KEY"
ou
import cognee cognee.config.set_llm_api_key("YOUR_OPENAI_API_KEY")
Você também pode definir as variáveis criando o arquivo .env, aqui está nosso modelo. Para usar diferentes provedores de LLM, para mais informações consulte nossa documentação
Se você estiver usando Network, crie uma conta no Graphistry para visualizar os resultados:
cognee.config.set_graphistry_config({ "username": "YOUR_USERNAME", "password": "YOUR_PASSWORD" })
(Opcional) Para executar a UI, acesse o diretório cognee-frontend e execute:
npm run dev
ou execute tudo em um contêiner docker:
docker-compose up
Em seguida, navegue até localhost:3000
Se você quiser usar o Cognee com PostgreSQL, certifique-se de definir os seguintes valores no arquivo .env:
DB_PROVIDER=postgres DB_HOST=postgres DB_PORT=5432 DB_NAME=cognee_db DB_USERNAME=cognee DB_PASSWORD=cognee
Primeiro, copie .env.template
para .env
e adicione sua chave de API OpenAI ao campo LLM_API_KEY.
Este script executará o pipeline padrão:
import cogneeimport asynciofrom cognee.api.v1.search import SearchTypeasync def main():# Crie uma lista limpa para cognee - redefina os dados e o estado do sistemaprint("Redefinindo dados do cognee...")await cognee.prune.prune_data()await cognee.prune.prune_system(metadata=True)print("Data reset complete.n")# gráfico de conhecimento cognee será criado com base neste textotexto = """ O processamento de linguagem natural (PNL) é um subcampo interdisciplinar da ciência da computação e da recuperação de informações. """print("Adicionando texto ao cognee:")print(text.strip()) # Adicione o texto e faça-o disponível para cognifyawait cognee.add(text)print("Texto adicionado com sucesso.n") print("Executando cognify para criar gráfico de conhecimento...n")print("Etapas do processo Cognify:")print("1. Classificando o documento: Determinando o tipo e a categoria do texto de entrada.")print("2. Verificando permissões: Garantindo que o usuário tenha os direitos necessários para processar o texto.")print("3. Extraindo pedaços de texto: Dividindo o texto em frases ou frases para análise.")print("4. Adicionando pontos de dados: Armazenando os pedaços extraídos para processamento.")print("5. Gerando gráfico de conhecimento: Extraindo entidades e relacionamentos para formar um gráfico de conhecimento.")print("6. Resumindo texto: Criando resumos concisos do conteúdo para rápida insights.n") # Use LLMs e cognee para criar conhecimento graphawait cognee.cognify()print("Cognify process complete.n") query_text = 'Conte-me sobre PNL'print(f"Pesquisando cognee para obter insights com consulta: '{query_text}'")# Consulte cognee para obter insights sobre o texto adicionadosearch_results = await cognee.search(SearchType.INSIGHTS, query_text=query_text) print("Resultados da pesquisa:")# Exibir resultados para result_text em search_results :print(result_text)# Exemplo de saída: # ({'id': UUID('bc338a39-64d6-549a-acec-da60846dd90d'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 1, 211808, tzinfo=datetime.timezone.utc), 'nome': 'processamento de linguagem natural', 'descrição': 'Uma abordagem interdisciplinar subcampo da ciência da computação e recuperação de informação.'}, {'relationship_name': 'is_a_subfield_of', 'source_node_id': UUID('bc338a39-64d6-549a-acec-da60846dd90d'), 'target_node_id': UUID('6218dbab-eb6a-5759-a864-b3419755ffe0'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 15, 473137, tzinfo=datetime.timezone.utc)}, {'id ': UUID('6218dbab-eb6a-5759-a864-b3419755ffe0'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 1, 211808, tzinfo=datetime.timezone.utc), 'nome': 'ciência da computação', 'descrição': 'O estudo da computação e processamento de informações.'}) # (...)## Representa nós e relacionamentos no gráfico de conhecimento:# - O primeiro elemento é o nó de origem (por exemplo, 'processamento de linguagem natural').# - O segundo elemento é o relacionamento entre nós (por exemplo, 'is_a_subfield_of').# - O terceiro elemento é o nó de destino (por exemplo, 'ciência da computação').if __name__ == '__main__':asyncio.run(main())
Ao executar esse script, você verá mensagens passo a passo no console que ajudam a rastrear o fluxo de execução e a entender o que o script está fazendo em cada estágio. Uma versão deste exemplo está aqui: examples/python/simple_example.py
A estrutura cognee consiste em tarefas que podem ser agrupadas em pipelines. Cada tarefa pode ser uma parte independente da lógica de negócios, que pode ser vinculada a outras tarefas para formar um pipeline. Essas tarefas persistem dados em seu armazenamento de memória, permitindo que você pesquise contextos relevantes de conversas anteriores, documentos ou quaisquer outros dados armazenados.
Aqui está um exemplo de como parece um pipeline cognify padrão:
Para preparar os dados para a execução do pipeline, primeiro precisamos adicioná-los ao nosso metastore e normalizá-los:
Comece com:
text = """Natural language processing (NLP) is an interdisciplinary subfield of computer science and information retrieval""" await cognee.add(text) # Add a new piece of information
Na próxima etapa, fazemos uma tarefa. A tarefa pode ser qualquer lógica de negócios que precisarmos, mas o importante é que ela seja encapsulada em uma função.
Aqui mostramos um exemplo de criação de um classificador LLM ingênuo que usa um modelo Pydantic e, em seguida, armazena os dados nos armazenamentos de gráfico e vetor após analisar cada pedaço. Fornecemos apenas um trecho para referência, mas fique à vontade para verificar a implementação em nosso repositório.
async def chunk_naive_llm_classifier( data_chunks: list[DocumentChunk], classification_model: Type[BaseModel] ): # Extract classifications asynchronously chunk_classifications = await asyncio.gather( *(extract_categories(chunk.text, classification_model) for chunk in data_chunks) ) # Collect classification data points using a set to avoid duplicates classification_data_points = { uuid5(NAMESPACE_OID, cls.label.type) for cls in chunk_classifications } | { uuid5(NAMESPACE_OID, subclass.value) for cls in chunk_classifications for subclass in cls.label.subclass } vector_engine = get_vector_engine() collection_name = "classification" # Define the payload schema class Keyword(BaseModel): uuid: str text: str chunk_id: str document_id: str # Ensure the collection exists and retrieve existing data points if not await vector_engine.has_collection(collection_name): await vector_engine.create_collection(collection_name, payload_schema=Keyword) existing_points_map = {} else: existing_points_map = {} return data_chunks ...
Temos muitas tarefas que podem ser usadas em seus pipelines e você também pode criar suas tarefas de acordo com sua lógica de negócios.
Assim que tivermos nossas tarefas, é hora de agrupá-las em um pipeline. Este snippet simplificado demonstra como as tarefas podem ser adicionadas a um pipeline e como elas podem transmitir as informações de uma para outra.
Task( chunk_naive_llm_classifier, classification_model = cognee_config.classification_model, ) pipeline = run_tasks(tasks, documents)
Para ver o código funcional, verifique o pipeline padrão cognee.api.v1.cognify em nosso repositório.
A Cognee oferece suporte a uma variedade de ferramentas e serviços para diferentes operações:
Modular : Cognee é modular por natureza, usando tarefas agrupadas em pipelines
Configuração local : por padrão, LanceDB é executado localmente com NetworkX e OpenAI.
Lojas de vetores : Cognee oferece suporte a LanceDB, Qdrant, PGVector e Weaviate para armazenamento de vetores.
Modelos de linguagem (LLMs) : você pode usar Anyscale ou Ollama como seu provedor LLM.
Lojas de gráficos : além do NetworkX, o Neo4j também é compatível com armazenamento de gráficos.
Gerenciamento de usuários : crie gráficos de usuários individuais e gerencie permissões
Confira nosso caderno de demonstração aqui
Consulte o Guia de início rápido do cognee para obter informações importantes sobre configuração.
docker compor
Consulte o Guia de desenvolvimento cognee para obter informações beta importantes e instruções de uso.
pip instalar cognee
<estilo> tabela {largura: 100%; } </style>
Nome | Tipo | Estado atual | Problemas conhecidos |
---|---|---|---|
Qdrant | Vetor | Estável ✅ | |
Tecer | Vetor | Estável ✅ | |
LanceDB | Vetor | Estável ✅ | |
Neo4j | Gráfico | Estável ✅ | |
RedeX | Gráfico | Estável ✅ | |
FalkorDB | Vetor/Gráfico | Instável | |
PGVetor | Vetor | Instável | Postgres DB retorna o erro de tempo limite |