\n\n\n\n Construindo Plugins de Agente: Um Guia Rápido com Exemplos Práticos - AgntKit \n

Construindo Plugins de Agente: Um Guia Rápido com Exemplos Práticos

📖 13 min read2,599 wordsUpdated Mar 31, 2026

Introdução aos Plugins de Agente

O espaço da inteligência artificial está evoluindo rapidamente, com grandes modelos de linguagem (LLMs) na vanguarda dessa revolução. Esses modelos, embora incrivelmente poderosos, muitas vezes operam dentro dos limites de seus dados de treinamento. Para realmente desbloquear seu potencial e integrá-los em aplicações do mundo real, precisamos expandir suas capacidades além da mera geração de texto. É aí que os plugins de agente entram em cena. Os plugins de agente são essencialmente ferramentas ou funções que um agente de IA pode escolher usar para realizar tarefas específicas, acessar informações externas ou interagir com outros sistemas. Eles conectam as habilidades de raciocínio do LLM com o mundo externo, transformando um modelo de linguagem em um agente sofisticado e orientado a objetivos.

Imagine um assistente de IA que não apenas entende seu pedido para ‘encontrar o restaurante italiano mais próximo’, mas que pode realmente navegar na web, filtrar resultados e fornecer direções. Esse nível de funcionalidade é alcançado por meio de plugins. Esses plugins permitem que o agente:

  • Acesse Dados em Tempo Real: Busque informações sobre o clima atual, preços de ações, notícias ou informações de banco de dados.
  • Realize Ações: Envie e-mails, agende compromissos, controle dispositivos de casa inteligente ou interaja com APIs.
  • Supere as Limitações do LLM: Realize cálculos complexos, execute código ou recupere informações factuais precisas que podem estar além do escopo de seus dados de treinamento.

Este guia o guiará através dos passos práticos para construir plugins de agente, focando em uma abordagem rápida com exemplos claros para que você comece a funcionar rapidamente.

Compreendendo os Conceitos Fundamentais

Como os Agentes Usam Plugins

No seu cerne, um agente de IA opera em um ciclo ‘pensar-planejar-agir’. Quando apresentado a um prompt, o agente primeiro ‘pensa’ sobre o melhor curso de ação. Se determinar que uma ferramenta externa (plugin) é necessária para cumprir a solicitação, ele ‘planeja’ qual plugin usar, quais argumentos passar e então ‘age’ invocando esse plugin. A saída do plugin é então alimentada de volta para o agente, que usa essas novas informações para continuar seu processo de raciocínio e formular uma resposta final.

Componentes Chave de um Plugin

Enquanto as implementações podem variar, a maioria dos plugins de agente compartilha esses componentes fundamentais:

  • Nome: Um identificador único para o plugin (por exemplo, get_weather, send_email).
  • Descrição: Uma explicação concisa do que o plugin faz. Isso é crucial, pois o LLM usa essa descrição para decidir quando e como usar o plugin.
  • Parâmetros/Esquema: Uma definição das entradas que o plugin espera, frequentemente descritas usando um esquema (como JSON Schema). Isso informa ao LLM quais argumentos fornecer.
  • Função/Implementação: O código real que executa a lógica do plugin (por exemplo, fazendo uma chamada de API, realizando um cálculo).

Início Rápido: Construindo Seu Primeiro Plugin

Para este início rápido, usaremos um framework comum baseado em Python que simplifica o desenvolvimento de agentes. Muitos frameworks, como LangChain, LlamaIndex ou até mesmo as capacidades de chamada de função da OpenAI, fornecem mecanismos semelhantes. Focaremos nos princípios que são transferíveis entre eles.

Pré-requisitos

  • Python instalado (3.8+)
  • Um ambiente virtual (recomendado)
  • Compreensão básica das funções em Python

Exemplo 1: Um Plugin de Calculadora Simples

Vamos começar com um plugin muito básico que realiza adição. Enquanto um LLM pode fazer matemática simples, isso ilustra o processo de maneira clara.

Passo 1: Definir a Função do Plugin

Primeiro, criamos uma função padrão em Python que realiza a operação desejada.

# calculator_plugin.py
def add_numbers(num1: float, num2: float) -> float:
 """
 Adiciona dois números juntos.
 Args:
 num1 (float): O primeiro número.
 num2 (float): O segundo número.
 Returns:
 float: A soma dos dois números.
 """
 return num1 + num2

