Não se fala em outra coisa ultimamente a não ser sobre IA, em especial as LLMs (Large Language Models) como ChatGPT e outros. E embora em algum momento próximo esse hype diminua para níveis mais saudáveis (o Hype Cycle do Gartner nunca erra), é inegável que dá para construir aplicações mais inteligentes com a ajuda delas. E a melhor parte: enquanto no passado você tinha de construir seu próprio modelo de IA, o que levava muito tempo, dinheiro e dados, agora a maior parte do trabalho duro já foi feito por empresas como a OpenAI. Atualmente, você pode pegar as APIs de um modelo de IA pronto, adicionar seus dados e APIs, prompts inteligentes e voilá, sua funcionalidade ou solução que usa IA está pronta!
E para fazer essa “cola” entre o modelo e os seus dados e APIs é que existem soluções como a LangChain, que funciona como um framework para aplicações que usam IA, orquestrando os diferentes atores que compõem a sua arquitetura além de aumentar as capacidades do LLM que você se conectar. Ou dois, já que você pode querer/precisar se conectar a mais de um.
Pensando nisso, nesse tutorial eu vou te mostrar como explorar as funcionalidades mais básicas do LangChain usando Node.js e modelos da OpenAI. Para um aprofundamento maior nos modelos e API da OpenAI, recomendo este tutorial.
Vamos lá!
#1 – Setup do Ambiente
Para fazer este tutorial você vai precisar do Node.js e do Visual Studio Code instalados na sua máquina. Você pode baixar e instalar eles pelos links que forneci antes ou assistir ao vídeo abaixo com o passo a passo.
Depois disso, você vai precisar de uma API Key da OpenAI, a empresa criadora do ChatGPT, Sora, Dall-e e outros modelos famosos de IA generativa. Para criar sua chave, acesse este link e se autentique. Depois mande criar sua chave e guarde-a em um lugar seguro, não tem como você vê-la uma segunda fez e terá de criar outra caso perca essa.
Agora que você tem a sua chave, é importante você saber que ela só funcionará caso você tenha adquirido créditos junto à OpenAI. Sim, eles não possuem APIs gratuitas ou limite de uso gratuito, tem de colocar ao menos U$5 de crédito para começar a brincar e depois sempre manter saldo na sua conta se for colocar seu projeto em produção.
Para adicionar crédito, você deve ir nas configurações da sua conta (settings) e dentro dela, na seção de cobrança (billing), acessível neste link. Adicione uma forma de pagamento, coloque saldo e pronto, agora pode usar sua chave. Dica: você pode obter um incremento gratuito de tokens (usados nas requisições) para usar na plataforma se compartilhar os seus dados com a OpenAI, neste link.
Depois disso, dependendo do modelo de IA que vier a usar (existem vários), pode ser necessário uma verificação da sua conta, que você faz nesse link.

#2 – Setup do Projeto
Agora crie o seu projeto Node.js com os comandos abaixo, um de cada vez.
1 2 3 4 5 6 |
mkdir langchain-example cd langchain-example npm init -y npm install dotenv langchain @langchain/openai @langchain/core |
As extensões que instalamos no último comando foram:
- DotEnv: para configurações do projeto;
- LangChain: o framework LangChain;
- @LangChain/OpenAI: SDK de integração com as APIs da OpenAI;
- @LangChain/Core: lib necessária para o SDK acima funcionar;
Agora abra o projeto no VS Code e crie um arquivo .env na raiz do projeto com as variáveis que vamos usar, principalmente a sua chave da OpenAI e lembre-se de não subir esse .env para seu GitHub se for versionar o projeto.
1 2 3 4 |
# .env OPENAI_API_KEY=xxxxxxx |
Agora vá no seu package.json e mude o type para module, a fim de podermos usar a sintaxe de ESModules no projeto.
1 2 3 |
"type": "module", |
Também crie um index.js e coloque nele o carregamento do .env.
1 2 3 4 |
//index.js import "dotenv/config"; |
Agora sim, temos tudo pronto para programar nosso exemplo.

