Alura > Cursos de Inteligência Artificial > Cursos de IA para Programação > Conteúdos de IA para Programação > Primeiras aulas do curso LangChain e Python: criando ferramentas com a OpenAI

LangChain e Python: criando ferramentas com a OpenAI

Conectando na Openai - Apresentação

Apresentando o instrutor e o curso

Olá! Meu nome é André Santana e faço parte do time de Conteúdo da Lua, atuando nas áreas de IA, Dados e Negócios.

Audiodescrição: André é um homem branco, com barba cheia e cabelo curto, ambos na cor castanho claro. Ele usa óculos e veste uma camiseta verde. Ao fundo, há uma estante iluminada na cor roxa.

Sejam bem-vindos a este curso que integra LinkedIn, Python e a LLM da OpenAI. Este curso é ideal para quem deseja se aprofundar no universo da IA generativa e dar um passo além, utilizando frameworks sofisticados, como o LinkedIn e o LinkGraph, para criar ferramentas cada vez mais poderosas com IA generativa.

Recomendando pré-requisitos e conteúdos do curso

Uma dica importante: para aproveitar melhor este curso, é essencial ter algum contato prévio com LLMs, seja com a OpenAI, Gemini ou qualquer outra LLM comercial disponível no mercado. Recomendamos conferir nossos cursos anteriores para garantir que já tenha essa experiência.

Neste curso, aprenderemos a utilizar o LinkedIn para se conectar com a OpenAI, criar cadeias poderosas usando o LSL, e gerenciar templates de forma adequada utilizando o PromptTemplate e o ChatPromptTemplate.

Explorando ferramentas e técnicas avançadas

Além disso, nós utilizaremos o PyNative para gerar saídas estruturadas de resposta, no formato de JSON ou tipo de parser, e até saídas mais simples usando o formato de Stream. Também aprenderemos a utilizar o LinkGraph para tomar decisões, escolher as ferramentas mais assertivas para cada interação do usuário, e a trabalhar com o famoso HAG para recuperação aumentada generativa. Ou seja, consultaremos documentos de texto, seja no formato de .txt ou .pdf, para que nosso assistente de IA possa focar apenas naquilo que importa e está relacionado a esses documentos.

Aplicando o conhecimento em um projeto prático

Veremos tudo isso na prática, em um projeto que envolve a construção de um assistente para suporte na criação de roteiros de viagem. Assim, conseguiremos interagir com o modelo de agenda ativa para obter dicas, por exemplo, de bons restaurantes ou lugares para visitar, e ao mesmo tempo consultar documentos, como o documento do cartão de crédito, para saber como estamos protegidos ou não dentro de um processo de viagem, seja dentro do Brasil ou fora do país.

Incentivando o uso de recursos adicionais

Lembremo-nos também de aproveitar todos os recursos da plataforma, que além dos vídeos, oferece atividades, nossa comunidade no Discord e nosso fórum de discussões. Bons estudos!

Conectando na Openai - Apresentando o projeto e se conectando com a OpenAI

Introduzindo o curso e o projeto inicial

Olá, pessoal. Vamos dar início ao nosso curso de LangChain com Python via LLM OpenAI. Para isso, vamos desenvolver um projeto do zero, que nos auxiliará no processo de construção de roteiros de viagem usando uma LLM como base e orquestrando as mudanças eventuais através do LangChain.

Para darmos o primeiro passo, começaremos sem utilizar o LangChain, mas conectando uma interação de conversa através de uma completion usando somente a OpenAI. Para isso, precisamos de uma conta na OpenAI. Utilizaremos os modelos mais econômicos disponíveis no momento, começando com o modelo GPT-3.5. Para realizar uma completion e gerar uma resposta, precisamos de uma chave de API. Acesse a página inicial da plataforma, clique na engrenagem e, em seguida, em API Keys. Crie uma nova chave de acesso e volte para o Visual Studio com o projeto base para criar uma variável de ambiente e iniciar os primeiros passos na conexão com a API da OpenAI.

