\n\n\n\n Criar plugins de agente: um guia prático de início rápido - AgntKit \n

Criar plugins de agente: um guia prático de início rápido

📖 13 min read2,594 wordsUpdated Mar 31, 2026

Introdução: O poder dos plugins de agente

No campo em rápida evolução da inteligência artificial, os modelos de linguagem grande (LLMs) estão se tornando cada vez mais sofisticados. No entanto, mesmo os LLMs mais avançados têm limitações inerentes: eles funcionam com base em seus dados de treinamento, não têm acesso a informações em tempo real e não podem interagir diretamente com sistemas externos ou realizar ações específicas. É aí que os plugins de agente entram em cena. Os plugins de agente permitem que os LLMs ampliem suas capacidades, agindo como pontes para o mundo exterior. Eles possibilitam que um agente IA 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 um vasto conhecimento, mas sem mãos ou olhos além de seus dados internos. Um plugin lhe dá essas mãos e esses olhos. Ele transforma uma IA conversacional em uma IA acionável, capaz não apenas de entender, mas também de fazer. Neste artigo, exploraremos os aspectos práticos da criação de plugins de agente, focando em uma abordagem de início rápido com exemplos concretos para ajudar você a começar.

Compreendendo o conceito básico: LLM, agente e plugin

Antes de começarmos a codificar, consolidemos nossa compreensão dos componentes-chave:

  • Modelo de linguagem grande (LLM): A IA fundamental que compreende e gera a linguagem humana. É o cérebro do nosso agente. Exemplos: GPT-4, Claude, Llama 2.
  • Agente: Uma entidade inteligente que usa um LLM para raciocinar, planejar e executar tarefas. O papel do agente é decidir quando e como usar as ferramentas disponíveis (plugins) para atingir o objetivo de um usuário. Isso geralmente envolve um loop 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 uma informação precisa. Cada plugin tem um objetivo bem definido, parâmetros de entrada e uma saída esperada.

O fluxo de interação geralmente ocorre da seguinte forma: 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 os parâmetros apropriados → O plugin é executado e retorna os resultados → O agente processa os resultados e responde ao usuário.

A anatomia de um plugin de agente

Embora frameworks e plataformas específicas possam ter suas próprias convenções, os componentes fundamentais de um plugin de agente são notavelmente 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 do que o plugin faz e quando deve ser usado. Isso é crucial para que o LLM compreenda seu objetivo e decida se deve invocá-lo.
  3. Parâmetros (Esquema): Uma definição das entradas que o plugin espera. Isso é frequentemente descrito usando um esquema JSON, especificando os nomes dos parâmetros, os tipos, as descrições e se são necessários.
  4. Implementação (Código): O código real que executa a ação desejada quando o plugin é invocado. Isso pode ser a chamada a uma API externa, a consulta a um banco de dados, a execução de um cálculo local ou a interação com uma interface de usuário.
  5. Saída: Os dados retornados pelo plugin após a execução.

Início rápido: criação de um simples plugin de clima

Vamos explorar um exemplo prático. Vamos criar um plugin que recupera o clima atual de uma cidade específica. Para simplificar, usaremos uma API fictícia, mas os princípios se aplicam diretamente a APIs reais.

Etapa 1: Definir o propósito 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 a temperatura, a umidade e o estado geral do clima em um local específico.”
Parâmetros: Precisamos da city. Suponhamos que seja uma string e que seja obrigatória.

Etapa 2: Implementar a função do plugin

