Loading...
    • Guia do Desenvolvedor
    • Referência da API
    • MCP
    • Recursos
    • Notas de lançamento
    Search...
    ⌘K
    Primeiros passos
    Introdução ao ClaudeInício rápido
    Modelos e preços
    Visão geral dos modelosEscolhendo um modeloNovidades no Claude 4.5Migrando para Claude 4.5Descontinuação de modelosPreços
    Construir com Claude
    Visão geral de recursosUsando a API MessagesJanelas de contextoMelhores práticas de prompting
    Capacidades
    Cache de promptEdição de contextoPensamento estendidoEsforçoStreaming de mensagensProcessamento em loteCitaçõesSuporte multilíngueContagem de tokensEmbeddingsVisãoSuporte a PDFAPI de arquivosResultados de buscaSaídas estruturadas
    Ferramentas
    Visão geralComo implementar o uso de ferramentasStreaming de ferramentas granularFerramenta BashFerramenta de execução de códigoChamada de ferramenta programáticaFerramenta de uso do computadorFerramenta de editor de textoFerramenta de busca na webFerramenta de pesquisa na webFerramenta de memóriaFerramenta de busca de ferramentas
    Habilidades do agente
    Visão geralInício rápidoMelhores práticasUsando habilidades com a API
    SDK do agente
    Visão geralInício rápidoSDK TypeScriptTypeScript V2 (preview)SDK PythonGuia de migração
    MCP na API
    Conector MCPServidores MCP remotos
    Claude em plataformas de terceiros
    Amazon BedrockMicrosoft FoundryVertex AI
    Engenharia de prompts
    Visão geralGerador de promptsUsar modelos de promptsMelhorador de promptsSeja claro e diretoUse exemplos (prompting multishot)Deixe Claude pensar (CoT)Use tags XMLDê um papel ao Claude (prompts do sistema)Preencha a resposta do ClaudeEncadeie prompts complexosDicas de contexto longoDicas de pensamento estendido
    Testar e avaliar
    Definir critérios de sucessoDesenvolver casos de testeUsando a ferramenta de avaliaçãoReduzindo latência
    Fortalecer proteções
    Reduzir alucinaçõesAumentar consistência de saídaMitigar jailbreaksRecusas de streamingReduzir vazamento de promptManter Claude em personagem
    Administração e monitoramento
    Visão geral da API de administraçãoAPI de uso e custoAPI de análise de código Claude
    Console
    Log in
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...

    Solutions

    • AI agents
    • Code modernization
    • Coding
    • Customer support
    • Education
    • Financial services
    • Government
    • Life sciences

    Partners

    • Amazon Bedrock
    • Google Cloud's Vertex AI

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Company

    • Anthropic
    • Careers
    • Economic Futures
    • Research
    • News
    • Responsible Scaling Policy
    • Security and compliance
    • Transparency

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Help and security

    • Availability
    • Status
    • Support
    • Discord

    Terms and policies

    • Privacy policy
    • Responsible disclosure policy
    • Terms of service: Commercial
    • Terms of service: Consumer
    • Usage policy
    Ferramentas

    Como implementar o uso de ferramentas

    Guia completo sobre como implementar o uso de ferramentas com Claude, incluindo definições de ferramentas, exemplos e práticas recomendadas.

    Escolhendo um modelo

    Recomendamos usar o Claude Sonnet (4.5) ou Claude Opus (4.1) mais recente para ferramentas complexas e consultas ambíguas; eles lidam melhor com múltiplas ferramentas e buscam esclarecimentos quando necessário.

    Use modelos Claude Haiku para ferramentas diretas, mas observe que eles podem inferir parâmetros ausentes.

    Se estiver usando Claude com uso de ferramentas e pensamento estendido, consulte nosso guia aqui para mais informações.

    Especificando ferramentas do cliente

    As ferramentas do cliente (tanto as definidas pela Anthropic quanto as definidas pelo usuário) são especificadas no parâmetro tools de nível superior da solicitação da API. Cada definição de ferramenta inclui:

    ParâmetroDescrição
    nameO nome da ferramenta. Deve corresponder à regex ^[a-zA-Z0-9_-]{1,64}$.
    descriptionUma descrição detalhada em texto simples do que a ferramenta faz, quando deve ser usada e como se comporta.
    input_schemaUm objeto JSON Schema que define os parâmetros esperados para a ferramenta.
    input_examples(Opcional, beta) Uma matriz de objetos de entrada de exemplo para ajudar Claude a entender como usar a ferramenta. Veja Fornecendo exemplos de uso de ferramentas.

    Prompt do sistema de uso de ferramentas

    Quando você chama a API Claude com o parâmetro tools, construímos um prompt do sistema especial a partir das definições de ferramentas, configuração de ferramentas e qualquer prompt do sistema especificado pelo usuário. O prompt construído é projetado para instruir o modelo a usar a(s) ferramenta(s) especificada(s) e fornecer o contexto necessário para que a ferramenta funcione adequadamente:

    In this environment you have access to a set of tools you can use to answer the user's question.
    {{ FORMATTING INSTRUCTIONS }}
    String and scalar parameters should be specified as is, while lists and objects should use JSON format. Note that spaces for string values are not stripped. The output is not expected to be valid XML and is parsed with regular expressions.
    Here are the functions available in JSONSchema format:
    {{ TOOL DEFINITIONS IN JSON SCHEMA }}
    {{ USER SYSTEM PROMPT }}
    {{ TOOL CONFIGURATION }}

    Práticas recomendadas para definições de ferramentas

    Para obter o melhor desempenho do Claude ao usar ferramentas, siga estas diretrizes:

    • Forneça descrições extremamente detalhadas. Este é de longe o fator mais importante no desempenho da ferramenta. Suas descrições devem explicar cada detalhe sobre a ferramenta, incluindo:
      • O que a ferramenta faz
      • Quando deve ser usada (e quando não deve)
      • O que cada parâmetro significa e como afeta o comportamento da ferramenta
      • Quaisquer ressalvas ou limitações importantes, como quais informações a ferramenta não retorna se o nome da ferramenta for pouco claro. Quanto mais contexto você puder fornecer ao Claude sobre suas ferramentas, melhor ele será em decidir quando e como usá-las. Procure por pelo menos 3-4 frases por descrição de ferramenta, mais se a ferramenta for complexa.
    • Priorize descrições, mas considere usar input_examples para ferramentas complexas. Descrições claras são mais importantes, mas para ferramentas com entradas complexas, objetos aninhados ou parâmetros sensíveis ao formato, você pode usar o campo input_examples (beta) para fornecer exemplos validados por esquema. Veja Fornecendo exemplos de uso de ferramentas para detalhes.

    A boa descrição explica claramente o que a ferramenta faz, quando usá-la, quais dados ela retorna e o que o parâmetro ticker significa. A descrição ruim é muito breve e deixa Claude com muitas questões em aberto sobre o comportamento e o uso da ferramenta.

    Fornecendo exemplos de uso de ferramentas

    Você pode fornecer exemplos concretos de entradas de ferramentas válidas para ajudar Claude a entender como usar suas ferramentas de forma mais eficaz. Isso é particularmente útil para ferramentas complexas com objetos aninhados, parâmetros opcionais ou entradas sensíveis ao formato.

    Exemplos de uso de ferramentas é um recurso beta. Inclua o cabeçalho beta apropriado para seu provedor:

    ProvedorCabeçalho betaModelos suportados
    Claude API,
    Microsoft Foundry
    advanced-tool-use-2025-11-20Todos os modelos
    Vertex AI,
    Amazon Bedrock
    tool-examples-2025-10-29Apenas Claude Opus 4.5

    Uso básico

    Adicione um campo input_examples opcional à sua definição de ferramenta com uma matriz de objetos de entrada de exemplo. Cada exemplo deve ser válido de acordo com o input_schema da ferramenta:

    Os exemplos são incluídos no prompt ao lado do seu esquema de ferramenta, mostrando ao Claude padrões concretos para chamadas de ferramenta bem formadas. Isso ajuda Claude a entender quando incluir parâmetros opcionais, quais formatos usar e como estruturar entradas complexas.

    Requisitos e limitações

    • Validação de esquema - Cada exemplo deve ser válido de acordo com o input_schema da ferramenta. Exemplos inválidos retornam um erro 400
    • Não suportado para ferramentas do lado do servidor - Apenas ferramentas definidas pelo usuário podem ter exemplos de entrada
    • Custo de token - Os exemplos adicionam aos tokens de prompt: ~20-50 tokens para exemplos simples, ~100-200 tokens para objetos aninhados complexos

    Executor de ferramentas (beta)

    O executor de ferramentas fornece uma solução pronta para executar ferramentas com Claude. Em vez de lidar manualmente com chamadas de ferramentas, resultados de ferramentas e gerenciamento de conversas, o executor de ferramentas automaticamente:

    • Executa ferramentas quando Claude as chama
    • Lida com o ciclo de solicitação/resposta
    • Gerencia o estado da conversa
    • Fornece segurança de tipo e validação

    Recomendamos que você use o executor de ferramentas para a maioria das implementações de uso de ferramentas.

    O executor de ferramentas está atualmente em beta e disponível nos SDKs Python, TypeScript e Ruby.

    Gerenciamento automático de contexto com compactação

    O executor de ferramentas suporta compactação automática, que gera resumos quando o uso de tokens excede um limite. Isso permite que tarefas agentes de longa duração continuem além dos limites da janela de contexto.

    O executor de ferramentas do SDK está em beta. O resto deste documento cobre a implementação manual de ferramentas.

    Controlando a saída do Claude

    Forçando o uso de ferramentas

    Em alguns casos, você pode querer que Claude use uma ferramenta específica para responder à pergunta do usuário, mesmo que Claude pense que pode fornecer uma resposta sem usar uma ferramenta. Você pode fazer isso especificando a ferramenta no campo tool_choice assim:

    tool_choice = {"type": "tool", "name": "get_weather"}

    Ao trabalhar com o parâmetro tool_choice, temos quatro opções possíveis:

    • auto permite que Claude decida se deve chamar qualquer ferramenta fornecida ou não. Este é o valor padrão quando tools são fornecidas.
    • any diz ao Claude que ele deve usar uma das ferramentas fornecidas, mas não força uma ferramenta particular.
    • tool permite que forçemos Claude a sempre usar uma ferramenta particular.
    • none impede que Claude use qualquer ferramenta. Este é o valor padrão quando nenhuma tools é fornecida.

    Ao usar cache de prompt, mudanças no parâmetro tool_choice invalidarão blocos de mensagens em cache. Definições de ferramentas e prompts do sistema permanecem em cache, mas o conteúdo da mensagem deve ser reprocessado.

    Este diagrama ilustra como cada opção funciona:

    Observe que quando você tem tool_choice como any ou tool, preencheremos previamente a mensagem do assistente para forçar o uso de uma ferramenta. Isso significa que os modelos não emitirão uma resposta em linguagem natural ou explicação antes dos blocos de conteúdo tool_use, mesmo se explicitamente solicitado.

    Ao usar pensamento estendido com uso de ferramentas, tool_choice: {"type": "any"} e tool_choice: {"type": "tool", "name": "..."} não são suportados e resultarão em um erro. Apenas tool_choice: {"type": "auto"} (o padrão) e tool_choice: {"type": "none"} são compatíveis com pensamento estendido.

    Nossos testes mostraram que isso não deve reduzir o desempenho. Se você gostaria que o modelo fornecesse contexto em linguagem natural ou explicações enquanto ainda solicitava que o modelo use uma ferramenta específica, você pode usar {"type": "auto"} para tool_choice (o padrão) e adicionar instruções explícitas em uma mensagem user. Por exemplo: What's the weather like in London? Use the get_weather tool in your response.

    Chamadas de ferramentas garantidas com ferramentas estritas

    Combine tool_choice: {"type": "any"} com uso de ferramentas estritas para garantir que uma de suas ferramentas será chamada E que as entradas da ferramenta seguem estritamente seu esquema. Defina strict: true em suas definições de ferramentas para habilitar a validação de esquema.

    Saída JSON

    As ferramentas não precisam necessariamente ser funções do cliente — você pode usar ferramentas sempre que quiser que o modelo retorne uma saída JSON que siga um esquema fornecido. Por exemplo, você pode usar uma ferramenta record_summary com um esquema particular. Veja Uso de ferramentas com Claude para um exemplo completo de funcionamento.

    Respostas do modelo com ferramentas

    Ao usar ferramentas, Claude frequentemente comentará sobre o que está fazendo ou responderá naturalmente ao usuário antes de invocar ferramentas.

    Por exemplo, dado o prompt "Qual é o tempo em San Francisco agora, e que horas são lá?", Claude pode responder com:

    JSON
    {
      "role": "assistant",
      "content": [
        {
          "type": "text",
          "text": "I'll help you check the current weather and time in San Francisco."
        },
        {
          "type": "tool_use",
          "id": "toolu_01A09q90qw90lq917835lq9",
          "name": "get_weather",
          "input": {"location": "San Francisco, CA"}
        }
      ]
    }

    Este estilo de resposta natural ajuda os usuários a entender o que Claude está fazendo e cria uma interação mais conversacional. Você pode orientar o estilo e o conteúdo dessas respostas através de seus prompts de sistema e fornecendo <examples> em seus prompts.

    É importante notar que Claude pode usar várias frases e abordagens ao explicar suas ações. Seu código deve tratar essas respostas como qualquer outro texto gerado pelo assistente, e não depender de convenções de formatação específicas.

    Uso paralelo de ferramentas

    Por padrão, Claude pode usar múltiplas ferramentas para responder a uma consulta do usuário. Você pode desabilitar esse comportamento por:

    • Configurando disable_parallel_tool_use=true quando o tipo de tool_choice é auto, o que garante que Claude use no máximo uma ferramenta
    • Configurando disable_parallel_tool_use=true quando o tipo de tool_choice é any ou tool, o que garante que Claude use exatamente uma ferramenta

    Maximizando o uso paralelo de ferramentas

    Embora os modelos Claude 4 tenham excelentes capacidades de uso paralelo de ferramentas por padrão, você pode aumentar a probabilidade de execução paralela de ferramentas em todos os modelos com prompting direcionado:

    Uso paralelo de ferramentas com Claude Sonnet 3.7

    Claude Sonnet 3.7 pode ser menos provável de fazer chamadas de ferramentas paralelas em uma resposta, mesmo quando você não tiver definido disable_parallel_tool_use. Recomendamos atualizar para modelos Claude 4, que têm uso de ferramentas eficiente em tokens e chamadas de ferramentas paralelas melhoradas.

    Se você ainda estiver usando Claude Sonnet 3.7, você pode habilitar o cabeçalho beta token-efficient-tools-2025-02-19, que ajuda a incentivar Claude a usar ferramentas paralelas. Você também pode introduzir uma "ferramenta em lote" que pode atuar como uma meta-ferramenta para envolver invocações para outras ferramentas simultaneamente.

    Veja este exemplo em nosso cookbook para como usar essa solução alternativa.

    Manipulando blocos de conteúdo de uso de ferramentas e resultado de ferramentas

    Mais simples com Tool runner: A manipulação manual de ferramentas descrita nesta seção é gerenciada automaticamente por tool runner. Use esta seção quando você precisar de controle personalizado sobre a execução de ferramentas.

    A resposta do Claude difere dependendo se ele usa uma ferramenta de cliente ou servidor.

    Manipulando resultados de ferramentas de cliente

    A resposta terá um stop_reason de tool_use e um ou mais blocos de conteúdo tool_use que incluem:

    • id: Um identificador único para este bloco de uso de ferramenta particular. Isso será usado para corresponder aos resultados da ferramenta mais tarde.
    • name: O nome da ferramenta sendo usada.
    • input: Um objeto contendo a entrada sendo passada para a ferramenta, em conformidade com o input_schema da ferramenta.

    Quando você recebe uma resposta de uso de ferramenta para uma ferramenta de cliente, você deve:

    1. Extrair o name, id e input do bloco tool_use.
    2. Executar a ferramenta real em sua base de código correspondente a esse nome de ferramenta, passando a input da ferramenta.
    3. Continuar a conversa enviando uma nova mensagem com o role de user e um bloco content contendo o tipo tool_result e as seguintes informações:
      • tool_use_id: O id da solicitação de uso de ferramenta para a qual este é um resultado.
      • content: O resultado da ferramenta, como uma string (por exemplo, ), uma lista de blocos de conteúdo aninhados (por exemplo, ), ou uma lista de blocos de documento (por exemplo, ). Esses blocos de conteúdo podem usar os tipos , ou .

    Requisitos importantes de formatação:

    • Os blocos de resultado da ferramenta devem vir imediatamente após seus blocos de uso de ferramenta correspondentes no histórico de mensagens. Você não pode incluir nenhuma mensagem entre a mensagem de uso de ferramenta do assistente e a mensagem de resultado de ferramenta do usuário.
    • Na mensagem do usuário contendo resultados de ferramentas, os blocos tool_result devem vir PRIMEIRO na matriz de conteúdo. Qualquer texto deve vir DEPOIS de todos os resultados das ferramentas.

    Por exemplo, isto causará um erro 400:

    {"role": "user", "content": [
      {"type": "text", "text": "Here are the results:"},  // ❌ Text before tool_result
      {"type": "tool_result", "tool_use_id": "toolu_01", ...}
    ]}

    Após receber o resultado da ferramenta, Claude usará essas informações para continuar gerando uma resposta ao prompt original do usuário.

    Manipulando resultados de ferramentas de servidor

    Claude executa a ferramenta internamente e incorpora os resultados diretamente em sua resposta sem exigir interação adicional do usuário.

    Diferenças de outras APIs

    Ao contrário de APIs que separam o uso de ferramentas ou usam funções especiais como tool ou function, a API Claude integra ferramentas diretamente na estrutura de mensagem user e assistant.

    As mensagens contêm matrizes de blocos text, image, tool_use e tool_result. As mensagens user incluem conteúdo de cliente e tool_result, enquanto as mensagens assistant contêm conteúdo gerado por IA e tool_use.

    Manipulando o motivo de parada max_tokens

    Se a resposta do Claude for cortada devido ao limite max_tokens, e a resposta truncada contiver um bloco de uso de ferramenta incompleto, você precisará tentar novamente a solicitação com um valor max_tokens mais alto para obter o uso de ferramenta completo.

    Manipulando o motivo de parada pause_turn

    Ao usar ferramentas de servidor como busca na web, a API pode retornar um motivo de parada pause_turn, indicando que a API pausou uma volta longa.

    Aqui está como manipular o motivo de parada pause_turn:

    Ao manipular pause_turn:

    • Continuar a conversa: Passe a resposta pausada como está em uma solicitação subsequente para permitir que Claude continue sua volta
    • Modificar se necessário: Você pode opcionalmente modificar o conteúdo antes de continuar se quiser interromper ou redirecionar a conversa
    • Preservar estado da ferramenta: Inclua as mesmas ferramentas na solicitação de continuação para manter a funcionalidade

    Resolvendo problemas de erros

    Manipulação de erros integrada: Tool runner fornece manipulação automática de erros para a maioria dos cenários comuns. Esta seção cobre manipulação manual de erros para casos de uso avançados.

    Existem alguns tipos diferentes de erros que podem ocorrer ao usar ferramentas com Claude:

    • Escolhendo um modelo
    • Especificando ferramentas do cliente
    • Prompt do sistema de uso de ferramentas
    • Práticas recomendadas para definições de ferramentas
    • Fornecendo exemplos de uso de ferramentas
    • Uso básico
    • Requisitos e limitações
    • Executor de ferramentas (beta)
    • Uso básico
    • Iterando sobre o executor de ferramentas
    • Uso avançado
    • Streaming
    • Uso básico
    • Iterando sobre o executor de ferramentas
    • Uso avançado
    • Streaming
    • Uso básico
    • Iterando sobre o executor de ferramentas
    • Uso avançado
    • Streaming
    • Uso básico
    • Iterando sobre o executor de ferramentas
    • Uso avançado
    • Streaming
    • Controlando a saída do Claude
    • Forçando o uso de ferramentas
    • Saída JSON
    • Respostas do modelo com ferramentas
    • Uso paralelo de ferramentas
    • Manipulando blocos de conteúdo de uso de ferramentas e resultado de ferramentas
    • Manipulando resultados de ferramentas de cliente
    • Manipulando resultados de ferramentas de servidor
    • Manipulando o motivo de parada max_tokens
    • Resolvendo problemas de erros

    import anthropic
    
    client = anthropic.Anthropic()
    
    response = client.messages.create(
        model="claude-sonnet-4-5-20250929",
        max_tokens=1024,
        betas=["advanced-tool-use-2025-11-20"],
        tools=[
            {
                "name": "get_weather",
                "description": "Get the current weather in a given location",
                "input_schema": {
                    "type": "object",
                    "properties": {
                        "location": {
                            "type": "string",
                            "description": "The city and state, e.g. San Francisco, CA"
                        },
                        "unit": {
                            "type": "string",
                            "enum": ["celsius", "fahrenheit"],
                            "description": "The unit of temperature"
                        }
                    },
                    "required": ["location"]
                },
                "input_examples": [
                    {
                        "location": "San Francisco, CA",
                        "unit": "fahrenheit"
                    },
                    {
                        "location": "Tokyo, Japan",
                        "unit": "celsius"
                    },
                    {
                        "location": "New York, NY"  # 'unit' is optional
                    }
                ]
            }
        ],
        messages=[
            {"role": "user", "content": "What's the weather like in San Francisco?"}
        ]
    )

    "content": "15 degrees"
    "content": [{"type": "text", "text": "15 degrees"}]
    "content": ["type": "document", "source": {"type": "text", "media_type": "text/plain", "data": "15 degrees"}]
    text
    image
    document
  1. is_error (opcional): Defina como true se a execução da ferramenta resultou em um erro.
  2. Isto está correto:

    {"role": "user", "content": [
      {"type": "tool_result", "tool_use_id": "toolu_01", ...},
      {"type": "text", "text": "What should I do next?"}  // ✅ Text after tool_result
    ]}

    Se você receber um erro como "tool_use ids were found without tool_result blocks immediately after", verifique se seus resultados de ferramentas estão formatados corretamente.

    # Check if response was truncated during tool use
    if response.stop_reason == "max_tokens":
        # Check if the last content block is an incomplete tool_use
        last_block = response.content[-1]
        if last_block.type == "tool_use":
            # Send the request with higher max_tokens
            response = client.messages.create(
                model="claude-sonnet-4-5",
                max_tokens=4096,  # Increased limit
                messages=messages,
                tools=tools
            )
    import anthropic
    
    client = anthropic.Anthropic()
    
    # Initial request with web search
    response = client.messages.create(
        model="claude-3-7-sonnet-latest",
        max_tokens=1024,
        messages=[
            {
                "role": "user",
                "content": "Search for comprehensive information about quantum computing breakthroughs in 2025"
            }
        ],
        tools=[{
            "type": "web_search_20250305",
            "name": "web_search",
            "max_uses": 10
        }]
    )
    
    # Check if the response has pause_turn stop reason
    if response.stop_reason == "pause_turn":
        # Continue the conversation with the paused content
        messages = [
            {"role": "user", "content": "Search for comprehensive information about quantum computing breakthroughs in 2025"},
            {"role": "assistant", "content": response.content}
        ]
    
        # Send the continuation request
        continuation = client.messages.create(
            model="claude-3-7-sonnet-latest",
            max_tokens=1024,
            messages=messages,
            tools=[{
                "type": "web_search_20250305",
                "name": "web_search",
                "max_uses": 10
            }]
        )
    
        print(continuation)
    else:
        print(response)