Ollama + SingleStore – LangChain = :-(

Em um artigo anterior, utilizamos Ollama com LangChain e SingleStore. LangChain forneceu uma solução eficiente e compacta para a integração de Ollama com SingleStore. No entanto, e se dessemos a LangChain? Neste artigo, demonstraremos um exemplo de uso de Ollama com SingleStore sem depender do LangChain. Veremos que, embora possamos alcançar os mesmos resultados descritos no artigo anterior, o número de linhas de código aumenta, exigindo que gerencemos mais da infraestrutura que o LangChain normalmente lida.

O arquivo de notebook usado neste artigo está disponível no GitHub.

Introdução

Do artigo anterior, seguiremos os mesmos passos para configurar nosso ambiente de teste conforme descrito nessas seções:

  • Introdução
    • Use uma Máquina Virtual ou venv.
  • Crie uma conta SingleStoreDB Cloud
    • Use Ollama Demo Group como o Nome do Grupo de Workspace e ollama-demo como o Nome do Workspace. Anote a senha e o nome host. Temporariamente, permita o acesso de qualquer lugar configurando o firewall sob Ollama Demo Group > Firewall.
  • Criar um Banco de Dados 
  • CREATE DATABASE IF NOT EXISTS ollama_demo;
  • Instalar Jupyter
    • pip install notebook
  • Instalar Ollama
    • curl -fsSL https://ollama.com/install.sh | sh
  • Variável de Ambiente
    • export SINGLESTOREDB_URL="admin:<senha>@<host>:3306/ollama_demo"
      Substituir <senha> e <host> pelos valores do seu ambiente.
  • Iniciar Jupyter
    • jupyter notebook

Preencha o Notebook

Primeiro, algumas pacotes:

Shell

 

A seguir, importaremos algumas bibliotecas:

Python

 

Criaremos embeddings usando all-minilm (45 MB no momento da escrita):

Python

 

Plain Text

 

Para nossa LLM, usaremos llama2 (3.8 GB no momento de escrita):

Python

 

Exemplo de saída:

Plain Text

 

A seguir, usaremos o texto de exemplo do site Ollama:

Python

 

Configuraremos as embeddings para all-minilm e iteraremos sobre cada documento para construir o conteúdo para um DataFrame Pandas. Além disso, convertemos as embeddings para o formato de 32 bits, já que este é o padrão de SingleStore para o tipo de dado VECTOR. Finalmente, determinaremos o número de dimensões de embeddings para o primeiro documento no DataFrame Pandas.

A seguir, criaremos uma conexão com nossa instância SingleStore:

Python

 

Agora, criaremos uma tabela com a coluna vector usando as dimensões determinadas anteriormente:

Python

 

Agora, escreveremos o DataFrame Pandas para a tabela:

Python

 

Exemplo de saída:

Plain Text

 

Agora, criaremos um índice para corresponder ao criado no artigo anterior:

Python

 

Agora, faremos uma pergunta, conforme a seguir:

Python

 

Convertermos o prompt em embeddings, garantimos que os embeddings sejam convertidos para o formato de 32 bits e então executamos a consulta SQL que usa a notação infixa <-> para Distância Euclidiana.

Exemplo de saída:

Plain Text

 

A seguir, usaremos a LLM, conforme a seguir:

Python

 

Exemplo de saída:

Plain Text

 

Resumo

Neste artigo, replicamos os passos que seguímos no artigo anterior e alcançamos resultados semelhantes. No entanto, tivemos que escrever uma série de instruções SQL e gerenciar várias etapas que o LangChain teria tratado por nós. Além disso, pode haver mais tempo e custo envolvidos na manutenção da base de código a longo prazo, em comparação com a solução LangChain. 

Usar LangChain em vez de escrever código personalizado para acesso ao banco de dados oferece várias vantagens, como eficiência, escalabilidade e confiabilidade. 

O LangChain oferece uma biblioteca de módulos pré-construídos para interação com o banco de dados, reduzindo o tempo e esforço de desenvolvimento. Os desenvolvedores podem usar esses módulos para implementar rapidamente várias operações de banco de dados sem começar do zero.

O LangChain abstrai muitas das complexidades envolvidas no gerenciamento de bancos de dados, permitindo que os desenvolvedores se concentrem em tarefas de alto nível, em vez de detalhes de implementação de baixo nível. Isso melhora a produtividade e o tempo de chegada ao mercado para aplicativos baseados em bancos de dados.

O LangChain tem uma grande, ativa e crescente comunidade de desenvolvedores, está disponível no GitHub e fornece extensa documentação e exemplos. 

Em resumo, o LangChain oferece aos desenvolvedores uma plataforma poderosa, eficiente e confiável para a construção de aplicativos baseados em bancos de dados, permitindo que eles se concentrem em problemas de negócios usando abstrações de mais alto nível, em vez de recriar a roda com código personalizado. Comparando o exemplo neste artigo com o exemplo que usamos no artigo anterior, podemos ver os benefícios.

Source:
https://dzone.com/articles/ollama-plus-singlestore-minus-langchain