Tutorial do LangChain: Um guia para desenvolvimento de aplicações com a tecnologia LLM

139686_-_Elastic_-_Headers_-_V1_2.jpg

Nos últimos anos, os grandes modelos de linguagem (LLMs), como GPT-4 e LLaMA, abriram um mundo inteiro de possibilidades. O resultado foi uma expansão rápida de ferramentas e aplicações de IA: de um dia para outro, o ChatGPT tornou-se um nome familiar. No entanto, essa expansão não seria possível sem as potentes ferramentas e frameworks que foram criados para facilitar essa nova geração de apps. 

Um desses frameworks é o LangChain, que facilita a criação de novos apps usando os LLMs existentes. Ele foi desenvolvido por Harrison Chase, o especialista em machine learning, e foi lançado em 2022 como um projeto open source. Com esse framework, foi dado um grande passo para preencher a lacuna técnica entre os modelos de linguagem existentes e a criação de aplicações novas e variadas.

LangChain explicado

Explicado em termos simples, LangChain é uma interface padronizada que simplifica o processo de criação de apps com IA. Ele oferece uma variedade de ferramentas que você pode usar para conectar componentes diferentes e criar fluxos de trabalho complexos. Isso inclui LLMs e vários tipos de fontes de dados. Quando um usuário interage com o app, o LangChain usa suas conexões com um LLM para processar a solicitação e gerar as respostas adequadas. Ele também pode usar informações e dados de fontes externas, como um documento ou banco de dados, para fornecer respostas mais precisas e contextualmente relevantes.

Por exemplo, se um usuário fizer uma pergunta, o LangChain vai usar o LLM para compreender a pergunta e formular uma resposta. Além disso, ele vai extrair dados de uma ou mais fontes externas, para aprimorar sua resposta. Dessa forma, sua aplicação se torna muito mais inteligente e capaz de processar consultas complexas e especializadas.

Basicamente, você fornece os dados mais relevantes para os problemas que você quer resolver e amplia, assim, as habilidades do LLM.

Ele está disponível como um pacote Python e TypeScript e conta com vários recursos impressionantes:

  • Interação com modelos: o LangChain permite interagir com qualquer modelo de linguagem, gerenciando as entradas e extraindo as informações das saídas.

  • Integração eficiente: ele fornece integração eficiente com plataformas de IA populares, como OpenAI e Hugging Face.

  • Flexibilidade e customização: o LangChain oferece flexibilidade, opções de customização e componentes poderosos para criar diversas aplicações em setores diferentes.

  • Componentes básicos: o framework consiste em bibliotecas LangChain, modelos LangChain, LangServe e LangSmith, que simplificam todo o ciclo de vida da aplicação. 

  • Interfaces padronizadas: ele fornece interfaces padronizadas, gerenciamento rápido e recursos de memória, o que possibilita que os modelos de linguagem interajam com as fontes de dados.

Essa combinação de recursos proporciona a flexibilidade, a rapidez, a escalabilidade e a facilidade de uso – as características tão procuradas pelos desenvolvedores que estão começando a trabalhar com IA. 

Como o LangChain funciona?

O LangChain é um framework modular que se integra com os LLMs. Trata-se de uma interface padronizada que abstrai as complexidades e dificuldades de trabalho com APIs de LLM diferentes: o mesmo processo é usado para integração com GPT-4, LLaMA ou qualquer outro LLM que você queira usar. Ele também conta com a seleção dinâmica de LLM, o que significa que os desenvolvedores podem selecionar o LLM mais adequado para a tarefa específica que o LangChain deve realizar.

O design modular também facilita o processamento e a transformação de dados de entrada em saídas acionáveis. Ele processa vários tipos de dados, como texto, código e formatos multimídia, e fornece ferramentas para pré-processamento, limpeza e normalização de dados. Esse processo assegura que os dados sejam adequados para consumo pelos LLMs e pode envolver tokenização, normalização e identificação de linguagem.

