\n\n\n\n Criar Plugin para Agentes: Um Guia Prático Rápido - AgntKit \n

Criar Plugin para Agentes: Um Guia Prático Rápido

📖 13 min read2,542 wordsUpdated Apr 5, 2026

Introdução: O Poder dos Plugins para Agentes

No espaço em rápida evolução da inteligência artificial, os modelos de linguagem de grande escala (LLM) estão se tornando cada vez mais sofisticados. No entanto, mesmo os LLM mais avançados têm limites intrínsecos: operam com base nos dados de treinamento, carecem de acesso a informações em tempo real e não podem interagir diretamente com sistemas externos ou realizar ações específicas. É aqui que entram os plugins para agentes. Os plugins para agentes permitem que os LLM ampliem suas capacidades, funcionando como pontes para o mundo externo. Eles permitem que um agente AI execute tarefas para as quais não foi explicitamente treinado, acesse dados proprietários, interaja com APIs e execute ações no mundo real.

Pense em um LLM como uma mente brilhante com vasto conhecimento, mas sem mãos ou olhos fora de seus dados internos. Um plugin oferece essas mãos e olhos. Transforma uma IA conversacional em uma IA acionável, capaz não apenas de compreender, mas também de fazer. Neste artigo, exploraremos os aspectos práticos da criação de plugins para agentes, focando em uma abordagem rápida com exemplos concretos para colocar tudo em funcionamento.

Compreendendo o Conceito Fundamental: LLM, Agente e Plugin

Antes de começar a programar, solidifiquemos nossa compreensão dos componentes-chave:

  • Modelo de Linguagem de Grande Escala (LLM): A AI fundamental que entende e gera linguagem humana. É o cérebro do nosso agente. Exemplos: GPT-4, Claude, Llama 2.
  • Agente: Uma entidade inteligente que utiliza um LLM para raciocinar, planejar e executar tarefas. O trabalho do agente é decidir quando e como usar as ferramentas disponíveis (plugins) para alcançar o objetivo de um usuário. Isso geralmente envolve um ciclo de reflexão e raciocínio.
  • Plugin (ou Ferramenta/Função): Um pedaço de código que o agente pode chamar para realizar uma ação específica ou recuperar informações específicas. Cada plugin tem um propósito bem definido, parâmetros de entrada e uma saída esperada.

O fluxo de interação tipicamente aparece assim: O Usuário faz uma pergunta → O Agente interpreta a solicitação → O Agente decide se um plugin é necessário → O Agente chama o plugin com parâmetros apropriados → O Plugin executa e retorna os resultados → O Agente processa os resultados e responde ao usuário.

A Anatomia de um Plugin para Agentes

Embora frameworks e plataformas específicas possam ter suas próprias convenções, os componentes fundamentais de um plugin para agentes são surpreendentemente similares:

  1. Nome: Um identificador único e descritivo para o plugin (por exemplo, getCurrentWeather, searchWikipedia, sendEmail).
  2. Descrição: Uma explicação clara e concisa sobre o que o plugin faz e quando deve ser utilizado. Isso é crucial para que o LLM compreenda seu propósito e decida se invocá-lo.
  3. Parâmetros (Esquema): Uma definição das entradas que o plugin espera. Isso é frequentemente descrito usando um esquema JSON, especificando nomes dos parâmetros, tipos, descrições e se são obrigatórios.
  4. Implementação (Código): O código real que executa a ação desejada quando o plugin é invocado. Isso pode incluir chamar uma API externa, consultar um banco de dados, realizar um cálculo local ou interagir com uma interface de usuário.
  5. Saída: Os dados retornados pelo plugin após a execução.

Início Rápido: Construindo um Simples Plugin para o Clima

Vamos explorar um exemplo prático. Construiremos um plugin que recupera as condições meteorológicas atuais para uma cidade específica. Para simplificar, usaremos uma API fictícia, mas os princípios se aplicam diretamente a APIs do mundo real.

Passo 1: Definir o Escopo e a Interface do Plugin

Nome: get_current_weather
Descrição: “Recupera as condições meteorológicas atuais para uma cidade especificada. Útil para responder a perguntas sobre temperatura, umidade e panorama geral do clima em uma localização específica.”
Parâmetros: Precisamos da city. Presumimos que seja uma string e necessária.

