Ferramenta personalizada (custom tool) é uma função que você desenvolve e expõe ao LLM para uso via tool calling/function calling. Em vez de usar tools prontas (web search, calculadora), você cria tools que fazem exatamente o que seu sistema/negócio precisa.
Por que criar tools próprias:
- Acesso a sistemas internos: ERP, CRM, banco de dados, microserviços.
- Lógica de negócio: regras específicas da empresa.
- Integração com APIs proprietárias: parceiros, fornecedores.
- Workflows customizados: sequência de passos específica.
- Performance: tool otimizada para seu caso é mais eficiente.
Anatomia de uma tool personalizada:
{
name: "criar_pedido",
description: "Cria um novo pedido no sistema. Use quando cliente confirmar compra.",
parameters: {
type: "object",
properties: {
cliente_id: { type: "string", description: "ID do cliente" },
produtos: {
type: "array",
items: {
type: "object",
properties: {
sku: { type: "string" },
quantidade: { type: "integer" }
}
}
},
forma_pagamento: { type: "string", enum: ["pix", "boleto", "cartao"] }
},
required: ["cliente_id", "produtos", "forma_pagamento"]
}
}
E você implementa a função real:
async function criar_pedido(args) {
// Validação
// Chamada ao backend
// Retorno estruturado
return { pedido_id: "12345", status: "criado", valor_total: 250.00 };
}
Boas práticas:
- Descrição precisa: o modelo decide com base nela. Inclua quando usar e quando NÃO usar.
- Schema rigoroso: tipos, enums, restrições. Quanto mais validação, menos erros.
- Granularidade certa: tool muito grande (faz tudo) vs muito pequena (faz nada). Equilíbrio.
- Idempotência: rodar 2x não deve duplicar efeito (especialmente para criar/escrever).
- Tratamento de erros: retornar erros legíveis para o modelo entender.
- Validação de inputs: nunca confie cegamente nos argumentos do modelo.
- Auditoria: logar toda chamada para análise.
- Limites: rate limiting, quotas para evitar abuso.
Anti-patterns:
- Tool com 50 parâmetros: modelo confunde.
- Descrição vaga: modelo escolhe errado.
- Sem validação: SQL injection via argumentos.
- Sem confirmação para destrutivos: agente apaga produção.
Casos de uso brasileiros:
- Tool consultar_estoque: para bot de e-commerce.
- Tool gerar_boleto: para assistente financeiro com integração bancária.
- Tool consultar_NFe: para assistente fiscal/contábil.
- Tool agendar_visita_tecnica: para SAC de telecomunicações.
- Tool criar_chamado_suporte: para help desk interno.
Onde declarar:
- OpenAI: parâmetro tools na chamada da API.
- Anthropic: parâmetro tools no Messages API.
- MCP: cria MCP server expondo tools.
- LangChain / CrewAI: classes Tool customizadas.
Exemplo MCP server (simplificado):
@mcp.tool()
def consultar_pedido(pedido_id: str) -> dict:
"""Consulta um pedido pelo ID."""
return database.get_order(pedido_id)
Para o profissional brasileiro:
- Construir produto sério com IA: 70% do esforço é definir e implementar tools personalizadas.
- Modelagem é arte: quais tools criar, qual granularidade, qual interface.
- Iterativo: comece com tools básicas, refine conforme observa uso.
- Documente tools como documenta APIs: descrição, exemplos, edge cases.
Em 2026, "biblioteca de tools personalizadas" da empresa virou ativo estratégico. Times maduros tratam tools como bibliotecas internas reutilizáveis — qualquer agente novo já tem acesso ao "vocabulário operacional" da organização. É como APIs internas viraram assets nos anos 2010.
