\n\n\n\n Creazione di Plugin per Agenti: Una Guida Rapida con Esempi Pratici - AgntKit \n

Creazione di Plugin per Agenti: Una Guida Rapida con Esempi Pratici

📖 12 min read2,322 wordsUpdated Apr 5, 2026

Introduzione ai Plugin per gli Agenti

Lo spazio dell’intelligenza artificiale è in rapida evoluzione, con i modelli linguistici di grandi dimensioni (LLM) in prima linea in questa rivoluzione. Questi modelli, sebbene incredibilmente potenti, operano spesso all’interno dei confini dei loro dati di addestramento. Per sbloccare realmente il loro potenziale e integrarli nelle applicazioni del mondo reale, dobbiamo estendere le loro capacità oltre la semplice generazione di testo. È qui che entrano in gioco i plugin per gli agenti. I plugin per gli agenti sono essenzialmente strumenti o funzioni che un agente AI può scegliere di utilizzare per eseguire compiti specifici, accedere a informazioni esterne o interagire con altri sistemi. Colmano il divario tra le capacità di ragionamento del LLM e il mondo esterno, trasformando un modello linguistico in un agente sofisticato 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 sul web, filtrare i risultati e fornire indicazioni. Questo livello di funzionalità si ottiene tramite i plugin. Questi plugin consentono all’agente di:

  • Accedere ai dati in tempo reale: Recuperare le condizioni meteorologiche attuali, i prezzi delle azioni, le notizie o le informazioni di database.
  • Completare azioni: Inviare email, programmare appuntamenti, controllare dispositivi smart home o interagire con API.
  • Superare le limitazioni dei LLM: Eseguire calcoli complessi, eseguire codice o recuperare informazioni fattuali precise che potrebbero essere al di fuori dell’ambito dei dati di addestramento.

Questa guida ti condurrà attraverso i passaggi pratici per costruire plugin per agenti, concentrandosi su un approccio di avvio rapido con esempi chiari per metterti in carreggiata.

Comprendere i Concetti Fondamentali

Come gli Agenti Usano i Plugin

Alla base, 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 è necessario uno strumento esterno (plugin) per soddisfare la richiesta, ‘pianifica’ quale plugin utilizzare, quali argomenti passare e poi ‘agisce’ invocando quel plugin. L’output del plugin viene quindi 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 agenti 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 usa questa descrizione per decidere quando e come utilizzare il plugin.
  • Parametri/Schemi: Una definizione degli input che il plugin si aspetta, spesso descritti utilizzando uno schema (come JSON Schema). Questo indica all’LLM quali argomenti fornire.
  • Funzione/Implementazione: Il codice effettivo che esegue la logica del plugin (es. fare una chiamata API, eseguire un calcolo).

Avvio Veloce: Costruisci il Tuo Primo Plugin

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

Requisiti

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

Esempio 1: Un Plugin Calcolatore Semplice

Iniziamo con un plugin molto semplice che esegue un’operazione di somma. Sebbene un LLM possa eseguire semplici operazioni matematiche, questo illustra bene il processo.

Passo 1: Definire la Funzione del Plugin

Per prima cosa, creiamo una funzione Python standard 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 che i framework si rivelano utili. Forniscono decoratori o classi specifiche per trasformare una funzione Python regolare in uno strumento chiamabile dall’agente. Dobbiamo fornire una descrizione e, implicitamente, l’LLM inferirà i parametri dalla firma della funzione e dalle docstring.

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

# Usando una classe 'Tool' concettuale (simile a Tool di LangChain o FunctionTool di LlamaIndex)
class CalculatorTool:
 def __init__(self):
 self.name = "add_numbers"
 self.description = (
 "Uno strumento per sommare due numeri. "
 "Utilitario 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, usando la creazione dello strumento incorporata di un framework:

# Esempio con la 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. Utilitario quando hai bisogno di sommare due valori numerici."
)

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

La descrizione è fondamentale. L’LLM si basa pesantemente su questo per capire lo scopo del plugin e quando invocarlo. Rendila chiara, concisa e evidenzia la sua utilità.

Passo 3: Integrare con un Agente

Ora, dobbiamo fornire questo strumento a un agente AI. Questo coinvolge tipicamente l’istanza di un LLM e di una classe agente, passando poi la nostra lista di strumenti ad essa.