#3 – Conectando na OpenAI
Nosso primeiro exemplo vai ser bem simples e nada original caso você já tenha experiência prévia de integração com as APIs da OpenAI. Vamos usar o LangChain para criar um cliente que envia uma mensagem para o modelo da OpenAI, como abaixo.
1 2 3 4 5 6 7 8 9 10 11 12 |
import { ChatOpenAI } from "@langchain/openai"; const model = new ChatOpenAI({ openAIApiKey: process.env.OPENAI_API_KEY, model: "gpt-4.1-nano", verbose: false }); const response = await model.invoke("Hello");; console.log(response.content); |
Aqui nós inicializamos um objeto modelo com a classe ChatOpenAI, passando pra ela nossa chave da OpenAI (definida no .env) e o modelo que você quiser usar, sendo que aqui eu usei o mais barato de todos e combinei com verbose “false” pras respostas serem mais objetivas e consequentemente gastarem menos tokens.
Para enviar nossa requisição usamos a função invoke, com o prompt, e imprimimos o conteúdo da resposta no terminal. Para rodar, você deve abrir outra janela de terminal (deixe uma apenas para o backend fake) e use o comando npm start. O resultado você vê abaixo.
Experimente imprimir o objeto inteiro do response no terminal, para conhecer melhor todas propriedades.
Com esse código você acaba de criar o seu wrapper de ChatGPT, localmente, mas obviamente isso não traz nada de novo e não é essa a funcionalidade principal do LangChain, então vamos em frente.
#4 – Configurando Prompts
Uma das coisas interessantes que você pode fazer com LangChain é organizar melhor os seus prompts, principalmente aqueles que são pré-requisitos para seu agente de IA se comportar como você deseja. Para isso, vamos começar fazendo uma nova importação e configurando nosso novo prompt, explico melhor na sequência.
1 2 3 4 5 6 7 8 |
import { ChatPromptTemplate } from "@langchain/core/prompts"; const chatPrompt = ChatPromptTemplate.fromMessages([ ["system", "Você é um comediante que conta piadas para crianças."], ["user", "Conte uma piada sobre {topic}"], ]); |
A classe ChatPromptTemplate serve para construirmos prompts padronizados, diminuindo a quantidade de texto que o usuário terá de digitar para dar comandos ao nosso agente. Além disso, podemos fazer inclusive pré-configurações que ele sequer imagine, geralmente associados ao perfil que queremos que o agente assuma.
Nesse exemplo, criamos um prompt cuja configuração de sistema (system) é que ele deve se comportar como um comediante infantil, enquanto que o prompt enviado pelo usuário será um comando para contar uma piada, sendo que somente o tema da piada deverá ser realmente digitado.
Para enviarmos este prompt, usaremos o código abaixo, que diferente do anterior, vai imprimir o resultado aos poucos, como vemos no ChatGPT Web, ao invés de tudo de uma vez só como fizemos antes.
1 2 3 4 5 6 7 8 |
const chain = chatPrompt.pipe(model); const response = await chain.stream({ topic: "galinha" }) for await (const chunk of response) { console.log(chunk.content); } |
A partir do prompt criamos um pipeline de envio de comandos para o model, gerando uma cadeia de mensagens (chain). Com essa chain, poderíamos usar o invoke, mas optei pelo stream para pegarmos a resposta aos pedaços conforme o modelo for gerando ela. A função stream funciona como a invoke, podemos passar a string pra ela, mas como temos um prompt configurado na chain, então vamos passar um objeto apenas com o campo configurável do nosso template (as propriedades tem de ser iguais aos placeholders do prompt).
Já o laço para impressão do resultado é um for await onde recebo os chunks (blocos) e vou imprimindo eles. O resultado no console fica meio tosco, mas eu fiz dessa forma para lhe mostrar esta opção de retorno também.

#5 – Indo Além
Estes dois exemplos estão bem longe do real potencial de usar LangChain mas ajudam a entender os principais compoentes como as chains, os prompts e os responses. Com LangChain, você ainda pode implementar:
- output parsers: que são conversores da saída da IA, para lhe entregar em um formato específico;
- documents: que são fontes de dados para sua IA usar como contexto/histórico;
- agents: que são IAs mais autônomas, que não servem apenas para responder perguntas, mas que raciocinam e usam ferramentas;
- tools: que são ferramentas externas que seu agente pode utilizar, como busca na web, APIs, outros agentes, etc;
- e muito mais
Por hoje é só, mas quem sabe no futuro eu não retorne com outros tutoriais sobre este assunto tão interessante.
Até a próxima!

Olá, tudo bem?
O que você achou deste conteúdo? Conte nos comentários.