Passo 2: Implementar a Função do Plugin

Utilizaremos Python para nossos exemplos, pois é amplamente adotado na comunidade AI. Você pode usar qualquer linguagem, mas os conceitos permanecem os mesmos.


import json

def get_current_weather(city: str) -> dict:
 """
 Recupera as condições meteorológicas atuais para uma cidade especificada.
 
 Args:
 city (str): O nome da cidade para a qual obter o clima.
 
 Returns:
 dict: Um dicionário contendo informações meteorológicas (por exemplo, temperatura, condições, umidade).
 """
 # Em um cenário real, você faria uma chamada de API aqui,
 # por exemplo, usando requests.get('https://api.weatherapi.com/v1/current.json?key=YOUR_KEY&q={city}')
 
 # Para este exemplo, retornaremos dados fictícios
 mock_weather_data = {
 "London": {"temperature": 15, "conditions": "Nublado", "humidity": 80},
 "New York": {"temperature": 22, "conditions": "Ensolarado", "humidity": 60},
 "Tokyo": {"temperature": 28, "conditions": "Chuvoso", "humidity": 90},
 "Paris": {"temperature": 18, "conditions": "Parcialmente Nublado", "humidity": 70},
 }
 
 weather = mock_weather_data.get(city, {"temperature": "N/D", "conditions": "Desconhecido", "humidity": "N/D"})
 
 return {"city": city, **weather}

Passo 3: Descrever o Plugin para o LLM (Esquema de Chamada de Função)

Este é, sem dúvida, o passo mais crítico. O LLM não executa código Python diretamente; ele precisa de uma descrição estruturada do plugin para que possa gerar a chamada de função correta. A maioria dos provedores de LLM (OpenAI, Google, Anthropic, etc.) oferece uma capacidade de ‘chamada de função’ ou ‘uso de ferramenta’, onde você fornece um esquema JSON que descreve suas funções. Veja como nosso plugin para o clima seria descrito:


{
 "type": "function",
 "function": {
 "name": "get_current_weather",
 "description": "Recupera as condições meteorológicas atuais para uma cidade especificada. Útil para responder perguntas sobre temperatura, umidade e visão geral climática em uma localização específica.",
 "parameters": {
 "type": "object",
 "properties": {
 "city": {
 "type": "string",
 "description": "O nome da cidade (por exemplo, Londres, Nova York, Tóquio)"
 }
 },
 "required": ["city"]
 }
 }
}

Elementos chave no esquema:

  • type: "function": Indica que se trata de uma definição de função.
  • function.name: Corresponde exatamente ao nome da nossa função Python.
  • function.description: Isso é o que o LLM lê! Deixe claro e detalhado. Inclua casos de uso e exemplos se útil.
  • function.parameters: Um objeto JSON Schema padrão que define as entradas.
  • properties: Define cada parâmetro (city no nosso caso).
  • required: Lista os parâmetros que devem ser fornecidos.

Integração com um LLM (Exemplo OpenAI)

Agora vamos ver como um agente LLM utilizaria este plugin. Usaremos a API de chamada de função da OpenAI como exemplo, mas os conceitos são transferíveis para outros provedores.

