\n\n\n\n Building Agent Plugins: Una Guida Rapida con Esempi Pratici - AgntKit \n

Building Agent Plugins: Una Guida Rapida con Esempi Pratici

📖 12 min read2,309 wordsUpdated Apr 5, 2026

Introduzione ai Plugin per Agent

Il campo dell’intelligenza artificiale sta evolvendo rapidamente, con i modelli di linguaggio di grandi dimensioni (LLM) in prima linea in questa rivoluzione. Questi modelli, pur essendo incredibilmente potenti, operano spesso all’interno dei limiti dei dati di addestramento. Per sbloccare veramente il loro potenziale e integrarli in applicazioni del mondo reale, dobbiamo estendere le loro capacità oltre la semplice generazione di testo. Qui entrano in gioco i plugin per agent. I plugin per agent sono fondamentalmente strumenti o funzioni che un agente AI può scegliere di utilizzare per svolgere compiti specifici, accedere a informazioni esterne o interagire con altri sistemi. Colmano il divario tra le capacità di ragionamento dell’LLM e il mondo esterno, trasformando un modello linguistico in un agente sofisticato e orientato agli obiettivi.

Immagina un assistente AI che non solo comprende la tua richiesta di ‘trovare il ristorante italiano più vicino’, ma può effettivamente navigare nel web, filtrare i risultati e fornire indicazioni. Questo livello di funzionalità è raggiunto attraverso i plugin. Questi plugin consentono all’agente di:

  • Accedere a Dati in Tempo Reale: Recuperare informazioni sul meteo attuale, prezzi delle azioni, notizie o informazioni da database.
  • Effettuare Azioni: Inviare email, pianificare appuntamenti, controllare dispositivi smart home o interagire con API.
  • Superare le Limitazioni dell’LLM: Effettuare calcoli complessi, eseguire codice o recuperare informazioni fattuali precise che potrebbero essere al di là dello scopo dei suoi dati di addestramento.

Questa guida ti accompagnerà attraverso i passaggi pratici per costruire plugin per agent, concentrandosi su un approccio di avvio rapido con esempi chiari per aiutarti a iniziare.

Comprendere i Concetti Fondamentali

Come Usano i Plugin gli Agenti

Al suo interno, un agente AI opera su un ciclo di ‘pensa-pianifica-agisci’. Quando viene presentato con un prompt, l’agente prima ‘pensa’ al miglior corso d’azione. Se determina che uno strumento esterno (plugin) è necessario per soddisfare la richiesta, ‘pianifica’ quale plugin utilizzare, quali argomenti passare e poi ‘agisce’ invocando quel plugin. L’output del plugin viene poi restituito all’agente, che utilizza queste nuove informazioni per continuare il suo processo di ragionamento e formulare una risposta finale.

Componenti Chiave di un Plugin

Sebbene le implementazioni possano variare, la maggior parte dei plugin per agent condivide questi componenti fondamentali:

  • Nome: Un identificatore unico per il plugin (es. get_weather, send_email).
  • Descrizione: Una spiegazione concisa di cosa fa il plugin. Questo è cruciale poiché l’LLM utilizza questa descrizione per decidere quando e come usare il plugin.
  • Parametri/Schema: Una definizione degli input che il plugin si aspetta, spesso descritta usando uno schema (come JSON Schema). Questo informa l’LLM quali argomenti fornire.
  • Funzione/Implementazione: Il codice reale che esegue la logica del plugin (es. eseguire una chiamata API, effettuare un calcolo).

Avvio Rapido: Costruisci il Tuo Primo Plugin

Per questo avvio rapido, utilizzeremo un comune framework basato su Python che semplifica lo sviluppo degli agent. Molti framework come LangChain, LlamaIndex, o anche le capacità di chiamata delle funzioni di OpenAI offrono meccanismi simili. Ci concentreremo sui principi che sono trasferibili tra questi.

Prerequisiti

  • Python installato (3.8+)
  • Un ambiente virtuale (consigliato)
  • Comprensione di base delle funzioni Python

Esempio 1: Un Plugin Calcolatore Semplice

Iniziamo con un plugin molto semplice che esegue una somma. Anche se un LLM può fare matematica semplice, questo illustra il processo in modo chiaro.