O LangChain também processa a saída do LLM e a transforma em formatos adequados para o app, ou de acordo com os requisitos específicos da tarefa. Alguns exemplos seriam: formatação de texto, geração de trechos de código e fornecimento de resumos de dados complexos.

Conceitos básicos do LangChain

A arquitetura do LangChain é baseada no conceito de componentes e cadeias. Os componentes representam módulos reutilizáveis ​​que executam tarefas específicas, por exemplo, processar dados de entrada, gerar formatos de texto, acessar informações externas ou gerenciar fluxos de trabalho. As cadeias são sequências de componentes que trabalham em conjunto para atingir um objetivo mais amplo, por exemplo, resumir um documento, gerar formatos de texto criativos ou fornecer recomendações personalizadas.

Componentes e módulos

No LangChain, os termos “componentes” e “módulos” são às vezes usados ​​de forma intercambiável, mas existe uma distinção sutil entre os dois: 

  • Componentes são os elementos básicos do LangChain, que representam tarefas ou funcionalidades específicas. Eles são normalmente pequenos, focados e podem ser reutilizados em diferentes aplicações e fluxos de trabalho. 

  • Módulos, por outro lado, fazem uma combinação de vários componentes para formar as funcionalidades mais complexas. O LangChain até fornece interfaces padrão para alguns dos seus módulos principais, incluindo módulos de memória (um elemento básico reutilizável, que armazena e gerencia dados usados por grandes modelos de linguagem) e agentes (uma unidade de controle dinâmico que orquestra as cadeias baseando-se no feedback em tempo real e na interação do usuário). 

Assim como os componentes, os módulos são reutilizáveis ​​e é possível combiná-los para criar fluxos de trabalho ainda mais complexos. Quando as sequências de componentes ou módulos são combinadas para atingir um objetivo específico, isso se chama cadeia. As cadeias são fundamentais para a orquestração do fluxo de trabalho no LangChain e são essenciais para criar aplicações eficazes que conseguem executar uma grande variedade de tarefas.

Integração com LLMs

O LangChain se integra perfeitamente com LLMs por meio de uma interface padronizada. No entanto, a integração do LangChain com LLMs não só fornece um mecanismo de conexão, ela vai muito além. Ela também oferece vários recursos que otimizam o uso de LLMs para criar aplicações baseadas em linguagem:

  • Gerenciamento de prompts: o LangChain possibilita criar prompts eficazes que ajudam os LLMs a entender a tarefa e gerar uma resposta útil.

  • Seleção dinâmica de LLM: permite selecionar o LLM mais apropriado para tarefas diferentes, levando em consideração os fatores como complexidade, requisitos de precisão e recursos computacionais.

  • Integração de gerenciamento de memória: o LangChain se integra com módulos de memória, o que significa que os LLMs podem acessar e processar as informações externas.

  • Gerenciamento com base em agentes: possibilita orquestração de fluxos de trabalho complexos baseados em LLM, que se adaptam às circunstâncias e às necessidades dinâmicas e variáveis dos usuários.

Gerenciamento de fluxo de trabalho

No LangChain, o gerenciamento de fluxo de trabalho é o processo de orquestração e controle da execução de cadeias e agentes para resolver um problema específico. Ele inclui: gerenciar o fluxo de dados, coordenar a execução de componentes e garantir que as aplicações respondam efetivamente às interações do usuário e às mudanças de circunstâncias. Seguem alguns dos principais componentes do gerenciamento de fluxo de trabalho:

  • Orquestração da cadeia: o LangChain coordena a execução de cadeias para garantir que as tarefas sejam executadas na ordem correta e que os dados sejam transmitidos corretamente entre os componentes.

  • Gerenciamento com base em agentes: o uso de agentes é simplificado com modelos predefinidos e uma interface amigável.

  • Gerenciamento de estado: o LangChain rastreia automaticamente o estado da aplicação e oferece aos desenvolvedores uma interface unificada para acessar e modificar as informações do estado.

  • Gerenciamento de simultaneidade: o LangChain lida com as complexidades da execução simultânea, o que permite que os desenvolvedores se concentrem nas tarefas e interações, sem se preocupar com problemas de threading ou sincronização.