“`html


import openai
import os

# Supondo que OPENAI_API_KEY esteja definido nas variáveis de ambiente
# openai.api_key = os.getenv("OPENAI_API_KEY") 

# Nosso esquema de ferramentas definido
tools = [
 {
 "type": "function",
 "function": {
 "name": "get_current_weather",
 "description": "Obtém as condições meteorológicas atuais para uma cidade especificada. Útil para responder a perguntas sobre temperatura, umidade e a perspectiva geral do tempo em uma localidade específica.",
 "parameters": {
 "type": "object",
 "properties": {
 "city": {
 "type": "string",
 "description": "O nome da cidade (por exemplo, Londres, Nova Iorque, Tóquio)"
 }
 },
 "required": ["city"]
 }
 }
 }
]

# A função Python real que definimos anteriormente
def get_current_weather(city: str) -> dict:
 # ... (mesma implementação acima) ...
 mock_weather_data = {
 "London": {"temperature": 15, "conditions": "Nublado", "humidity": 80},
 "New York": {"temperature": 22, "conditions": "Ensolarado", "humidity": 60},
 "Tokyo": {"temperature": 28, "conditions": "Chuvoso", "humidity": 90},
 "Paris": {"temperature": 18, "conditions": "Parcialmente nublado", "humidity": 70},
 }
 weather = mock_weather_data.get(city, {"temperature": "N/D", "conditions": "Desconhecido", "humidity": "N/D"})
 return {"city": city, **weather}

# Um simples ciclo do agente
def run_agent_with_tools(user_query: str):
 messages = [{
 "role": "user", 
 "content": user_query
 }]

 # Primeira chamada ao LLM com a consulta do usuário e as ferramentas disponíveis
 response = openai.chat.completions.create(
 model="gpt-4o", # Ou gpt-3.5-turbo, etc.
 messages=messages,
 tools=tools,
 tool_choice="auto" # Permite que o LLM decida se quer chamar uma ferramenta
 )

 response_message = response.choices[0].message
 messages.append(response_message)

 # Verifica se o LLM decidiu chamar uma ferramenta
 if response_message.tool_calls:
 for tool_call in response_message.tool_calls:
 function_name = tool_call.function.name
 function_args = json.loads(tool_call.function.arguments)
 
 if function_name == "get_current_weather":
 # Executa a ferramenta e obtém o resultado
 tool_output = get_current_weather(city=function_args.get("city"))
 
 # Adiciona a saída da ferramenta ao histórico da conversa
 messages.append({
 "tool_call_id": tool_call.id,
 "role": "tool",
 "name": function_name,
 "content": json.dumps(tool_output)
 })
 
 # Segunda chamada ao LLM com a saída da ferramenta
 final_response = openai.chat.completions.create(
 model="gpt-4o",
 messages=messages
 )
 print(final_response.choices[0].message.content)
 else:
 print(f"Erro: Ferramenta desconhecida chamada: {function_name}")
 else:
 # Nenhuma chamada à ferramenta, apenas resposta direta do LLM
 print(response_message.content)

# Casos de teste
print("--- Consulta 1: Tempo em Londres ---")
run_agent_with_tools("Que tempo faz em Londres?")

print("\n--- Consulta 2: Tempo em Nova Iorque ---")
run_agent_with_tools("Diga a temperatura atual em Nova Iorque.")

print("\n--- Consulta 3: Pergunta geral ---")
run_agent_with_tools("Qual é a capital da França?")

print("\n--- Consulta 4: Tempo em uma cidade desconhecida ---")
run_agent_with_tools("Que tempo faz em Atlântida?")

Explicação do Ciclo do Agente:

  1. Consulta do Usuário: O usuário faz uma pergunta (por exemplo, “Que tempo faz em Londres?”).
  2. Primeira Chamada ao LLM: A consulta do usuário e a lista de ferramentas disponíveis (nosso get_current_weather esquema) são enviadas ao LLM. O LLM analisa a consulta e as descrições das ferramentas.
  3. Decisão do LLM: O LLM, com base em sua compreensão, decide se chama uma ferramenta.
    • Se decidir chamar uma ferramenta, irá gerar um objeto tool_calls especificando o nome da ferramenta e os parâmetros que deseja passar (por exemplo, {"name": "get_current_weather", "arguments": {"city": "London"}}).
    • Se nenhuma ferramenta for pertinente, gerará uma resposta direta em texto.

    “““html

  4. Execução da Ferramenta: Se o LLM gerar uma chamada para uma ferramenta, nosso código agente intercepta isso, extrai o nome da função e os argumentos, e então executa a função Python real (get_current_weather("London")).
  5. Segunda Chamada ao LLM (com Saída da Ferramenta): O resultado da execução da ferramenta é então enviado de volta ao LLM, junto com todo o histórico da conversa. O LLM agora tem a consulta original do usuário, sua decisão de chamar uma ferramenta e o resultado concreto daquela ferramenta.
  6. Resposta Final: O LLM usa essas informações para formular uma resposta em linguagem natural ao usuário, incorporando a saída da ferramenta.

Conceitos Avançados sobre Plugins e Melhores Práticas

Gestão de Erros e Robustez

As APIs do mundo real podem falhar. Seus plugins devem gerenciar erros de maneira elegante (problemas de rede, entradas não válidas, limites de taxa de API, etc.). Retorne mensagens de erro informativas do seu plugin, e o LLM pode frequentemente usá-las para informar o usuário ou até tentar uma nova tentativa com parâmetros corretos.


def get_current_weather_solid(city: str) -> dict:
 try:
 # Simula uma chamada API com potenciais erros
 if city == "Error City":
 raise ValueError("Chamada API falhou para Error City: Serviço indisponível.")
 # ... resto da lógica de dados mock de sucesso ...
 return {"city": city, **weather}
 except Exception as e:
 return {"error": str(e), "city": city}

Plugins Múltiplos e Orquestração de Ferramentas

O verdadeiro poder de um agente vem do uso de múltiplos plugins. Imagine um agente “planejador de viagens” com plugins para:

  • search_flights(origin, destination, date)
  • book_hotel(city, check_in, check_out)
  • get_attractions(city)

O LLM, através de seu raciocínio, pode encadear estas ferramentas. Por exemplo, se um usuário pede, “Planeje uma viagem para Paris no próximo mês e me encontre coisas para fazer,” o LLM pode primeiro chamar search_flights, depois book_hotel (se confirmado pelo usuário), e finalmente get_attractions.

Ao fornecer ferramentas múltiplas, adicione simplesmente mais esquemas JSON à lista tools na sua chamada LLM.

Raciocínio e Reflexão do Agente

Agentes sofisticados não se limitam a executar ferramentas; raciocinam sobre suas ações. Frameworks como LangChain e LlamaIndex fornecem abstrações para isso, frequentemente envolvendo:

  • Planejamento: Dividir objetivos complexos em subtarefas.
  • Seleção de Ferramentas: Escolher a ferramenta mais apropriada para cada subtarefa.
  • Geração de Parâmetros: Extrair argumentos necessários do contexto da conversa.
  • Execução: Executar a ferramenta.
  • Observação: Interpretar a saída da ferramenta.
  • Reflexão: Avaliar se o objetivo foi alcançado ou se são necessárias mais ações/correções.

A descrição do seu plugin pelo LLM é central para esse raciocínio. Uma descrição vaga leva a uma má seleção da ferramenta.

Considerações de Segurança

  • Validação de Entradas: Sempre valide as entradas recebidas do seu plugin, mesmo que geradas pelo LLM. Entradas maliciosas ou inesperadas podem levar a vulnerabilidades.
  • Mínimo Privilégio: Certifique-se de que seu plugin tenha acesso apenas aos recursos que absolutamente precisa.
  • Dados Sensíveis: Tenha extremo cuidado ao gerenciar informações sensíveis. Evite expor segredos diretamente nas descrições dos plugins ou nos logs.
  • Limitação de Taxa/Controle de Acesso: Proteja seus sistemas backend de abusos implementando limitações adequadas de taxa e autenticação para as APIs subjacentes do seu plugin.

Operações Assíncronas

Muitas ações de plugins no mundo real (por exemplo, envio de e-mails, consultas de banco de dados que demoram) são assíncronas. Seu agente pode precisar lidar com isso retornando um ID de trabalho e tendo outro plugin para verificar o estado do trabalho, ou utilizando webhooks.

Conclusão

“`

Desenvolver plugins para agentes é uma habilidade transformadora para quem trabalha com LLM. Vai além da simples conversa, permitindo que os sistemas de IA se tornem verdadeiramente interativos e acionáveis. Seguindo o guia rápido, você aprendeu os componentes fundamentais: definir o propósito do plugin, implementar sua lógica e, de maneira crítica, descrevê-lo efetivamente usando um esquema JSON para o LLM. O poder dessas descrições não pode ser subestimado: elas são a ponte entre a compreensão linguística de um LLM e sua capacidade de interagir com o mundo real.

À medida que você se aventura mais, lembre-se de se concentrar em descrições claras, gerenciamento sólido de erros e orquestração ponderada de múltiplas ferramentas. O futuro dos agentes de IA reside na sua capacidade de se integrar perfeitamente com o vasto ecossistema de software e dados, e os plugins são a chave para desbloquear esse potencial. Comece a experimentar, construa suas ferramentas personalizadas e veja seus agentes de IA ganharem vida!

🕒 Published:

✍️
Written by Jake Chen

AI technology writer and researcher.

Learn more →
Browse Topics: comparisons | libraries | open-source | reviews | toolkits
Scroll to Top