Passo 2: Descrever o Plugin para o Agente

É aqui que os frameworks são úteis. Eles fornecem decoradores ou classes específicas para transformar uma função regular em uma ferramenta chamável pelo agente. Precisamos fornecer uma descrição e, implicitamente, o LLM inferirá os parâmetros da assinatura da função e das docstrings.

Vamos usar uma representação de framework conceitual (semelhante a como LangChain ou LlamaIndex a abstrairia):

# Usando uma classe 'Tool' conceitual (semelhante à Tool do LangChain ou FunctionTool do LlamaIndex)
class CalculatorTool:
 def __init__(self):
 self.name = "add_numbers"
 self.description = (
 "Uma ferramenta para adicionar dois números. "
 "Útil quando você precisa somar dois valores numéricos."
 )
 self.function = add_numbers
 self.parameters = {
 "type": "object",
 "properties": {
 "num1": {"type": "number", "description": "O primeiro número a adicionar"},
 "num2": {"type": "number", "description": "O segundo número a adicionar"}
 },
 "required": ["num1", "num2"]
 }

# Ou, mais praticamente, usando a criação de ferramentas incorporada do framework:

# Exemplo com a create_function_tool do LangChain
from langchain.tools import create_function_tool

def add_numbers(num1: float, num2: float) -> float:
 """
 Adiciona dois números juntos.
 Args:
 num1 (float): O primeiro número.
 num2 (float): O segundo número.
 Returns:
 float: A soma dos dois números.
 """
 return num1 + num2

add_tool = create_function_tool(
 func=add_numbers,
 name="add_numbers",
 description="Uma ferramenta para adicionar dois números. Útil quando você precisa somar dois valores numéricos."
)

print(add_tool.name)
print(add_tool.description)
# print(add_tool.args) # O LangChain infere isso da assinatura da função

A description é primordial. O LLM depende fortemente disso para entender o propósito do plugin e quando invocá-lo. Seja claro, conciso e destaque sua utilidade.

Passo 3: Integrar com um Agente

Agora, precisamos fornecer essa ferramenta a um agente de IA. Isso geralmente envolve a instância de um LLM e de uma classe agente, passando nossa lista de ferramentas para ele.

Usando o LangChain como exemplo:

from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_openai_tools_agent
from langchain import hub

# Supondo que você tenha uma chave API da OpenAI configurada como uma variável de ambiente (OPENAI_API_KEY)
llm = ChatOpenAI(model="gpt-4o", temperature=0)

# As ferramentas que criamos
tools = [add_tool]

# Obter o prompt do hub do LangChain
prompt = hub.pull("hwchase17/openai-tools-agent")

# Criar o agente
agent = create_openai_tools_agent(llm, tools, prompt)

# Criar um executor de agente para executar o agente
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# Agora, vamos rodá-lo!
response = agent_executor.invoke({"input": "Qual é 123 + 456?"})
print(response["output"])

Quando você executar isso, verá o processo de pensamento do agente (se verbose=True):


> Entrando em nova cadeia AgentExecutor...
Pensamento:
O usuário está pedindo para adicionar dois números. A ferramenta `add_numbers` é adequada para essa tarefa.
Eu preciso chamar a ferramenta `add_numbers` com `num1=123` e `num2=456`.
Ação:
```json
{
 "tool_name": "add_numbers",
 "args": {
 "num1": 123,
 "num2": 456
 }
}
```
Observação: 579.0
Pensamento:
A ferramenta `add_numbers` retornou 579.0. Esta é a soma de 123 e 456.
Agora eu devo responder ao usuário com o resultado.
Resposta Final: A soma de 123 e 456 é 579.0.

> Cadeia finalizada.
A soma de 123 e 456 é 579.0.

Exemplo Prático 2: Um Plugin de Clima

Vamos construir um plugin mais prático que busca informações sobre o clima atual usando uma API pública. Usaremos a API do OpenWeatherMap para este exemplo (você precisará de uma chave de API gratuita).

Passo 1: Obter uma Chave de API

Vá para API do OpenWeatherMap e inscreva-se para uma conta gratuita para obter uma chave de API.

Passo 2: Definir a Função do Plugin

Esta função fará uma solicitação HTTP para a API do OpenWeatherMap.