Passo 1: Definire la Funzione del Plugin

Prima, creiamo una funzione standard in Python che esegue l’operazione desiderata.

# calculator_plugin.py
def add_numbers(num1: float, num2: float) -> float:
 """
 Somma due numeri.
 Args:
 num1 (float): Il primo numero.
 num2 (float): Il secondo numero.
 Returns:
 float: La somma dei due numeri.
 """
 return num1 + num2

Passo 2: Descrivere il Plugin per l’Agente

Qui i framework sono utili. Forniscono decoratori o classi specifiche per trasformare una normale funzione Python in uno strumento chiamabile dall’agente. Dobbiamo fornire una descrizione e, implicitamente, l’LLM dedurrà i parametri dalla firma della funzione e dalle docstring.

Utilizziamo una rappresentazione concettuale del framework (simile a come LangChain o LlamaIndex lo astrarebbero):

# Utilizzando una classe 'Tool' concettuale (simile al Tool di LangChain o al FunctionTool di LlamaIndex)
class CalculatorTool:
 def __init__(self):
 self.name = "add_numbers"
 self.description = (
 "Uno strumento per sommare due numeri. "
 "Utile quando hai bisogno di sommare due valori numerici."
 )
 self.function = add_numbers
 self.parameters = {
 "type": "object",
 "properties": {
 "num1": {"type": "number", "description": "Il primo numero da sommare"},
 "num2": {"type": "number", "description": "Il secondo numero da sommare"}
 },
 "required": ["num1", "num2"]
 }

# Oppure, in modo più pratico, utilizzando la creazione degli strumenti integrata da un framework:

# Esempio con create_function_tool di LangChain
from langchain.tools import create_function_tool

def add_numbers(num1: float, num2: float) -> float:
 """
 Somma due numeri.
 Args:
 num1 (float): Il primo numero.
 num2 (float): Il secondo numero.
 Returns:
 float: La somma dei due numeri.
 """
 return num1 + num2

add_tool = create_function_tool(
 func=add_numbers,
 name="add_numbers",
 description="Uno strumento per sommare due numeri. Utile quando hai bisogno di sommare due valori numerici."
)

print(add_tool.name)
print(add_tool.description)
# print(add_tool.args) # LangChain deduce questo dalla firma della funzione

La descrizione è fondamentale. L’LLM si basa molto su questo per comprendere lo scopo del plugin e quando invocarlo. Rendila chiara, concisa e metti in evidenza la sua utilità.

Passo 3: Integrare con un Agente

Ora, dobbiamo fornire questo strumento a un agente AI. Questo implica tipicamente l’istanza di un LLM e di una classe agent, quindi passarvi la nostra lista di strumenti.

Usando LangChain come esempio:

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

# Presupponendo di avere una chiave API OpenAI impostata come variabile ambiente (OPENAI_API_KEY)
llm = ChatOpenAI(model="gpt-4o", temperature=0)

# Gli strumenti che abbiamo creato
tools = [add_tool]

# Otteniamo il prompt dall'hub di LangChain
prompt = hub.pull("hwchase17/openai-tools-agent")

# Creare l'agente
agent = create_openai_tools_agent(llm, tools, prompt)

# Creare un executor dell'agente per eseguire l'agente
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# Ora, eseguiamolo!
response = agent_executor.invoke({"input": "Qual è 123 + 456?"})
print(response["output"])

Quando esegui questo, vedrai il processo di pensiero dell’agente (se verbose=True):


> Entrando in una nuova catena di AgentExecutor...
Pensiero:
L'utente sta chiedendo di sommare due numeri. Lo strumento `add_numbers` è adatto per questo compito.
Devo chiamare lo strumento `add_numbers` con `num1=123` e `num2=456`.
Azione:
```json
{
 "tool_name": "add_numbers",
 "args": {
 "num1": 123,
 "num2": 456
 }
}
```
Osservazione: 579.0
Pensiero:
Lo strumento `add_numbers` ha restituito 579.0. Questa è la somma di 123 e 456.
Dovrei ora rispondere all'utente con il risultato.
Risposta Finale: La somma di 123 e 456 è 579.0.

> Catena completata.
La somma di 123 e 456 è 579.0.

Esempio Pratico 2: Un Plugin Meteo