Configuração do LangChain

Uma das vantagens do LangChain é que ele exige poucos requisitos iniciais. Neste guia, usaremos Python, então você precisará ter o Python 3.8 ou posterior instalado no seu computador. É só!

Instalação e configuração

O primeiro passo é instalar o framework básico do LangChain. O jeito mais fácil de fazer isso é com este comando PIP:

pip install langchain

Agora você vai precisar de um LLM com o qual o LangChain vai interagir. Neste exemplo, usaremos OpenAI, mas para seu app, você pode usar qualquer LLM que desejar:

pip install openai

Para que a OpenAI funcione, também será necessária uma chave de API, para autenticar suas solicitações. Para obter uma, você pode criar uma conta OpenAI, acessar a seção de chaves de API e selecionar “Criar nova chave secreta”. Depois de obter a chave, guarde-a em algum lugar seguro. Em breve, você vai precisar dela.

Por fim, crie um arquivo de texto com nome data.txt. Ele será a fonte de dados externa usada para dar contexto ao LLM:

In West Philadelphia born and raised
On the playground was where I spent most of my days
Chillin' out, maxin', relaxin', all cool
And all shootin' some b-ball outside of the school

Agora chegamos na parte divertida!

Desenvolvimento de aplicações com o LangChain

Para criar este app do LangChain, abra seu editor de texto ou IDE da sua escolha e crie um novo arquivo Python (.py) no mesmo local que o arquivo data.txt. Você vai criar um app super básico que envia um prompt para o LLM do GPT-3 da OpenAI e imprime a resposta.

Você queria algo um pouco mais avançado? Confira nosso guia que explica como usar o Amazon Bedrock com o Elasticsearch e o Langchain.

Etapa 1: importar a classe da OpenAI do LangChain

No topo do seu script Python, adicione esta instrução de importação para “puxar” a classe da OpenAI do módulo LLM do LangChain:

from langchain.llms import OpenAI

Etapa 2: definir uma leitura funcional de dados de um arquivo de texto

Defina a função para que o app use o caminho do arquivo como argumento. Isso abrirá o arquivo para leitura e retornará seu conteúdo:

def read_data_from_file(file_path):
    with open(file_path, 'r') as file:
        return file.read()

Etapa 3: inicializar o modelo da OpenAI

Crie uma instância da classe da OpenAI com sua chave de API, substituindo YOUR-OPENAI-KEY com a chave real que você obteve da OpenAI:

gpt3 = OpenAI(api_key='YOUR-OPENAI-KEY')

Etapa 4: definir uma função para solicitar uma resposta da OpenAI

Escreva uma função que use um prompt como argumento e retorne a resposta do modelo do GPT-3:

def get_response(prompt):
    return gpt3(prompt)

Etapa 5: ler dados do arquivo de texto

Especifique o caminho para o arquivo de texto e use a função que você definiu anteriormente para ler seu conteúdo. Os dados serão armazenados na variável external_data:

file_path = 'data.txt'
external_data = read_data_from_file(file_path)

Etapa 6: criar um prompt de teste

Aqui você define o prompt que será enviado ao GPT-3. Neste exemplo, você vai pedir que ele leia o texto e diga qual programa de TV está descrito no arquivo de texto:

prompt = f"Based on the following data: {external_data}, what TV show is this about?"

Etapa 7: obter e imprimir a resposta do GPT-3

Chame uma função que envia o prompt preparado e depois recupera e imprime a resposta do GPT-3:

print("Response:", get_response(prompt))

Etapa 8: executar o app e verificar a resposta

Depois de concluir todas as etapas, seu app Python ficará assim:

from langchain.llms import OpenAI

# Function to read data from a file
def read_data_from_file(file_path):
    with open(file_path, 'r') as file:
        return file.read()

# Initialize the LLM
gpt3 = OpenAI(api_key='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')

def get_response(prompt):
    return gpt3(prompt)

# Read data from your text file
file_path = 'data.txt'
external_data = read_data_from_file(file_path)

# Prepare your prompt including the external data
prompt = f"Based on the following data: {external_data}, what TV show is this about?"

# Get the response from GPT-3
print("Response:", get_response(prompt))

Agora, só resta executar seu Python app e ver se funciona! Salve o arquivo e execute seu app com este comando no terminal:

python YOUR-APP-NAME.py

Se tudo correr como planejado, você receberá uma resposta assim:

Response: 
This is the opening theme song for the popular 1990s TV show "The Fresh Prince of Bel-Air".

Casos de uso

Esse exemplo é uma demonstração simplificada, mas a flexibilidade do LangChain oferece possibilidades infinitas para criação de novos apps com IA. Não seria possível fazer uma lista completa, mas vamos mencionar alguns estudos de caso para destacar vários apps que podem ser criados:

Como usar LangChain para criar apps com a tecnologia LLM

Neste ponto, já deveria estar evidente que o LangChain oferece possibilidades ilimitadas, pois combina o poder dos LLMs com o contexto e as informações adicionais em fontes de dados externas. E, como vimos neste tutorial, é muito fácil começar a trabalhar com o LangChain. Graças a essa combinação de facilidade de uso, flexibilidade e potência, o LangChain se tornou uma plataforma ideal para desenvolver as mais variadas aplicações com IA. Seja qual for o seu projeto, um chatbot, um app de perguntas e respostas ou um mecanismo de busca, o LangChain pode ajudar você a criar soluções inovadoras e eficazes.

O que você deve fazer a seguir

Quando estiver tudo pronto, veja aqui quatro maneiras para ajudar você a aproveitar os insights dos dados da sua empresa:

  1. Inicie uma avaliação gratuita e veja como a Elastic pode ajudar sua empresa.

  2. Conheça nossas soluções para ver como a Elasticsearch Platform funciona e como nossas soluções atenderão às suas necessidades.

  3. Descubra como incorporar a IA generativa na empresa.

  4. Compartilhe este artigo com alguém que você conhece e que gostaria de lê-lo. Compartilhe por e-mail, LinkedIn, Twitter ou Facebook.

O lançamento e o tempo de amadurecimento de todos os recursos ou funcionalidades descritos neste post permanecem a exclusivo critério da Elastic. Os recursos ou funcionalidades não disponíveis atualmente poderão não ser entregues dentro do prazo previsto ou nem chegar a ser entregues.

Neste post do blog, podemos ter usado ou nos referido a ferramentas de IA generativa de terceiros, que pertencem a seus respectivos proprietários e são operadas por eles. A Elastic não tem nenhum controle sobre as ferramentas de terceiros e não temos nenhuma responsabilidade por seu conteúdo, operação ou uso nem por qualquer perda ou dano que possa surgir do uso de tais ferramentas. Tenha cuidado ao usar ferramentas de IA com informações pessoais, sensíveis ou confidenciais. Os dados que você enviar poderão ser usados para treinamento de IA ou outros fins. Não há garantia de que as informações fornecidas serão mantidas em segurança ou em confidencialidade. Você deve se familiarizar com as práticas de privacidade e os termos de uso de qualquer ferramenta de IA generativa antes de usá-la. 

Elastic, Elasticsearch, ESRE, Elasticsearch Relevance Engine e marcas associadas são marcas comerciais, logotipos ou marcas registradas da Elasticsearch N.V. nos Estados Unidos e em outros países. Todos os outros nomes de empresas e produtos são marcas comerciais, logotipos ou marcas registradas de seus respectivos proprietários.