Usando LangChain come esempio:

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

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

# Gli strumenti che abbiamo creato
tools = [add_tool]

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

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

# Crea un esecutore di agenti per far funzionare 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 un nuovo chain di AgentExecutor...
Pensiero:
L'utente chiede 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.
Ora dovrei rispondere all'utente con il risultato.
Risposta Finale: La somma di 123 e 456 è 579.0.

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

Esempio Pratico 2: Un Plugin Meteorologico

Costruiamo un plugin più pratico che recupera le 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

Visita OpenWeatherMap API e registrati 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 ambiente
# 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 misura della temperatura. Può essere "metric" (Celsius) o "imperial" (Fahrenheit). Predefinito a "metric".

 Returns:
 dict: Un dizionario contenente informazioni meteorologiche, oppure 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 errate (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 meteorologici: 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 del meteo attuale, della temperatura o delle condizioni in una posizione. "
 "Fornisci il nome della città e facoltativamente 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 comprendere quando utilizzare questo strumento e quali parametri necessita.

Passo 4: Integra e Testa

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


# ... (importazioni e configurazione LLM precedenti)

# Combina 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": "Com'è il tempo 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 il tempo a Nocityhere."})
print(response_invalid_city["output"])

Output atteso (variabile in base alle condizioni meteo reali e alla configurazione della chiave API):


> Entrando nella nuova catena AgentExecutor...
Pensiero:
L'utente sta chiedendo del 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 meteo a Tokyo è pioggia leggera con una temperatura di 15.2 Celsius, che si sente come 14.8 Celsius. L'umidità è del 90% e la velocità del vento è di 3.09 m/s.
Risposta finale: A Tokyo, il meteo attuale è pioggia leggera, con una temperatura di 15.2°C (percepita come 14.8°C). L'umidità è al 90% e la velocità del vento è di 3.09 m/s.
> Catena terminata.
A Tokyo, il meteo attuale è pioggia leggera, con una temperatura di 15.2°C (percepita come 14.8°C). L'umidità è al 90% e la velocità del vento è di 3.09 m/s.

Considerazioni Avanzate e Best Practices

Gestione degli Errori Solida

Come visto nell’esempio meteorologico, 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 in modo che l’agente possa comprendere cosa è andato storto e potenzialmente comunicarlo all’utente o provare un approccio alternativo.

Descrizioni Chiare e Specifiche

Questo non può essere sottolineato abbastanza. 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 dedurre i parametri, è buona prassi 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 se l’utente fornisce input malformati.

Operazioni Asincrone

Per i plugin che comportano operazioni a lungo termine (ad es., query di database complesse, caricamenti 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 (Avanzata)

La maggior parte dei plugin semplici sono senza stato. Tuttavia, per interazioni più complesse, un agente potrebbe aver bisogno di mantenere lo stato nel corso di più turni o chiamate al plugin. Questo è un argomento più avanzato e spesso implica la gestione della cronologia delle conversazioni o un archivio di stato dedicato da parte del framework dell’agente.

Sicurezza

Fai attenzione alla sicurezza quando esponi funzionalità tramite plugin. Un agente potrebbe potenzialmente essere indotto ad abusare di un plugin se non adeguatamente protetto. Considera:

  • Controllo degli Accessi: Assicurati che i plugin accedano solo alle risorse a cui sono autorizzati.
  • Sanitizzazione degli Input: Previeni attacchi di iniezione se gli input del plugin sono passati a database o comandi shell.
  • Minimo Privilegio: Fornisci ai plugin solo le autorizzazioni minime necessarie per svolgere il loro compito.

Combinazione 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 tali informazioni e infine uno strumento di email per inviare il riassunto. Progetta i tuoi plugin in modo che siano atomici e componibili, consentendo all’agente di combinarli in modo flessibile.

Conclusione

Costruire plugin per agenti è un modo potente per estendere le capacità dei grandi modelli linguistici, 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, gestione solida degli errori e progettazione di funzioni atomiche e componibili. Man mano che diventi più a tuo agio, puoi esplorare argomenti più avanzati come operazioni asincrone, gestione dello stato e 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 questo entusiasmante confine.

🕒 Published:

✍️
Written by Jake Chen

AI technology writer and researcher.

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