Tutorial do LangChain: Um guia para criar aplicações com suporte de LLM

Grandes modelos de linguagem (LLMs), como o GPT-4 e o LLaMA, criaram um mundo inteiro de possibilidades nos últimos anos. Foi anunciado um boom nas ferramentas e aplicações de IA, e o ChatGPT tornou-se um nome conhecido aparentemente da noite para o dia. Mas esse boom não seria possível sem as poderosas ferramentas e frameworks criados para facilitar essa nova geração de aplicativos. 

Um desses frameworks é o LangChain, que facilita a criação de novos apps usando LLMs existentes. Foi desenvolvido pelo especialista em Machine Learning Harrison Chase e lançado em 2022 como um projeto de código aberto. Esse framework é um grande avanço para reduzir a lacuna técnica entre modelos de linguagem existentes e construir novas e variadas aplicações.

LangChain explicado

Em termos simples, o LangChain é uma interface padronizada que simplifica o processo de criação de apps de IA. Ele oferece diversas ferramentas que podem ser usadas para conectar diferentes componentes 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 respostas apropriadas. 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 faz uma pergunta, a LangChain usa o LLM para compreender a pergunta e formular uma resposta. Mas também buscará uma ou mais fontes externas de dados para aprimorar sua resposta. Isso torna sua aplicação muito mais inteligente e capaz de lidar com consultas complexas e especializadas.

Basicamente, você está ampliando as capacidades do LLM ao fornecer dados mais relevantes para os problemas que deseja resolver.

Disponível tanto como pacote Python quanto TypeScript, ele possui vários recursos impressionantes:

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

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

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

  • Componentes do núcleo: o framework consiste em bibliotecas LangChain, templates LangChain, LangServe e LangSmith, que simplificam todo o ciclo de vida da aplicação. 

  • Interfaces padronizadas: oferece interfaces padronizadas, gerenciamento de prompts e recursos de memória, permitindo que os modelos de linguagem interajam com as fontes de dados.

Essa combinação de recursos o torna flexível, rápido, com escalabilidade e fácil de usar, o que é música para qualquer desenvolvedor tentado a começar com IA. 

Como funciona o LangChain?

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

O design modular também facilita o processamento e a transformação de dados de entrada em saídas acionáveis. Ele lida com vários tipos de dados, incluindo texto, código e formatos multimídia, além de fornecer ferramentas para pré-processamento, limpeza e normalização de dados. Isso serve para garantir que os dados sejam adequados para consumo pelos LLMs e pode envolver tokenização, normalização e identificação de idiomas.

O LangChain também processa a saída do LLM, transformando-a em formatos apropriados para os requisitos específicos do app ou da tarefa. Isso inclui coisas como formatação de texto, geração de trechos de código e fornecimento de resumos de dados complexos.

Conceitos de núcleo do LangChain

A arquitetura do LangChain é construída sobre o conceito de componentes e cadeias. Os componentes representam módulos reutilizáveis que realizam tarefas específicas, como processar dados de entrada, gerar formatos de texto, acessar informações externas ou gerenciar fluxos de trabalho. Chains são sequências de componentes que trabalham juntos para alcançar um objetivo mais amplo, como 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 vezes são usados de forma intercambiável, mas há uma distinção sutil entre os dois: 

  • Os componentes são o núcleo blocos de construção do LangChain, representando tarefas ou funcionalidades específicas. Normalmente, eles são pequenos e focados e podem ser reutilizados em diferentes aplicativos e fluxos de trabalho.

  • Os módulos, por outro lado, combinam múltiplos componentes para formar funcionalidades mais complexas. O LangChain até fornece interfaces padrão para alguns de seus principais módulos, incluindo módulos de memória (um bloco de construção reutilizável que armazena e gerencia dados para uso por grandes modelos de linguagem) e agentes (uma unidade de controle dinâmica que orquestra cadeias com base em feedback em tempo real e interação do usuário). 

Assim como os componentes, os módulos são reutilizáveis e podem ser combinados para criar fluxos de trabalho ainda mais complexos. Isso é chamado de cadeia, onde sequências de componentes ou módulos são juntas para alcançar um objetivo específico. Chains são fundamentais para a orquestração de fluxos de trabalho no LangChain e são essenciais para construir aplicações eficazes que lidam com uma ampla gama de tarefas.

Integração com LLMs

O LangChain integra-se perfeitamente com LLMs ao fornecer uma interface padronizada. Mas a integração do LangChain com LLMs vai além de simplesmente fornecer um mecanismo de conexão. Também oferece vários recursos que otimizam o uso de LLMs para construir aplicações baseadas em linguagem:

  • Gerenciamento de prompts: o LangChain permite que você crie prompts eficazes que ajudem os LLMs a entender a tarefa e gerar uma resposta útil.

  • Seleção dinâmica de LLM: isso permite que você selecione o LLM mais apropriado para diferentes tarefas com base em fatores como complexidade, requisitos de precisão e recursos computacionais.

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

  • Gerenciamento baseado em agentes: isso permite que você orquestre fluxos de trabalho complexos baseados em LLM que se adaptam às circunstâncias e necessidades do usuário em constante mudança.

