<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Comparison on kenji.blog</title><link>http://kenji.blog/pt/tags/comparison/</link><description>Recent content in Comparison on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>pt</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 12:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/pt/tags/comparison/index.xml" rel="self" type="application/rss+xml"/><item><title>ChatGPT・Gemini・Claude API: Comparação Completa e Qual Escolher?</title><link>http://kenji.blog/pt/p/chatgpt-gemini-claude-api-comparison/</link><pubDate>Fri, 11 Sep 2026 12:00:00 +0900</pubDate><guid>http://kenji.blog/pt/p/chatgpt-gemini-claude-api-comparison/</guid><description>&lt;img src="http://kenji.blog/p/chatgpt-gemini-claude-api-comparison/img/eyecatch.jpg" alt="Featured image of post ChatGPT・Gemini・Claude API: Comparação Completa e Qual Escolher?" />&lt;h1 id="chatgptgeminiclaude-api-comparação-completa-e-qual-escolher">ChatGPT・Gemini・Claude API: Comparação Completa e Qual Escolher?
&lt;/h1>&lt;p>A evolução da tecnologia de IA é notável, especialmente no campo dos Grandes Modelos de Linguagem (LLM: Large Language Model), onde o ChatGPT (série GPT) da OpenAI, o Gemini do Google e o Claude da Anthropic estão travando uma intensa batalha tripartida pela supremacia. A partir de 2026, cada empresa tem lançado novos modelos e funcionalidades de API em questão de meses, ou até mesmo semanas, e para desenvolvedores e arquitetos de TI corporativos, a questão de &amp;ldquo;qual API integrar ao produto&amp;rdquo; tornou-se uma decisão crítica que dita o sucesso de um projeto.&lt;/p>
&lt;p>Neste artigo, não apenas listaremos as especificações, mas compararemos e explicaremos detalhadamente as APIs desses três grandes provedores de IA sob a perspectiva do desenvolvedor, cobrindo o design da arquitetura, estrutura detalhada de preços, análise matemática da latência (atraso), exemplos práticos de implementação em Python e Node.js, e até os mais recentes métodos de otimização de custos, como o cache de prompt.&lt;/p>
&lt;p>Nosso objetivo é que este seja um guia completo para ajudar os leitores a selecionar a API de LLM ideal para seus casos de uso e construir aplicativos de IA escaláveis e econômicos.&lt;/p>
&lt;hr>
&lt;h2 id="1-filosofia-e-conceito-de-design-de-cada-api-de-llm">1. Filosofia e Conceito de Design de Cada API de LLM
&lt;/h2>&lt;p>Na escolha de tecnologia, é muito importante primeiro entender qual é a filosofia que cada empresa utiliza para construir seus modelos e APIs.&lt;/p>
&lt;h3 id="11-openai-chatgpt">1.1 OpenAI (ChatGPT)
&lt;/h3>&lt;p>A OpenAI tem como missão a &amp;ldquo;realização da Inteligência Artificial Geral (AGI)&amp;rdquo; e está sempre liderando o padrão de fato da indústria. Ela oferece uma ampla variedade de modelos adaptados aos casos de uso, como GPT-4o e GPT-4o-mini, além do modelo o1 especializado em raciocínio. Seu ecossistema é o mais maduro, com a documentação e bibliotecas mais ricas, sejam elas oficiais ou não oficiais.&lt;/p>
&lt;h3 id="12-google-gemini">1.2 Google (Gemini)
&lt;/h3>&lt;p>O Google defende a abordagem &amp;ldquo;AI First&amp;rdquo; e utiliza a escalabilidade de sua infraestrutura (rede TPU) ao máximo como sua principal arma. A maior característica do Gemini 1.5 Pro/Flash é sua enorme janela de contexto de até 2 milhões de tokens, permitindo que processe documentos extensos e horas de vídeo e áudio de uma só vez. Sua forte integração com o Google Cloud (Vertex AI) também é muito atraente para empresas.&lt;/p>
&lt;h3 id="13-anthropic-claude">1.3 Anthropic (Claude)
&lt;/h3>&lt;p>A Anthropic é uma empresa fundada por ex-membros da OpenAI e adota uma abordagem de segurança exclusiva chamada &amp;ldquo;Constitutional AI&amp;rdquo; (IA Constitucional). O Claude 3.5 Sonnet e o Opus conquistaram o apoio entusiástico de muitos desenvolvedores por suas altas capacidades de raciocínio, habilidades de geração de código e, acima de tudo, seus &amp;ldquo;diálogos naturais semelhantes aos humanos&amp;rdquo; e &amp;ldquo;baixa taxa de alucinação&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h2 id="2-comparação-detalhada-de-especificações-das-famílias-de-modelos">2. Comparação Detalhada de Especificações das Famílias de Modelos
&lt;/h2>&lt;p>Aqui está uma comparação das especificações dos principais modelos até 2026.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Provedor&lt;/th>
&lt;th>Modelo Principal&lt;/th>
&lt;th>Contexto Máximo&lt;/th>
&lt;th>Principais Pontos Fortes&lt;/th>
&lt;th>Casos de Uso Recomendados&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>OpenAI&lt;/strong>&lt;/td>
&lt;td>GPT-4o&lt;/td>
&lt;td>128K&lt;/td>
&lt;td>Velocidade, reconhecimento visual, suporte a áudio&lt;/td>
&lt;td>Aplicativos interativos, tarefas gerais&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>OpenAI&lt;/strong>&lt;/td>
&lt;td>o1-preview&lt;/td>
&lt;td>128K&lt;/td>
&lt;td>Raciocínio lógico avançado, matemática, codificação&lt;/td>
&lt;td>Geração de algoritmos complexos, pesquisa&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Google&lt;/strong>&lt;/td>
&lt;td>Gemini 1.5 Pro&lt;/td>
&lt;td>2.000K&lt;/td>
&lt;td>Processamento de textos ultralongos, multimodal (vídeo, áudio)&lt;/td>
&lt;td>Análise de grandes bases de código, resumo de vídeos&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Google&lt;/strong>&lt;/td>
&lt;td>Gemini 1.5 Flash&lt;/td>
&lt;td>2.000K&lt;/td>
&lt;td>Baixa latência, alta taxa de transferência, custo extremamente baixo&lt;/td>
&lt;td>Processamento em tempo real, processamento em lote de dados em massa&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Anthropic&lt;/strong>&lt;/td>
&lt;td>Claude 3.5 Sonnet&lt;/td>
&lt;td>200K&lt;/td>
&lt;td>Habilidades de codificação, geração de texto natural&lt;/td>
&lt;td>Suporte ao desenvolvimento de software, suporte avançado ao cliente&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Anthropic&lt;/strong>&lt;/td>
&lt;td>Claude 3.5 Haiku&lt;/td>
&lt;td>200K&lt;/td>
&lt;td>Resposta ultrarrápida, custo-benefício&lt;/td>
&lt;td>Edge AI, chatbots em tempo real&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="3-aprofundamento-na-arquitetura-os-bastidores-das-requisições-de-api">3. Aprofundamento na Arquitetura: Os Bastidores das Requisições de API
&lt;/h2>&lt;p>Quando uma API de LLM é chamada, que tipo de processamento ocorre no back-end? Para otimizar o desempenho, é necessário entender essa arquitetura.&lt;/p>
&lt;p>O diagrama Mermaid abaixo mostra a visão geral desde o momento em que a requisição da API é enviada pelo cliente até o momento em que os tokens são retornados em fluxo contínuo (streaming).&lt;/p>
&lt;div class="mermaid">graph TD
A["Aplicação Cliente"] -->|HTTP/REST ou gRPC| B["Gateway de API"]
B --> C["Balanceador de Carga"]
C --> D["Cluster de Inferência"]
D --> E["Tokenizador (BPE / SentencePiece)"]
E --> F["Cache KV &amp; Mecanismo de Atenção"]
F --> G["Blocos Transformer (Passagem Direta)"]
G --> H["Camada de Saída (Logits)"]
H --> I["Amostrador (Temperature, Top-p, Top-k)"]
I --> J["Destokenizador"]
J -->|Resposta em Streaming (Chunk)| A&lt;/div>
&lt;h3 id="31-algoritmo-de-tokenização-tokenization">3.1 Algoritmo de Tokenização (Tokenization)
&lt;/h3>&lt;p>O texto de entrada na API é dividido internamente em unidades chamadas &amp;ldquo;tokens&amp;rdquo;.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>OpenAI (tiktoken)&lt;/strong>: Adota o Byte-Pair Encoding (BPE). Ele é compactado com extrema eficiência, especialmente em inglês, mas o número de tokens tende a aumentar em idiomas não alfabéticos, como o japonês.&lt;/li>
&lt;li>&lt;strong>Google (Gemini)&lt;/strong>: Adota o SentencePiece (Unigram Language Model). Ele lida bem com múltiplos idiomas e tende a conseguir representar textos em japonês com um número relativamente pequeno de tokens.&lt;/li>
&lt;li>&lt;strong>Anthropic (Claude)&lt;/strong>: Usa uma versão customizada do BPE. O suporte multilíngue foi fortalecido e, a partir do Claude 3, a eficiência dos tokens em japonês também melhorou significativamente.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="4-análise-matemática-de-latência-e-desempenho">4. Análise Matemática de Latência e Desempenho
&lt;/h2>&lt;p>Em aplicações de tempo real, a latência está diretamente ligada à experiência do usuário (UX). A latência da API do LLM, $T_{total}$, pode ser matematicamente modelada da seguinte forma:&lt;/p>
$$ T_{total} = T_{network} + T_{TTFT} + (N \times T_{TPOT}) $$
&lt;p>Aqui, cada variável tem o seguinte significado:&lt;/p>
&lt;ul>
&lt;li>$T_{network}$: Tempo de ida e volta da rede (RTT).&lt;/li>
&lt;li>$T_{TTFT}$ (Time To First Token): O tempo até que o primeiro caractere seja gerado. Ele depende fortemente do custo do cálculo da atenção, que é proporcional ao quadrado do comprimento do prompt (número de tokens de entrada).&lt;/li>
&lt;li>$N$: O número total de tokens gerados na saída.&lt;/li>
&lt;li>$T_{TPOT}$ (Time Per Output Token): Tempo de geração por token. Por se tratar de um modelo autorregressivo, o cálculo é feito em série dependendo da saída anterior.&lt;/li>
&lt;/ul>
&lt;h3 id="41-complexidade-computacional-do-mecanismo-de-autoatenção">4.1 Complexidade Computacional do Mecanismo de Autoatenção
&lt;/h3>&lt;p>A complexidade computacional da autoatenção (Self-Attention) na arquitetura Transformer aumenta de forma quadrática em relação ao comprimento da sequência de entrada $L$.&lt;/p>
$$ \text{Complexity} = O(L^2 \cdot d) $$
&lt;p>Onde $d$ é o número de dimensões do vetor de incorporação (embedding). Devido a essa restrição, o $T_{TTFT}$ normalmente se degrada muito rapidamente à medida que o prompt se torna mais longo.
No entanto, o Gemini 1.5 do Google adota arquiteturas inovadoras de otimização como &amp;ldquo;Ring Attention&amp;rdquo; e &amp;ldquo;Block-wise Compute&amp;rdquo;, conseguindo gerar o primeiro token em um tempo realista (de alguns segundos a dezenas de segundos), mesmo ao inserir textos longos de até 2 milhões de tokens.&lt;/p>
&lt;hr>
&lt;h2 id="5-estrutura-de-preços-e-estratégias-de-otimização-de-custos">5. Estrutura de Preços e Estratégias de Otimização de Custos
&lt;/h2>&lt;p>O custo das APIs é basicamente calculado com base no número de tokens de entrada e no número de tokens de saída.&lt;/p>
$$ Cost = (Tokens_{in} \times Rate_{in}) + (Tokens_{out} \times Rate_{out}) $$
&lt;p>No entanto, as APIs mais recentes introduziram novos mecanismos para reduzir os custos drasticamente.&lt;/p>
&lt;h3 id="51-cache-de-prompt-prompt-caching">5.1 Cache de Prompt (Prompt Caching)
&lt;/h3>&lt;p>O envio de um prompt de sistema extremamente longo ou de uma grande quantidade de documentos pesquisados via RAG a cada vez custa muito dinheiro. Para lidar com isso, cada empresa oferece um recurso de cache.&lt;/p>
&lt;p>Na Anthropic (Claude) e no Google (Gemini), ao fazer o cache de blocos específicos de texto, você pode reduzir significativamente (em até 90%) o custo de entrada.&lt;/p>
&lt;p>O modelo de custo ao utilizar o cache seria o seguinte:&lt;/p>
$$ Cost_{cached} = (Tokens_{cache\_write} \times Rate_{cache\_write}) + (Tokens_{cache\_read} \times Rate_{cache\_read}) + (Tokens_{out} \times Rate_{out}) $$
&lt;p>Aqui, $Rate_{cache\_read}$ é definido para algo em torno de 10% a 25% da $Rate_{in}$ normal. Isso possibilita a operação de chatbots a baixo custo, mantendo sempre em memória bases de código de dezenas de milhares de linhas como conhecimento contextual.&lt;/p>
&lt;h3 id="52-api-em-lote-batch-api">5.2 API em Lote (Batch API)
&lt;/h3>&lt;p>Para tarefas que não exigem resultados em tempo real (como análise de logs, classificação de grandes volumes de dados, etc.), a OpenAI e a Anthropic oferecem APIs em lote. Ao enviar requisições de forma agrupada e receber os resultados em até 24 horas, é possível obter um poderoso mecanismo pela metade do preço (50% de desconto) da tarifa regular da API.&lt;/p>
&lt;hr>
&lt;h2 id="6-experiência-do-desenvolvedor-dx-e-comparação-de-sdks">6. Experiência do Desenvolvedor (DX) e Comparação de SDKs
&lt;/h2>&lt;p>Do ponto de vista da eficiência do desenvolvimento, comparamos os SDKs (Software Development Kits) fornecidos por cada empresa.&lt;/p>
&lt;h3 id="61-openai-api">6.1 OpenAI API
&lt;/h3>&lt;p>É o mais amplamente utilizado e possui o suporte mais rápido para bibliotecas de terceiros (LangChain, LlamaIndex, etc.). Além disso, a funcionalidade de Structured Outputs (Saídas Estruturadas) garante o retorno de respostas que aderem com 100% de precisão aos esquemas JSON, tornando a integração de sistemas muito fácil.&lt;/p>
&lt;h3 id="62-anthropic-api-claude">6.2 Anthropic API (Claude)
&lt;/h3>&lt;p>As interfaces do seu SDK são muito bem trabalhadas, e sua definição de tipos em TypeScript tem a reputação de ser extremamente fácil de manusear. A estrutura da API de Mensagens, em particular, é muito intuitiva, tornando requisições multimodais com várias imagens simples de descrever.&lt;/p>
&lt;h3 id="63-google-gemini-api">6.3 Google Gemini API
&lt;/h3>&lt;p>Existem dois tipos de acesso: um via Google Cloud Vertex AI e outro via AI Studio (Google Gen AI SDK), o que pode ser um pouco confuso para iniciantes. No entanto, o Vertex AI SDK voltado para corporações é totalmente integrado com o IAM (Sistema de Autenticação e Autorização) do GCP, permitindo a construção de ambientes de desenvolvimento seguros.&lt;/p>
&lt;hr>
&lt;h2 id="7-prática-implementação-de-teste-de-integração-simultânea-com-python">7. Prática! Implementação de Teste de Integração Simultânea com Python
&lt;/h2>&lt;p>Aqui, usaremos o Python para implementar um script que envia solicitações assíncronas simultaneamente às três APIs (OpenAI, Anthropic e Gemini) e compara as latências.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;span class="lnt">53
&lt;/span>&lt;span class="lnt">54
&lt;/span>&lt;span class="lnt">55
&lt;/span>&lt;span class="lnt">56
&lt;/span>&lt;span class="lnt">57
&lt;/span>&lt;span class="lnt">58
&lt;/span>&lt;span class="lnt">59
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">asyncio&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">time&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">openai&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">AsyncOpenAI&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">anthropic&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">AsyncAnthropic&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">google.generativeai&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">genai&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Inicialização dos clientes&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">openai_client&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">AsyncOpenAI&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">api_key&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">environ&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;OPENAI_API_KEY&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">anthropic_client&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">AsyncAnthropic&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">api_key&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">environ&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;ANTHROPIC_API_KEY&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">genai&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">configure&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">api_key&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">environ&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;GEMINI_API_KEY&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">prompt&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;Por favor, explique aos iniciantes os fundamentos dos computadores quânticos e seu impacto nas tecnologias atuais de criptografia.&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">async&lt;/span> &lt;span class="k">def&lt;/span> &lt;span class="nf">fetch_openai&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">start_time&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">time&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">time&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">await&lt;/span> &lt;span class="n">openai_client&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">chat&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">completions&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">create&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;gpt-4o&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">messages&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[{&lt;/span>&lt;span class="s2">&amp;#34;role&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;user&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;content&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">prompt&lt;/span>&lt;span class="p">}],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">max_tokens&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">1024&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">elapsed&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">time&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">time&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">start_time&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="s2">&amp;#34;OpenAI (GPT-4o)&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">elapsed&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">choices&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">content&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">async&lt;/span> &lt;span class="k">def&lt;/span> &lt;span class="nf">fetch_anthropic&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">start_time&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">time&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">time&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">await&lt;/span> &lt;span class="n">anthropic_client&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">messages&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">create&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;claude-3-5-sonnet-20240620&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">messages&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[{&lt;/span>&lt;span class="s2">&amp;#34;role&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;user&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;content&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">prompt&lt;/span>&lt;span class="p">}],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">max_tokens&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">1024&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">elapsed&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">time&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">time&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">start_time&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="s2">&amp;#34;Anthropic (Claude 3.5 Sonnet)&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">elapsed&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">content&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">async&lt;/span> &lt;span class="k">def&lt;/span> &lt;span class="nf">fetch_gemini&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">start_time&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">time&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">time&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">genai&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">GenerativeModel&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;gemini-1.5-pro&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Uso do método assíncrono do SDK Python do Gemini&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">await&lt;/span> &lt;span class="n">model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">generate_content_async&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">prompt&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">elapsed&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">time&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">time&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">start_time&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="s2">&amp;#34;Google (Gemini 1.5 Pro)&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">elapsed&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">async&lt;/span> &lt;span class="k">def&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Enviando requisições para as APIs de LLM...&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Executar as 3 APIs em paralelo&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">results&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">await&lt;/span> &lt;span class="n">asyncio&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">gather&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fetch_openai&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fetch_anthropic&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fetch_gemini&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">provider&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">latency&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">text&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">results&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;--- &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">provider&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> ---&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Latency: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">latency&lt;/span>&lt;span class="si">:&lt;/span>&lt;span class="s2">.2f&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> segundos&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Response (Excerpt): &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="p">[:&lt;/span>&lt;span class="mi">100&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">...&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;__main__&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">asyncio&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">run&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">main&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Ao executar este script, você pode facilmente medir qual modelo responde mais rapidamente (minimizando $T_{total}$) em um ambiente de rede real.&lt;/p>
&lt;hr>
&lt;h2 id="8-implementação-de-tool-calling-chamada-de-função-em-nodejs">8. Implementação de Tool Calling (Chamada de Função) em Node.js
&lt;/h2>&lt;p>Para que o LLM funcione não apenas como um chatbot, mas como um &amp;ldquo;Agente de IA&amp;rdquo; que interage com sistemas externos, o Tool Calling (ou Function Calling) é essencial. Abaixo está um exemplo em Node.js (TypeScript) instruindo a API da OpenAI a chamar uma API de clima.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-typescript" data-lang="typescript">&lt;span class="line">&lt;span class="cl">&lt;span class="kr">import&lt;/span> &lt;span class="nx">OpenAI&lt;/span> &lt;span class="kr">from&lt;/span> &lt;span class="s2">&amp;#34;openai&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">openai&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="nx">OpenAI&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">apiKey&lt;/span>: &lt;span class="kt">process.env.OPENAI_API_KEY&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">async&lt;/span> &lt;span class="kd">function&lt;/span> &lt;span class="nx">runAgent() {&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">tools&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">type&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;function&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">function&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">name&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;get_weather&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">description&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;Obtém o clima atual da cidade especificada.&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">parameters&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">type&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;object&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">properties&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">location&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">type&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;string&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">description&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;Nome da cidade (ex: Tóquio, Nova York)&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">required&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;location&amp;#34;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">await&lt;/span> &lt;span class="nx">openai&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">chat&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">completions&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">create&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">model&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;gpt-4o&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">messages&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">[{&lt;/span> &lt;span class="nx">role&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;user&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;content&amp;#34;&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;Como está o clima hoje em Tóquio? Preciso de um guarda-chuva?&amp;#34;&lt;/span> &lt;span class="p">}],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">tools&lt;/span>: &lt;span class="kt">tools&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">tool_choice&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;auto&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">response&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">choices&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">].&lt;/span>&lt;span class="nx">message&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">message&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">tool_calls&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">toolCall&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">message&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">tool_calls&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sb">`O LLM solicitou a chamada de uma ferramenta: Nome da função = &lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nx">toolCall&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="kd">function&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">name&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="sb">`&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">args&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">JSON&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">parse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">toolCall&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="kd">function&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">arguments&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sb">`Argumentos: &lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nx">args&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">location&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="sb">`&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Aqui seria implementada a chamada real da API de clima (ex: OpenWeatherMap)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// const weather = await fetchWeatherFromAPI(args.location);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Depois, o resultado é passado de volta ao LLM para gerar a resposta final
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">runAgent&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="k">catch&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>O Claude 3.5 Sonnet e o Gemini 1.5 Pro possuem capacidades equivalentes de Tool Calling, e embora existam pequenas diferenças na definição do esquema, o fluxo básico é comum a todos.&lt;/p>
&lt;hr>
&lt;h2 id="9-rag-vs-janela-de-contexto-longa-qual-adotar">9. RAG vs Janela de Contexto Longa: Qual Adotar?
&lt;/h2>&lt;p>Um dos maiores debates atuais em arquiteturas de IA empresariais é se devemos &amp;ldquo;usar o RAG (Geração Aumentada por Recuperação) para trazer conhecimento externo, ou se devemos simplesmente jogar tudo em uma enorme janela de contexto (Contexto Longo)&amp;rdquo;.&lt;/p>
&lt;h3 id="vantagens-e-desafios-do-rag-retrieval-augmented-generation">Vantagens e Desafios do RAG (Retrieval-Augmented Generation)
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Vantagens&lt;/strong>: Baixo custo (já que apenas os chunks necessários são colocados no prompt), e é mais fácil identificar a fundamentação (fonte) da resposta.&lt;/li>
&lt;li>&lt;strong>Desafios&lt;/strong>: Uma vez que depende da precisão da busca semântica, ele não é adequado para tarefas de raciocínio complexo onde o contexto se espalha por vários documentos (ex: &amp;ldquo;A partir das atas de todas as reuniões do ano passado, analise cronologicamente a causa raiz dos atrasos no Projeto A&amp;rdquo;).&lt;/li>
&lt;/ul>
&lt;h3 id="contexto-longo-ex-2-milhões-de-tokens-do-gemini-15-pro">Contexto Longo (ex: 2 milhões de tokens do Gemini 1.5 Pro)
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Vantagens&lt;/strong>: Nenhuma informação é perdida por conta da pesquisa. Mesmo no teste de &amp;ldquo;Achar a agulha num palheiro (Needle In A Haystack: NIAH)&amp;rdquo;, o Gemini 1.5 Pro e o Claude 3.5 Sonnet podem extrair informações com mais de 99% de precisão.&lt;/li>
&lt;li>&lt;strong>Desafios&lt;/strong>: O consumo de tokens torna-se enorme e eleva os custos, e há um aumento na latência ($T_{TTFT}$).&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Conclusão&lt;/strong>: A melhor prática em 2026 é uma &lt;strong>&amp;ldquo;Abordagem Híbrida&amp;rdquo;&lt;/strong>. A tendência principal de design é usar o RAG com bancos de dados vetoriais para Q&amp;amp;A rotineiros e usar um Contexto Longo em combinação com o cache de prompt para tarefas especializadas que exigem análises complexas ou a revisão de todo o código.&lt;/p>
&lt;hr>
&lt;h2 id="10-comparação-de-capacidades-de-processamento-multimodal">10. Comparação de Capacidades de Processamento Multimodal
&lt;/h2>&lt;p>Em aplicativos de IA de próxima geração, a capacidade de entender diretamente imagens, áudio e vídeo em vez de apenas texto é cada vez mais necessária.&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant User as "Usuário"
participant Client as "App Frontend"
participant API as "LLM API (Multimodal)"
User->>Client: Enviar Vídeo &amp; Prompt de Texto
Client->>API: Enviar Bytes/URI de Vídeo + Texto
Note over API: Fragmentação do vídeo &amp; Separação do áudio
Note over API: Modelo de Incorporação Multimodal
API-->>Client: Retornar Resumo de Texto &amp; Timestamps
Client-->>User: Mostrar Insights&lt;/div>
&lt;ul>
&lt;li>&lt;strong>OpenAI (GPT-4o)&lt;/strong>: Precisão de reconhecimento de imagem extremamente alta, superando na leitura de desenhos manuscritos e gráficos complexos. A interação por voz nativa usando a Realtime API com latência ultrabaixa (centenas de milissegundos) também é poderosa.&lt;/li>
&lt;li>&lt;strong>Google (Gemini 1.5 Pro)&lt;/strong>: &lt;strong>Apresenta superioridade esmagadora na análise de vídeos.&lt;/strong> É capaz de processar 1 hora de vídeo (quadros + áudio) de uma só vez e responder a perguntas pontuais como &amp;ldquo;Qual o título do documento segurado pela pessoa no canto direito da tela aos 12 minutos e 45 segundos?&amp;rdquo;.&lt;/li>
&lt;li>&lt;strong>Anthropic (Claude 3.5 Sonnet)&lt;/strong>: A capacidade de reconhecimento visual (Vision) está no mesmo nível do GPT-4o e é altamente capaz. Ele é incomparável em suporte ao desenvolvimento de frontend, lidando com pedidos como &amp;ldquo;Gere o código de componentes React a partir desta captura de tela da UI&amp;rdquo;.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="11-segurança-e-conformidade-de-nível-empresarial">11. Segurança e Conformidade de Nível Empresarial
&lt;/h2>&lt;p>A maior preocupação quando empresas usam APIs de LLM em ambientes de produção é &amp;ldquo;nossos dados serão usados para treinar a IA?&amp;rdquo; e &amp;ldquo;isso atende aos requisitos de conformidade?&amp;rdquo;.&lt;/p>
&lt;p>As 3 empresas declararam explicitamente que os dados enviados através de suas APIs (prompts e respostas) &lt;strong>não são usados para treinar os modelos (Zero Data Retention / No Training on Customer Data)&lt;/strong> (※ A interface de chat da Web gratuita para consumidores é diferente).&lt;/p>
&lt;p>Se for exigido um nível mais elevado de segurança:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>OpenAI&lt;/strong>: Usando o Azure OpenAI Service, pode-se obter a segurança de nível empresarial da Microsoft, SLAs e conexão privada via Azure Private Link.&lt;/li>
&lt;li>&lt;strong>Google&lt;/strong>: Usando o Google Cloud Vertex AI, é possível contar com o isolamento rígido de rede pelo VPC Service Controls e a proteção de dados através do CMEK (Chaves de Criptografia Gerenciadas pelo Cliente).&lt;/li>
&lt;li>&lt;strong>Anthropic&lt;/strong>: Ao utilizar as plataformas AWS Bedrock ou Google Cloud Vertex AI, as empresas podem se beneficiar da infraestrutura de segurança robusta desses provedores em nuvem.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="12-conclusão-guia-de-escolha-definitivo-por-caso-de-uso">12. Conclusão: Guia de Escolha Definitivo por Caso de Uso
&lt;/h2>&lt;p>Comparamos extensamente sob vários ângulos, mas, no final, a resposta para &amp;ldquo;Qual devo escolher?&amp;rdquo; depende do caso de uso.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>Desenvolvimento de Software Complexo, Geração de Código, Raciocínio Avançado&lt;/strong>:
&lt;strong>👑 Vencedor: Claude 3.5 Sonnet (Anthropic)&lt;/strong>
Atualmente oferece a melhor performance em entender o contexto de códigos, refatoração e elaboração de textos mais humanos e naturais. A facilidade de uso da API e o custo-benefício por causa do cache de prompt também são notáveis.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Análise de Documentos Ultralongos, Processamento em Lote de Vídeo/Áudio&lt;/strong>:
&lt;strong>👑 Vencedor: Gemini 1.5 Pro (Google)&lt;/strong>
A janela de contexto de 2 milhões de tokens é uma arma incomparável. Para tarefas que precisam compreender a visão geral dos dados, como a análise de manuais em PDF de centenas de páginas e o resumo de gravações de reuniões longas, o Gemini é imbatível.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Versatilidade, Velocidade de Execução, Saídas Estruturadas Estáveis (JSON)&lt;/strong>:
&lt;strong>👑 Vencedor: GPT-4o / GPT-4o-mini (OpenAI)&lt;/strong>
Lida bem com qualquer tarefa perfeitamente e oferece o suporte mais rico para ferramentas de terceiros. Se a sua empresa necessita de parsing de JSON confiável por meio das Structured Outputs (Saídas Estruturadas) ou raciocínio lógico muito avançado usando o modelo o1, o ecossistema da OpenAI é indispensável.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h3 id="recomendação-de-roteamento-multimodelo">Recomendação de Roteamento Multimodelo
&lt;/h3>&lt;p>A tendência futura de arquitetura é não depender (e sofrer vendor lock-in) de uma única API, mas adotar o &lt;strong>&amp;ldquo;Roteamento de LLM&amp;rdquo; (LLM Routing)&lt;/strong> para alternar de forma dinâmica o modelo dependendo da dificuldade e importância da tarefa.
Por exemplo, responder perguntas simples dos usuários usando as opções mais baratas e rápidas, como o &lt;code>GPT-4o-mini&lt;/code> ou o &lt;code>Gemini 1.5 Flash&lt;/code>, e recorrer ao &lt;code>Claude 3.5 Sonnet&lt;/code> apenas quando for determinado que um processamento complexo é necessário, para se obter o equilíbrio perfeito entre custo e desempenho.&lt;/p>
&lt;p>A evolução da IA é incessante. Entenda profundamente as forças e fraquezas de cada API e as características de sua arquitetura, e construa aplicações de IA flexíveis e escaláveis.&lt;/p></description></item></channel></rss>