Configurando o ambiente de desenvolvimento

No projeto base, temos uma pasta com documentos que não utilizaremos nesta primeira aula. No script .env, criaremos uma chave chamada OpenAI_API_Key e colaremos a chave obtida na plataforma da OpenAI. Aqui está como você deve definir essa chave no arquivo .env:

OPENAI_API_KEY="sk-gnsj-T3a7tcKa..."

No nosso gitignore, temos duas linhas de instrução que devem ser ignoradas: a primeira é o .env, para evitar que enviemos nossa chave de acesso para o GitHub, caso estejamos versionando e queiramos construir nosso portfólio. Também há o caminho do .lengthen, que são nossas variáveis de ambiente.

#Venv
*.env

langchain

Instalando bibliotecas necessárias

No .lengthen, devemos seguir passo a passo para realizar a instalação das bibliotecas necessárias ao longo do processo. Para isso, utilizaremos um arquivo de requirements.txt, que estará dentro do projeto base. Este arquivo contém versões específicas das bibliotecas da OpenAI e do LangChain, importantes para o curso. É fundamental observar as mudanças ao longo da jornada, pois a área de interação com LLMs e a generativa sofre alterações constantes. Portanto, é importante estar sempre atento à documentação, pois as bibliotecas podem sofrer mudanças ou pacotes podem ser depreciados. Para percorrer o curso, utilize as versões listadas no requirements.txt.

openai==0.86.0
langchain==0.3.25
langchain-openai==0.0.22
langchain-core==0.1.1
faiss-cpu==1.13.0
langchain-community==0.3.25
pypdf==5.6.0

Implementando a conexão inicial com a OpenAI

Feito isso, vamos começar a implementar o projeto para realizar o primeiro teste de conexão com a OpenAI, uma vez que as bibliotecas já estão instaladas. Para isso, criaremos um arquivo chamado main.py. Nesse arquivo, adicionaremos a importação de algumas bibliotecas. A primeira delas é a da OpenAI, da qual importaremos o construtor OpenAI.

from openai import OpenAI

Também importaremos bibliotecas que permitem ler as variáveis de ambiente. Do .env, faremos a leitura da variável criada para armazenar a chave de acesso, utilizando load_dotenv.

from dotenv import load_dotenv

Importaremos também o os para acessar as variáveis do sistema operacional.

import os

Configurando variáveis e criando o cliente OpenAI

Utilizaremos o método load_dotenv e, em seguida, buscaremos a chave de acesso, que é a API key. Para isso, acessaremos o os e, das variáveis de ambiente, pegaremos a variável criada no .env.

load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")

Agora, criaremos algumas variáveis que permitirão realizar mudanças na geração de roteiro, ilustrando a comunicação com o chat. Utilizaremos um modelo generativo, semelhante ao chat GPT, mas consumiremos seu uso através de dados de API. Para isso, criaremos um prompt que será a pergunta que queremos fazer, com variáveis que poderão ser alteradas ao longo da pré-compilação do código.

numero_dias = 7
numero_criancas = 2
atividade = "música"
prompt = f"Crie um roteiro de viagem de {numero_dias} dias, para uma familia com {numero_criancas} crianças, que gosta de {atividade}"

Com isso, temos nossa interação inicial, mas ainda não fizemos nenhuma comunicação com a OpenAI. Agora, vamos criar nosso cliente para isso, utilizando um construtor no qual passaremos nossa chave de acesso, ou chave de API, para inicializar o cliente.

cliente = OpenAI(api_key=api_key)

Realizando a interação com a API da OpenAI

Após isso, criaremos uma interação com a API da OpenAI, armazenando o resultado em uma variável chamada resposta. Utilizaremos nosso cliente para simular uma interação de chat, onde nós seremos o usuário e a API será o bot que responderá. Vamos acessar a subcamada da API, que é o chat, e criar uma completion de interação.

