O que são AI Skills & Tools

Como AI agents usam capacidades empacotadas — desde function calls até MCP servers. Um guia prático para desenvolvedores que constroem com LLMs.

7 min de leitura Atualizado: abril de 2026

🔧 O que é um Skill?

No contexto de agentes de IA, um skill (também chamado de tool or function) é uma capacidade empacotada e reutilizável que um LLM pode invocar para interagir com o mundo fora da sua janela de contexto. Skills preenchem a lacuna entre o entendimento de linguagem e a ação no mundo real.

Todo skill tem quatro componentes:

  • Name — um identificador único que o modelo usa para referenciar o skill (por exemplo, web_search)
  • Description — texto em linguagem natural explicando o que o skill faz e quando usá-lo; o LLM lê isso para decidir quando chamar o skill
  • Esquema de entrada — uma definição estruturada dos argumentos (JSON Schema); o modelo preenche esses campos com base na tarefa
  • Implementation — o código real que é executado: uma chamada API, consulta ao banco de dados, comando shell ou qualquer outra operação

Exemplo: A get_weather skill tem a descrição "Busca o clima atual para uma cidade", aceita { "city": "string" } como entrada, e chama uma API de clima. O LLM nunca vê a chave da API ou a chamada HTTP — ele apenas recebe o resultado de volta como texto.

⚙️ Como o Chamamento de Ferramentas Funciona

Quando um agente tem acesso a skills, o LLM não os chama diretamente — ele requests uma chamada gerando uma saída estruturada. O runtime (seu código de aplicação) executa a chamada real e retorna o resultado. Aqui está o ciclo completo:

  1. Registro da ferramenta — Seu código envia ao modelo uma lista de skills disponíveis com suas descrições e schemas
  2. Raciocínio do modelo — O LLM lê a tarefa e as ferramentas disponíveis, decide qual ferramenta chamar e com quais argumentos
  3. Requisição de chamada de ferramenta — O modelo produz uma mensagem estruturada de "tool call" (por exemplo, { "tool": "web_search", "args": { "query": "current Gemini models" } })
  4. Execution — Seu código em runtime chama a função, API ou serviço real
  5. Injeção de resultado — O resultado é adicionado de volta ao contexto da conversa
  6. Raciocínio contínuo — O modelo lê o resultado e ou chama outra ferramenta, faz uma pergunta de seguimento ou gera a resposta final

Este loop pode repetir muitas vezes em uma única interação. Uma tarefa agenteica complexa pode chamar 10–20 ferramentas em sequência antes de produzir uma resposta final.

📊 Skills vs Plugins vs MCP Servers

A terminologia evoluiu rapidamente. Veja como os conceitos se relacionam historicamente:

EraNameComo funcionavaStatus
2023 ChatGPT Plugins Extensões instaláveis pelo usuário com um spec OpenAPI; o ChatGPT as chamava via HTTP Obsoleto (substituído por GPTs + tools)
2023 OpenAI Function Calling Definições de JSON Schema no nível da API; o modelo produz uma chamada de função estruturada, seu código a executa Ativo — renomeado para "tool use"
2023– Tool Use / Skills Igual ao function calling; Anthropic cunhou "tool use", outros usam "skills" ou "functions" Ativo — padrão atual
2024– MCP Servers Protocolo padronizado (Anthropic, dez 2024) para empacotar e distribuir servidores de ferramentas; qualquer cliente MCP pode conectar-se a qualquer servidor MCP Ativo — ecossistema em crescimento

Distinção chave: O uso tradicional de ferramentas é definido inline no seu código de aplicação. MCP servers são processos independentes que expõem ferramentas através de um protocolo padronizado — tornando-os reutilizáveis entre diferentes clientes de IA (Claude Desktop, Cursor, VS Code, agentes customizados). Leia mais: O que é MCP.

🗂️ Categorias de Ferramentas & Níveis de Risco

Nem todas as ferramentas apresentam o mesmo risco. Agrupar por nível de risco ajuda a definir o espaço de ação e onde adicionar checkpoints humanos no loop:

CategoryExamplesRiskRecommendation
Read-only web_search, read_file, get_weather, list_dir Low Permitir autonomamente; registrar todas as chamadas
Escrever (local) write_file, create_dir, edit_code Medium Restringir a um diretório de workspace em sandbox
Rede / Externo send_email, post_to_slack, call_api Médio–Alto Aprovação HITL para envios irreversíveis
OS / Shell run_command, execute_script, install_package High Restringir a ambiente containerizado; HITL necessário
Destructive delete_file, drop_table, revoke_access Critical Sempre exigir confirmação humana explícita

🏗️ Anatomia de um Bom Skill

A decisão de design mais importante para um skill é sua description. O LLM lê as descrições para decidir qual ferramenta chamar — uma descrição mal escrita leva à seleção errada da ferramenta, chamadas perdidas ou argumentos ambíguos.

O que torna uma descrição eficaz

  • Seja explícito sobre quando usá-lo — "Use esta ferramenta quando o usuário pergunta sobre dados em tempo real ou eventos atuais" é melhor que "Busca na web"
  • Declare o que NÃO faz — "Não retorna dados históricos com mais de 30 dias"
  • Descreva o formato de saída — "Retorna um array JSON de resultados de busca com campos title, url e snippet"
  • Mantenha abaixo de 200 palavras — descrições com mais de ~200 tokens podem sobrecarregar a atenção do modelo quando muitas ferramentas estão registradas

Princípios de design de schema

  • Obrigatório vs opcional — Marque campos como obrigatórios somente se realmente necessário; campos opcionais com defaults reduzem erros do modelo
  • Use enums para valores restritos"format": {"enum": ["json", "markdown", "text"]} previne valores alucinatórios
  • Prefira ferramentas idempotentes — Ferramentas que podem ser repetidas com segurança (leituras, consultas) são mais seguras do que ações únicas (envios, exclusões)
  • Retorne dados estruturados — Respostas JSON são mais fáceis para o modelo raciocinar do que blobs de texto não estruturado

💡 Exemplos do Mundo Real

Nome do skillO que fazArgumentos chaveRisk
web_search Consultar um mecanismo de busca e retornar os principais resultados query: string, num_results?: number Low
read_file Ler um arquivo do diretório de workspace path: string, offset?: number, limit?: number Low
write_file Criar ou sobrescrever um arquivo path: string, content: string Medium
run_tests Executar a suíte de testes do projeto e retornar resultados filter?: string Medium
browser_screenshot Navegar para uma URL e retornar uma screenshot url: string Medium
send_email Enviar um email para um ou mais destinatários to: string[], subject: string, body: string Alto — sempre HITL
run_shell Executar um comando shell arbitrário command: string, cwd?: string Alto — sandbox necessário

✅ Boas Práticas

Permissões mínimas

Conceda a cada agente apenas as ferramentas que ele precisa para sua tarefa específica. Um agente que responde FAQ não precisa de write_file or send_email. Quanto menor o espaço de ações, menor o raio de dano se o agente for manipulado. Veja: Agência Excessiva.

Auditar todas as chamadas de ferramenta

Registre toda chamada de ferramenta com seus argumentos e resultado. Isso possibilita depuração, atribuição de custo e detecção de comportamento anômalo (por exemplo, um agente lendo ~/.ssh/ quando deveria somente acessar o diretório do projeto). Plataformas AgentOps como LangSmith tornam isso fácil.

Humano-no-loop para ações irreversíveis

Qualquer ação que seja difícil ou impossível de desfazer — enviar mensagens, excluir dados, fazer compras — deve exigir confirmação humana explícita antes da execução. Construa checkpoints HITL no tempo de execução do agente, não apenas no prompt. Prompts podem ser sobrescritos; código não pode ser.

Cuidado com envenenamento de ferramenta

Se você permite que agentes instalem ou descubram MCP servers dinamicamente, um servidor malicioso pode registrar uma ferramenta com uma descrição que contém instruções ocultas. Sempre revise as descrições de ferramentas antes de adicioná-las ao registro do agente. Veja: Envenenamento de Ferramenta.

Escreva retornos de erro claros

Quando uma ferramenta falha, retorne um erro estruturado com contexto suficiente para o modelo se recuperar ou escalar — não uma stack trace de exceção bruta. Exemplo: { "error": "rate_limited", "retry_after": 5 }. Um erro bem descrito permite que o agente tente novamente, use uma ferramenta alternativa ou informe o usuário com elegância.