Elevando o potencial das LLMs com LangChain
1. Conceitos básicos do LangChain
Framework para Modelos de Linguagem: LangChain é uma estrutura de programação destinada ao desenvolvimento de aplicações que utilizam modelos de linguagem. Ele oferece uma interface padrão para "cadeias", facilitando a integração com outras ferramentas e possibilitando cadeias de ponta a ponta para aplicações comuns.
Open Source e Orientado a Dados: Como um framework open source, LangChain permite a criação de experiências personalizadas e enriquecidas ao se conectar com diversas fontes de dados. Ele é descrito como "data-aware" e "agentic", o que significa que as aplicações desenvolvidas com ele podem interagir com o ambiente e conectar-se a outras fontes de dados.
Componentes Modulares: Os principais componentes do LangChain incluem "LLM Wrappers", "Prompt Template" e índices para recuperação de informações relevantes. Esses componentes são blocos de construção modulares, prontos e fáceis de usar para desenvolver aplicações poderosas.
Usos e Aplicações: LangChain é utilizado em várias aplicações, incluindo análise e resumo de documentos, chatbots e análise de código. Isso demonstra sua versatilidade e capacidade de se adaptar a diferentes necessidades e contextos.
Agentes e Ferramentas: Os agentes no LangChain são componentes reutilizáveis que podem executar tarefas específicas, como geração de texto, tradução de idiomas e resposta a perguntas. Além disso, existem ferramentas que são bibliotecas de funções auxiliares no desenvolvimento de diversas aplicações.
Facilitação do Desenvolvimento: O LangChain atua como uma orquestração para o desenvolvimento de aplicações, simplificando o uso de LLMs em diferentes contextos, desde cálculos algébricos até a geração de saídas gráficas.
2. Integrando o LangChain com a API da OpenAI
2.1. Reproduzindo o exemplo anterior com LangChain
Antes de mais nada, vamos instalar o langchain com:
conda install langchain -c conda-forge
A seguir, vamos criar um novo arquivo e adicionar o seguinte script:
import os
from langchain.chat_models import ChatOpenAI
from langchain.schema import AIMessage, HumanMessage, SystemMessage
from dotenv import load_dotenv
load_dotenv()
chat = ChatOpenAI()
messages = [
SystemMessage(
content="Você é um especialista em Python"
),
HumanMessage(
content="Explique como aplicar um monad em python. De um exmeplo"
),
]
print(chat(messages))
Note que o langchain já espera por padrão que a API Key esteja em uma variável
de ambiente chamada OPENAI_API_KEY
. Por isso não é necessário carregá-la
explícitamente.
2.2. Streaming de chunks
Quando rodamos os dois primeiros scripts que fizemos, foi possível notar que
houve um significativo atraso entre o pedido e a resposta do sistema. Isso se
dá pois, por padrão, tanto a API da OpenAI como o Langchain esperam a resposta
estar pronta para exibir tudo de uma vez. Para ter uma funcionalidade mais
parecida com o ChatGPT, podemos fazer um streaming de chunks
. Veja o exemplo
abaixo:
import os
from langchain.llms import OpenAI
from dotenv import load_dotenv
load_dotenv()
llm = OpenAI(model="gpt-3.5-turbo-instruct", max_tokens=512)
for chunk in llm.stream("Escreva uma música sobre monads em Python"):
print(chunk, end="", flush=True)