Para criar essa completion, precisamos passar pelo menos dois parâmetros. O primeiro é o modelo que vamos usar, optando pelo GPT 3.5 Tool, por ser mais econômico e adequado para nossos exemplos neste curso. Também passaremos as mensagens, que são uma lista contendo pelo menos uma mensagem de troca, mas idealmente duas: uma para definir o comportamento do sistema e outra para gerar a pergunta do usuário.

resposta = cliente.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[
        {
            "role": "system",
            "content": "Você é um assistente de roteiro de viagens."
        },
        {
            "role": "user",
            "content": prompt
        }
    ]
)

Validando a resposta da API

Feito isso, vamos imprimir a resposta para verificar o resultado.

print(resposta)

Ao executar o código, se todas as conexões com a API estiverem corretas, teremos uma interação com a API da OpenAI e obteremos a resposta para validar a comunicação com nossa chave de acesso. Embora demore um pouco, a resposta é recebida. Ela vem em um formato complexo de chat completion, e a resposta está na parte de conteúdo.

Se quisermos capturar apenas o texto da resposta, podemos criar uma versão diferente da resposta em texto e buscar essa informação. Da primeira opção gerada, extraímos a mensagem e, dela, o conteúdo.

resposta_em_texto = resposta.choices[0].message.content
print(resposta_em_texto)

Concluindo o vídeo e introduzindo o próximo passo

Concluímos aqui nosso primeiro vídeo. No próximo, abordaremos como integrar essa possibilidade ao LangChain e o que ele representa na criação de soluções com modelos de linguagem generativa. Até o próximo vídeo.

Conectando na Openai - Conectando com API da OpenAI via LangChain

Introduzindo o uso do LangChain

Agora que conseguimos nos conectar à API da OpenAI, vamos começar a utilizar o LangChain para nos auxiliar no processo de desenvolvimento do nosso assistente de preparação de roteiro de viagens. Inicialmente, não desenvolveremos um assistente com capacidade de interagir com ferramentas externas. Mais adiante, abordaremos a parte de consulta em arquivos, mas, neste momento, vamos nos concentrar em conectar com o LangChain.

O que é o LangChain? O LangChain é um framework amplamente utilizado para criar soluções mais profissionais, permitindo orquestrar diferentes tipos de recursos de modelos de larga escala que operam com IA generativa. O LangChain não possui custo inicial para utilização e trabalha na premissa de cadeias, garantindo padrões de construção no desenvolvimento. Como é um processo independente do modelo de linguagem que utilizamos, o LLM, ele se torna interessante do ponto de vista comercial, pois permite utilizar o LLM adequado para cada situação. No contexto do nosso projeto, continuaremos utilizando a OpenAI, sem troca de LLM, mas exploraremos conceitos básicos da construção de um projeto com o LangChain.

Preparando o ambiente de desenvolvimento

Para isso, vamos retornar ao nosso menu e apagar a interação que estruturamos inicialmente com a OpenAI. Tudo o que está da linha 12 para baixo será apagado. Manteremos apenas a importação da biblioteca inicial e as interações com o número de dias, o número de crianças e o tipo de atividade que desejamos realizar.

from openai import OpenAI
from dotenv import load_dotenv
import os

load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")

numero_dias = 7
numero_criancas = 2
atividade = "música"

Feito isso, vamos importar uma nova biblioteca. Utilizaremos o LangChain, ainda sem uma estrutura mais comercial, para padronizar a interação com nosso assistente. Alteraremos a primeira importação de biblioteca, que não será mais da OpenAI, mas sim da LangChain OpenAI. Dela, importaremos um ChatOpenAI.

from langchain_openai import ChatOpenAI

Criando o prompt e configurando o modelo

