Este repositório contém os materiais práticos (Python Notebooks) desenvolvidos para o curso de Sistemas Agênticos, com foco na utilização e engenharia de prompts para modelos de Linguagem de Grande Escala (LLMs), como Gemini e OpenAI.
As aulas cobrem desde a interação básica com a API até técnicas avançadas de Prompt Engineering e a construção de sistemas de Geração Aumentada por Recuperação (RAG - Retrieval-Augmented Generation).
O conteúdo está organizado em pastas por módulo (aula), contendo os respectivos Jupyter Notebooks.
| Módulo | Tema Principal | Notebooks |
|---|---|---|
| Aula 01 | Interação Básica com a API | Aula01_Gemini.ipynb & Aula01_GPT.ipynb |
| Aula 02 | Prompt Engineering | Aula02_Gemini.ipynb & Aula02_GPT.ipynb |
| Aula 03 | RAG (Retrieval-Augmented Generation) | Aula03_Gemini.ipynb & Aula03_GPT.ipynb |
| Aula 04 | Function Calling (Tools) | Aula04_Gemini.ipynb |
| EXTRA | Agent Patterns | orquestrador.ipynb & paralelização.ipynb & prompt_encadeado.ipynb & reflexao.ipynb & roteamento.ipynb & multiagente.ipynb |
Este módulo foca na configuração inicial e nos padrões básicos de comunicação com os modelos de IA (Gemini e GPT).
- Objetivos de Aprendizagem:
- Carregar e configurar a chave de API (usando secrets do Google Colab).
- Listar os modelos disponíveis.
- Realizar a geração de texto simples.
- Configurar a geração de múltiplas saídas (candidatos).
- Realizar a geração com conteúdo multimodal (texto e imagem).
- Gerenciar o histórico de uma conversa (
chat) utilizando a funçãogenerate_content(em vez destart_chat), simulando o conceito de que o modelo apenas completa a entrada. - Analisar os tokens de entrada e saída consumidos.
Focada em técnicas essenciais para criar prompts eficazes. A estrutura da aula foi concebida para demonstrar a evolução de um prompt desde uma abordagem vaga até uma instrução altamente precisa e formatada.
- Tópicos Abordados:
- Clareza e Especificidade: A importância de ser preciso sobre a tarefa e os detalhes de resolução (Regras e Contexto), utilizando delimitadores para isolar o texto de entrada (como crases triplas).
- Aprendizagem por Exemplos (In-Context Learning):
- Zero-shot: Sem exemplos.
- One-shot: Fornecimento de um único exemplo para guiar a saída.
- Few-shot: Fornecimento de múltiplos exemplos para refinar o formato e o comportamento.
- Formatação de Saída: Geração de respostas em formatos estruturados como JSON, seja através de exemplos ou utilizando o recurso de saída estruturada com bibliotecas como
Pydantic(específico para o Gemini API). - Incentivo ao Raciocínio (Chain-of-Thought): Técnicas para guiar o modelo a apresentar o raciocínio ou a solução passo a passo (exemplos com equações matemáticas).
Este módulo introduz o conceito de RAG, utilizando a framework LangChain em conjunto com o modelo Gemini. Demonstra como integrar fontes de dados externas (documentos PDF) para aumentar a base de conhecimento do modelo e melhorar a qualidade das respostas.
- Fluxo de Trabalho:
- Carregamento de Documento: Utilização de
PyPDFLoaderpara ler documentos. - Quebra do Documento (Text Splitting): Uso de
RecursiveCharacterTextSplitterpara dividir o documento em partes menores (chunks) com sobreposição. - Armazenamento Vetorial: Geração de embeddings (com
HuggingFaceEmbeddings) e armazenamento dos chunks em um banco de dados vetorial em memória (InMemoryVectorStore). - RAG Agent: Criação de um Agente com LangChain que utiliza uma ferramenta (
retrieve_context) para buscar informações relevantes do banco vetorial e auxiliar o modeloChatGoogleGenerativeAIa responder às consultas do usuário.
- Carregamento de Documento: Utilização de
Este módulo foca na capacidade dos modelos de linguagem de interagir com o mundo exterior por meio de ferramentas ou APIs externas (conhecido como Function Calling ou Chamada de Função).
- Tópicos Abordados:
- Declaração da Ferramenta: Como definir o
schemade uma função. - Fluxo de Execução Manual: O processo em duas etapas em que o modelo sugere a chamada da função, o sistema a executa, e o resultado é devolvido ao modelo para que ele gere a resposta final.
- Execução Automática de Funções: A capacidade do Gemini de executar a função diretamente sem a necessidade de o desenvolvedor intermediar a chamada.
- Gerenciamento de Estado: Demonstração de um Agente-Garçom que utiliza múltiplas chamadas de função (
adicionar_item,remover_item,ver_pedido) para gerenciar um banco de dados (lista de pedidos) ao longo da conversa.
- Declaração da Ferramenta: Como definir o
Esta seção é um material extra que explora padrões avançados e complexos para a construção de sistemas agênticos, focando em como estruturar interações de LLMs para aumentar a confiabilidade, gerenciar a complexidade e orquestrar tarefas.
- Padrões Incluídos:
-
Orquestração e Planejamento (
orquestrador.ipynb): O LLM é usado para gerar um plano de execução estruturado (goal, steps, assigned_to), delegando subtarefas a diferentes "trabalhadores" (ex: Pesquisador, Escritor) antes de iniciar a resolução do objetivo. -
Encadeamento de Prompts (
prompt_encadeado.ipynb): A saída de uma chamada de API (ex: um resumo) se torna a entrada para a próxima chamada (ex: tradução), criando um pipeline de processamento sequencial. -
Paralelização (Map-Reduce) (
paralelização.ipynb): Utilização deasynciopara realizar múltiplas chamadas de API simultaneamente, reduzindo o tempo de espera. O resultado individual de cada chamada é, então, agregado em um passo final (Reduce). -
Roteamento e Classificação (
roteamento.ipynb): O LLM classifica a intenção do usuário (ex:CLIMA,CIÊNCIA) usando uma saída estruturada (Pydantic), e o sistema de software roteia a requisição para a lógica de resposta mais adequada (uma chamada mais curta, uma ferramenta específica, ou um modelo mais robusto). -
Reflexão e Auto-Correção (
reflexao.ipynb): Implementa um loop iterativo onde um LLM atua como gerador (ex: um poema) e outro LLM (ou o mesmo) atua como crítico/avaliador (usando saída estruturadaPASSOU/FALHOU), fornecendo feedback que é incorporado na próxima tentativa de geração para refinar o resultado. -
Multi-Agente (
multiagente.ipynb): Simulação de agentes especializados (ex:Agente de Hotel,Agente de Restaurante) que avaliam o pedido do usuário e usam um campo de "handoff" (encaminhamento) na saída estruturada para passar o controle e o contexto da conversa para o agente correto.
-