Por que Tool Use Nativo?
Arquitetura
Interface ToolAwareClient
A interfaceToolAwareClient estende a LLMClient base com suporte a ferramentas:
Detecção Automatica
A detecção e feita via type assertion, sem configuração necessaria:Provedores que não implementam
ToolAwareClient continuam funcionando normalmente via SendPrompt.Suporte a Tool Use por Provedor
Nem todos os provedores implementam tool use nativo. Funcionalidades como/coder e orquestracao multi-agente funcionam melhor com provedores que suportam SendPromptWithTools:
Tipos de Dados
ToolDefinition
ToolDefinition
Define uma ferramenta disponível para o modelo:
ToolCall e ToolResult
ToolCall e ToolResult
Representam uma chamada de ferramenta pelo modelo e seu resultado:O campo
IsError (alinhado com a Anthropic Messages API) é emitido nativamente como is_error: true no tool_result block do Claude. Para provedores OpenAI-compatible (OpenAI, Moonshot, MiniMax, ZAI, OpenRouter), o models.Message carrega também ErrorCode (ENOENT, Timeout, ExitCode:N, InvalidArgs, …) e o adapter prefixa o content com [ERROR:<code>] — o modelo recebe o sinal mesmo sem campo nativo de erro.LLMResponse
LLMResponse
Resposta unificada que pode conter texto e/ou tool calls:
Implementações por Provedor
- OpenAI
- Anthropic (Claude)
Usa o campo
tools na API de Chat Completions:- Envia ferramentas como array de
toolscomtool_choice: "auto" - Processa
tool_callsemchoices[0].message - Mensagens
toolno histórico vinculam resultado aotool_call_id
Tool result com is_error / ErrorCode (provider-agnostic)
Resultados de ferramenta carregam dois sinais ortogonais que viajam até o modelo:IsError bool— true quando o tool executou mas reportou falha de negócio (exit code não-zero, HTTP 4xx, arquivo não encontrado, schema args inválido). False = sucesso.ErrorCode string— classificação locale-independente:ENOENT,EACCES,EISDIR,EEXIST,Timeout,Canceled,ExitCode:N,NetworkError,DNSError,InvalidArgs, etc. Vazio quandoIsError=false.
O modelo pattern-match no
[ERROR:<code>] para decidir retry/recovery sem precisar parsear inglês — InvalidArgs significa “corrigir schema”, Timeout significa “tentar novamente”, ENOENT significa “arquivo errado”.
ContentBlock com Cache Control
Para Anthropic, o system prompt e dividido em blocos com controle de cache:Integração com Fallback
A cadeia de fallback (llm/fallback) suporta SendPromptWithTools automaticamente. Provedores sem suporte a tool use nativo são ignorados na cadeia de tool calls, mas continuam disponíveis para requests de texto simples.