Este repositório contém um aplicativo Python que utiliza o DuckDB como um back -end para armazenar e recuperar vetores de incorporação. O novo uso do DuckDB permite pesquisas eficientes de similaridade entre grandes conjuntos de dados. Neste exemplo, carregamos comentários do Hacker News e implementamos a funcionalidade para encontrar os 10 comentários mais semelhantes a um determinado comentário.
Clone o repositório:
git clone https://github.com/patricktrainer/duckdb-embedding-search.gitNavegue até o diretório do repositório:
cd duckdb-embedding-searchInstale os pacotes necessários:
pip install -r requirements.txtPara usar o aplicativo, siga estas etapas:
load_comments.py para carregar comentários no banco de dados DuckDB. Os comentários e seus vetores de incorporação correspondentes serão armazenados na tabela embeddings do banco de dados hn_embeddings.db .main.py ) e forneça um comentário de notícias de hacker. O script retornará os 10 comentários mais semelhantes do banco de dados.Nota - A função
get_similaritynoembedding.pycriará um novo vetor de incorporação para o comentário fornecido, se ainda não existir no banco de dados. Isso significa que ele atingirá a API do Openai, que contará com o uso da API.
O exemplo a seguir demonstra a funcionalidade do aplicativo. Um comentário é fornecido como entrada e o aplicativo retorna os 10 comentários mais semelhantes do banco de dados.
O comentário fornecido como entrada:
Uma coisa que notei é que muitos engenheiros, quando estão procurando uma biblioteca no Github, eles verificam o último tempo de compromisso. Eles acham que, quanto mais recente o último compromisso, mais apoiado a biblioteca é. Mas e o projeto arquivado que faz exatamente o que você precisa fazer, tem 0 bugs e tem sido estável há anos? É como encontrar uma jóia escondida em um brechó! A maioria dos engenheiros que vejo hoje em dia descartará automaticamente uma biblioteca que não é "constantemente" atualizada ... implicando que é uma coisa boa :)
Os comentários mais semelhantes retornados pelo aplicativo (abreviado por brevidade):
Texto:> Morte para bibliotecas compartilhadas. As dores de cabeça que causam simplesmente não valem o benefício.
Discordo completamente. Embora um tamanho não se encaixe em todos, qualquer pessoa que faça declarações abrangentes sobre bibliotecas estáticas está apenas afirmando ao mundo como elas são completamente alheias em relação a problemas básicos de manutenção de software, como rastrear qual pacote de software é atualizado, especialmente aqueles que não são mantidos atualizados diariamente.
Similaridade: 0,8047998201033179
Texto: muitos pontos positivos aqui, mas o trabalho de manutenção para sistemas lucrativos parece um uso válido do tempo.
Agora, alguns sistemas lucrativos estão lentamente com a correção de bits e os engenheiros titulares podem se manter ocupados fazendo um trabalho de rotina enquanto não abordam ou escalam o Bitrot. Mas acho que as pessoas que são boas em garantir que as coisas chatas e estáveis permaneçam chatas e estáveis geralmente sejam subestimadas.
Similaridade: 0,796911347299464
connection.py : lida com conexões de banco de dados do DuckDB.embedding.py : Gerencia a incorporação de operações vetoriais.operations.py : contém funções utilitárias para processamento de dados.openai_client.py : interface com a API Openai. O DuckDB é usado como um banco de dados leve e de alto desempenho para armazenar vetores de incorporação. O módulo connection.py estabelece uma conexão com o DuckDB, e operations.py contém a lógica para inserir e recuperar incorporações.
Os vetores de incorporação são gerados usando a API do OpenAI. O módulo openai_client.py contém a lógica para interface com a API. O módulo embedding.py contém a lógica para gerar vetores de incorporação e compará -los.