|
1 |
| -Conceitos Básicos |
2 |
| -============== |
3 |
| - |
4 |
| -Esta seção apresenta os conceitos fundamentais e componentes principais do ADK que você precisa entender para começar a desenvolver agentes. |
5 |
| - |
6 |
| -Agentes |
7 |
| ------- |
8 |
| - |
9 |
| -Um agente é a entidade principal no ADK. No núcleo, um agente funciona como intermediário entre um modelo de linguagem grande (LLM) e ferramentas que ele pode usar para executar ações no mundo real. |
10 |
| - |
11 |
| -.. code-block:: python |
12 |
| -
|
13 |
| - from google.adk.agents import Agent |
14 |
| - from google.adk.tools import calculator |
15 |
| - |
16 |
| - # Criar um agente básico |
17 |
| - agent = Agent( |
18 |
| - name="MeuAgente", |
19 |
| - tools=[calculator] |
20 |
| - ) |
21 |
| - |
22 |
| - # Executar o agente |
23 |
| - result = agent.process("Quanto é 42 * 73?") |
24 |
| - print(result) |
25 |
| -
|
26 |
| -Modelos |
27 |
| ------- |
28 |
| - |
29 |
| -Os modelos são a "mente" por trás dos agentes. O ADK suporta vários modelos: |
30 |
| - |
31 |
| -* **Modelos Google**: Integração fácil com modelos como PaLM, Gemini via API `google-genai` |
32 |
| -* **Modelos de outros provedores**: Suporte para modelos de terceiros como Anthropic Claude |
33 |
| -* **Modelos locais**: Possibilidade de usar modelos executados localmente |
34 |
| - |
35 |
| -.. code-block:: python |
36 |
| -
|
37 |
| - from google.adk.models import GeminiModel |
38 |
| - |
39 |
| - # Configurar um modelo Gemini |
40 |
| - model = GeminiModel( |
41 |
| - model_name="gemini-1.0-pro", |
42 |
| - api_key="SUA_API_KEY" |
43 |
| - ) |
44 |
| - |
45 |
| - agent = Agent( |
46 |
| - name="MeuAgente", |
47 |
| - model=model, |
48 |
| - tools=[...] |
49 |
| - ) |
50 |
| -
|
51 |
| -Ferramentas |
52 |
| ---------- |
53 |
| - |
54 |
| -As ferramentas são componentes que permitem que o agente execute ações específicas. O ADK inclui várias ferramentas pré-construídas e permite criar suas próprias. |
55 |
| - |
56 |
| -Exemplos de ferramentas incluídas: |
57 |
| - |
58 |
| -* **google_search**: Pesquisa na web usando o Google |
59 |
| -* **calculator**: Executa cálculos matemáticos |
60 |
| -* **image_generation**: Gera imagens baseadas em texto |
61 |
| - |
62 |
| -Criando uma ferramenta personalizada: |
63 |
| - |
64 |
| -.. code-block:: python |
65 |
| -
|
66 |
| - from google.adk.tools import Tool, ToolParameter |
67 |
| - |
68 |
| - @Tool( |
69 |
| - name="cumprimento", |
70 |
| - description="Gera uma saudação personalizada", |
71 |
| - parameters=[ |
72 |
| - ToolParameter(name="nome", type="string", description="Nome da pessoa") |
73 |
| - ] |
74 |
| - ) |
75 |
| - def cumprimento(nome: str) -> str: |
76 |
| - return f"Olá, {nome}! Como vai você hoje?" |
77 |
| - |
78 |
| - # Usar a ferramenta em um agente |
79 |
| - agent = Agent( |
80 |
| - name="AgenteCumprimentador", |
81 |
| - tools=[cumprimento] |
82 |
| - ) |
83 |
| -
|
84 |
| -Fluxos |
85 |
| ------ |
86 |
| - |
87 |
| -Os fluxos permitem orquestrar agentes e ferramentas em sequências mais complexas, criando pipelines para tarefas mais sofisticadas. |
88 |
| - |
89 |
| -.. code-block:: python |
90 |
| -
|
91 |
| - from google.adk.flows import Flow |
92 |
| - from google.adk.agents import Agent |
93 |
| - |
94 |
| - # Criar agentes especializados |
95 |
| - agente_pesquisa = Agent(name="Pesquisador", tools=[google_search]) |
96 |
| - agente_resumo = Agent(name="Resumidor", tools=[]) |
97 |
| - |
98 |
| - # Criar um fluxo |
99 |
| - fluxo = Flow( |
100 |
| - name="PesquisaEResumo", |
101 |
| - description="Pesquisa informações e gera um resumo" |
102 |
| - ) |
103 |
| - |
104 |
| - # Definir a sequência do fluxo |
105 |
| - fluxo.add_step(agente_pesquisa, input_key="query", output_key="resultados") |
106 |
| - fluxo.add_step(agente_resumo, input_key="resultados", output_key="resumo") |
107 |
| - |
108 |
| - # Executar o fluxo |
109 |
| - resultado = fluxo.run(query="História do Brasil") |
110 |
| - print(resultado["resumo"]) |
111 |
| -
|
112 |
| -Memória |
113 |
| ------- |
114 |
| - |
115 |
| -A memória permite que os agentes mantenham contexto entre interações, tornando-os mais eficazes em conversas prolongadas. |
116 |
| - |
117 |
| -.. code-block:: python |
118 |
| -
|
119 |
| - from google.adk.memory import ConversationMemory |
120 |
| - |
121 |
| - # Criar um agente com memória |
122 |
| - agente_com_memoria = Agent( |
123 |
| - name="AgenteMemoria", |
124 |
| - memory=ConversationMemory(), |
125 |
| - tools=[...] |
126 |
| - ) |
127 |
| - |
128 |
| - # O agente lembrará das interações anteriores |
129 |
| - agente_com_memoria.process("Meu nome é Carlos") |
130 |
| - resposta = agente_com_memoria.process("Como você me chamou mesmo?") |
131 |
| - print(resposta) # O agente deve lembrar que o nome é Carlos |
132 |
| -
|
| 1 | +Conceitos Básicos |
| 2 | +============== |
| 3 | + |
| 4 | +Esta seção apresenta os conceitos fundamentais e componentes principais do ADK que você precisa entender para começar a desenvolver agentes. |
| 5 | + |
| 6 | +Agentes |
| 7 | +------ |
| 8 | + |
| 9 | +Um agente é a entidade principal no ADK. No núcleo, um agente funciona como intermediário entre um modelo de linguagem grande (LLM) e ferramentas que ele pode usar para executar ações no mundo real. |
| 10 | + |
| 11 | +.. code-block:: python |
| 12 | +
|
| 13 | + from google.adk.agents import Agent |
| 14 | + from google.adk.tools import calculator |
| 15 | + |
| 16 | + # Criar um agente básico |
| 17 | + agent = Agent( |
| 18 | + name="MeuAgente", |
| 19 | + tools=[calculator] |
| 20 | + ) |
| 21 | + |
| 22 | + # Executar o agente |
| 23 | + result = agent.process("Quanto é 42 * 73?") |
| 24 | + print(result) |
| 25 | +
|
| 26 | +Modelos |
| 27 | +------ |
| 28 | + |
| 29 | +* **Modelos Google**: Integração nativa com Gemini via Vertex AI ou Google AI Studio |
| 30 | +* **Outros provedores**: Suporte para diversos modelos através do LiteLLM (Anthropic, Meta, Mistral AI, AI21 Labs, etc.) |
| 31 | +* **Vertex AI Model Garden**: Acesso a modelos disponíveis no Model Garden |
| 32 | + |
| 33 | +.. code-block:: python |
| 34 | +
|
| 35 | + from google.adk.models import GeminiModel |
| 36 | + |
| 37 | + # Configurar um modelo Gemini |
| 38 | + model = GeminiModel( |
| 39 | + model_name="gemini-2.0-flash-exp", |
| 40 | + api_key="SUA_API_KEY" |
| 41 | + ) |
| 42 | + |
| 43 | + agent = Agent( |
| 44 | + name="MeuAgente", |
| 45 | + model=model, |
| 46 | + tools=[...] |
| 47 | + ) |
| 48 | +
|
| 49 | +Ferramentas |
| 50 | +--------- |
| 51 | + |
| 52 | +As ferramentas são componentes que permitem que o agente execute ações específicas. O ADK inclui várias ferramentas pré-construídas e permite criar suas próprias. |
| 53 | + |
| 54 | +Exemplos de ferramentas incluídas: |
| 55 | + |
| 56 | +* **google_search**: Pesquisa na web usando o Google |
| 57 | +* **calculator**: Executa cálculos matemáticos |
| 58 | +* **image_generation**: Gera imagens baseadas em texto |
| 59 | + |
| 60 | +Criando uma ferramenta personalizada: |
| 61 | + |
| 62 | +.. code-block:: python |
| 63 | +
|
| 64 | + from google.adk.tools import Tool, ToolParameter |
| 65 | + |
| 66 | + @Tool( |
| 67 | + name="cumprimento", |
| 68 | + description="Gera uma saudação personalizada", |
| 69 | + parameters=[ |
| 70 | + ToolParameter(name="nome", type="string", description="Nome da pessoa") |
| 71 | + ] |
| 72 | + ) |
| 73 | + def cumprimento(nome: str) -> str: |
| 74 | + return f"Olá, {nome}! Como vai você hoje?" |
| 75 | + |
| 76 | + # Usar a ferramenta em um agente |
| 77 | + agent = Agent( |
| 78 | + name="AgenteCumprimentador", |
| 79 | + tools=[cumprimento] |
| 80 | + ) |
| 81 | +
|
| 82 | +* Ferramentas pré-construídas (Search, Code Exec) |
| 83 | +* Ferramentas MCP (Model Context Protocol) |
| 84 | +* Integrações com bibliotecas de terceiros (LangChain, LlamaIndex) |
| 85 | +* Outros agentes como ferramentas (LangGraph, CrewAI) |
| 86 | + |
| 87 | +Fluxos |
| 88 | +----- |
| 89 | + |
| 90 | +Os fluxos permitem orquestrar agentes e ferramentas em sequências mais complexas, criando pipelines para tarefas mais sofisticadas. |
| 91 | + |
| 92 | +.. code-block:: python |
| 93 | +
|
| 94 | + from google.adk.flows import Flow |
| 95 | + from google.adk.agents import Agent |
| 96 | + |
| 97 | + # Criar agentes especializados |
| 98 | + agente_pesquisa = Agent(name="Pesquisador", tools=[google_search]) |
| 99 | + agente_resumo = Agent(name="Resumidor", tools=[]) |
| 100 | + |
| 101 | + # Criar um fluxo |
| 102 | + fluxo = Flow( |
| 103 | + name="PesquisaEResumo", |
| 104 | + description="Pesquisa informações e gera um resumo" |
| 105 | + ) |
| 106 | + |
| 107 | + # Definir a sequência do fluxo |
| 108 | + fluxo.add_step(agente_pesquisa, input_key="query", output_key="resultados") |
| 109 | + fluxo.add_step(agente_resumo, input_key="resultados", output_key="resumo") |
| 110 | + |
| 111 | + # Executar o fluxo |
| 112 | + resultado = fluxo.run(query="História do Brasil") |
| 113 | + print(resultado["resumo"]) |
| 114 | +
|
| 115 | +Memória |
| 116 | +------ |
| 117 | + |
| 118 | +A memória permite que os agentes mantenham contexto entre interações, tornando-os mais eficazes em conversas prolongadas. |
| 119 | + |
| 120 | +.. code-block:: python |
| 121 | +
|
| 122 | + from google.adk.memory import ConversationMemory |
| 123 | + |
| 124 | + # Criar um agente com memória |
| 125 | + agente_com_memoria = Agent( |
| 126 | + name="AgenteMemoria", |
| 127 | + memory=ConversationMemory(), |
| 128 | + tools=[...] |
| 129 | + ) |
| 130 | + |
| 131 | + # O agente lembrará das interações anteriores |
| 132 | + agente_com_memoria.process("Meu nome é Carlos") |
| 133 | + resposta = agente_com_memoria.process("Como você me chamou mesmo?") |
| 134 | + print(resposta) # O agente deve lembrar que o nome é Carlos |
| 135 | +
|
| 136 | +* **LLM Agents**: Agentes baseados em modelos de linguagem para raciocínio e conversação |
| 137 | +* **Workflow Agents**: Para controle determinístico: |
| 138 | + * Sequential: Para execução em sequência |
| 139 | + * Parallel: Para execução paralela |
| 140 | + * Loop: Para execução em loop |
| 141 | + |
133 | 142 | Esses são os conceitos fundamentais do ADK. À medida que você avança, poderá combinar esses elementos de formas mais complexas para criar agentes sofisticados adaptados às suas necessidades específicas.
|
0 commit comments