Costruiamo un plugin più pratico che recupera informazioni meteorologiche attuali utilizzando un’API pubblica. Utilizzeremo l’API di OpenWeatherMap per questo esempio (avrai bisogno di una chiave API gratuita).

Passo 1: Ottenere una Chiave API

Vai a OpenWeatherMap API e iscriviti per un account gratuito per ottenere una chiave API.

Passo 2: Definire la Funzione del Plugin

Questa funzione effettuerà una richiesta HTTP all’API di OpenWeatherMap.


import requests
import os
from typing import Dict, Any

# Assicurati di impostare la tua chiave API come variabile di environment
# Ad esempio, export OPENWEATHER_API_KEY="YOUR_API_KEY"
OPENWEATHER_API_KEY = os.getenv("OPENWEATHER_API_KEY")

def get_current_weather(city: str, unit: str = "metric") -> Dict[str, Any]:
 """
 Recupera le condizioni meteorologiche attuali per una città specificata.

 Args:
 city (str): Il nome della città (ad es., "Londra", "New York").
 unit (str): L'unità di temperatura. Può essere "metric" (Celsius) o "imperial" (Fahrenheit). Predefinito è "metric".

 Returns:
 dict: Un dizionario contenente informazioni sul tempo, o un messaggio di errore.
 """
 if not OPENWEATHER_API_KEY:
 return {"error": "Chiave API di OpenWeatherMap non impostata."}

 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() # Solleva un HTTPError per risposte non valide (4xx o 5xx)
 data = response.json()

 if data.get("cod") == "404":
 return {"error": f"Città '{city}' non trovata."}

 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"Errore di rete o API: {e}"}
 except KeyError as e:
 return {"error": f"Errore nel parsing dei dati meteo: chiave mancante {e}. Risposta: {data}"}

Passo 3: Crea lo Strumento per l’Agente


from langchain.tools import create_function_tool

weather_tool = create_function_tool(
 func=get_current_weather,
 name="get_current_weather",
 description=(
 "Uno strumento per recuperare le condizioni meteorologiche attuali per una città specificata. "
 "Utile quando si chiede circa il tempo attuale, la temperatura o le condizioni in un luogo. "
 "Fornisci il nome della città e opzionalmente l'unità (metric per Celsius, imperial per Fahrenheit)."
 )
)

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

Nota la descrizione dettagliata, che aiuta il LLM a capire quando utilizzare questo strumento e quali parametri sono necessari.

Passo 4: Integra e Testa

Aggiungi il nuovo strumento alla lista degli strumenti del tuo agente e testalo.


# ... (importazioni precedenti e configurazione LLM)

# Combinare i nostri strumenti
tools = [add_tool, weather_tool]

# Crea l'agente e l'esecutore come prima
agent = create_openai_tools_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# Testa il plugin meteo
response_weather = agent_executor.invoke({"input": "Che tempo fa a Tokyo?"})
print(response_weather["output"])

response_weather_imperial = agent_executor.invoke({"input": "Qual è la temperatura a New York in Fahrenheit?"})
print(response_weather_imperial["output"])

response_invalid_city = agent_executor.invoke({"input": "Dimmi che tempo fa a Nocityhere."})
print(response_invalid_city["output"])

Output atteso (variabile in base al tempo reale e alla configurazione della chiave API):


> Entrando nella nuova catena AgentExecutor...
Pensiero:
L'utente sta chiedendo informazioni sul tempo a Tokyo. Lo strumento `get_current_weather` è appropriato per questo compito.
Dovrei chiamare `get_current_weather` con `city='Tokyo'`.
Azione:
```json
{
 "tool_name": "get_current_weather",
 "args": {
 "city": "Tokyo"
 }
}
```
Osservazione: {'city': 'Tokyo', 'description': 'pioggia leggera', 'temperature': 15.2, 'feels_like': 14.8, 'humidity': 90, 'wind_speed': 3.09, 'unit': 'Celsius'}
Pensiero:
Il tempo a Tokyo è pioggia leggera con una temperatura di 15.2 Celsius, che sembra essere di 14.8 Celsius. L'umidità è del 90% e la velocità del vento è di 3.09 m/s.
Risposta finale: A Tokyo, il tempo attuale è pioggia leggera, con una temperatura di 15.2°C (che sembra 14.8°C). L'umidità è del 90% e la velocità del vento è di 3.09 m/s.
> Catena completata.
A Tokyo, il tempo attuale è pioggia leggera, con una temperatura di 15.2°C (che sembra 14.8°C). L'umidità è del 90% e la velocità del vento è di 3.09 m/s.