import requests
import os
from typing import Dict, Any

# Certifique-se de definir sua chave da API como uma variável de ambiente
# Ex: export OPENWEATHER_API_KEY="SUA_CHAVE_API"
OPENWEATHER_API_KEY = os.getenv("OPENWEATHER_API_KEY")

def get_current_weather(city: str, unit: str = "metric") -> Dict[str, Any]:
 """
 Busca as condições atuais do tempo para uma cidade especificada.

 Args:
 city (str): O nome da cidade (por exemplo, "Londres", "Nova York").
 unit (str): A unidade de temperatura. Pode ser "metric" (Celsius) ou "imperial" (Fahrenheit). O padrão é "metric".

 Returns:
 dict: Um dicionário contendo informações sobre o clima ou uma mensagem de erro.
 """
 if not OPENWEATHER_API_KEY:
 return {"error": "Chave da API do OpenWeatherMap não definida."}

 base_url = "http://api.openweathermap.org/data/2.5/weather"
 params = {
 "q": city,
 "appid": OPENWEATHER_API_KEY,
 "units": unit
 }
 try:
 response = requests.get(base_url, params=params)
 response.raise_for_status() # Levanta um HTTPError para respostas ruins (4xx ou 5xx)
 data = response.json()

 if data.get("cod") == "404":
 return {"error": f"Cidade '{city}' não encontrada."}

 weather_description = data["weather"][0]["description"]
 temperature = data["main"]["temp"]
 feels_like = data["main"]["feels_like"]
 humidity = data["main"]["humidity"]
 wind_speed = data["wind"]["speed"]

 return {
 "city": city,
 "description": weather_description,
 "temperature": temperature,
 "feels_like": feels_like,
 "humidity": humidity,
 "wind_speed": wind_speed,
 "unit": "Celsius" if unit == "metric" else "Fahrenheit"
 }
 except requests.exceptions.RequestException as e:
 return {"error": f"Erro de rede ou API: {e}"}
 except KeyError as e:
 return {"error": f"Erro ao analisar os dados do clima: chave faltando {e}. Resposta: {data}"}

Etapa 3: Crie a Ferramenta para o Agente


from langchain.tools import create_function_tool

weather_tool = create_function_tool(
 func=get_current_weather,
 name="get_current_weather",
 description=(
 "Uma ferramenta para buscar as condições atuais do tempo para uma cidade especificada. "
 "Útil quando perguntado sobre o clima atual, temperatura ou condições em um local. "
 "Forneça o nome da cidade e, opcionalmente, a unidade (metric para Celsius, imperial para Fahrenheit)."
 )
)

print(weather_tool.name)
print(weather_tool.description)

Note a descrição detalhada, que ajuda o LLM a entender quando usar essa ferramenta e quais parâmetros são necessários.

Etapa 4: Integre e Teste

Adicione a nova ferramenta à lista de ferramentas do seu agente e teste-a.


# ... (importações anteriores e configuração do LLM)

# Combine nossas ferramentas
tools = [add_tool, weather_tool]

# Crie o agente e o executor como antes
agent = create_openai_tools_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# Teste o plugin de clima
response_weather = agent_executor.invoke({"input": "Como está o tempo em Tóquio?"})
print(response_weather["output"])

response_weather_imperial = agent_executor.invoke({"input": "Qual é a temperatura em Nova York em Fahrenheit?"})
print(response_weather_imperial["output"])

response_invalid_city = agent_executor.invoke({"input": "Me fale sobre o clima em Nocityhere."})
print(response_invalid_city["output"])

Saída esperada (variará com base nas condições climáticas reais e na configuração da chave da API):


> Entrando na nova cadeia de AgentExecutor...
Pensamento:
O usuário está perguntando sobre o clima em Tóquio. A ferramenta `get_current_weather` é apropriada para essa tarefa.
Devo chamar `get_current_weather` com `city='Tóquio'`.
Ação:
```json
{
 "tool_name": "get_current_weather",
 "args": {
 "city": "Tóquio"
 }
}
```
Observação: {'city': 'Tóquio', 'description': 'chuva leve', 'temperature': 15.2, 'feels_like': 14.8, 'humidity': 90, 'wind_speed': 3.09, 'unit': 'Celsius'}
Pensamento:
O clima em Tóquio é de chuva leve, com uma temperatura de 15.2 Celsius, sentindo como 14.8 Celsius. A umidade é de 90% e a velocidade do vento é 3.09 m/s.
Resposta Final: Em Tóquio, o clima atual é de chuva leve, com uma temperatura de 15.2°C (sensação térmica de 14.8°C). A umidade é de 90% e a velocidade do vento é de 3.09 m/s.
> Cadeia finalizada.
Em Tóquio, o clima atual é de chuva leve, com uma temperatura de 15.2°C (sensação térmica de 14.8°C). A umidade é de 90% e a velocidade do vento é de 3.09 m/s.

