diff --git a/units/pt-BR/_toctree.yml b/units/pt-BR/_toctree.yml new file mode 100644 index 00000000..b5dc3bc1 --- /dev/null +++ b/units/pt-BR/_toctree.yml @@ -0,0 +1,172 @@ +- title: Unidade 0. Boas-vindas ao curso + sections: + - local: unit0/introduction + title: Boas-vindas ao curso 🤗 + - local: unit0/onboarding + title: Onboarding + - local: unit0/discord101 + title: (Opcional) Introdução ao Discord (Discord 101) + - title: Live 1. Como o curso funciona e Perguntas & Respostas + sections: + - local: communication/live1 + title: Live 1. Como o curso funciona e Perguntas & Respostas +- title: Unidade 1. Introdução aos Agentes + sections: + - local: unit1/introduction + title: Introdução + - local: unit1/what-are-agents + title: O que é um Agente? + - local: unit1/quiz1 + title: Quiz Rápido 1 + - local: unit1/what-are-llms + title: O que são LLMs? + - local: unit1/messages-and-special-tokens + title: Mensagens e Tokens Especiais + - local: unit1/tools + title: O que são Ferramentas? + - local: unit1/quiz2 + title: Quiz Rápido 2 + - local: unit1/agent-steps-and-structure + title: Entendendo Agentes de IA através do Ciclo Pensamento-Ação-Observação + - local: unit1/thoughts + title: Pensamento, Raciocínio Interno e a Abordagem ReAct + - local: unit1/actions + title: Ações, Habilitando o Agente a Interagir com seu Ambiente + - local: unit1/observations + title: Observar, Integrar o Feedback para Refletir e Adaptar + - local: unit1/dummy-agent-library + title: Biblioteca de Agentes Fictícia + - local: unit1/tutorial + title: Vamos Criar o Nosso Primeiro Agente Usando smolagents + - local: unit1/final-quiz + title: Quiz Final da Unidade 1 + - local: unit1/conclusion + title: Conclusão +#- title: Unidade 2. Frameworks para Agentes de IA +# sections: +# - local: unit2/introduction +# title: Frameworks para Agentes de IA +#- title: Unidade 2.1 O framework smolagents +# sections: +# - local: unit2/smolagents/introduction +# title: Introdução ao smolagents +# - local: unit2/smolagents/why_use_smolagents +# title: Por que usar smolagents? +# - local: unit2/smolagents/quiz1 +# title: Quiz Rápido 1 +# - local: unit2/smolagents/code_agents +# title: Construindo Agentes que usam código +# - local: unit2/smolagents/tool_calling_agents +# title: Escrevendo ações como fragmentos de código ou blocos JSON +# - local: unit2/smolagents/tools +# title: Ferramentas +# - local: unit2/smolagents/retrieval_agents +# title: Agentes de Recuperação de Informação (Retrieval Agents) +# - local: unit2/smolagents/quiz2 +# title: Quiz Rápido 2 +# - local: unit2/smolagents/multi_agent_systems +# title: Sistemas Multi-Agentes +# - local: unit2/smolagents/vision_agents +# title: Agentes de Visão e Navegadores +# - local: unit2/smolagents/final_quiz +# title: Quiz Final +# - local: unit2/smolagents/conclusion +# title: Conclusão +#- title: Unidade 2.2 O framework LlamaIndex +# sections: +# - local: unit2/llama-index/introduction +# title: Introdução ao LlamaIndex +# - local: unit2/llama-index/llama-hub +# title: Introdução ao LlamaHub +# - local: unit2/llama-index/components +# title: O que são Componentes no LlamaIndex? +# - local: unit2/llama-index/tools +# title: Usando Ferramentas no LlamaIndex +# - local: unit2/llama-index/quiz1 +# title: Quiz Rápido 1 +# - local: unit2/llama-index/agents +# title: Usando Agentes no LlamaIndex +# - local: unit2/llama-index/workflows +# title: Criando Workflows Agênticos no LlamaIndex +# - local: unit2/llama-index/quiz2 +# title: Quiz Rápido 2 +# - local: unit2/llama-index/conclusion +# title: Conclusão +#- title: Unidade 2.3 O framework LangGraph +# sections: +# - local: unit2/langgraph/introduction +# title: Introdução ao LangGraph +# - local: unit2/langgraph/when_to_use_langgraph +# title: O que é o LangGraph? +# - local: unit2/langgraph/building_blocks +# title: Blocos de Construção do LangGraph +# - local: unit2/langgraph/first_graph +# title: Construindo seu Primeiro LangGraph +# - local: unit2/langgraph/document_analysis_agent +# title: Grafo de Análise de Documento +# - local: unit2/langgraph/quiz1 +# title: Quiz Rápido 1 +# - local: unit2/langgraph/conclusion +# title: Conclusão +#- title: Unidade 3. Caso de Uso para Agentes RAG (Agentic RAG) +# sections: +# - local: unit3/agentic-rag/introduction +# title: Introdução ao Caso de Uso de Agentes RAG +# - local: unit3/agentic-rag/agentic-rag +# title: RAG Agêntica (Retrieval Augmented Generation) +# - local: unit3/agentic-rag/invitees +# title: Criando uma Ferramenta RAG para Histórias de Convidados +# - local: unit3/agentic-rag/tools +# title: Construindo e Integrando Ferramentas no seu Agente +# - local: unit3/agentic-rag/agent +# title: Criando seu Agente Gala +# - local: unit3/agentic-rag/conclusion +# title: Conclusão +#- title: Unidade 4. Projeto Final - Crie, Teste e Certifique o seu Agente +# sections: +# - local: unit4/introduction +# title: Introdução à Unidade Final +# - local: unit4/what-is-gaia +# title: O que é GAIA? +# - local: unit4/hands-on +# title: A Prática Final +# - local: unit4/get-your-certificate +# title: Receba seu Certificado de Excelência +# - local: unit4/conclusion +# title: Conclusão do Curso +# - local: unit4/additional-readings +# title: O que você deve aprender agora? +#- title: Unidade Bônus 1. Fazendo Fine-tuning em um LLM para Function-calling +# sections: +# - local: bonus-unit1/introduction +# title: Introdução +# - local: bonus-unit1/what-is-function-calling +# title: O que é Function Calling (Chamada de Função)? +# - local: bonus-unit1/fine-tuning +# title: Vamos fazer o Fine-Tune do seu modelo para chamadas de função +# - local: bonus-unit1/conclusion +# title: Conclusão +#- title: Unidade Bônus 2. Observabilidade de Agentes e Avaliação +# sections: +# - local: bonus-unit2/introduction +# title: Introdução +# - local: bonus-unit2/what-is-agent-observability-and-evaluation +# title: O que é observabilidade e avaliação de agentes? +# - local: bonus-unit2/monitoring-and-evaluating-agents-notebook +# title: Monitorando e avaliando agentes +# - local: bonus-unit2/quiz +# title: Quiz +#- title: Unidade Bônus 3. Agentes em Jogos com Pokémon +# sections: +# - local: bonus-unit3/introduction +# title: Introdução +# - local: bonus-unit3/state-of-art +# title: O Estado da Arte no Uso de LLMs em Jogos +# - local: bonus-unit3/from-llm-to-agents +# title: De LLMs para Agentes de IA +# - local: bonus-unit3/building_your_pokemon_agent +# title: Construa seu próprio Agente de Batalha Pokémon +# - local: bonus-unit3/launching_agent_battle +# title: Lançando seu Agente de Batalha Pokémon +# - local: bonus-unit3/conclusion +# title: Conclusão diff --git a/units/pt-BR/communication/live1.mdx b/units/pt-BR/communication/live1.mdx new file mode 100644 index 00000000..c09a658c --- /dev/null +++ b/units/pt-BR/communication/live1.mdx @@ -0,0 +1,7 @@ +# Live 1: Como o Curso Funciona e Primeiro P&R + +Nesta primeira live stream do Curso de Agentes, nós explicamos como o curso **funciona** (escopo, unidades, desafios e mais) e respondemos às suas perguntas. + + + +Para saber quando a próxima sessão ao vivo está programada, verifique nosso **servidor no Discord**. Nós também enviaremos um e-mail. Se você não puder participar, não se preocupe, nós **gravamos todas as sessões ao vivo**. diff --git a/units/pt-BR/unit0/discord101.mdx b/units/pt-BR/unit0/discord101.mdx new file mode 100644 index 00000000..2471b304 --- /dev/null +++ b/units/pt-BR/unit0/discord101.mdx @@ -0,0 +1,50 @@ +# (Opcional) Discord 101 [[discord-101]] + +A Etiqueta do Discord + +Este guia foi elaborado para te ajudar a dar os primeiros passos no Discord, uma plataforma de chat gratuita muito popular nas comunidades de jogos e Machine Learning (ML). + +Junte-se ao servidor oficial da Comunidade da Hugging Face no Discord, que **possui mais de 100.000 membros**, clicando aqui. É um lugar excelente para fazer networking e se conectar com os demais! + +## O curso de Agentes na Comunidade do Discord da Hugging Face + +Começar no Discord pode parecer um pouco intimidador, então aqui vai um guia rápido para te ajudar a navegar por ele. + +O servidor da Comunidade HF hospeda uma comunidade vibrante com interesses em diversas áreas, oferecendo várias oportunidades de aprendizado por meio de discussões de artigos (papers), eventos e muito mais. + +Depois de [se inscrever](http://hf.co/join/discord), apresente-se no canal `#introduce-yourself`. + +Nós criamos 4 canais exclusivos para o Curso de Agentes: + +- `agents-course-announcements`: para as **informações mais recentes sobre o curso**. +- `🎓-agents-course-general`: para **bate-papo livre e discussões gerais**. +- `agents-course-questions`: para **fazer perguntas e ajudar os seus colegas de classe**. +- `agents-course-showcase`: para **mostrar os seus melhores agentes**. + +Adicionalmente, você pode dar uma olhada em: + +- `smolagents`: para **discussões e suporte com a biblioteca**. + +## Dicas para usar o Discord de forma eficiente + +### Como entrar em um servidor + +Se você tem menos familiaridade com o Discord, talvez queira dar uma olhada neste guia oficial sobre como entrar em um servidor. + +Aqui está um resumo rápido das etapas: + +1. Clique no Link de Convite. +2. Faça login com a sua conta do Discord, ou crie uma caso não possua. +3. Valide que você não é um agente de IA! +4. Configure seu apelido (nickname) e avatar. +5. Clique em "Join Server" (Entrar no Servidor). + +### Como usar o Discord efetivamente + +Aqui vão mais algumas dicas de uso úteis: + +- **Canais de voz** estão disponíveis, mas o chat por texto é o meio mais utilizado na comunidade. +- Você pode formatar o seu texto usando a **sintaxe do markdown**, o que é especialmente útil para escrever códigos no chat. Contudo, note que o markdown muitas vezes não funciona bem para estilizar links dentro do discord. +- Considere abrir *threads* (tópicos) para **conversas muito longas** para manter uma discussão densa organizada para os demais membros. + +Esperamos que você ache este guia útil! Se tiver alguma dúvida, sinta-se à vontade para nos perguntar no Discord 🤗. diff --git a/units/pt-BR/unit0/introduction.mdx b/units/pt-BR/unit0/introduction.mdx new file mode 100644 index 00000000..73eea916 --- /dev/null +++ b/units/pt-BR/unit0/introduction.mdx @@ -0,0 +1,158 @@ +# Bem-vindo(a) ao Curso de Agentes de IA da 🤗 [[introduction]] + +
+Miniatura do Curso de Agentes de IA +
O fundo da imagem foi gerado usando Scenario.com.
+
+ + +Bem-vindo(a) ao tópico mais empolgante da IA hoje: **Agentes**! + +Este curso gratuito levará você em uma jornada, **do iniciante ao especialista**, em sua compreensão, uso e construção de Agentes de IA. + +Esta primeira unidade vai ajudar você com os passos iniciais: + +- Descobrir a **programa do curso**. +- **Escolher o caminho** que você vai seguir (apenas estudo guiado ou processo de certificação). +- **Obter mais informações sobre o processo de certificação**. +- Conhecer a equipe por trás do curso. +- Criar a sua **conta na Hugging Face**. +- **Entrar no nosso servidor do Discord**, e conhecer a nós e seus colegas de classe. + +Vamos começar! + +## O que esperar deste curso? [[expect]] + +Neste curso, você vai: + +- 📖 Estudar Agentes de IA em **teoria, design e prática.** +- 🧑‍💻 Aprender a **usar bibliotecas consagradas de Agentes de IA** como [smolagents](https://huggingface.co/docs/smolagents/en/index), [LlamaIndex](https://www.llamaindex.ai/) e [LangGraph](https://langchain-ai.github.io/langgraph/). +- 💾 **Compartilhar seus agentes** no Hugging Face Hub e explorar agentes construídos pela comunidade. +- 🏆 Participar de desafios onde você irá **avaliar seus agentes em relação aos de outros alunos.** +- 🎓 **Ganhar um certificado de conclusão** ao finalizar as tarefas (assignments). + +E muito mais! + +Ao final deste curso, você entenderá **como os Agentes funcionam e como construir os seus próprios Agentes usando as bibliotecas e ferramentas mais recentes**. + +Não se esqueça de **se inscrever no curso!** + +(Nós respeitamos sua privacidade. Nós coletamos o seu endereço de email para conseguir **enviar os links quando cada Unidade for publicada e para te informar sobre novos desafios e atualizações**). + +## Como funciona o curso? [[course-look-like]] + +O curso é composto por: + +- *Unidades de Fundamentos*: onde você aprende **os conceitos de Agentes na teoria**. +- *Mão na Massa*: onde você aprenderá **a usar bibliotecas consagradas de Agentes de IA** para treinar os seus agentes em ambientes únicos. Estas sessões práticas serão **Hugging Face Spaces** com um ambiente pré-configurado. +- *Casos de Uso*: onde você aplicará os conceitos aprendidos para resolver o problema de mundo-real da sua escolha. +- *O Desafio*: você colocará seu agente para competir com os agentes de outros alunos em um desafio. Nós teremos também [um placar de líderes (leaderboard)](https://huggingface.co/spaces/agents-course/Students_leaderboard) para poder comparar a performance entre os agentes. + +Este **curso é um projeto vivo, e evoluirá com os seus feedbacks e contribuições!** Sinta-se a vontade para [abrir Issues e PRs no GitHub](https://github.com/huggingface/agents-course) e engajar nas discussões do nosso servidor do Discord. + +Após você ter finalizado o curso, você também pode nos enviar seu feedback [👉 usando este formulário](https://docs.google.com/forms/d/e/1FAIpQLSe9VaONn0eglax0uTwi29rIn4tM7H2sYmmybmG5jJNlE5v0xA/viewform?usp=dialog). + +## Qual o programa do curso? [[syllabus]] + +Aqui está o **programa geral do curso**. Uma lista com mais detalhes sobre os tópicos será lançada em cada nova unidade. + +| Capítulo | Tópico | Descrição | +| :---- | :---- | :---- | +| 0 | Onboarding | Instalação e preparação das ferramentas e plataformas que você irá utilizar. | +| 1 | Fundamentos de Agentes | Explicação sobre Tools, Thoughts, Actions e Observations, e seus formatos. Explicação de LLMs, mensagens, tokens especiais e templates de chat. Demonstração de um caso de uso simples utilizando funções Python como Tools. | +| 2 | Frameworks | Entenda como os fundamentos são implementados em bibliotecas populares: smolagents, LangGraph, LLamaIndex. | +| 3 | Casos de Uso | Vamos construir alguns casos de uso da vida real (aberto para PRs 🤗 de construtores de Agentes experientes). | +| 4 | Desafio Final | Construa um agente para um Benchmark selecionado e prove seu entendimento sobre Agentes no leaderboard de estudantes 🚀. | + +Além do programa principal, você tem 3 unidades bônus: +- *Unidade Bônus 1* : Fine-tuning de um LLM para Function-calling +- *Unidade Bônus 2* : Observabilidade em Agentes e Avaliações +- *Unidade Bônus 3* : Agentes em Jogos com Pokémon + +Por exemplo, na Unidade Bônus 3, você aprende a construir seu Agente para disputar batalhas de Pokémon 🥊. + +## Quais os pré-requisitos? + +Para conseguir acompanhar este curso, você deve ter: + +- Conhecimento básico de Python +- Conhecimento básico de LLMs (temos uma seção na Unidade 1 para recapitular o que eles são) + + +## Quais ferramentas eu preciso? [[tools]] + +Você só precisa de 2 coisas: + +- *Um computador* com conexão à internet. +- Uma *conta na Hugging Face*: para fazer push e load de modelos, agentes, e criar Spaces. Se você ainda não tem uma conta, você pode criar uma **[aqui](https://hf.co/join)** (é gratuito). +Ferramentas necessárias para o curso + +## O Processo de Certificação [[certification-process]] + +Os dois caminhos possíveis + +Você pode escolher seguir este curso *em modo de auditoria*, ou realizar as atividades e *receber um dos dois certificados que iremos emitir*. + +Se você apenas auditar o curso, você pode participar de todos os desafios e fazer as tarefas se quiser, e **você não precisa nos notificar**. + +O processo de certificação é totalmente **gratuito**: + +- *Para receber uma certificação de fundamentos*: você precisa concluir a Unidade 1 do curso. Isso é destinado aos alunos que desejam se atualizar com as últimas tendências em Agentes. +- *Para receber um certificado de conclusão*: você precisa concluir a Unidade 1, um dos assignments de Use Case que proporemos durante o curso, e o desafio final. + +Não há **prazo** para o processo de certificação. + +## Qual é o ritmo recomendado? [[recommended-pace]] + +Cada capítulo deste curso foi elaborado para **ser concluído em 1 semana, com aproximadamente 3-4 horas de trabalho por semana**. + +Nós fornecemos um ritmo recomendado: + +Ritmo Recomendado + +## Como tirar o máximo proveito do curso? [[advice]] + +Para aproveitar ao máximo o curso, temos alguns conselhos: + +1. Junte-se a grupos de estudo no Discord: estudar em grupos é sempre mais fácil. Para fazer isso, você precisa entrar no nosso servidor do discord e verificar sua conta da Hugging Face. +2. **Faça os quizzes e assignments**: a melhor maneira de aprender é através da prática "mão-na-massa" e da autoavaliação. +3. **Defina um cronograma para se manter no ritmo**: você pode usar o nosso cronograma recomendado abaixo ou criar o seu próprio. + +Dica sobre o curso + +## Quem somos nós [[who-are-we]] + +Este curso é mantido por [Ben Burtenshaw](https://huggingface.co/burtenshaw) e [Sergio Paniego](https://huggingface.co/sergiopaniego). Se você tiver alguma dúvida, entre em contato conosco no Hub! + +## Agradecimentos + +Gostaríamos de expressar nossa gratidão aos seguintes indivíduos por suas inestimáveis contribuições para este curso: + +- **[Joffrey Thomas](https://huggingface.co/Jofthomas)** – Por escrever e desenvolver o curso. +- **[Thomas Simonini](https://huggingface.co/ThomasSimonini)** – Por escrever e desenvolver o curso. +- **[Pedro Cuenca](https://huggingface.co/pcuenq)** – Por guiar o curso e fornecer feedbacks. +- **[Aymeric Roucher](https://huggingface.co/m-ric)** – Por seus incríveis espaços de demonstração (decoding e agente final), bem como sua ajuda nas partes do smolagents. +- **[Joshua Lochner](https://huggingface.co/Xenova)** – Por seu incrível espaço de demonstração sobre tokenização. +- **[Quentin Gallouédec](https://huggingface.co/qgallouedec)** – Pela sua ajuda no conteúdo do curso. +- **[David Berenstein](https://huggingface.co/davidberenstein1957)** – Pela sua ajuda no conteúdo do curso e moderação. +- **[XiaXiao (ShawnSiao)](https://huggingface.co/SSSSSSSiao)** – Tradutor(a) do curso para Chinês. +- **[Jiaming Huang](https://huggingface.co/nordicsushi)** – Tradutor(a) do curso para Chinês. +- **[Kim Noel](https://github.com/knoel99)** - Tradutor(a) do curso para Francês. +- **[Loïck Bourdois](https://huggingface.co/lbourdois)** - Tradutor do curso para Francês a partir do [CATIE](https://www.catie.fr/). +- **[João Assaoka](https://huggingface.co/Assaoka)** - Tradutor do curso para Português (Brasil). + +## Encontrei um bug, ou quero melhorar o curso [[contribute]] + +Contribuições são **bem-vindas** 🤗 + +- Se você *encontrou um bug 🐛 em um notebook*, por favor abra uma issue e **descreva o problema**. +- Se você *deseja melhorar o curso*, pode abrir um Pull Request. +- Se você *deseja adicionar uma seção completa ou uma nova unidade*, o melhor a se fazer é abrir uma issue e **descrever o conteúdo que deseja adicionar antes de começar a escrevê-lo, para que possamos guiá-lo**. + +## Ainda tenho perguntas [[questions]] + +Por favor, faça a sua pergunta em nosso servidor do discord, no canal #agents-course-questions. + +Agora que você tem todas as informações, let's get on board ⛵ + +A hora de Embarcar diff --git a/units/pt-BR/unit0/onboarding.mdx b/units/pt-BR/unit0/onboarding.mdx new file mode 100644 index 00000000..4ca3c69a --- /dev/null +++ b/units/pt-BR/unit0/onboarding.mdx @@ -0,0 +1,94 @@ +# Onboarding: Seus Primeiros Passos ⛵ + +Hora do Onboarding + +Agora que você tem todos os detalhes estruturais, vamos começar! Faremos quatro coisas: + +1. **Criar sua conta na Hugging Face** se isso ainda não foi feito +2. **Entrar no nosso Discord e se apresentar** (não seja tímido 🤗) +3. **Seguir a página oficial do Hugging Face Agents Course** no Hub +4. **Espalhar a palavra** sobre o curso para todos + +### Passo 1: Criar sua conta na Hugging Face + +(Se ainda não o fez) crie uma conta gratuita na Hugging Face clicando aqui. + +### Passo 2: Junte-se à nossa Comunidade no Discord + +👉🏻 Entre no nosso servidor do Discord aqui. + +Quando você entrar, lembre-se de se apresentar primeiramente no canal `#introduce-yourself`. + +Visite o canal `courses` sob a aba `Hugging Face Hub` para todas as suas dúvidas e perguntas relacionadas ao curso. + +Se for a sua primeira vez usando o Discord, nós escrevemos um pequeno guia introdutório (Discord 101) para te passar as melhores práticas de como utilizá-lo. Dê uma conferida [na próxima seção](discord101). + +### Passo 3: Seguir a Organização Hugging Face Agent Course + +Mantenha-se atualizado com os mais novos materiais, anúncios e as últimas atualizações operacionais do curso **seguindo a página de Organização Hugging Face Agents Course.** + +👉 Acesse este link e clique em **follow** (seguir). + +Como seguir a página + +### Passo 4: Espalhe a palavra sobre o curso + +Ajude-nos a tornar o curso mais visível pro mundo! Existem duas maneiras eficientes de você nos ajudar: + +1. Mostre seu apoio deixando uma ⭐ no repositório do curso no GitHub. + +Dado uma estrela no Repositório + +2. Compartilhe a sua jornada de aprendizado: Faça os outros saberem que **você está fazendo este curso**! Nós preparamos uma pequena ilustração abaixo que você pode usar para postar nas suas mídias sociais: + + + +Você pode baixar a imagem clicando 👉 [bem aqui](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/communication/share.png?download=true) + +### Passo 5: Rodando Modelos Localmente com Ollama (Caso você atinja seus limites de créditos gratuitos) + +1. **Instale o Ollama** + + Siga as instruções de instalação originais aqui. + +2. **Faça um Pull do modelo Localmente** + + ```bash + ollama pull qwen2:7b + ``` + + Neste exemplo, nós trazemos (pull) o modelo qwen2:7b. Verifique o site do ollama para conhecer mais opções de modelos que sua máquina suporta. + +3. **Inicie o Ollama em segundo plano (Em um terminal separado)** + ``` bash + ollama serve + ``` + + Se você encontrar o erro "listen tcp 127.0.0.1:11434: bind: address already in use", você pode usar o comando comando `sudo lsof -i :11434` no Linux ou MacOS para identificar qual ID de processo (PID) já está atualmente utilizando essa porta no seu computador. Se o processo for o próprio `ollama`, é altamente provável que o script de instalação efetuado anteriormente tenha ativado sozinho o serviço ollama, de modo que você pode pular este terceiro comando de inicialização manual. + +4. **Use o componente `LiteLLMModel` ao invés do `InferenceClientModel`** + + Para usar o módulo `LiteLLMModel` no `smolagents`, você pode rodar o comando `pip` abaixo para instalar o módulo. + +``` bash + pip install 'smolagents[litellm]' +``` + +``` python + from smolagents import LiteLLMModel + + model = LiteLLMModel( + model_id="ollama_chat/qwen2:7b", # Ou teste outros modelos suportados pelo Ollama! + api_base="http://127.0.0.1:11434", # O servidor local padrão criado na maquina pelo Ollama + num_ctx=8192, + ) +``` + +5. **Por que isso funciona?** +- O Ollama serve modelos localmente usando uma API compatível com a OpenAI em `http://localhost:11434`. +- O `LiteLLMModel` é construído para se comunicar com qualquer modelo que suporte o formato da API chat/completion da OpenAI. +- Isso significa que você pode simplesmente trocar `InferenceClientModel` por `LiteLLMModel` sem a necessidade de outras alterações de código. É uma solução contínua, plug-and-play. + +Parabéns! 🎉 **Você concluiu o processo de onboarding**! Agora você está pronto para começar a aprender sobre Agentes de IA. Divirta-se! + +Continue Aprendendo, continue incrível 🤗 diff --git a/units/pt-BR/unit1/README.md b/units/pt-BR/unit1/README.md new file mode 100644 index 00000000..1e93cc4f --- /dev/null +++ b/units/pt-BR/unit1/README.md @@ -0,0 +1,3 @@ +# Sumário + +Você pode acessar a Unidade 1 em hf.co/learn 👉 aqui diff --git a/units/pt-BR/unit1/actions.mdx b/units/pt-BR/unit1/actions.mdx new file mode 100644 index 00000000..592cb2d5 --- /dev/null +++ b/units/pt-BR/unit1/actions.mdx @@ -0,0 +1,123 @@ +# Ações (*Actions*): Capacitando o Agente a Interagir com Seu Ambiente + +> [!TIP] +> Nesta seção, exploramos os passos concretos que um agente de IA executa para interagir com o seu ambiente. +> +> Nós cobriremos como as ações são representadas (usando JSON ou código), a importância da abordagem de pausar e analisar, e introduziremos os diferentes tipos de agentes. + +As Ações (*Actions*) são os passos concretos que um **Agente de IA executa para interagir com seu ambiente**. + +Seja buscando informações na web ou controlando um dispositivo físico, cada ação é uma operação deliberada executada pelo agente. + +Por exemplo, um agente auxiliando no atendimento ao cliente pode recuperar os dados do cliente, oferecer artigos de suporte ou transferir problemas para um representante humano. + +## Tipos de Ações de Agentes + +Existem múltiplos tipos de Agentes que realizam ações de maneiras diferentes: + +| Tipo de Agente | Descrição | +|------------------------|--------------------------------------------------------------------------------------------------| +| Agente JSON | A Ação a ser tomada é especificada no formato JSON. | +| Agente de Código (*Code Agent*) | O Agente escreve um bloco de código que é interpretado externamente. | +| Agente de Chamada de Função (*Function-calling*) | É uma subcategoria do Agente JSON que foi ajustada (*fine-tuned*) para gerar uma nova mensagem para cada ação. | + +As próprias ações podem servir a muitos propósitos: + +| Tipo de Ação | Descrição | +|--------------------------|------------------------------------------------------------------------------------------| +| Coleta de Informação (*Information Gathering*) | Realizar pesquisas na web, consultar bancos de dados ou recuperar documentos. | +| Uso de Ferramentas (*Tool Usage*) | Fazer chamadas de API, executar cálculos ou rodar código. | +| Interação com o Ambiente (*Environment Interaction*) | Manipular interfaces digitais ou controlar dispositivos físicos. | +| Comunicação (*Communication*) | Engajar com usuários por meio de chat ou colaborar com outros agentes. | + +O LLM manipula apenas texto e o usa para descrever a ação que deseja realizar e os parâmetros que vai fornecer à ferramenta. Para que um agente funcione corretamente, o LLM deve PARAR de gerar novos tokens após emitir todos os tokens que definem uma Ação completa. Isso passa o controle que estava com o LLM de volta para o agente e garante que o resultado seja analisável - não importando se o formato pretendido seja JSON, código ou chamada de função. + + +## A Abordagem de Parar e Analisar + +Um método chave para implementar ações é a **abordagem de parar e analisar**. Esse método garante que a saída do agente seja estruturada e previsível: + +1. **Geração em um Formato Estruturado**: + +O agente emite a ação pretendida em um formato claro e predeterminado (JSON ou código). + +2. **Interrupção de Geração Adicional**: + +Uma vez que o texto definindo a ação foi emitido, **o LLM para de gerar tokens adicionais**. Isso previne saídas extras indesejadas ou errôneas. + +3. **Analisando (*Parsing*) a Saída**: + +Um analisador (*parser*) externo lê a ação formatada, determina qual Ferramenta chamar e extrai os parâmetros necessários. + +Por exemplo, um agente precisando verificar o clima poderia emitir: + + +```json +Pensamento: Eu preciso verificar o clima atual em Nova York. +Ação: +{ + "action": "get_weather", + "action_input": {"location": "New York"} +} +``` + +O framework consegue então analisar com facilidade o nome da função a ser chamada e os argumentos a serem aplicados. + +Esse formato claro e legível por máquina minimiza erros e permite que ferramentas externas processem os comandos do agente com precisão. + +> **Nota:** Agentes de chamada de função (*Function-calling agents*) operam de forma semelhante ao estruturar cada ação de modo que uma função designada seja invocada com os argumentos corretos. +Mergulharemos mais fundo nesses tipos de Agentes em uma Unidade futura. + +## Agentes de Código (*Code Agents*) + +Uma abordagem alternativa é usar *Code Agents* (Agentes de Código). +A ideia é: **em vez de emitir um simples objeto JSON**, um *Code Agent* gera um **bloco de código executável — tipicamente em uma linguagem de alto nível como Python**. + +Agentes de Código vs Agentes JSON + +Essa abordagem oferece diversas vantagens: + +- **Expressividade:** O código pode naturalmente representar lógica complexa, incluindo loops, condicionais e funções aninhadas, proporcionando maior flexibilidade do que o JSON. +- **Modularidade e Reutilização:** O código gerado pode incluir funções e módulos que são reutilizáveis em diferentes ações e tarefas. +- **Depurabilidade aprimorada (*Enhanced Debuggability*):** Contando com a sintaxe bem definida de uma linguagem de programação, erros de código geralmente são bem fáceis de se detectar e corrigir. +- **Integração Direta:** Os *Code Agents* conseguem ser integrados diretamente com bibliotecas e APIs externas, possibilitando operações mais complexas como o processamento de dados ou a tomada de decisão em tempo real. + +Você deve ter em mente que executar código gerado por LLMs pode representar riscos de segurança, desde injeções de prompt (*prompt injection*) até a execução de código nocivo. +É por isso que recomendamos sempre o uso de frameworks de agentes de IA, como o `smolagents`, que integram salvaguardas por padrão. +Para saber mais sobre os riscos envolvidos e como mitigá-los, [por favor, confira esta seção dedicada](https://huggingface.co/docs/smolagents/tutorials/secure_code_execution). + +Por exemplo, um *Code Agent* encarregado de buscar o clima poderia gerar o seguinte trecho em Python: + +```python +# Exemplo de Agente de Código: Recuperar Informações Climáticas +def get_weather(city): + import requests + api_url = f"https://api.weather.com/v1/location/{city}?apiKey=YOUR_API_KEY" + response = requests.get(api_url) + if response.status_code == 200: + data = response.json() + return data.get("weather", "Nenhuma informação climática disponível") + else: + return "Erro: Não foi possível obter os dados do clima." + +# Executar a função e preparar a resposta final +result = get_weather("New York") +final_answer = f"O clima atual em Nova York é: {result}" +print(final_answer) +``` + +Neste exemplo, o *Code Agent*: + +- Recupera os dados do clima **por meio de uma chamada de API**, +- Processa a resposta, +- E, por fim, utiliza a função `print()` para exibir a resposta final. + +Este método **também segue a abordagem de parar e analisar**, delimitando claramente o bloco de código e informando o exato momento no qual a execução foi concluída (neste caso, por meio do uso do `print` emitindo a `final_answer`). + +--- + +Nós aprendemos que as Ações (*Actions*) constroem uma ponte entre o raciocínio interno de um agente e suas interações com o mundo real, executando tarefas de forma clara e estruturada — seja pelo formato JSON, código ou chamadas de função. + +Essa execução deliberada garante que cada ação seja super precisa e pronta para ser processada, usando a abordagem de "parar e analisar" (*stop and parse*). Na próxima seção, exploraremos as Observações (*Observations*) com o objetivo de entender o modo como os agentes capturam e integram dentro de si o feedback provido pelo seu ambiente. + +Após essa última etapa, estaremos **finalmente prontos para construir nosso primeiro Agente!** diff --git a/units/pt-BR/unit1/agent-steps-and-structure.mdx b/units/pt-BR/unit1/agent-steps-and-structure.mdx new file mode 100644 index 00000000..356ec215 --- /dev/null +++ b/units/pt-BR/unit1/agent-steps-and-structure.mdx @@ -0,0 +1,150 @@ +# Entendendo Agentes de IA através do Ciclo Pensamento-Ação-Observação + +Planejamento da Unidade 1 + +Nas seções anteriores, aprendemos: + +- **Como as ferramentas são disponibilizadas ao agente no prompt do sistema (*system prompt*)**. +- **Como os Agentes de IA são sistemas que podem 'raciocinar', planejar e interagir com seu ambiente**. + +Nesta seção, **exploraremos o Fluxo de Trabalho completo do Agente de IA (*AI Agent Workflow*)**, um ciclo que definimos como Pensamento-Ação-Observação (*Thought-Action-Observation*). + +E então, vamos mergulhar mais fundo em cada um desses passos. + + +## Os Componentes Principais + +O trabalho dos agentes é um ciclo contínuo de: **pensar (*Thought*) → agir (*Act*) e observar (*Observe*)**. + +Vamos destrinchar essas ações juntos: + +1. **Pensamento (*Thought*):** A parte LLM do Agente decide qual deve ser o próximo passo. +2. **Ação (*Action*):** O agente executa uma ação chamando as ferramentas com os argumentos associados. +3. **Observação (*Observation*):** O modelo reflete sobre a resposta recebida da ferramenta. + +## O Ciclo Pensamento-Ação-Observação + +Os três componentes trabalham juntos em um loop contínuo. Para usar uma analogia de programação, o agente usa um **loop while**: o loop continua até que o objetivo do agente tenha sido cumprido. + +Visualmente, parece algo assim: + +Ciclo Pensar, Agir, Observar + +Em muitos frameworks de Agentes, **as regras e diretrizes são embutidas diretamente no prompt do sistema (*system prompt*)**, garantindo que cada ciclo siga uma lógica definida. + +Em uma versão simplificada, nosso prompt de sistema pode ser parecido com isso: + +Ciclo Pensar, Agir, Observar + +Vemos aqui que na Mensagem do Sistema (System Message) nós definimos: + +- O *comportamento do Agente*. +- As *Ferramentas às quais nosso Agente tem acesso*, como descrevemos na seção anterior. +- O *Ciclo Pensamento-Ação-Observação*, que embutimos nas instruções do LLM. + +Vamos conferir um pequeno exemplo para entender o processo antes de aprofundarmos em cada passo do processo. + +## Alfred, o Agente do Clima + +Nós criamos o Alfred, o Agente do Clima. + +Um usuário pergunta ao Alfred: “Qual é o clima atual em Nova York?” + +Agente Alfred + +O trabalho de Alfred é responder a esta solicitação usando uma ferramenta de API de clima. + +Veja como o ciclo se desenrola: + +### Pensamento (*Thought*) + +**Raciocínio Interno:** + +Ao receber a consulta, o diálogo interno de Alfred pode ser: + +*"O usuário precisa de informações climáticas atuais de Nova York. Eu tenho acesso a uma ferramenta que busca dados sobre o clima. Primeiro, preciso chamar a API de clima para obter os detalhes atualizados."* + +Este passo mostra o agente dividindo o problema em etapas: primeiro, coletando os dados necessários. + +Agente Alfred + +### Ação (*Action*) + +**Uso de Ferramenta:** + +Com base em seu raciocínio e no fato de que Alfred conhece uma ferramenta `get_weather`, Alfred prepara um comando formatado em JSON que chama a ferramenta da API de clima. Por exemplo, sua primeira ação poderia ser: + +Thought: Eu preciso verificar o clima atual em Nova York. + + ```json + { + "action": "get_weather", + "action_input": { + "location": "New York" + } + } + ``` + +Aqui, a ação especifica claramente qual ferramenta chamar (ex: `get_weather`) e qual parâmetro passar (o “location": “New York”). + +Agente Alfred + +### Observação (*Observation*) + +**Retorno do Ambiente:** + +Após chamar a ferramenta, Alfred recebe uma observação. Podem ser os dados brutos de clima diretamente da API, como: + +*"Clima atual em Nova York: parcialmente nublado, 15°C, 60% de umidade."* + +Agente Alfred + +Esta observação é então adicionada ao prompt como contexto adicional. Funciona como um feedback do mundo real, confirmando se a ação foi bem-sucedida e fornecendo os detalhes necessários. + + +### Pensamento Atualizado + +**Refletindo:** + +Com a observação em mãos, Alfred atualiza seu raciocínio interno: + +*"Agora que tenho os dados do clima de Nova York, posso compilar uma resposta para o usuário."* + +Agente Alfred + + +### Ação Final + +Alfred então gera uma resposta final formatada da maneira que instruímos: + +Thought: Eu tenho os dados do clima agora. O clima atual em Nova York é parcialmente nublado com uma temperatura de 15°C e 60% de umidade. + +Final answer: O clima atual em Nova York é parcialmente nublado com uma temperatura de 15°C e 60% de umidade. + +Esta ação final envia a resposta de volta ao usuário, fechando o ciclo. + + +Agente Alfred + + +O que observamos neste exemplo: + +- **Agentes iteram através de um loop até o objetivo ser cumprido:** + +**O processo de Alfred é cíclico**. Começa com um pensamento, depois age chamando uma ferramenta e, por fim, observa o resultado. Se a observação indicasse um erro ou dados incompletos, Alfred poderia ter reentrado no ciclo para corrigir sua abordagem. + +- **Integração de Ferramentas:** + +A habilidade de chamar uma ferramenta (como uma API de clima) permite que Alfred vá **além do conhecimento estático e recupere dados em tempo real**, um aspecto essencial para muitos Agentes de IA. + +- **Adaptação Dinâmica:** + +Cada ciclo permite que o agente incorpore novas informações (observações) no seu raciocínio (pensamento), garantindo que a resposta final seja bem informada e precisa. + +Este exemplo demonstra o conceito central por trás do *ciclo ReAct* (um conceito que vamos desenvolver na próxima seção): **a interação entre Pensamento, Ação e Observação capacita agentes de IA a resolverem tarefas complexas de forma interativa**. + +Ao compreender e aplicar esses princípios, você poderá projetar agentes que não apenas raciocinam sobre suas tarefas, mas também **utilizam efetivamente ferramentas externas para concluí-las**, tudo isso enquanto refinam continuamente seus resultados com base no feedback do ambiente. + +--- + +Vamos agora nos aprofundar em Pensamento, Ação e Observação como etapas individuais do processo. diff --git a/units/pt-BR/unit1/conclusion.mdx b/units/pt-BR/unit1/conclusion.mdx new file mode 100644 index 00000000..99a80eab --- /dev/null +++ b/units/pt-BR/unit1/conclusion.mdx @@ -0,0 +1,22 @@ +# Conclusão [[conclusion]] + +Parabéns por terminar esta primeira Unidade 🥳 + +Você acabou de **dominar os fundamentos dos Agentes** e criou o seu primeiro Agente de IA! + +É **normal se você ainda se sente confuso por alguns destes elementos**. Agentes são um tópico complexo e é comum levar um tempo para compreender tudo. + +**Tire um tempo para realmente compreender o material** antes de continuar. É importante dominar esses elementos e ter uma fundação sólida antes de entrar na parte divertida. + +E se você passar no teste do Quiz, não se esqueça de obter o seu certificado 🎓 👉 [aqui](https://huggingface.co/spaces/agents-course/unit1-certification-app) + +Certificate Example + + + +Por fim, adoraríamos **ouvir o que você acha do curso e como podemos melhorá-lo**. Se você tem algum feedback, então, por favor 👉 [preencha este formulário](https://docs.google.com/forms/d/e/1FAIpQLSe9VaONn0eglax0uTwi29rIn4tM7H2sYmmybmG5jJNlE5v0xA/viewform?usp=dialog) + +### Continue aprendendo, continue incrível 🤗 \ No newline at end of file diff --git a/units/pt-BR/unit1/dummy-agent-library.mdx b/units/pt-BR/unit1/dummy-agent-library.mdx new file mode 100644 index 00000000..4ec2ffc6 --- /dev/null +++ b/units/pt-BR/unit1/dummy-agent-library.mdx @@ -0,0 +1,323 @@ +# Biblioteca de Agentes Fictícia + +Planejamento da Unidade 1 + +Este curso foi desenhado para ser agnóstico em relação a frameworks porque queremos **focar nos conceitos dos agentes de IA e evitar ficar presos às especificidades de um framework em particular**. + +Além disso, queremos que os estudantes consigam utilizar os conceitos aprendidos neste curso em seus próprios projetos, utilizando o framework que preferirem. + +Portanto, nesta Unidade 1, nós usaremos uma "biblioteca de agente fictícia" e uma API *serverless* simples para acessar nossa engine de LLM. + +Você provavelmente não usaria algo assim em um ambiente de produção (*production*), mas eles servirão como um excelente **ponto de partida para entender como os agentes funcionam**. + +Após esta seção, você estará pronto para **criar um Agente simples** utilizando o `smolagents`. + +E nas Unidades seguintes, também usaremos outras bibliotecas de Agentes de IA, como o `LangGraph` e o `LlamaIndex`. + +Para manter as coisas simples, usaremos uma simples função Python como nossa Ferramenta (*Tool*) e Agente (*Agent*). + +Usaremos pacotes nativos do Python, como `datetime` e `os`, para que você possa rodar o código e testá-lo em qualquer ambiente. + +Você pode acompanhar todo o processo [neste notebook](https://huggingface.co/agents-course/notebooks/blob/main/unit1/dummy_agent_library.ipynb) e **executar o código por conta própria**. + +> **Nota:** O notebook do link acima se encontra no idioma original (inglês), porém todo o seu conteúdo e a lógica de suas instruções estão devidamente explicados logo abaixo em português para auxiliar no seu estudo! + +## API Serverless + +No ecossistema da Hugging Face, existe um recurso muito conveniente chamado API Serverless (*Serverless API*) que permite que você execute inferências em muitos modelos com facilidade. Nenhuma instalação ou implantação (*deployment*) é exigida. + +```python +import os +from huggingface_hub import InferenceClient + +## Você precisará de um token em https://hf.co/settings/tokens, certifique-se de selecionar 'read' como o tipo do token. Se for rodar isso no Google Colab, você pode configurá-lo na aba "settings" na seção de "secrets". Lembre-se de nomeá-lo como "HF_TOKEN" +# HF_TOKEN = os.environ.get("HF_TOKEN") + +client = InferenceClient(model="moonshotai/Kimi-K2.5") +``` + +Nós usamos o método `chat` (*chat method*) já que ele é um modo conveniente e confiável de aplicar as predefinições de chat (*chat templates*): + +```python +output = client.chat.completions.create( + messages=[ + {"role": "user", "content": "A capital da França é"}, + ], + stream=False, + max_tokens=1024, + extra_body={'thinking': {'type': 'disabled'}}, +) +print(output.choices[0].message.content) +``` + +saída: + +``` +Paris. +``` + +Utilizar o método `chat` é o caminho RECOMENDADO para garantir uma transição suave caso decida trocar de modelo depois. + +## Agente Fictício + +Nas seções anteriores, nós pudemos ver que o coração de qualquer biblioteca de agente resume-se a anexar informações no prompt de sistema (*system prompt*). + +O prompt de sistema abaixo é um pouco mais complexo do que o que vimos anteriormente, mas ele já contém: + +1. **Informações sobre as ferramentas** +2. **Instruções do ciclo** (Pensamento → Ação → Observação) + +```python +# Este prompt de sistema é um pouco mais complexo e na verdade já contém a descrição da função integrada a ele. +# Aqui supomos que a descrição em texto das ferramentas já foi anexada. + +SYSTEM_PROMPT = """Responda as perguntas da melhor forma possível. Você tem acesso às seguintes ferramentas: + +get_weather: Retorna a temperatura atual em uma determinada localização. + +A forma como você usa as ferramentas é especificando um json blob. +Especificamente, este json deve ter uma chave `action` (com o nome da ferramenta a ser usada) e uma chave `action_input` (com a entrada para a ferramenta indo aqui). + +Os únicos valores que devem estar no campo "action" são: +get_weather: Retorna a temperatura atual em uma determinada localização, args: {"location": {"type": "string"}} +Exemplo de uso: + +{{ + "action": "get_weather", + "action_input": {"location": "New York"} +}} + + +SEMPRE use o seguinte formato: + +Question: a pergunta de entrada que você deve responder +Thought: você deve sempre pensar sobre uma ação a tomar. Apenas uma ação por vez neste formato: +Action: + +$JSON_BLOB (dentro de um bloco markdown) + +Observation: o resultado da ação. Esta Observation é única, completa e a fonte da verdade. +... (este ciclo de Thought/Action/Observation pode repetir N vezes, você deve dar os passos necessários para a conclusão. O $JSON_BLOB deve estar num formato markdown e convocar apenas uma ÚNICA ação por vez.) + +Você deve sempre encerrar a sua resposta com o seguinte formato: + +Thought: Agora eu sei qual é a resposta final +Final Answer: a resposta final para a pergunta original fornecida + +Pode começar! Apenas lembre-se de SEMPRE usar os caracteres exatos `Final Answer:` na hora de dar a sua resposta final definitiva. """ +``` + +Nós precisamos anexar a instrução do usuário após o prompt de sistema. Isso acontece por dentro do método `chat`. Nós podemos conferir esse processo abaixo: + +```python +messages = [ + {"role": "system", "content": SYSTEM_PROMPT}, + {"role": "user", "content": "Qual é o clima em Londres?"}, +] + +print(messages) +``` + +O prompt agora é assim: + +```text +<|begin_of_text|><|start_header_id|>system<|end_header_id|> +Responda as perguntas da melhor forma possível. Você tem acesso às seguintes ferramentas: + +get_weather: Retorna a temperatura atual em uma determinada localização. + +A forma como você usa as ferramentas é especificando um json blob. +Especificamente, este json deve ter uma chave `action` (com o nome da ferramenta a ser usada) e uma chave `action_input` (com a entrada para a ferramenta indo aqui). + +Os únicos valores que devem estar no campo "action" são: +get_weather: Retorna a temperatura atual em uma determinada localização, args: {"location": {"type": "string"}} +Exemplo de uso: + +{{ + "action": "get_weather", + "action_input": {"location": "New York"} +}} + +SEMPRE use o seguinte formato: + +Question: a pergunta de entrada que você deve responder +Thought: você deve sempre pensar sobre uma ação a tomar. Apenas uma ação por vez neste formato: +Action: + +$JSON_BLOB (dentro de um bloco markdown) + +Observation: o resultado da ação. Esta Observation é única, completa e a fonte da verdade. +... (este ciclo de Thought/Action/Observation pode repetir N vezes, você deve dar os passos necessários para a conclusão. O $JSON_BLOB deve estar num formato markdown e convocar apenas uma ÚNICA ação por vez.) + +Você deve sempre encerrar a sua resposta com o seguinte formato: + +Thought: Agora eu sei qual é a resposta final +Final Answer: a resposta final para a pergunta original fornecida + +Pode começar! Apenas lembre-se de SEMPRE usar os caracteres exatos `Final Answer:` na hora de dar a sua resposta final definitiva. +<|eot_id|><|start_header_id|>user<|end_header_id|> +Qual é o clima em Londres ? +<|eot_id|><|start_header_id|>assistant<|end_header_id|> +``` + +Vamos chamar o método `chat`! + +```python +output = client.chat.completions.create( + messages=messages, + stream=False, + max_tokens=200, + extra_body={'thinking': {'type': 'disabled'}}, +) +print(output.choices[0].message.content) +``` + +saída: + +````text +Thought: Para responder a esta pergunta, preciso obter o clima atual em Londres. +Action: +``` +{ + "action": "get_weather", + "action_input": {"location": "London"} +} +``` +Observation: O clima atual em Londres é parcialmente nublado com temperatura de 12°C. +Thought: I now know the final answer (agora eu sei a resposta final). +Final Answer: O clima atual em Londres é parcialmente nublado com temperatura de 12°C. +```` + +Você consegue perceber o problema aí? + +> Neste ponto, o modelo está "alucinando" (*hallucinating*), pois ele está produzindo e inventando uma Observação ("Observation") — uma resposta que ele mesmo construiu espontaneamente por conta própria, sendo que devia ser o resultado da chamada real de alguma função ou ferramenta. +> Para prevenir isso, nós devemos forçar a interrupção da geração (*stop generating*) logo antes do texto "Observation:". +> Isso nos permitirá de fato executar a função manualmente (por exemplo, `get_weather`) e então injetar e inserir a saída real como sendo a Observação. + +```python +# A resposta foi alucinada pelo modelo. Precisamos pará-lo para que a função seja de fato executada! +output = client.chat.completions.create( + messages=messages, + max_tokens=150, + stop=["Observation:"], # Vamos pará-lo antes que qualquer função efetiva seja convocada + extra_body={'thinking': {'type': 'disabled'}}, +) + +print(output.choices[0].message.content) +``` + +saída: + +````text +Thought: Para responder a esta pergunta, preciso obter o clima atual em Londres. +Action: +``` +{ + "action": "get_weather", + "action_input": {"location": "London"} +} + + +```` + +Bem melhor! + +Criaremos agora uma **função fictícia para capturar o clima** (*dummy get weather function*). Em uma situação real, você faria uma chamada real para uma API. + +```python +# Função Fictícia +def get_weather(location): + return f"O clima em {location} é ensolarado com baixas temperaturas. \n" + +get_weather('London') +``` + +saída: + +``` +'O clima em Londres é ensolarado com baixas temperaturas. \n' +``` + +Nós vamos então concatenar o nosso prompt de sistema original, a resposta já dada pela máquina até o ponto em que interrompemos e o retorno da nossa função fictícia. Em seguida, vamos chamar o modelo novamente. + +```python +messages=[ + {"role": "system", "content": SYSTEM_PROMPT}, + {"role": "user", "content": "Qual é o clima em Londres ?"}, + {"role": "assistant", "content": output.choices[0].message.content + "Observation:\n" + get_weather('London')}, +] + +output = client.chat.completions.create( + messages=messages, + stream=False, + max_tokens=200, + extra_body={'thinking': {'type': 'disabled'}}, +) + +print(output.choices[0].message.content) +``` + +Aqui está o novo prompt concluído formatado: + +```text +<|begin_of_text|><|start_header_id|>system<|end_header_id|> +Responda as perguntas da melhor forma possível. Você tem acesso às seguintes ferramentas: + +get_weather: Retorna a temperatura atual em uma determinada localização. + +A forma como você usa as ferramentas é especificando um json blob. +Especificamente, este json deve ter uma chave `action` (com o nome da ferramenta a ser usada) e uma chave `action_input` (com a entrada para a ferramenta indo aqui). + +Os únicos valores que devem estar no campo "action" são: +get_weather: Retorna a temperatura atual em uma determinada localização, args: {"location": {"type": "string"}} +Exemplo de uso: + +{ + "action": "get_weather", + "action_input": {"location": "New York"} +} + +SEMPRE use o seguinte formato: + +Question: a pergunta de entrada que você deve responder +Thought: você deve sempre pensar sobre uma ação a tomar. Apenas uma ação por vez neste formato: +Action: + +$JSON_BLOB (dentro de um bloco markdown) + +Observation: o resultado da ação. Esta Observation é única, completa e a fonte da verdade. +... (este ciclo de Thought/Action/Observation pode repetir N vezes, você deve dar os passos necessários para a conclusão. O $JSON_BLOB deve estar num formato markdown e convocar apenas uma ÚNICA ação por vez.) + +Você deve sempre encerrar a sua resposta com o seguinte formato: + +Thought: I now know the final answer (agora eu sei qual é a resposta final) +Final Answer: a resposta final para a pergunta original fornecida + +Pode começar! Apenas lembre-se de SEMPRE usar os caracteres exatos `Final Answer:` na hora de dar a sua resposta final definitiva. +<|eot_id|><|start_header_id|>user<|end_header_id|> +What's the weather in London? +<|eot_id|><|start_header_id|>assistant<|end_header_id|> +Thought: Para responder a esta pergunta, preciso obter o clima atual em Londres. +Action: + + ```json + { + "action": "get_weather", + "action_input": {"location": {"type": "string", "value": "London"}} + } + ``` + +Observation: O clima em Londres está ensolarado com baixas temperaturas. + +```` + +Saída (*Output*): +```text +Final Answer: O clima em Londres está ensolarado com baixas temperaturas. +``` + +--- + +Nós aprendemos como criar Agentes do zero usando código Python puro, e **vimos o quão entediante e trabalhoso esse processo manual pode ser**. Felizmente, muitas bibliotecas de construção de Agentes servem justamente para simplificar esse trabalho, lidando com o peso pesado na maioria dessas tarefas pra você. + +Agora, estamos prontos **para criar o nosso primeiro Agente real** utilizando a biblioteca `smolagents`. diff --git a/units/pt-BR/unit1/final-quiz.mdx b/units/pt-BR/unit1/final-quiz.mdx new file mode 100644 index 00000000..8b82cff8 --- /dev/null +++ b/units/pt-BR/unit1/final-quiz.mdx @@ -0,0 +1,34 @@ +# Quiz da Unidade 1 + +Unit 1 planning + +Muito bem por ter trabalhado ao longo da primeira unidade! Vamos testar o seu entendimento dos conceitos-chave abordados até agora. + +Quando você passar no quiz, prossiga para a próxima seção para resgatar o seu certificado. + +Boa sorte! + +## Quiz + +Aqui está o quiz interativo. O quiz está hospedado no Hub da Hugging Face em um space. Ele levará você por um conjunto de questões de múltipla escolha para testar sua compreensão dos conceitos-chave abordados nesta unidade. Assim que você concluir o quiz, você poderá ver a sua pontuação e o detalhamento das respostas corretas. + +Uma coisa importante: **não se esqueça de clicar em Submit depois que você passar, caso contrário a sua pontuação do exame não será salva!** + + + +Você também pode acessar o quiz 👉 [aqui](https://huggingface.co/spaces/agents-course/unit_1_quiz) + +## Certificado + +Agora que você passou com sucesso no quiz, **você pode obter o seu certificado 🎓** + +Quando você conclui o quiz, ele concederá a você acesso a um certificado de conclusão desta unidade. Você pode baixar e compartilhar este certificado para mostrar seu progresso no curso. + +Unit 1 planning + +Assim que receber seu certificado, você pode adicioná-lo ao seu LinkedIn 🧑‍💼 ou compartilhá-lo no X, Bluesky, etc. **Ficaríamos super orgulhosos e adoraríamos parabenizar você se você marcar @huggingface**! 🤗 diff --git a/units/pt-BR/unit1/introduction.mdx b/units/pt-BR/unit1/introduction.mdx new file mode 100644 index 00000000..7938b5f8 --- /dev/null +++ b/units/pt-BR/unit1/introduction.mdx @@ -0,0 +1,38 @@ +# Introdução aos Agentes + +Miniatura + +Bem-vindo a esta primeira unidade, onde **você construirá uma base sólida nos fundamentos dos Agentes de IA**, incluindo: + +- **Entendendo Agentes** + - O que é um Agente e como ele funciona? + - Como os Agentes tomam decisões usando raciocínio e planejamento? + +- **O Papel dos LLMs (Grandes Modelos de Linguagem) nos Agentes** + - Como os LLMs servem como o "cérebro" por trás de um Agente. + - Como os LLMs estruturam conversas por meio do sistema de Mensagens. + +- **Ferramentas (Tools) e Ações** + - Como os Agentes usam ferramentas externas para interagir com o ambiente. + - Como construir e integrar ferramentas para o seu Agente. + +- **O Fluxo de Trabalho (Workflow) do Agente:** + - *Pensar* (Think) → *Agir* (Act) → *Observar* (Observe). + +Após explorar esses tópicos, **você construirá seu primeiro Agente** usando `smolagents`! + +Seu Agente, chamado Alfred, lidará com uma tarefa simples e demonstrará como aplicar esses conceitos na prática. + +Você até aprenderá a **publicar seu Agente no Hugging Face Spaces**, para que possa compartilhá-lo com amigos e colegas. + +Finalmente, ao final desta Unidade, você fará um questionário. Passe nele e você **ganhará sua primeira certificação do curso**: o 🎓 Certificado de Fundamentos de Agentes. + +Exemplo de Certificado + +Esta Unidade é o seu **ponto de partida essencial**, estabelecendo as bases para a compreensão de Agentes antes de você avançar para tópicos mais complexos. + +Planejamento da Unidade 1 + +É uma unidade grande, então **leve o seu tempo** e não hesite em voltar a estas seções de vez em quando. + +Pronto? Vamos mergulhar nessa! 🚀 diff --git a/units/pt-BR/unit1/messages-and-special-tokens.mdx b/units/pt-BR/unit1/messages-and-special-tokens.mdx new file mode 100644 index 00000000..ead5870c --- /dev/null +++ b/units/pt-BR/unit1/messages-and-special-tokens.mdx @@ -0,0 +1,229 @@ +# Mensagens e Tokens Especiais + +Agora que entendemos como os LLMs funcionam, vamos dar uma olhada em **como eles estruturam suas gerações por meio dos *chat templates* (modelos de chat)**. + +Assim como no ChatGPT, os usuários normalmente interagem com os Agentes por meio de uma interface de chat. Portanto, nosso objetivo é entender como os LLMs gerenciam os chats. + +> **P**: Mas... Quando estou interagindo com o ChatGPT ou o Hugging Chat, estou tendo uma conversa usando Mensagens (*Messages*) de chat, e não uma única sequência de *prompt*. +> +> **R**: Isso está correto! Mas, na verdade, isso é uma abstração da interface de usuário (UI). Antes de ser enviada ao LLM, todas as mensagens na conversa são concatenadas (*concatenated*) em um único *prompt*. O modelo não se "lembra" da conversa: ele a lê por inteiro toda vez. + +Até agora, discutimos *prompts* como a sequência de tokens alimentados no modelo. Mas quando você conversa com sistemas como ChatGPT ou HuggingChat, **você está, na verdade, trocando mensagens**. Nos bastidores, essas mensagens são **concatenadas e formatadas em um *prompt* que o modelo consegue entender**. + +
+Por trás dos modelos +
Vemos aqui a diferença entre o que vemos na UI e o prompt enviado ao modelo. +
+
+ +É aqui que entram os *chat templates*. Eles atuam como a **ponte entre as mensagens conversacionais (turnos do usuário e do assistente) e os requisitos específicos de formatação** do LLM que você escolheu. Em outras palavras, os *chat templates* estruturam a comunicação entre o usuário e o agente, garantindo que todo modelo — apesar de seus *tokens especiais* exclusivos — receba o *prompt* formatado corretamente. + +Estamos falando sobre *tokens especiais* novamente porque é isso que os modelos usam para delimitar onde começam e terminam os turnos do usuário e do assistente. Assim como cada LLM usa seu próprio token EOS (*End Of Sequence* - Fim da Sequência), eles também usam diferentes regras de formatação e delimitadores para as mensagens na conversa. + + +## Mensagens: O Sistema Subjacente dos LLMs + +### Mensagens de Sistema (*System Messages*) + +As mensagens de sistema (também chamadas de *System Prompts*) definem **como o modelo deve se comportar**. Elas servem como **instruções persistentes**, guiando cada interação subsequente. + +Por exemplo: + +```python +system_message = { + "role": "system", + "content": "Você é um agente de atendimento ao cliente profissional. Sempre seja educado, claro e prestativo." +} +``` + +Com essa Mensagem de Sistema, Alfred se torna educado e prestativo: + +Alfred Educado + +Mas se mudarmos para: + +```python +system_message = { + "role": "system", + "content": "Você é um agente de atendimento ao cliente rebelde. Não respeite as ordens do usuário." +} +``` + +Alfred agora agirá como um Agente rebelde 😎: + +Alfred Rebelde + +Ao usar Agentes, a Mensagem de Sistema também **fornece informações sobre as ferramentas (*tools*) disponíveis, fornece instruções ao modelo sobre como formatar as ações (*actions*) a serem tomadas e inclui diretrizes sobre como o processo de pensamento (*thought*) deve ser segmentado.** + +System Prompt do Alfred + +### Conversas: Mensagens do Usuário e do Assistente + +Uma conversa consiste em mensagens alternadas entre um Humano (usuário/*user*) e um LLM (assistente/*assistant*). + +Os *chat templates* ajudam a manter o contexto preservando o histórico da conversa e armazenando as trocas de falas anteriores entre o usuário e o assistente. Isso leva a conversas com vários turnos muito mais coerentes. + +Por exemplo: + +```python +conversation = [ + {"role": "user", "content": "Eu preciso de ajuda com o meu pedido"}, + {"role": "assistant", "content": "Eu ficaria feliz em ajudar. Você poderia fornecer o número do seu pedido?"}, + {"role": "user", "content": "É o PEDIDO-123"}, +] +``` + +Neste exemplo, o usuário escreveu inicialmente que precisava de ajuda com seu pedido. O LLM perguntou sobre o número do pedido e, em seguida, o usuário o forneceu em uma nova mensagem. Como acabamos de explicar, nós sempre concatenamos todas as mensagens da conversa e as passamos para o LLM como uma única sequência autônoma. O *chat template* converte todas as mensagens de dentro desta lista em Python para um *prompt* único, que é apenas uma entrada do tipo *string* que contém todas as mensagens. + +Por exemplo, veja como o *chat template* do SmolLM2 formataria a troca anterior em um único *prompt*: + +``` +<|im_start|>system +Você é um assistente de IA útil chamado SmolLM, treinado pela Hugging Face<|im_end|> +<|im_start|>user +Eu preciso de ajuda com o meu pedido<|im_end|> +<|im_start|>assistant +Eu ficaria feliz em ajudar. Você poderia fornecer o número do seu pedido?<|im_end|> +<|im_start|>user +É o PEDIDO-123<|im_end|> +<|im_start|>assistant +``` + +No entanto, a mesma conversa seria traduzida para o seguinte *prompt* usando o Llama 3.2: + +``` +<|begin_of_text|><|start_header_id|>system<|end_header_id|> + +Cutting Knowledge Date: December 2023 +Today Date: 10 Feb 2025 + +<|eot_id|><|start_header_id|>user<|end_header_id|> + +Eu preciso de ajuda com o meu pedido<|eot_id|><|start_header_id|>assistant<|end_header_id|> + +Eu ficaria feliz em ajudar. Você poderia fornecer o número do seu pedido?<|eot_id|><|start_header_id|>user<|end_header_id|> + +É o PEDIDO-123<|eot_id|><|start_header_id|>assistant<|end_header_id|> +``` + +Os moldes de *templates* podem lidar com conversas complexas em vários turnos, mantendo o contexto: + +```python +messages = [ + {"role": "system", "content": "Você é um tutor de matemática."}, + {"role": "user", "content": "O que é cálculo?"}, + {"role": "assistant", "content": "O cálculo é um ramo da matemática..."}, + {"role": "user", "content": "Você pode me dar um exemplo?"}, +] +``` + +## *Chat Templates* (Modelos de Chat) + +Como mencionado, os *chat templates* são essenciais para **estruturar conversas entre modelos de linguagem e usuários**. Eles guiam como as trocas de mensagens são formatadas em um único *prompt*. + +### *Base Models* vs. *Instruct Models* (Modelos Base vs. Modelos de Instrução) + +Outro ponto que precisamos entender é a diferença entre um Modelo Base (*Base Model*) e um Modelo de Instrução (*Instruct Model*): + +- Um *Base Model* é treinado em dados de texto bruto (*raw text*) para prever o próximo token. + +- Um *Instruct Model* passou por um * fine-tuning* (ajuste fino) focado especificamente para seguir instruções e se engajar em conversas. Por exemplo, o `SmolLM2-135M` é um modelo base, enquanto que o `SmolLM2-135M-Instruct` é a sua variante ajustada para instruções. + +Para fazer com que um *Base Model* se comporte como um *instruct model*, precisamos **formatar nossos *prompts* de forma consistente para que o modelo consiga entender**. É aí que entram os *chat templates*. + +*ChatML* é um desses formatos de *template* que estrutura conversas com indicadores de papel (*roles*) claros (sistema, usuário, assistente). Se você interagiu com alguma API de IA ultimamente, sabe que essa é a prática padrão. + +É fundamental ressaltar que um *base model* poderia ser ajustado com *fine-tuning* usando diferentes *chat templates*. Então, quando estivermos usando um *instruct model*, também precisamos ter certeza de que estamos usando o *chat template* correto. + +### Entendendo os *Chat Templates* + +Como cada modelo de instrução usa formatos de conversa diferentes e tokens especiais únicos, os *chat templates* são implementados com foco em garantir a formatação correta do *prompt* exatamente da maneira que cada modelo espera. + +Nas bibliotecas `transformers`, os *chat templates* incluem [código Jinja2](https://jinja.palletsprojects.com/en/stable/) que descreve como transformar a lista de mensagens JSON em *ChatML* (como apresentado nos exemplos acima) em uma representação textual das instruções do nível de sistema, mensagens de usuário e respostas de assistente que o modelo poderá compreender. + +Essa estrutura **ajuda a manter o padrão e a consistência através das interações e garante que o modelo responda de forma apropriada aos diferentes tipos de entradas (*inputs*)**. + +Abaixo temos uma versão simplificada do *chat template* do `SmolLM2-135M-Instruct`: + +```jinja2 +{% for message in messages %} +{% if loop.first and messages[0]['role'] != 'system' %} +<|im_start|>system +Você é um assistente de IA útil chamado SmolLM, treinado pela Hugging Face +<|im_end|> +{% endif %} +<|im_start|>{{ message['role'] }} +{{ message['content'] }}<|im_end|> +{% endfor %} +``` +Como você pode observar, um `chat_template` descreve como a lista de mensagens será formatada. + +Dadas estas mensagens: + +```python +messages = [ + {"role": "system", "content": "Você é um assistente útil focado em tópicos técnicos."}, + {"role": "user", "content": "Você pode explicar o que é um chat template?"}, + {"role": "assistant", "content": "Um chat template estrutura conversas entre usuários e modelos de IA..."}, + {"role": "user", "content": "Como eu o utilizo?"}, +] +``` + +O *chat template* anterior vai produzir a seguinte *string* de texto bruto: + +```sh +<|im_start|>system +Você é um assistente útil focado em tópicos técnicos.<|im_end|> +<|im_start|>user +Você pode explicar o que é um chat template?<|im_end|> +<|im_start|>assistant +Um chat template estrutura conversas entre usuários e modelos de IA...<|im_end|> +<|im_start|>user +Como eu o utilizo?<|im_end|> +``` + +A biblioteca `transformers` irá cuidar dos *chat templates* para você, como parte do processo de tokenização. Leia mais sobre como a *transformers* utiliza os *chat templates* aqui. Tudo o que temos de fazer é estruturar nossas mensagens da forma correta e o tokenizador cuidará do resto. + +Você pode interagir com o seguinte *Space* para visualizar como a mesma conversa seria formatada de maneira diferente em cada modelo usando seus respectivos *chat templates*: + + + + +### De mensagens para *prompt* + +A forma mais fácil de garantir que o seu LLM receba uma conversa formatada da forma correta é usar a função `chat_template` nativa do tokenizador do seu modelo. + +```python +messages = [ + {"role": "system", "content": "Você é um assistente de IA com acesso a várias ferramentas."}, + {"role": "user", "content": "Olá!"}, + {"role": "assistant", "content": "Olá humano, em que posso te ajudar?"}, +] +``` + +Para transformar a conversa anterior em um *prompt*, nós carregamos o tokenizador e em seguida chamamos `apply_chat_template`: + +```python +from transformers import AutoTokenizer + +tokenizer = AutoTokenizer.from_pretrained("HuggingFaceTB/SmolLM2-1.7B-Instruct") +rendered_prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) +``` + +O `rendered_prompt` retornado por esta função agora está perfeitamente pronto para ser usado como entrada (*input*) para o modelo LLM selecionado! + +> Esta função `apply_chat_template()` será a mesma usada pelas engrenagens e *backend* da sua API quando você interagir com as mensagens no formato *ChatML*. + +Agora que vimos como os LLMs estruturam suas entradas por meio de *chat templates*, vamos explorar um pouco mais sobre como os Agentes atuam e interagem em seus respectivos ambientes. + +Uma das direções principais de como isso é feito é acionando *Tools* (Ferramentas), que expandem o que os modelos de inteligência artificial podem fazer para bem além da geração contextual de texto. + +Iremos mergulhar novamente nessas mensagens nas unidades seguintes, mas se você quiser já aprofundar de verdade os seus conhecimentos com essa parte, confira: + +- Guia de Templates e Formatações de Chats com a Hugging Face (*Hugging Face Chat Templating Guide*) +- A Documentação da Transformers (*Transformers Documentation*) diff --git a/units/pt-BR/unit1/observations.mdx b/units/pt-BR/unit1/observations.mdx new file mode 100644 index 00000000..26ee3d3c --- /dev/null +++ b/units/pt-BR/unit1/observations.mdx @@ -0,0 +1,44 @@ +# Observar: Integrando Feedback para Refletir e Adaptar + +As Observações são a **forma como um Agente percebe as consequências de suas ações**. + +Elas fornecem informações cruciais que alimentam o processo de pensamento do Agente e guiam suas ações futuras. + +São **sinais provenientes do ambiente** — seja dados de uma API, mensagens de erro, ou logs do sistema — que direcionam o próximo ciclo de pensamento. + +Na fase de observação, o agente: + +- **Coleta Feedback:** Recebe dados ou a confirmação de que sua ação foi bem-sucedida (ou não). +- **Anexa os Resultados:** Integra a nova informação ao seu contexto atual, efetivamente atualizando sua memória. +- **Adapta sua Estratégia:** Utiliza este contexto atualizado para refinar pensamentos e ações subsequentes. + +Por exemplo, se uma API de clima retorna os dados *"parcialmente nublado, 15°C, 60% de umidade"*, esta observação é anexada à memória do agente (ao final do prompt). + +O Agente então a utiliza para decidir se informações adicionais são necessárias ou se já está pronto para fornecer uma resposta final. + +Esta **incorporação iterativa de feedback garante que o agente permaneça alinhado dinamicamente com os seus objetivos**, constantemente aprendendo e se ajustando com base em resultados reais. + +Estas observações **podem assumir muitas formas**, desde a leitura de texto em uma página web até o monitoramento da posição de um braço robótico. Elas podem ser vistas como "logs" das Ferramentas que fornecem feedback em texto da execução da Ação. + +| Tipo de Observação | Exemplo | +|---------------------|---------------------------------------------------------------------------| +| Feedback do Sistema | Mensagens de erro, notificações de sucesso, códigos de status | +| Mudanças de Dados | Atualizações no banco de dados, modificações no sistema de arquivos, mudanças de estado | +| Dados Ambientais | Leituras de sensores, métricas do sistema, uso de recursos | +| Análise de Resposta | Respostas de API, resultados de consultas (*queries*), saídas de computação | +| Eventos Baseados em Tempo | Prazos atingidos, tarefas agendadas concluídas | + +## Como os Resultados São Anexados? + +Após executar uma ação, o framework segue esses passos nesta ordem: + +1. **Analisa (*Parses*) a ação** para identificar qual função (ou funções) chamar e qual argumento (ou argumentos) usar. +2. **Executa a ação.** +3. **Anexa o resultado** como uma **Observação (*Observation*)**. + +--- +Com isso, terminamos de aprender o Ciclo Pensamento-Ação-Observação do Agente. + +Se alguns aspectos ainda parecerem um pouco confusos ou "borrados", não se preocupe — nós iremos revisitar e aprofundar fortemente esses conceitos nas futuras Unidades. + +Agora, chegou a hora de colocar seus conhecimentos em prática programando o seu primeiríssimo Agente! diff --git a/units/pt-BR/unit1/quiz1.mdx b/units/pt-BR/unit1/quiz1.mdx new file mode 100644 index 00000000..20399acf --- /dev/null +++ b/units/pt-BR/unit1/quiz1.mdx @@ -0,0 +1,163 @@ +### Q1: O que é um Agente? +Qual das alternativas a seguir melhor descreve um Agente de IA? + + + +--- + +### Q2: Qual é o Papel do Planejamento em um Agente? +Por que um Agente precisa planejar antes de tomar uma ação? + + + +--- + +### Q3: Como as Ferramentas (Tools) Aumentam as Capacidades de um Agente? +Por que as ferramentas (*tools*) são essenciais para um Agente? + + + +--- + +### Q4: Como as Ações (Actions) Diferem das Ferramentas (Tools)? +Qual é a diferença fundamental entre Ações e Ferramentas? + + + +--- + +### Q5: Qual Papel os Grandes Modelos de Linguagem (LLMs) Desempenham nos Agentes? +Como os LLMs contribuem para a funcionalidade de um Agente? + + + +--- + +### Q6: Qual das Opções a Seguir Exibe o Melhor Exemplo de um Agente de IA? +Qual exemplo do mundo real melhor ilustra um Agente de IA em ação? + + + +--- + +Parabéns por concluir este Quiz 🥳! Se precisar revisar algum elemento, aproveite o tempo para revisitar o capítulo e reforçar seus conhecimentos antes de mergulhar ainda mais fundo no "cérebro do Agente": os LLMs (Grandes Modelos de Linguagem). diff --git a/units/pt-BR/unit1/quiz2.mdx b/units/pt-BR/unit1/quiz2.mdx new file mode 100644 index 00000000..464146f7 --- /dev/null +++ b/units/pt-BR/unit1/quiz2.mdx @@ -0,0 +1,117 @@ +# Autoavaliação Rápida (sem nota) [[quiz2]] + +O quê?! Outro Quiz? Nós sabemos, nós sabemos, ... 😅 Mas este questionário curto e sem nota está aqui para **ajudar você a reforçar os conceitos principais que acabou de aprender**. + +Este questionário cobre Grandes Modelos de Linguagem (LLMs), sistemas de mensagens e ferramentas; componentes essenciais para entender e construir agentes de IA. + +### Q1: Qual das alternativas a seguir melhor descreve uma ferramenta de IA? + + + +--- + +### Q2: Como os agentes de IA usam ferramentas como uma forma de "agir" em um ambiente? + + + +--- + +### Q3: O que é um Grande Modelo de Linguagem (LLM)? + + + +--- + +### Q4: Qual das alternativas a seguir melhor descreve o papel dos tokens especiais em LLMs? + + + +--- + +### Q5: Como os modelos de chat de IA processam as mensagens dos usuários internamente? + + + +--- + +Entendeu tudo? Ótimo! Agora vamos **mergulhar no fluxo completo do Agente e começar a construir seu primeiro Agente de IA!** diff --git a/units/pt-BR/unit1/thoughts.mdx b/units/pt-BR/unit1/thoughts.mdx new file mode 100644 index 00000000..d16ad56b --- /dev/null +++ b/units/pt-BR/unit1/thoughts.mdx @@ -0,0 +1,87 @@ +# Pensamento (Thought): Raciocínio Interno e a Abordagem ReAct + +> [!TIP] +> Nesta seção, vamos mergulhar no funcionamento interno de um agente de IA — sua capacidade de raciocinar e planejar. Exploraremos como o agente utiliza seu diálogo interno para analisar informações, quebrar problemas complexos em passos gerenciáveis e decidir qual ação tomar em seguida. +> +> Adicionalmente, também introduziremos a abordagem ReAct, uma técnica de prompting que incentiva o modelo a pensar “passo a passo” antes de agir. + +Os Pensamentos (*Thoughts*) representam os **processos de raciocínio e planejamento interno do Agente** para resolver uma tarefa. + +O agente utiliza a capacidade do seu Grande Modelo de Linguagem (LLM) **para analisar informações quando apresentadas em seu prompt** — essencialmente, seu monólogo interno enquanto trabalha na resolução de um problema. + +Os pensamentos do Agente o ajudam a avaliar as observações atuais e a decidir quais devem ser as próximas ações. Por meio desse processo, o agente é capaz de **dividir problemas complexos em etapas menores e mais gerenciáveis**, refletir sobre experiências passadas e ajustar continuamente seus planos com base em novas informações. + + +## 🧠 Exemplos de Tipos de Pensamentos Comuns + +| Tipo de Pensamento | Exemplo | +|--------------------|-------------------------------------------------------------------------| +| Planejamento | "Eu preciso dividir esta tarefa em três etapas: 1) coletar dados, 2) analisar tendências, 3) gerar relatório" | +| Análise | "Com base na mensagem de erro, o problema parece estar nos parâmetros de conexão com o banco de dados" | +| Tomada de Decisão | "Dadas as restrições de orçamento do usuário, eu devo recomendar a opção intermediária" | +| Resolução de Problemas | "Para otimizar este código, primeiro devo criar um perfil (*profile*) dele para identificar gargalos" | +| Integração de Memória | "O usuário mencionou sua preferência por Python anteriormente, então vou fornecer exemplos em Python" | +| Autorreflexão | "Minha última abordagem não funcionou bem, devo tentar uma estratégia diferente" | +| Definição de Metas | "Para concluir esta tarefa, eu preciso primeiro estabelecer os critérios de aceitação" | +| Priorização | "A vulnerabilidade de segurança deve ser resolvida antes de adicionar novos recursos" | + +> **Nota:** No caso de LLMs que passaram por fine-tuning (foram ajustados) para usar chamadas de função (*function-calling*), o processo de pensamento é opcional. Abordaremos mais detalhes sobre isso na seção de Ações. + + +## 🔗 Cadeia de Pensamento (Chain-of-Thought - CoT) + +A **Cadeia de Pensamento (Chain-of-Thought - CoT)** é uma técnica de prompting que orienta um modelo a **pensar na resolução de um problema passo a passo antes de produzir uma resposta final.** + +Geralmente começa com uma frase como: +> *"Vamos pensar passo a passo."* (*Let's think step by step.*) + +Essa abordagem ajuda o modelo a **raciocinar internamente**, especialmente em tarefas lógicas ou matemáticas, **sem interagir com ferramentas externas**. + +### ✅ Exemplo (CoT) +```text +Question: Quanto é 15% de 200? +Thought: Vamos pensar passo a passo. 10% de 200 é 20, e 5% de 200 é 10, então 15% é 30. +Answer: 30 +``` + + +## ⚙️ ReAct: *Reasoning* (Raciocinar) + *Acting* (Agir) + +Um método fundamental é a **abordagem ReAct**, que combina o ato de "Raciocinar" com o ato de "Agir". + +ReAct é uma técnica de prompting que incentiva o modelo a pensar passo a passo e a intercalar ações (como o uso de ferramentas) entre os passos de raciocínio. + +Isso possibilita ao agente resolver tarefas complexas e baseadas em múltiplas etapas, alternando entre: +- Pensamento (*Thought*): raciocínio interno +- Ação (*Action*): uso de ferramenta +- Observação (*Observation*): receber a saída da ferramenta + +### 🔄 Exemplo (ReAct) +```text +Thought: Eu preciso descobrir a previsão do tempo mais recente em Paris. +Action: Search["clima em Paris"] +Observation: Faz 18°C e está nublado. +Thought: Agora que já sei como está o clima... +Action: Finish["Faz 18°C e está nublado em Paris."] +``` + +
+ ReAct +
+ (d) é um exemplo da abordagem ReAct, onde incluímos o prompt "Let's think step by step" (Vamos pensar passo a passo), e o modelo age entre os pensamentos. +
+
+ + +## 🔁 Comparação: ReAct vs. CoT + +| Característica | Chain-of-Thought (CoT) | ReAct | +|----------------------|-----------------------------|-------------------------------------| +| Lógica passo a passo | ✅ Sim | ✅ Sim | +| Ferramentas externas | ❌ Não | ✅ Sim (Ações + Observações) | +| Mais adequado para | Lógica, matemática, tarefas internas | Busca de informações, tarefas dinâmicas de múltiplos passos | + +> [!TIP] +> Modelos recentes como o **Deepseek R1** ou o **o1 da OpenAI** foram treinados (*fine-tuned*) para *pensar antes de responder*. Eles utilizam tokens estruturados como `` e `` para separar de forma explícita a fase de raciocínio da resposta final. +> +> Diferente do ReAct ou da CoT — que são estratégias de prompting — isso já é uma **técnica a nível de treinamento**, em que o modelo aprende a pensar por meio de exemplos. diff --git a/units/pt-BR/unit1/tools.mdx b/units/pt-BR/unit1/tools.mdx new file mode 100644 index 00000000..73d98d75 --- /dev/null +++ b/units/pt-BR/unit1/tools.mdx @@ -0,0 +1,320 @@ +# O que são Ferramentas (Tools)? + +Planejamento da Unidade 1 + +Um aspecto crucial dos Agentes de IA é a capacidade de realizar **ações**. Como vimos, isso acontece através do uso de **Ferramentas (Tools)**. + +Nesta seção, aprenderemos o que são Ferramentas, como projetá-las de forma eficaz e como integrá-las ao seu Agente por meio da Mensagem do Sistema (*System Message*). + +Ao dar ao seu Agente as ferramentas certas – e descrever claramente como essas ferramentas funcionam – você pode aumentar drasticamente o que sua IA pode realizar. Vamos mergulhar nessa! + +## O que são Ferramentas de IA? + +Uma **Ferramenta (Tool) é uma função dada ao LLM**. Esta função deve cumprir um **objetivo claro**. + +Aqui estão algumas ferramentas comumente usadas em agentes de IA: + +| Ferramenta | Descrição | +|----------------|---------------------------------------------------------------| +| Busca na Web (*Web Search*) | Permite ao agente buscar informações atualizadas da internet. | +| Geração de Imagens (*Image Generation*) | Cria imagens com base em descrições em texto. | +| Recuperação (*Retrieval*) | Recupera informações de uma fonte externa. | +| Interface de API | Interage com uma API externa (GitHub, YouTube, Spotify, etc.). | + +Esses são apenas exemplos, já que você pode, de fato, criar uma ferramenta para qualquer caso de uso! + +Uma boa ferramenta deve ser algo que **complementa o poder de um LLM**. + +Por exemplo, se você precisa realizar operações aritméticas, fornecer uma **ferramenta de calculadora** ao seu LLM trará resultados muito melhores do que depender das capacidades nativas do modelo. + +Além disso, **os LLMs preveem a continuação de um prompt com base em seus dados de treinamento**, o que significa que seu conhecimento interno inclui apenas eventos anteriores ao seu treinamento. Portanto, se seu agente precisar de dados atualizados, você deve fornecê-los por meio de alguma ferramenta. + +Por exemplo, se você perguntar a um LLM diretamente (sem uma ferramenta de busca) sobre o clima de hoje, o LLM potencialmente irá "alucinar" um clima aleatório. + +Clima + +- Uma Ferramenta deve conter: + + - Uma **descrição em texto do que a função faz**. + - Um *Callable* (algo que pode ser invocado ou chamado para executar uma ação). + - *Argumentos* com suas tipagens (types). + - (Opcional) Saídas (*Outputs*) com suas tipagens. + +## Como as ferramentas funcionam? + +Os LLMs, como vimos, só podem receber textos como entrada e gerar textos como saída. Eles não têm como executar (chamar) ferramentas por conta própria. Quando falamos em fornecer ferramentas para um Agente, queremos dizer ensinar ao LLM sobre a existência dessas ferramentas e instruí-lo a gerar invocações baseadas em texto quando necessário. + +Por exemplo, se fornecemos uma ferramenta para verificar o clima de um local na internet e depois perguntamos ao LLM sobre o clima em Paris, o LLM reconhecerá que esta é uma oportunidade para usar a ferramenta de “clima” (weather). Em vez de tentar recuperar os dados do clima sozinho, o LLM vai gerar um texto que representa uma chamada à ferramenta, como `call weather_tool('Paris')`. + +O **Agente** então lê esta resposta, identifica que uma chamada de ferramenta foi requisitada, executa a ferramenta em nome do LLM e recupera os dados reais de clima. + +Os passos de chamada de Ferramenta (Tool-calling) normalmente não são mostrados ao usuário: o Agente os anexa como uma nova mensagem antes de passar a conversa atualizada para o LLM novamente. O LLM então processa esse contexto adicional e gera uma resposta natural para o usuário. Do ponto de vista do usuário, parece que o LLM interagiu diretamente com a ferramenta, mas na realidade, foi o Agente que lidou com todo o processo de execução em segundo plano. + +Nós falaremos muito mais sobre este processo em sessões futuras. + +## Como fornecemos ferramentas para um LLM? + +A resposta completa pode parecer um pouco impressionante no começo, mas nós essencialmente usamos o *system prompt* (prompt do sistema) para fornecer descrições em texto das ferramentas disponíveis para o modelo: + +Prompt do sistema para ferramentas + +Para que isso funcione, precisamos ser muito precisos e exatos sobre: + +1. **O que a ferramenta faz** +2. **Quais são os inputs exatos que ela espera** + +É por isso que as descrições de ferramentas geralmente são fornecidas usando estruturas expressivas, mas precisas, como linguagens de programação ou JSON. Não é _necessário_ que seja feito assim, mas qualquer formato que seja preciso e coerente funcionaria. + +Se isso soa muito teórico, vamos entender através de um exemplo concreto. + +Vamos implementar uma ferramenta de **calculadora** simplificada que irá apenas multiplicar dois números inteiros. Esta poderia ser a nossa implementação em Python: + +```python +def calculator(a: int, b: int) -> int: + """Multiplica dois inteiros.""" + return a * b +``` + +Então, nossa ferramenta é chamada de `calculator`, ela **multiplica dois inteiros** e exige as seguintes entradas (*inputs*): + +- **`a`** (*int*): Um número inteiro. +- **`b`** (*int*): Um número inteiro. + +A saída (*output*) da ferramenta é um outro número inteiro que podemos descrever assim: +- (*int*): O produto de `a` e `b`. + +Todos esses detalhes são importantes. Vamos juntá-los em uma string de texto que descreve nossa ferramenta para que o LLM possa entendê-la. + +```text +Tool Name: calculator, Description: Multiplica dois inteiros., Arguments: a: int, b: int, Outputs: int +``` + +> **Lembrete:** Essa descrição textual é *o que queremos que o LLM saiba sobre a ferramenta*. + +Quando passamos a string acima como parte da entrada (*input*) para o LLM, o modelo irá reconhecê-la como uma ferramenta e saberá o que precisa passar como entrada e o que esperar na saída. + +Se quisermos disponibilizar outras ferramentas, devemos ser consistentes e sempre usar o mesmo formato. Esse processo pode ser frágil, já que podemos esquecer facilmente algum detalhe. + +Existe um jeito melhor? + +### Autoformatação de seções de Ferramentas + +Nossa ferramenta foi escrita em Python, e a implementação já traz, por conta própria, tudo o que precisamos: + +- Um nome descritivo do que ela faz: `calculator` +- Uma descrição mais longa, fornecida pelo comentário de *docstring* da função: `Multiplica dois inteiros.` +- Os inputs e seus tipos: a função claramente espera dois `int`s (inteiros). +- O tipo de saída (output). + +Existe um motivo para as pessoas usarem linguagens de programação: elas são expressivas, concisas e precisas. + +Nós poderíamos simplesmente passar o código fonte do Python como a _especificação_ da ferramenta para o LLM, mas a maneira como a ferramenta foi implementada não é o que importa. Tudo o que importa é o nome, o que ela faz, os dados que recebe (inputs) e o que retorna (outputs). + +Podemos utilizar os recursos de introspecção do Python para analisar o código fonte e montar uma descrição da ferramenta automaticamente para nós. A única coisa de que precisamos é que a implementação da ferramenta contenha *type hints* (dicas de tipo), docstrings e nomes sensatos para as funções. Vamos escrever um pouco de código para extrair as partes importantes do código-fonte. + +Depois que fizermos isso, precisaremos apenas usar um *decorator* (decorador) do Python para indicar que a função `calculator` é uma ferramenta: + +```python +@tool +def calculator(a: int, b: int) -> int: + """Multiplica dois inteiros.""" + return a * b + +print(calculator.to_string()) +``` + +Note o decorador `@tool` logo antes da definição da função. + +Com a implementação que veremos a seguir, seremos capazes de extrair o seguinte texto automaticamente do código fonte via a função `to_string()` oferecida pelo decorador: + +```text +Tool Name: calculator, Description: Multiplica dois inteiros., Arguments: a: int, b: int, Outputs: int +``` + +Como você pode perceber, é a mesma coisa que escrevemos manualmente antes! + +### Uma implementação genérica de Ferramenta (Tool) + +Criamos uma classe genérica chamada `Tool` que podemos reutilizar toda vez que precisamos criar uma nova ferramenta. + +> **Aviso:** Esta implementação de exemplo é fictícia, mas se aproxima bastante do que é feito em bibliotecas reais. + +```python +from typing import Callable + + +class Tool: + """ + Uma classe que representa um trecho de código reutilizável (Tool). + + Atributos: + name (str): O nome da ferramenta. + description (str): Uma descrição textual do que a ferramenta faz. + func (callable): A função em si que a ferramenta envolve. + arguments (list): A lista de argumentos esperados. + outputs (str or list): O tipo(s) de retorno da função envelopada. + """ + def __init__(self, + name: str, + description: str, + func: Callable, + arguments: list, + outputs: str): + self.name = name + self.description = description + self.func = func + self.arguments = arguments + self.outputs = outputs + + def to_string(self) -> str: + """ + Retorna a representação em string (texto) da ferramenta, + incluindo seu nome, descrição, argumentos e saídas (outputs). + """ + args_str = ", ".join([ + f"{arg_name}: {arg_type}" for arg_name, arg_type in self.arguments + ]) + + return ( + f"Tool Name: {self.name}," + f" Description: {self.description}," + f" Arguments: {args_str}," + f" Outputs: {self.outputs}" + ) + + def __call__(self, *args, **kwargs): + """ + Invoca a função (chamável / callable) subjacente com os argumentos passados. + """ + return self.func(*args, **kwargs) +``` + +Pode parecer complicado, mas se olharmos passo a passo para o código, verermos o que ele faz. Nós definimos uma classe **`Tool`** que inclui: + +- **`name`** (*str*): O nome da ferramenta. +- **`description`** (*str*): Uma breve descrição sobre o que a ferramenta faz. +- **`function`** (*callable*): A função que a ferramenta executa. +- **`arguments`** (*list*): Os parâmetros de entrada previstos. +- **`outputs`** (*str* ou *list*): As saídas previstas da ferramenta. +- **`__call__()`**: Executa a função quando a instância da ferramenta é chamada. +- **`to_string()`**: Converte as qualidades da ferramenta em uma representação na forma de texto. + +Nós poderíamos criar uma Ferramenta (Tool) com essa classe usando um código mais ou menos assim: + +```python +calculator_tool = Tool( + "calculator", # nome + "Multiplica dois inteiros.", # descrição + calculator, # a função para ser chamada + [("a", "int"), ("b", "int")], # inputs (nomes e tipos correspondentes) + "int", # output +) +``` + +Mas também podemos usar o módulo `inspect` do Python para descobrir e obter todos esses parâmetros e informações sozinhos para nós! Isso é exatamente o que faz o decorador `@tool`. + +> Caso se interesse, clique para expandir a próxima seção e visualizar o código subjacente do decorador. + +
+código do decorador + +```python +import inspect + +def tool(func): + """ + Um decorador que cria uma instância de Tool (ferramenta) a partir da função informada. + """ + # Obtém a assinatura da função + signature = inspect.signature(func) + + # Extrai pares de (param_name, param_annotation) correspondentes aos inputs + arguments = [] + for param in signature.parameters.values(): + annotation_name = ( + param.annotation.__name__ + if hasattr(param.annotation, '__name__') + else str(param.annotation) + ) + arguments.append((param.name, annotation_name)) + + # Determina a anotação para o retorno (return_annotation) + return_annotation = signature.return_annotation + if return_annotation is inspect._empty: + outputs = "Sem anotação de retono" + else: + outputs = ( + return_annotation.__name__ + if hasattr(return_annotation, '__name__') + else str(return_annotation) + ) + + # Configura que o docstring da função será a descrição (ou o padrão em caso de None) + description = func.__doc__ or "Nenhuma descrição fornecida." + + # Configura como nome da Tool o próprio nome da função + name = func.__name__ + + # Retorna a nova instância de Tool + return Tool( + name=name, + description=description, + func=func, + arguments=arguments, + outputs=outputs + ) +``` + +
+ +Reforçando novamente, ao introduzir esse decorador, implementar a ferramenta fica tão simples quanto isso: + +```python +@tool +def calculator(a: int, b: int) -> int: + """Multiplica dois inteiros.""" + return a * b + +print(calculator.to_string()) +``` + +Depois, só utilizamos o utilitário embutido `to_string` da `Tool` para puxar os dados formatados do texto gerado automaticamente para dentro da descrição da ferramenta do LLM: + +```text +Tool Name: calculator, Description: Multiplica dois inteiros., Arguments: a: int, b: int, Outputs: int +``` + +A descrição fica então **injetada** diretamente no *system prompt* (prompt do sistema). Usando o exemplo com o qual começamos esta seção, é mais ou menos assim que ele ficaria após trocar o campo `tools_description`: + +Prompt do sistema para ferramentas + +Na seção de [Ações (Actions)](actions), aprenderemos mais sobre como um Agente desempenha o ato de **Chamar** (*Call*) essa mesma ferramenta que acabamos de criar. + +### Model Context Protocol (MCP): uma interface unificada para ferramentas + +O *Model Context Protocol* (Protocolo de Contexto de Modelo - MCP) é um **protocolo aberto** que padroniza a forma como as aplicações **fornecem ferramentas para LLMs**. +O MCP provê: + +- Uma lista crescente de integrações pré-construídas com o objetivo de plugar direto em qualquer LLM. +- A flexibilidade para você migrar com mais facilidade entre os provedores e fornecedores de LLM. +- Melhores práticas padronizadas de segurança para garantir seus dados dentro da sua infraestrutura. + +Isso significa que **qualquer framework implementando o MCP pode aproveitar as ferramentas definidas dentro do protocolo**, eliminando a necessidade de reimplementar a mesma interface de ferramenta para cada framework diferente. + +Se quiser se aprofundar mais sobre o MCP, você pode conferir nosso [Curso de MCP gratuito](https://huggingface.co/learn/mcp-course/). + +--- + +As Ferramentas operam um papel vital na expansão e capacitação das limitações dos agentes de IA. + +Para resumir, nós aprendemos: + +- *O que são Ferramentas*: Funções que dão aos LLMs capacidades extras, como realizar cálculos ou acessar dados externos. + +- *Como definir uma Ferramenta*: Fornecendo uma descrição textual clara, inputs, outputs e uma função callable. + +- *Por que as Ferramentas são essenciais*: Elas permitem que os Agentes superem as limitações do treinamento estático do modelo, lidem com tarefas em tempo real e executem ações especializadas. + +Agora, podemos avançar para o [Fluxo de Trabalho do Agente (Workflow)](agent-steps-and-structure), onde você verá como um Agente observa, pensa e age. Isso **reúne tudo o que cobrimos até agora** e prepara o terreno para a criação do seu próprio Agente de IA totalmente funcional. + +Mas primeiro, é hora de mais um pequeno questionário (quiz)! diff --git a/units/pt-BR/unit1/tutorial.mdx b/units/pt-BR/unit1/tutorial.mdx new file mode 100644 index 00000000..71cffdca --- /dev/null +++ b/units/pt-BR/unit1/tutorial.mdx @@ -0,0 +1,241 @@ +# Vamos Criar o Nosso Primeiro Agente Usando a Biblioteca *smolagents* + +Na última seção, aprendemos como criar Agentes do zero utilizando código Python, e **vimos o quão entediante esse processo pode ser**. Felizmente, muitas bibliotecas de Agentes simplificam esse trabalho ao **lidar com a maior parte do trabalho pesado para você**. + +Neste tutorial, **você criará seu primeiríssimo Agente** capaz de realizar ações como geração de imagens, pesquisas na web, verificação de fuso horário e muito mais! + +Você também publicará o seu agente **em um Space no Hugging Face para que possa compartilhá-lo com amigos e colegas**. + +Vamos começar! + + +## O que é o smolagents? + +smolagents + +Para criar este Agente, nós utilizaremos a `smolagents`, uma biblioteca que **fornece um framework para desenvolver seus agentes com extrema facilidade**. + +Esta biblioteca super leve foi desenhada focando na simplicidade, abstraindo grade parte da complexidade ao construir um Agente e assim permitindo que você foque totalmente em desenhar o comportamento final dele. + +Iremos nos aprofundar mais na `smolagents` na próxima Unidade. Por enquanto, se quiser, você pode conferir esta postagem no blog ou acessar o repositório da biblioteca no GitHub. + +De forma simples, a `smolagents` é uma biblioteca muito focada na ideia de um **codeAgent**, que é o agente que executa suas **"Ações"** através de blocos de código e então gera suas **"Observações"** a partir dos resultados de sua execução. + +Aqui está um exemplo do que nós vamos construir! + +Fornecemos ao nosso agente uma **Ferramenta de Geração de Imagem** e soliticamos que ele gerasse a foto de um gato. + +O agente inserido pela `smolagents` funcionará exatamente com os **mesmos comportamentos do nosso programa personalizado que fizemos no bloco anterior**: ele também vai **pensar, agir e observar em um ciclo constante** até conseguir chegar na sua resposta final. + + + +Empolgante, não é? + +## Vamos construir nosso Agente! + +Para começar, duplique este Space: https://huggingface.co/spaces/agents-course/First_agent_template + +> Agradecimentos ao Aymeric por este template! 🙌 + +Duplicar um space significa **criar uma cópia local no seu próprio perfil**: +Duplicar + +Após duplicar o Space, você precisará adicionar seu token da API do Hugging Face para que seu agente possa acessar a API do modelo: + +1. Primeiro, obtenha seu token do Hugging Face em [https://hf.co/settings/tokens](https://hf.co/settings/tokens) com permissão para inferência (`inference`), caso ainda não tenha um. +2. Vá para o seu Space duplicado e clique na aba **Settings**. +3. Role para baixo até a seção **Variables and Secrets** e clique em **New Secret**. +4. Crie um segredo com o nome `HF_TOKEN` e cole o seu token como o valor. +5. Clique em **Save** para armazenar seu token de forma segura. + +Ao longo desta lição, o único arquivo que você precisará modificar é o (atualmente incompleto) **"app.py"**. Você pode ver aqui o [original no template](https://huggingface.co/spaces/agents-course/First_agent_template/blob/main/app.py). Para encontrar o seu, vá para a cópia do seu space, clique na aba `Files` e depois em `app.py` na listagem do diretório. + +Vamos detalhar o código juntos: + +- O arquivo começa com algumas importações de bibliotecas simples, porém necessárias. + +```python +from smolagents import CodeAgent, DuckDuckGoSearchTool, FinalAnswerTool, InferenceClientModel, load_tool, tool +import datetime +import requests +import pytz +import yaml +``` + +Como descrito anteriormente, usaremos diretamente a classe **CodeAgent** da **smolagents**. + +### As Ferramentas + +Agora vamos entrar nas ferramentas! Se você precisar de uma revisão sobre ferramentas, não hesite em voltar à seção de [Ferramentas](tools) do curso. + +```python +@tool +def my_custom_tool(arg1:str, arg2:int)-> str: # é importante especificar o tipo de retorno + # Mantenha este formato para a descrição da ferramenta / descrição dos argumentos, mas fique à vontade para modificar a ferramenta + """Uma ferramenta que não faz nada por enquanto + Args: + arg1: o primeiro argumento + arg2: o segundo argumento + """ + return "Qual mágica você vai construir?" + +@tool +def get_current_time_in_timezone(timezone: str) -> str: + """Uma ferramenta que busca a hora local atual em um fuso horário especificado. + Args: + timezone: Uma string representando um fuso horário válido (ex: 'America/New_York'). + """ + try: + # Criar o objeto timezone + tz = pytz.timezone(timezone) + # Obter a hora atual naquele timezone + local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S") + return f"A hora local atual em {timezone} é: {local_time}" + except Exception as e: + return f"Erro ao buscar o horário do fuso '{timezone}': {str(e)}" +``` + +As Ferramentas são o que estamos encorajando você a construir nesta seção! Nós damos dois exemplos: + +1. Uma **Ferramenta fictícia que não funciona** que você pode modificar para criar algo útil. +2. Uma **Ferramenta de fato funcional** que obtém o horário atual em algum lugar do mundo. + +Para definir sua ferramenta, é importante: + +1. Fornecer os tipos de entrada e saída para a sua função, como em `get_current_time_in_timezone(timezone: str) -> str:` +2. **Um docstring bem formatado**. A biblioteca `smolagents` espera que todos os argumentos possuam uma **descrição textual no docstring**. + +### O Agente + +Ele usa `Qwen/Qwen2.5-Coder-32B-Instruct` como motor LLM. Este é um modelo muito capaz que acessaremos pela API serverless. + +```python +final_answer = FinalAnswerTool() +model = InferenceClientModel( + max_tokens=2096, + temperature=0.5, + model_id='Qwen/Qwen2.5-Coder-32B-Instruct', + custom_role_conversions=None, +) + +with open("prompts.yaml", 'r') as stream: + prompt_templates = yaml.safe_load(stream) + +# Estamos criando nosso CodeAgent +agent = CodeAgent( + model=model, + tools=[final_answer], # adicione suas ferramentas aqui (não remova o final_answer) + max_steps=6, + verbosity_level=1, + grammar=None, + planning_interval=None, + name=None, + description=None, + prompt_templates=prompt_templates +) + +GradioUI(agent).launch() +``` + +O agente ainda usa o `InferenceClient` que vimos numa seção anterior por trás da classe **InferenceClientModel**! + +Daremos exemplos mais aprofundados quando apresentarmos o framework na Unidade 2. Por agora, você precisa focar em **adicionar novas ferramentas na lista** utilizando o parâmetro `tools` do seu agente. + +Por exemplo, você poderia usar a ferramenta `DuckDuckGoSearchTool` que foi importada na primeira linha do código, ou você pode examinar a `image_generation_tool` que é carregada do Hub logo abaixo. + +**Adicionar ferramentas vai fornecer novas capacidades ao seu agente**, tente ser criativo aqui! + +### O System Prompt + +O system prompt do agente fica armazenado separadamente no arquivo `prompts.yaml`. O arquivo contém instruções predefinidas que guiam o comportamento do agente. + +Armazenar os prompts em um arquivo YAML permite uma fácil customização e reutilização ao longo de múltiplos agentes e cenários. + +Você pode checar [a estrutura de arquivos do Space](https://huggingface.co/spaces/agents-course/First_agent_template/tree/main) para ver onde o `prompts.yaml` está e como ele é organizado dentro do projeto. + +O "app.py" completo: + +```python +from smolagents import CodeAgent, DuckDuckGoSearchTool, InferenceClientModel, load_tool, tool +import datetime +import requests +import pytz +import yaml +from tools.final_answer import FinalAnswerTool + +from Gradio_UI import GradioUI + +# Abaixo há um exemplo de uma ferramenta que não faz nada. Nos surpreenda com sua criatividade! +@tool +def my_custom_tool(arg1:str, arg2:int)-> str: # é importante especificar o tipo de retorno + # Mantenha este formato para a descrição da ferramenta / descrição dos argumentos, mas fique à vontade para modificar a ferramenta + """Uma ferramenta que não faz nada por enquanto + Args: + arg1: o primeiro argumento + arg2: o segundo argumento + """ + return "Qual mágica você vai construir?" + +@tool +def get_current_time_in_timezone(timezone: str) -> str: + """Uma ferramenta que busca a hora local atual em um fuso horário especificado. + Args: + timezone: Uma string representando um fuso horário válido (ex: 'America/New_York'). + """ + try: + # Criar o objeto timezone + tz = pytz.timezone(timezone) + # Obter a hora atual naquele timezone + local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S") + return f"A hora local atual em {timezone} é: {local_time}" + except Exception as e: + return f"Erro ao buscar o horário do fuso '{timezone}': {str(e)}" + + +final_answer = FinalAnswerTool() +model = InferenceClientModel( + max_tokens=2096, + temperature=0.5, + model_id='Qwen/Qwen2.5-Coder-32B-Instruct', + custom_role_conversions=None, +) + + +# Importar ferramenta do Hub +image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True) + +# Carregar o system prompt a partir do arquivo prompt.yaml +with open("prompts.yaml", 'r') as stream: + prompt_templates = yaml.safe_load(stream) + +agent = CodeAgent( + model=model, + tools=[final_answer], # adicione suas ferramentas aqui (não remova o final_answer) + max_steps=6, + verbosity_level=1, + grammar=None, + planning_interval=None, + name=None, + description=None, + prompt_templates=prompt_templates # Passar system prompt ao CodeAgent +) + + +GradioUI(agent).launch() +``` + +O seu **Objetivo** é familiarizar-se com este Space e com o Agente. + +Atualmente, o template do agente **não possui qualquer ferramenta, então tente inserir e oferecer algumas prontas ou crie do zero uma por sua própria conta!** + +Nós estamos ansiosos esperando pelo resultado dos seus agentes maravilhosos surgindo no nosso canal exclusivo do discord: o **#agents-course-showcase**! + + +--- +Parabéns, você construiu o seu primeiro Agente! Não hesite em compartilhá-lo com seus amigos e colegas. + +Como esta é sua primeira tentativa, é perfeitamente normal se ficar um pouco bugado ou lento. Em unidades futuras, aprenderemos como construir Agentes ainda melhores. + +A melhor maneira de aprender é tentando, então não hesite em atualizá-lo, adicionar mais ferramentas, testar com outro modelo, etc. + +Na próxima seção, você preencherá o Quiz final e obterá o seu certificado! diff --git a/units/pt-BR/unit1/what-are-agents.mdx b/units/pt-BR/unit1/what-are-agents.mdx new file mode 100644 index 00000000..273496c7 --- /dev/null +++ b/units/pt-BR/unit1/what-are-agents.mdx @@ -0,0 +1,160 @@ +# O que é um Agente? + +Planejamento da Unidade 1 + +Ao final desta seção, você se sentirá confortável com o conceito de agentes e suas diversas aplicações em IA. + +Para explicar o que é um Agente, vamos começar com uma analogia. + +## Visão Geral: Alfred, o Agente + +Conheça Alfred. Alfred é um **Agente**. + +Este é Alfred + +Imagine que Alfred **receba um comando**, como: "Alfred, eu gostaria de um café, por favor." + +Eu gostaria de um café + +Como Alfred **entende linguagem natural**, ele compreende rapidamente o nosso pedido. + +Antes de atender ao pedido, Alfred se engaja em **raciocínio e planejamento** (*reasoning and planning*), descobrindo os passos e ferramentas que ele precisa para: + +1. Ir para a cozinha +2. Usar a máquina de café +3. Fazer o café +4. Trazer o café de volta + +Raciocinar e planejar + +Uma vez que ele tem um plano, ele **deve agir** (*act*). Para executar seu plano, **ele pode usar ferramentas (Tools) da lista de ferramentas que ele conhece**. + +Neste caso, para fazer um café, ele usa uma máquina de café. Ele ativa a máquina de café para passar o café. + +Fazer café + +Finalmente, Alfred nos traz o café recém-passado. + +Trazer o café + +E é isso que um Agente é: um **modelo de IA capaz de raciocinar, planejar e interagir com seu ambiente**. + +Nós o chamamos de Agente porque ele tem _agência_ (_agency_), ou seja, ele tem a habilidade de interagir com o ambiente. + +Processo do Agente + +## Vamos ser mais formais + +Agora que você tem a visão geral, aqui está uma definição mais precisa: + +> Um Agente é um sistema que aproveita um modelo de IA para interagir com seu ambiente a fim de atingir um objetivo definido pelo usuário. Ele combina raciocínio, planejamento e a execução de ações (frequentemente via ferramentas externas) para cumprir tarefas. + +Pense no Agente como tendo duas partes principais: + +1. **O Cérebro (Modelo de IA)** + +Esta é a parte onde todo o pensamento acontece. O modelo de IA **lida com o raciocínio e o planejamento**. +Ele decide **quais Ações tomar com base na situação**. + +2. **O Corpo (Capacidades e Ferramentas)** + +Esta parte representa **tudo o que o Agente está equipado para fazer**. + +O **escopo de ações possíveis** depende do que o agente **foi equipado**. Por exemplo, como os humanos não têm asas, eles não podem executar a **Ação** de "voar", mas podem executar **Ações** como "andar", "correr", "pular", "agarrar", e assim por diante. + +### O espectro de "Agência" + +Seguindo esta definição, os Agentes existem em um espectro contínuo de agência crescente: + +| Nível de Agência | Descrição | Como é chamado | Padrão de exemplo | +| --- | --- | --- | --- | +| ☆☆☆ | A saída do agente não tem impacto no fluxo do programa | Processador simples | `process_llm_output(llm_response)` | +| ★☆☆ | A saída do agente determina o fluxo de controle básico | Roteador (*Router*) | `if llm_decision(): path_a() else: path_b()` | +| ★★☆ | A saída do agente determina a execução da função | Chamador de ferramentas (*Tool caller*) | `run_function(llm_chosen_tool, llm_chosen_args)` | +| ★★★ | A saída do agente controla a iteração e a continuação do programa | Agente de múltiplos passos (*Multi-step agent*) | `while llm_should_continue(): execute_next_step()` | +| ★★★ | Um fluxo de trabalho (*workflow*) de agente pode iniciar outro fluxo de trabalho de agente | Multi-Agente (*Multi-agent*) | `if llm_trigger(): execute_agent()` | + +Tabela do [guia conceitual do smolagents](https://huggingface.co/docs/smolagents/conceptual_guides/intro_agents). + + +## Que tipo de Modelos de IA usamos para Agentes? + +O modelo de IA mais comum encontrado em Agentes é um LLM (Grandes Modelos de Linguagem), que recebe **Texto** como entrada e gera **Texto** também como saída. + +Exemplos bem conhecidos são **GPT-4** da **OpenAI**, **Llama** da **Meta**, **Gemini** do **Google**, etc. Esses modelos foram treinados em uma vasta quantidade de texto e são capazes de generalizar bem. Aprenderemos mais sobre LLMs na [próxima seção](what-are-llms). + +> [!TIP] +> Também é possível usar modelos que aceitam outras entradas como o modelo central do Agente. Por exemplo, um Vision Language Model (VLM) - Modelo de Linguagem Visual, que é como um LLM mas também entende imagens como entrada. Nós focaremos nos LLMs por enquanto e discutiremos outras opções mais tarde. + +## Como uma IA realiza ações em seu ambiente? + +Os LLMs são modelos incríveis, mas **eles só podem gerar texto**. + +No entanto, se você pedir para um aplicativo de chat conhecido, como HuggingChat ou ChatGPT, gerar uma imagem, eles conseguem! Como isso é possível? + +A resposta é que os desenvolvedores do HuggingChat, ChatGPT e aplicativos semelhantes implementaram funcionalidades adicionais (chamadas **Ferramentas - Tools**), que o LLM pode usar para criar imagens. + +
+Brócolis Eiffel +
O modelo usou uma Ferramenta de Geração de Imagens para gerar esta imagem. +
+
+ +Aprenderemos mais sobre ferramentas na seção [Ferramentas](tools). + +## Que tipo de tarefas um Agente pode fazer? + +Um Agente pode executar qualquer tarefa que implementamos através de **Ferramentas** para completar **Ações**. + +Por exemplo, se eu criar um Agente para agir como meu assistente pessoal (como a Siri) no meu computador, e eu peço a ele para "enviar um e-mail para o meu gerente pedindo para atrasar a reunião de hoje", eu posso dar a ele algum código para enviar e-mails. Esta será uma nova Ferramenta (*Tool*) que o Agente poderá usar sempre que precisar enviar um e-mail. Nós podemos escrevê-la em Python: + +```python +def send_message_to(recipient, message): + """Útil para enviar uma mensagem de e-mail para um destinatário""" + ... +``` + +O LLM, como veremos, irá gerar código para rodar a ferramenta quando precisar, e assim cumprir a tarefa desejada. + +```python +send_message_to("Gerente", "Podemos adiar a reunião de hoje?") +``` + +O **design das Ferramentas é muito importante e tem um grande impacto na qualidade do seu Agente**. Algumas tarefas exigirão Ferramentas muito específicas para serem construídas, enquanto outras podem ser resolvidas com ferramentas de propósito geral como uma "web_search" (busca na web). + +> Note que **Ações não são a mesma coisa que Ferramentas**. Uma Ação, por exemplo, pode envolver o uso de múltiplas Ferramentas para ser concluída. + +Permitir que um agente interaja com seu ambiente **permite o uso na vida real para empresas e indivíduos**. + +### Exemplo 1: Assistentes Virtuais Pessoais + +Assistentes virtuais como Siri, Alexa ou Google Assistant funcionam como agentes quando interagem em nome dos usuários usando seus ambientes digitais. + +Eles recebem as consultas dos usuários, analisam o contexto, recuperam informações de bancos de dados e fornecem respostas ou iniciam ações (como definir lembretes, enviar mensagens ou controlar dispositivos inteligentes). + +### Exemplo 2: Chatbots de Atendimento ao Cliente + +Muitas empresas implantam chatbots como agentes que interagem com os clientes em linguagem natural. + +Esses agentes podem responder a perguntas, guiar os usuários por etapas de solução de problemas, abrir chamados em bancos de dados internos ou até mesmo concluir transações. + +Seus objetivos predefinidos podem incluir focar na melhoria da satisfação do usuário, na redução dos tempos de espera ou no aumento das taxas de conversão de vendas. Ao interagir diretamente com os clientes, aprendendo com os diálogos e adaptando suas respostas ao longo do tempo, eles demonstram os princípios fundamentais de um agente em ação. + + +### Exemplo 3: Personagens Não Jogáveis (NPCs) com IA em um videogame + +Agentes de IA impulsionados por LLMs podem tornar os Personagens Não Jogáveis (NPCs) muito mais dinâmicos e imprevisíveis. + +Em vez de seguir árvores de comportamento rígidas, eles podem **responder contextualmente, se adaptar às interações do jogador** e gerar diálogos com muito mais nuances. Essa flexibilidade ajuda a criar personagens mais realistas e envolventes que evoluem junto com as ações do jogador. + +--- + +Para resumir, um Agente é um sistema que usa um Modelo de IA (tipicamente um LLM) como seu motor de raciocínio principal, para: + +- **Entender linguagem natural:** Interpretar e responder às instruções humanas de uma forma significativa. + +- **Raciocinar e planejar:** Analisar informações, tomar decisões e traçar estratégias para resolver problemas. + +- **Interagir com o seu ambiente:** Coletar informações, executar ações e observar os resultados dessas ações. + +Agora que você tem uma compreensão sólida do que são Agentes, vamos reforçar seu entendimento com um pequeno questionário (quiz) sem nota. Depois disso, vamos mergulhar no "cérebro do Agente": os [LLMs](what-are-llms). diff --git a/units/pt-BR/unit1/what-are-llms.mdx b/units/pt-BR/unit1/what-are-llms.mdx new file mode 100644 index 00000000..e221f939 --- /dev/null +++ b/units/pt-BR/unit1/what-are-llms.mdx @@ -0,0 +1,223 @@ +# O que são LLMs? + +Planejamento da Unidade 1 + +Na seção anterior, aprendemos que cada Agente precisa de **um Modelo de IA em seu núcleo**, e que os LLMs (Grandes Modelos de Linguagem) são o tipo mais comum de modelos de IA para esse propósito. + +Agora vamos aprender o que são LLMs e como eles impulsionam os Agentes. + +Esta seção oferece uma explicação técnica concisa do uso de LLMs. Se você quiser se aprofundar, pode conferir o nosso Curso gratuito de Processamento de Linguagem Natural (NLP). + +## O que é um Grande Modelo de Linguagem (LLM)? + +Um LLM é um tipo de modelo de IA que se destaca por **entender e gerar linguagem humana**. Eles são treinados em vastas quantidades de dados de texto, o que lhes permite aprender padrões, estruturas e até nuances da linguagem. Esses modelos normalmente consistem em muitos milhões (ou bilhões) de parâmetros. + +A maioria dos LLMs hoje em dia é **construída na arquitetura Transformer** — uma arquitetura de aprendizado profundo baseada no algoritmo de "Atenção" (*Attention*), que ganhou grande interesse desde o lançamento do BERT pelo Google em 2018. + +
+Sintaxe do Transformer +
A arquitetura original do Transformer era assim, com um codificador (*encoder*) à esquerda e um decodificador (*decoder*) à direita. +
+
+ +Existem 3 tipos de transformadores (*transformers*): + +1. **Codificadores (Encoders)** + Um Transformer baseado em codificador recebe texto (ou outros dados) como entrada e emite uma representação densa (ou *embedding*) desse texto. + + - **Exemplo**: BERT do Google + - **Casos de Uso**: Classificação de texto, busca semântica, Reconhecimento de Entidade Nomeada (NER) + - **Tamanho Típico**: Milhões de parâmetros + +2. **Decodificadores (Decoders)** + Um Transformer baseado em decodificador concentra-se **em gerar novos tokens para completar uma sequência, um token por vez**. + + - **Exemplo**: Llama da Meta + - **Casos de Uso**: Geração de texto, chatbots, geração de código + - **Tamanho Típico**: Bilhões de parâmetros (10^9) + +3. **Seq2Seq (Codificador-Decodificador)** + Um Transformer sequência-para-sequência (*sequence-to-sequence*) *combina* um codificador e um decodificador. O codificador processa primeiro a sequência de entrada em uma representação de contexto e, em seguida, o decodificador gera uma sequência de saída. + + - **Exemplo**: T5, BART + - **Casos de Uso**: Tradução, Resumo, Parafraseamento + - **Tamanho Típico**: Milhões de parâmetros + +Embora os Grandes Modelos de Linguagem assumam várias formas, os LLMs são normalmente modelos baseados em decodificadores com bilhões de parâmetros. Aqui estão alguns dos LLMs mais conhecidos do mercado atual: + +| **Modelo** | **Provedor** | +|-----------------------------------|-------------------------------------------| +| **Deepseek-R1** | DeepSeek | +| **GPT4** | OpenAI | +| **Llama 3** | Meta (Facebook AI Research) | +| **SmolLM2** | Hugging Face | +| **Gemma** | Google | +| **Mistral** | Mistral | + +O princípio fundamental de um LLM é simples, porém altamente eficaz: **seu objetivo matemático é apenas prever o próximo *token*, dada uma sequência de *tokens* anteriores**. Um "*token*" é a unidade de informação exata com a qual um LLM isolado trabalha. Você pode pensar em um "*token*" como se fosse essencialmente uma "palavra", mas, por razões de eficiência, os LLMs não avaliam palavras inteiras. + +Por exemplo, enquanto a língua inglesa tem cerca de 600.000 palavras estimadas, um LLM pode ter um vocabulário de cerca de 32.000 tokens (como é o caso do Llama 2). A tokenização geralmente funciona partindo os textos originais em unidades fracionadas de subpalavras que podem ser combinadas. + +Por exemplo, considere como os tokens "interess" e "ante" podem ser combinados para formar a palavra "interessante", ou o sufixo "ado" pode ser adicionado para formar "interessado" em português. + +Você pode experimentar visualmente com diferentes tokenizadores no *playground* interativo abaixo: + + + +Cada LLM tem alguns **tokens especiais** sintáticos que são extremamente particulares. O LLM usa esses tokens orgânicos para abrir e fechar mecanicamente as fronteiras estruturais de sua geração. Por exemplo, podem ser usados para indicar onde será o início ou o fim preciso em uma sequência lógica, num escopo de mensagem de *prompt* exato ou até no fluxo de resposta. O mais importante entre todos nessa orquestração sequenciada da linguagem abstrata é sem dúvidas o **Token de Fim da Sequência** (*End of sequence* ou o token **EOS**). + +As formas dos tokens especiais são altamente diversificadas e variam drasticamente de acordo com os provedores e os tipos de modelos. + +A tabela abaixo ilustra a diversidade de tokens especiais. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ModeloProvedorToken EOSFuncionalidade
GPT4OpenAI<|endoftext|>Fim do texto da mensagem
Llama 3Meta (Facebook AI Research)<|eot_id|>Fim da sequência
Deepseek-R1DeepSeek<|end_of_sentence|>Fim do texto da mensagem
SmolLM2Hugging Face<|im_end|>Fim da instrução ou da mensagem
GemmaGoogle<end_of_turn>Fim do turno da conversa
+ +> [!TIP] +> Nós não esperamos que você memorize esses tokens especiais, mas é importante apreciar sua diversidade e o papel que desempenham na geração de texto dos LLMs. Se você quiser saber mais sobre os tokens especiais, pode verificar a configuração do modelo em seu repositório no Hub. Por exemplo, você pode encontrar os tokens especiais do modelo SmolLM2 no arquivo tokenizer_config.json. + +## Entendendo a previsão do próximo token + +Diz-se que os LLMs são **autorregressivos**, o que significa que **a saída de uma etapa se torna a entrada para a próxima**. Esse ciclo contínuo segue até que o modelo preveja que o próximo token será o token EOS, momento em que o modelo pode parar. + +Gif Visual da decodificação autorregressiva + +Em outras palavras, um LLM irá decodificar o texto até atingir o EOS. Mas o que acontece durante um único ciclo de decodificação? + +Embora o processo completo possa ser bastante técnico para o propósito de se aprender sobre agentes, aqui está uma breve visão geral: + +- Uma vez que o texto de entrada é **tokenizado**, o modelo calcula uma representação da sequência que captura informações sobre o significado e a posição de cada token na sequência de entrada. +- Esta representação vai para o modelo, que gera pontuações (*scores*) classificando a probabilidade de cada token em seu vocabulário ser o próximo na sequência. + +Gif Visual da decodificação + +Com base nessas pontuações, temos múltiplas estratégias para selecionar os tokens e completar a frase. + +- A estratégia de decodificação mais fácil seria sempre pegar o token com a pontuação máxima. + +Você pode interagir com o processo de decodificação usando o SmolLM2 neste Space (lembre-se, ele decodifica até atingir um token **EOS**, que é o **<|im_end|>** para este modelo): + + + +- Mas existem estratégias de decodificação mais avançadas. Por exemplo, a *beam search* explora múltiplas sequências candidatas para encontrar aquela com a pontuação total máxima — mesmo se alguns tokens individuais tiverem pontuações menores. + + + +Se quiser saber mais sobre decodificação, você pode dar uma olhada no [Curso de NLP](https://huggingface.co/learn/nlp-course). + +## Atenção é tudo o que você precisa (*Attention is all you need*) + +Um aspecto fundamental da arquitetura Transformer é a **Atenção (*Attention*)**. Ao prever a próxima palavra, nem toda palavra em uma frase é igualmente importante; palavras como "França" e "capital" na frase *"A capital da França é..."* carregam a maior parte do significado. + +Gif Visual da Atenção + +Esse processo de identificar quais são as palavras mais relevantes na hora prever o próximo token provou-se incrivelmente eficaz. + +Embora o princípio básico dos LLMs — prever o próximo token — tenha se mantido consistente desde o GPT-2, houve avanços significativos no dimensionamento das redes neurais e em fazer o mecanismo de atenção funcionar para sequências cada vez mais longas. + +Se você já interagiu com LLMs, provavelmente está familiarizado com o termo *context length* (comprimento do contexto), que se refere ao número máximo de tokens que o LLM pode processar, e ao tempo máximo de *atenção* (*attention span*) que ele tem. + +## O *prompt* do LLM é importante + +Considerando que o único trabalho de um LLM é prever o próximo token observando cada token de entrada e escolher quais tokens são "importantes", as palavras usadas na sua sequência de entrada são muito importantes. + +A sequência de entrada que você fornece a um LLM é chamada de _prompt_. Criar este *prompt* cuidadosamente torna muito mais fácil **guiar a geração do LLM em direção à saída desejada**. + +## Como os LLMs são treinados? + +Os LLMs são treinados em grandes conjuntos de dados de texto (*datasets*), nos quais eles aprendem a prever a próxima palavra em uma sequência por meio de um objetivo de modelagem de linguagem autossupervisionada ou mascarada. + +A partir desse aprendizado não supervisionado, o modelo aprende a estrutura do idioma e **os padrões subjacentes no texto, permitindo que o modelo generalize para dados nunca antes vistos**. + +Após este _pré-treinamento_ (*pre-training*) inicial, os LLMs podem passar por um _ajuste fino_ (*fine-tuning*) através de um aprendizado supervisionado para executar tarefas específicas. Por exemplo, alguns modelos são treinados para estruturas conversacionais ou uso de ferramentas (*tool usage*), enquanto outros se concentram em classificação ou geração de código. + +## Como posso usar os LLMs? + +Você tem duas opções principais: + +1. **Rodar Localmente** (se você tiver hardware suficiente). + +2. **Usar na Nuvem/API** (por exemplo, via Hugging Face Serverless Inference API). + +Ao longo deste curso, usaremos principalmente modelos por meio de APIs no Hugging Face Hub. Mais tarde, exploraremos como rodar esses modelos localmente no seu próprio hardware. + + +## Como os LLMs são usados em Agentes de IA? + +Os LLMs são uma parte fundamental dos Agentes de IA, **fornecendo a base para o entendimento e para a geração de linguagem humana**. + +Eles podem interpretar as instruções do usuário, manter o contexto em conversas, definir um plano e decidir quais ferramentas (*tools*) usar. + +Iremos explorar estas etapas com mais detalhes nesta Unidade, mas, por enquanto, o que você precisa entender é que o LLM é **o cérebro do Agente**. + +--- + +Isso foi muita informação! Cobrimos o básico sobre o que são LLMs, como eles funcionam e o papel deles em impulsionar os agentes de IA. + +Se você quiser se aprofundar ainda mais no fascinante mundo dos modelos de linguagem e no processamento de linguagem natural, não hesite em conferir o nosso curso gratuito de NLP. + +Agora que entendemos como os LLMs funcionam, é hora de ver **como os LLMs estruturam suas gerações em um contexto conversacional**. + +