Considerazioni Avanzate e Migliori Pratiche

Gestione degli Errori Solida

Come visto nell’esempio meteo, i plugin del mondo reale interagiscono con sistemi esterni che possono fallire. Implementa sempre una gestione degli errori solida (blocchi try-except) per catturare problemi di rete, errori API o formati di dati imprevisti. Restituisci messaggi di errore informativi affinché l’agente possa comprendere cosa è andato storto e comunicare eventualmente il problema all’utente o provare un approccio alternativo.

Descrizioni Chiare e Specifiche

Questo non può essere sottovalutato. La capacità del LLM di scegliere lo strumento corretto dipende quasi interamente dalla qualità della descrizione del tuo plugin. Includi:

  • Cosa fa lo strumento.
  • Quando dovrebbe essere utilizzato.
  • Quali argomenti si aspetta e i loro tipi/scopi.
  • Eventuali vincoli o effetti collaterali.

Validazione dei Parametri

Sebbene il LLM cerchi di inferire i parametri, è buona pratica aggiungere la validazione degli input all’interno delle funzioni del tuo plugin. Questo previene che dati imprevisti causino problemi se il LLM commette un errore o l’utente fornisce input malformati.

Operazioni Asincrone

Per i plugin che coinvolgono operazioni di lunga durata (ad es., query complesse a database, upload di file di grandi dimensioni), considera di implementarle in modo asincrono per evitare di bloccare il thread di esecuzione dell’agente. Molti framework supportano strumenti asincroni.

Gestione dello Stato (Avanzato)

La maggior parte dei plugin semplici sono senza stato. Tuttavia, per interazioni più complesse, un agente potrebbe dover mantenere lo stato tra più turni o chiamate di plugin. Questo è un argomento più avanzato e spesso coinvolge il framework dell’agente nella gestione della cronologia della conversazione o in un’apposita memorizzazione dello stato.

Sicurezza

Fai attenzione alla sicurezza quando esponi funzionalità tramite plugin. Un agente potrebbe eventualmente ricevere richieste di uso improprio di un plugin se non è adeguatamente protetto. Considera:

  • Controllo degli Accessi: Assicurati che i plugin accedano solo alle risorse a cui sono autorizzati.
  • Sanificazione dell’Input: Previeni attacchi di injection se gli input del plugin vengono passati a database o comandi shell.
  • Minimo Privilegio: Concedi ai plugin solo i permessi minimi necessari per eseguire il loro compito.

Catenamento degli Strumenti e Ragionamento

Il vero potere degli agenti emerge quando possono concatenare più strumenti insieme. Ad esempio, un agente potrebbe prima utilizzare uno strumento di ‘ricerca’ per trovare informazioni rilevanti, poi uno strumento di ‘sintesi’ per distillare i contenuti, e infine uno strumento di ’email’ per inviare il riassunto. Progetta i tuoi plugin per essere atomici e composabili, consentendo all’agente di combinarli in modo flessibile.

Conclusione

Costruire plugin per agenti è un modo potente per estendere le capacità dei modelli linguistici di grandi dimensioni, trasformandoli da generatori di testo sofisticati in agenti intelligenti e orientati all’azione. Seguendo questa guida rapida e comprendendo i principi fondamentali, puoi iniziare a integrare dati esterni, servizi e logica complessa nelle tue applicazioni AI.

Ricorda di concentrarti su descrizioni chiare, una gestione degli errori solida e progettare funzioni atomiche e componibili. Man mano che ti sentirai più a tuo agio, puoi esplorare argomenti più avanzati come le operazioni asincrone, la gestione dello stato e la sicurezza per costruire agenti AI sempre più sofisticati e affidabili. Il futuro dell’interazione AI risiede in queste capacità estese, e padroneggiando lo sviluppo di plugin, sei in prima linea in questa entusiasmante frontiera.

🕒 Published:

✍️
Written by Jake Chen

AI technology writer and researcher.

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