Considerações Avançadas e Melhores Práticas

Tratamento de Erros Sólido

Como visto no exemplo do clima, plugins do mundo real interagem com sistemas externos que podem falhar. Sempre implemente um tratamento de erros sólido (blocos try-except) para capturar problemas de rede, erros de API ou formatos de dados inesperados. Retorne mensagens de erro informativas para que o agente compreenda o que deu errado e potencialmente consiga comunicar isso de volta ao usuário ou tentar uma abordagem alternativa.

Descrições Claras e Específicas

Isso não pode ser enfatizado o suficiente. A capacidade do LLM de escolher a ferramenta correta depende quase inteiramente da qualidade da descrição do seu plugin. Inclua:

  • O que a ferramenta faz.
  • Quando deve ser usada.
  • Quais argumentos espera e seus tipos/finalidades.
  • Quaisquer restrições ou efeitos colaterais.

Validação de Parâmetros

Enquanto o LLM tenta inferir parâmetros, é uma boa prática adicionar validação de entrada dentro das funções do seu plugin. Isso evita que dados inesperados causem problemas caso o LLM cometa um erro ou o usuário forneça uma entrada malformada.

Operações Assíncronas

Para plugins que envolvem operações de longa duração (por exemplo, consultas complexas a bancos de dados, uploads grandes de arquivos), considere implementá-los de forma assíncrona para evitar bloquear a thread de execução do agente. Muitas estruturas suportam ferramentas assíncronas.

Gerenciamento de Estado (Avançado)

A maioria dos plugins simples não tem estado. No entanto, para interações mais complexas, um agente pode precisar manter estado ao longo de múltiplos turnos ou chamadas de plugins. Este é um tópico mais avançado e geralmente envolve o framework do agente gerenciando o histórico da conversa ou um armazenamento de estado dedicado.

Segurança

Esteja ciente da segurança ao expor funcionalidades via plugins. Um agente pode ser potencialmente solicitado a abusar de um plugin se não estiver adequadamente protegido. Considere:

  • Controle de Acesso: Garanta que os plugins acessem apenas os recursos que estão autorizados a acessar.
  • Sanitização de Entrada: Previna ataques de injeção caso as entradas do plugin sejam passadas para bancos de dados ou comandos shell.
  • Menor Privilégio: Dê aos plugins apenas as permissões mínimas necessárias para executar sua tarefa.

Encadeamento de Ferramentas e Raciocínio

O verdadeiro poder dos agentes surge quando eles podem encadear várias ferramentas juntos. Por exemplo, um agente pode primeiro usar uma ferramenta de ‘busca’ para encontrar informações relevantes, depois uma ferramenta de ‘resumo’ para destilá-las e, finalmente, uma ferramenta de ’email’ para enviar o resumo. Projete seus plugins para serem atômicos e compostáveis, permitindo que o agente os combine de forma flexível.

Conclusão

Construir plugins para agentes é uma maneira poderosa de estender as capacidades dos grandes modelos de linguagem, transformando-os de geradores de texto sofisticados em agentes inteligentes e orientados à ação. Ao seguir este guia rápido e entender os princípios fundamentais, você pode começar a integrar dados externos, serviços e lógica complexa em suas aplicações de IA.

Lembre-se de focar em descrições claras, tratamento de erros sólido e no design de funções atômicas e compostáveis. À medida que você se sentir mais confortável, pode explorar tópicos mais avançados como operações assíncronas, gerenciamento de estado e segurança para construir agentes de IA cada vez mais sofisticados e confiáveis. O futuro da interação com IA reside nessas capacidades estendidas, e ao dominar o desenvolvimento de plugins, você está na vanguarda dessa emocionante fronteira.

🕒 Published:

✍️
Written by Jake Chen

AI technology writer and researcher.

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