Após isso, manteremos a atribuição da API. Na linha 12, daremos alguns espaços e mudaremos um pouco o processo de estruturação dessa chamada com o LangChain. Vamos criar novamente nosso prompt, começando com uma fString. Faremos uma pergunta diferente: "Você cria um roteiro de viagens para um período de dias para uma família com número de crianças que busca atividades relacionadas à atividade que queremos." Para não repetir o exemplo anterior, mudaremos de música para praia. Aproveitando que está bastante frio em São Paulo, escolhemos praia para que possamos ver um roteiro um pouco diferente.

atividade = "praia"
prompt = f"Crie um roteiro de viagens, para um periodo de {numero_dias}, para uma familia com {numero_criancas} que busca atividades relacionadas a {atividade}"

A principal diferença que temos neste momento é que conseguimos dissociar a necessidade de usar obrigatoriamente apenas o construtor da OpenAI. Podemos utilizar qualquer tipo de modelo, pois todos eles acabam herdando características da mesma classe e implementando as mesmas interfaces na área de implementação. Embora utilizemos a OpenAI, se quisermos trocar para qualquer outro modelo, mantendo o mesmo nome do objeto, podemos continuar mantendo toda a estrutura a partir desse ponto. O que mudará para nós é apenas o construtor. Vamos chamá-lo de modelo e criar um novo modelo do tipo ChatOpenAI.

modelo = ChatOpenAI(
    model="gpt-3.5-turbo",
    temperature=0.5,
    api_key=api_key
)

Executando o modelo e obtendo a resposta

Lembrando que, se utilizarmos outro construtor de modelos, como o Gemini, por exemplo, basta mudar e deixar tudo em função da mesma variável, que funcionará sem problemas, desde que não utilizemos nenhum recurso específico da OpenAI. O modelo que usaremos terá como primeiro parâmetro o modo GPT-3.5. Precisamos passar ainda mais dois parâmetros, sendo um obrigatório, mas também passaremos a temperatura, que será 0,5. A temperatura mede o nível de criatividade do modelo: quanto mais próximo de 2, mais criativo; quanto mais próximo de 0, menos criativo. Recomendamos, geralmente, para uma aplicação mais comercial, algo entre 0,5 e 0,7. Por último, colocaremos a chave de API, que vem da nossa variável API.

Feito isso, o que mudará é que não usaremos mais uma completion para realizar todo o percurso de interação com a nossa LLM. A API da OpenAI ainda será chamada por trás dos panos, mas agora pegaremos uma resposta que vem de um processo de invoke. Temos nosso modelo, chamamos o método invoke, e passamos nosso prompt. É muito parecido com o que tínhamos antes, mas é diferente do método anterior. Não criamos uma completion, que é uma construção de interação com a API muito particular da OpenAI. Neste momento, estamos isolando essa interação através do método invoke. Basta mudar o modelo e podemos fazer chamadas para qualquer modelo de LLM disponível no mercado, sem alterar o tipo de interação ou as chamadas de método que utilizamos.

resposta = modelo.invoke(prompt)

Visualizando a resposta e concluindo a sessão

Se quisermos ver a resposta, basta chamar a resposta e adicionar .content no final. Vamos executar para ver o que acontece. Se tudo der certo, ele passará agora essas chamadas de cadeias com o LangChain e trará a resposta, muito parecido com o que veio antes, mas agora é uma cidade de praia, pois pedimos para ser praia em vez de música.

print(resposta.content)

As vantagens de utilizar o LangChain estão justamente na capacidade de orquestrar nossas interações sem a necessidade de depender ou tornar rígido o processo em um único modelo. Vamos discutir mais adiante outras vantagens que o LangChain nos traz. Até o próximo vídeo.

Sobre o curso LangChain e Python: criando ferramentas com a OpenAI

O curso LangChain e Python: criando ferramentas com a OpenAI possui 120 minutos de vídeos, em um total de 47 atividades. Gostou? Conheça nossos outros cursos de IA para Programação em Inteligência Artificial, ou leia nossos artigos de Inteligência Artificial.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda IA para Programação acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas