UNPKG

@oliverlessa/gemini-agent-lib

Version:

Uma biblioteca NodeJS para criar agentes de IA com Gemini LLM

106 lines (94 loc) 7.34 kB
Para ilustrar a estrutura final de `tools` ao usar o Vertex AI com Function Calling e Google Search Retrieval simultaneamente, vou fornecer um exemplo concreto em JavaScript, seguindo o formato esperado pelo Vertex AI SDK (com base no nosso planejamento e compreensão da documentação do Gemini). **Exemplo da Estrutura Final de `tools` para Vertex AI (Function Calling e Google Search Retrieval Combinados):** ```javascript const toolsForVertexAIExample = [ { functionDeclarations: [ // 1. Declarações de Funções (Function Calling) - Array de objetos { name: "get_current_weather", description: "Obtém a temperatura atual e as condições climáticas para uma determinada localização.", parameters: { type: "OBJECT", // Importante: Usar "OBJECT" em uppercase para Vertex AI (pode ser sensível a case) properties: { location: { type: "STRING", // Importante: Usar "STRING" em uppercase para Vertex AI description: "A cidade e estado, por exemplo: 'São Paulo, SP'" }, unit: { type: "STRING", // Importante: Usar "STRING" em uppercase para Vertex AI enum: ["celsius", "fahrenheit"], description: "A unidade de temperatura a ser utilizada. Padrão é celsius." } }, required: ["location"] } }, { name: "search_restaurants", description: "Pesquisa restaurantes em uma determinada localização com base em critérios.", parameters: { type: "OBJECT", // Importante: Usar "OBJECT" em uppercase para Vertex AI properties: { location: { type: "STRING", // Importante: Usar "STRING" em uppercase para Vertex AI description: "Nome da cidade ou região para pesquisar restaurantes." }, cuisine: { type: "STRING", // Importante: Usar "STRING" em uppercase para Vertex AI description: "Tipo de culinária desejada (opcional)." }, price_range: { type: "STRING", // Importante: Usar "STRING" em uppercase para Vertex AI enum: ["barato", "médio", "caro"], description: "Faixa de preço desejada (opcional)." } }, required: ["location"] } } // ... Você pode adicionar mais functionDeclarations aqui ... ], googleSearchRetrieval: { // 2. Configuração do Google Search Retrieval - Objeto disableAttribution: false // ou true, para desabilitar ou habilitar a atribuição de fontes } } ]; ``` **Explicação Detalhada da Estrutura:** 1. **Array Externo `toolsForVertexAIExample`:** * A configuração `tools` é um array. Mesmo quando combinamos Function Calling e Google Search Retrieval, **ainda é um array**. * Na maioria dos casos (e no nosso cenário combinado), este array conterá **apenas um elemento**, que é um objeto contendo as configurações combinadas. 2. **Objeto de Configuração Combinada (Primeiro Elemento do Array):** * O primeiro (e geralmente único) elemento do array `toolsForVertexAIExample` é um objeto JavaScript. * Este objeto tem **duas propriedades principais, que são irmãs (no mesmo nível):** * **`functionDeclarations`:** * **Valor:** Um array de objetos. * **Conteúdo:** Cada objeto dentro deste array é uma **declaração de função** (function declaration), que define uma de suas tools/funções personalizadas. * **Exemplos no Código:** `get_current_weather` e `search_restaurants` são exemplos de function declarations. * **Estrutura Interna da Function Declaration:** Cada function declaration (como `get_current_weather`) tem as propriedades: * `name`: Nome da função (string). * `description`: Descrição da função (string). * `parameters`: Um objeto que define os parâmetros da função, seguindo o formato JSON Schema (com `type`, `properties`, `required`, `enum`, etc.). **Importante notar o uso de `type: "OBJECT"` e `type: "STRING"` em uppercase, que pode ser relevante para o Vertex AI.** * **`googleSearchRetrieval`:** * **Valor:** Um objeto. * **Conteúdo:** Este objeto configura o Google Search Retrieval. * **Exemplo no Código:** ```javascript googleSearchRetrieval: { disableAttribution: false } ``` * `disableAttribution: false`: Um exemplo de opção de configuração para Google Search Retrieval. `false` significa que a API Gemini **irá incluir atribuição** (links para as fontes da pesquisa Google) na resposta quando usar o Google Search. Se você definir como `true`, a atribuição será desabilitada. **Como Usar Esta Estrutura em seu Código (Classe `Agent` e `VertexAILLM`):** 1. **Definir `tools` no `Agent`:** Ao instanciar a classe `Agent`, você passaria o array `toolsForVertexAIExample` (ou um array similar com suas próprias tools e configuração de Google Search Retrieval) para a propriedade `tools` do agente. ```javascript const meuAgente = new Agent({ // ... outras propriedades do agente ... tools: toolsForVertexAIExample, // Passando a configuração combinada de tools enableGoogleSearch: false // Note que enableGoogleSearch AQUI DEVE SER false, pois a config de pesquisa já está em 'tools' }); ``` **Importante:** Quando você fornece a configuração `googleSearchRetrieval` **dentro do array `tools`**, você **não precisa (e não deve)** habilitar `googleSearchRetrieval` também usando a propriedade `enableGoogleSearch` do `Agent`. A propriedade `enableGoogleSearch` que adicionamos ao `Agent` seria mais útil como um *atalho* para habilitar apenas o Google Search Retrieval *sem* function calling (o que pode ser um caso de uso mais simples em algumas situações). Se você está definindo uma configuração `tools` completa que já inclui `googleSearchRetrieval`, deixe `enableGoogleSearch` como `false` ou não defina (já que o padrão é `false`). 2. **`prepareToolsForLLM()`:** A função `prepareToolsForLLM()` na classe `Agent` deve ser capaz de processar essa estrutura `toolsForVertexAIExample` corretamente e passá-la para a chamada à API Gemini via Vertex AI. A versão corrigida de `prepareToolsForLLM()` que implementamos anteriormente já deve ser capaz de lidar com essa estrutura combinada. **Em Resumo:** Esta estrutura de `tools` demonstra como você pode **combinar o poder do Function Calling com a capacidade de Google Search Retrieval** em suas aplicações de agentes Gemini no Vertex AI. Ao fornecer um array `tools` com essa estrutura para o seu agente, você estará habilitando o modelo Gemini a escolher usar suas funções personalizadas, realizar pesquisas na web, ou até mesmo combinar ambas as abordagens para responder da melhor forma possível às solicitações dos usuários. Lembre-se sempre de verificar a documentação mais recente da API Vertex AI para garantir que a estrutura e as opções de configuração estejam atualizadas.