Gerenciamento de fluxo de trabalho

No LangChain, o gerenciamento de fluxos de trabalho é o processo de orquestrar e controlar a execução de cadeias e agentes para resolver um problema específico. Isso envolve gerenciar o fluxo de dados, coordenar a execução de componentes e garantir que os aplicativos respondam de forma eficaz às interações do usuário e às mudanças nas circunstâncias. Aqui estão alguns dos principais componentes de gerenciamento de fluxo de trabalho:

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

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

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

  • Gerenciamento de concorrência: o LangChain lida com as complexidades da execução concorrente, permitindo que os desenvolvedores se concentrem nas tarefas e interações sem se preocuparem com problemas de threads ou sincronização.

Configuração do LangChain

Uma das vantagens do LangChain é que há pouquíssimos requisitos para começar. Para este guia, vamos usar Python, então você precisará ter Python 3.8 ou posterior instalado no seu computador. É isso aí!

Instalação e configuração

A primeira etapa é instalar o framework principal do LangChain. A maneira mais fácil de fazer isso é com este comando PIP:

pip install langchain

A próxima coisa que você precisa é de um LLM para a LangChain interagir. Vamos usar o OpenAI neste exemplo, mas você pode usar qualquer LLM que quiser para seu app:

pip install openai

Para que o OpenAI funcione, você também precisa de uma chave de API para autenticar suas solicitações. Você pode obter uma criando uma conta OpenAI, acessando a seção de chaves da API e selecionando "Criar nova chave secreta". Depois que tiver a chave, guarde-a em algum lugar. Você vai precisar dele em breve.

Por fim, crie um arquivo de texto chamado data.txt. Esta será a fonte de dados externa que você usa 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 é hora da parte divertida!

Desenvolvendo aplicações com LangChain

Para criar este app LangChain, você precisará abrir seu editor de texto ou IDE de preferência e criar um novo arquivo Python (.py) no mesmo local que o dados.txt. Você criará um app bem básico que envia uma solicitação ao LLM GPT-3 da OpenAI e imprime a resposta.

Procurando algo um pouco mais avançado? Confira nosso guia sobre como usar o Amazon Bedrock com Elasticsearch e Langchain.

Etapa 1. Importar a classe OpenAI do LangChain

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

from langchain.llms import OpenAI

Etapa 2. Definir um dado funcional de leitura a partir de um arquivo de texto:

Defina a função, para que o app assuma o caminho do arquivo como um 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 OpenAI

Crie uma instância da classe OpenAI com sua chave de API, substituindo YOUR-OPENAI-KEY pela 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 receba um prompt como argumento e retorne a resposta do modelo GPT-3:

def get_response(prompt):
    return gpt3(prompt)

Etapa 5. Ler os 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. Em seguida, você armazenará os dados na variável external_data:

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

Etapa 6. Criar um prompt de teste

É aí que você define o prompt que vai enviar para o GPT-3. Neste exemplo, você vai pedir para ele ler o texto e dizer sobre qual programa de TV o arquivo de texto está falando:

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

Etapa 7. Obter a resposta do GPT-3 e imprima

Chame uma função que envie o prompt preparado e então recupere e imprima a resposta do GPT-3:

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

Etapa 8. Executar o app e verificar a resposta

Depois de fazer tudo isso, você tem um app Python que se parece com isto:

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))

Então agora só falta executar seu app em Python para garantir que ele funcione! Salve o arquivo e execute seu app com este comando no terminal:

python YOUR-APP-NAME.py

Se tudo saiu conforme o planejado, você recebe uma resposta que se parece com esta:

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

Casos de uso

Este exemplo é uma demonstração simplificada demais, mas a flexibilidade do LangChain significa que há possibilidades infinitas para criar novos aplicativos de IA. Não poderíamos tentar listar todos aqui, mas vamos passar por alguns estudos de caso para destacar as várias coisas que você poderia construir:

Construa apps com LLM usando LangChain

Já deveria estar claro que, ao combinar o poder dos LLMs com o contexto e informações extras em fontes de dados externas, o LangChain oferece possibilidades ilimitadas. Também é surpreendentemente fácil começar, como mostrado neste tutorial do LangChain. Essa facilidade de uso, combinada com a flexibilidade e o poder do LangChain, fazem dele uma plataforma ideal para desenvolver uma ampla gama de aplicações de IA. Esteja você criando um chatbot, um aplicativo de perguntas e respostas ou um mecanismo de busca, a LangChain pode ajudar a criar soluções inovadoras e eficazes.

O que você deve fazer a seguir

Quando estiver 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 email, LinkedIn, X ou Facebook.

O lançamento e o tempo de amadurecimento de todos os recursos ou funcionalidades descritos neste artigo permanecem a exclusivo critério da Elastic. Os recursos ou funcionalidades não disponíveis no momento poderão não ser entregues ou não chegarem no prazo previsto.

Neste post do blog, podemos ter usado ou feito referência 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 qualquer 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 seguras ou confidenciais. 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.