Usaremos Python para nossos exemplos, pois é amplamente adotado na comunidade de IA. 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 obter a previsão do tempo.
 
 Returns:
 dict: Um dicionário contendo informações meteorológicas (por exemplo, temperatura, condições, umidade).
 """
 # Em um cenário real, você faria aqui uma chamada API,
 # 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/A", "conditions": "Desconhecido", "humidity": "N/A"})
 
 return {"city": city, **weather}

Etapa 3: Descrever o plugin para o LLM (Esquema de chamada de função)

Esta é sem dúvida a etapa mais crítica. O LLM não executa diretamente o código Python; ele precisa de uma descrição estruturada do plugin para 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 descrevendo suas funções. Aqui está como nosso plugin de 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 a perguntas sobre a temperatura, a umidade e o estado geral do clima em um local específico.",
 "parameters": {
 "type": "object",
 "properties": {
 "city": {
 "type": "string",
 "description": "O nome da cidade (por exemplo, Londres, Nova Iorque, 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 nosso nome de função Python.
  • function.description: É o que o LLM lê! Seja claro e detalhado. Inclua casos de uso e exemplos se isso for útil.
  • function.parameters: Um objeto padrão JSON Schema definindo as entradas.
  • properties: Define cada parâmetro (city em nosso caso).
  • required: Lista dos parâmetros que devem ser fornecidos.

Integração com um LLM (Exemplo OpenAI)

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


import openai
import os

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

# Nosso esquema de ferramenta definido
tools = [
 {
 "type": "function",
 "function": {
 "name": "get_current_weather",
 "description": "Obtém as condições meteorológicas atuais para uma cidade específica. Útil para responder perguntas sobre temperatura, umidade e previsões meteorológicas gerais em um local específico.",
 "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 que 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/A", "conditions": "Desconhecido", "humidity": "N/A"})
 return {"city": city, **weather}

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

 # Primeiro chamado 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)

 # Verifique 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":
 # Execute a ferramenta e obtenha o resultado
 tool_output = get_current_weather(city=function_args.get("city"))
 
 # Adicione a saída da ferramenta ao histórico de conversação
 messages.append({
 "tool_call_id": tool_call.id,
 "role": "tool",
 "name": function_name,
 "content": json.dumps(tool_output)
 })
 
 # Segundo chamado 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:
 # Sem chamada de ferramenta, apenas uma resposta direta do LLM
 print(response_message.content)

# Casos de teste
print("--- Consulta 1: Tempo em Londres ---")
run_agent_with_tools("Como está o tempo em Londres?")

print("\n--- Consulta 2: Tempo em Nova Iorque ---")
run_agent_with_tools("Qual é 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("Como está o tempo em Atlântida?")

Explicação do loop do agente:

  1. Consulta do usuário: O usuário faz uma pergunta (por exemplo, “Como está o tempo em Londres?”).
  2. Primeiro chamado 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 deve chamar uma ferramenta.
    • Se decidir chamar uma ferramenta, ele 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 não houver ferramenta relevante, ele gerará uma resposta textual direta.
  4. Execução da ferramenta: Se o LLM gerar uma chamada de ferramenta, nosso código de 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. Segundo chamado ao LLM (com saída da ferramenta): O resultado da execução da ferramenta é então enviado novamente ao LLM, com todo o histórico de conversação. O LLM agora tem a consulta original do usuário, sua própria decisão de chamar uma ferramenta e o resultado concreto dessa ferramenta.
  6. Resposta final: O LLM usa essas informações para formular uma resposta em linguagem natural ao usuário, integrando a saída da ferramenta.

Conceitos avançados de plugins e melhores práticas

Gerenciamento de erros e resistência

As APIs do mundo real falham. Seus plugins devem gerenciar os erros com facilidade (problemas de rede, entradas inválidas, limites de taxa da API, etc.). Retorne mensagens de erro informativas do seu plugin e o LLM pode muitas vezes usá-las para informar o usuário ou até tentar novamente com parâmetros corrigidos.


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

Múltiplos plugins e orquestração de ferramentas

O verdadeiro poder de um agente reside na utilização de vários 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, por meio de seu raciocínio, pode encadear essas ferramentas. Por exemplo, se um usuário pedir, “Planeje uma viagem a Paris no próximo mês e encontre coisas para fazer”, o LLM poderia primeiro chamar search_flights, depois book_hotel (se confirmado pelo usuário), e por último get_attractions.

Ao fornecer várias ferramentas, basta adicionar mais esquemas JSON à lista tools em sua chamada LLM.

Raciocínio e reflexão dos agentes

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

  • Planejamento: Decompor objetivos complexos em subtarefas.
  • Seleção de ferramentas: Escolher a ferramenta mais apropriada para cada subtarefa.
  • Geração de parâmetros: Extrair os argumentos necessários a partir 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 outras ações/correções são necessárias.

A descrição do seu plugin pelo LLM é central para esse raciocínio. Uma descrição vaga leva a uma seleção de ferramentas medíocre.

Considerações de segurança

  • Validação de entradas: Sempre valide as entradas recebidas pelo seu plugin, mesmo que o LLM as tenha gerado. Entradas maliciosas ou inesperadas podem levar a vulnerabilidades.
  • Menor privilégio: Certifique-se de que seu plugin tenha acesso apenas aos recursos dos quais realmente precisa.
  • Dados sensíveis: Seja extremamente cauteloso ao manipular informações sensíveis. Evite expor diretamente segredos nas descrições de plugins ou nos logs.
  • Controle de acesso/Limitação de taxa: Proteja seus sistemas de backend contra abusos implementando limites de taxa apropriados e autenticação para as APIs subjacentes do seu plugin.

Operações assíncronas

muitas ações de plugin do mundo real (por exemplo, enviar e-mails, consultas longas de banco de dados) 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 usando webhooks.

Conclusão

Construir plugins de agente é uma habilidade transformadora para qualquer um que trabalhe com LLM. Isso vai além da simples conversa, permitindo que os sistemas de IA se tornem verdadeiramente interativos e acionáveis. Seguindo o guia de início rápido, você aprendeu os componentes fundamentais: definir o objetivo do plugin, implementar sua lógica e, de maneira crucial, descrevê-lo de forma eficaz usando um esquema JSON para o LLM. O poder dessas descrições não pode ser exagerado: elas são a ponte entre a compreensão linguística de um LLM e sua capacidade de interagir com o mundo real.

Ao avançar, não se esqueça de se concentrar em descrições claras, uma gestão de erros eficiente e uma orquestração cuidadosa de várias ferramentas. O futuro dos agentes de IA reside na sua capacidade de se integrar de forma harmoniosa com o vasto ecossistema de softwares e dados, e os plugins são a chave para desbloquear esse potencial. Comece a experimentar, construa suas próprias ferramentas personalizadas e veja seus agentes de IA ganhar vida!

🕒 Published:

✍️
Written by Jake Chen

AI technology writer and researcher.

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