\n\n\n\n Creare Plugin per Agent: Guida Rapida con Esempi Pratici - AgntKit \n

Creare Plugin per Agent: Guida Rapida con Esempi Pratici

📖 12 min read2,362 wordsUpdated Apr 5, 2026

Introduzione ai Plugin dell’Agente

L’ambito dell’intelligenza artificiale sta evolvendo rapidamente, con modelli di linguaggio di grande dimensione (LLMs) in prima linea in questa rivoluzione. Questi modelli, sebbene potenti, operano spesso entro i limiti dei dati di addestramento. Per liberare davvero il loro potenziale e integrarli in applicazioni del mondo reale, dobbiamo espandere le loro capacità oltre la semplice generazione di testo. È qui che entrano in gioco i plugin dell’agente. I plugin dell’agente sono sostanzialmente strumenti o funzioni che un agente IA può decidere 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 di linguaggio in un agente sofisticato e orientato agli obiettivi.

Immaginate un assistente IA che comprende non solo la vostra richiesta di ‘trovare il ristorante italiano più vicino’, ma che può realmente navigare sul web, filtrare i risultati e fornire indicazioni. Questo livello di funzionalità è raggiunto grazie ai plugin. Questi plugin consentono all’agente di :

  • Accedere a Dati in Tempo Reale : Recuperare il meteo attuale, i prezzi delle azioni, le notizie o le informazioni da un database.
  • Effettuare Azioni : Inviare email, pianificare appuntamenti, controllare dispositivi domestici intelligenti o interagire con API.
  • Superare le Limitazioni dei LLM : Effettuare calcoli complessi, eseguire codice o recuperare informazioni fattuali precise che potrebbero oltrepassare i limiti dei suoi dati di addestramento.

Questa guida vi condurrà attraverso i passaggi pratici per la creazione di plugin dell’agente, con un focus su un approccio di avvio rapido con esempi chiari per mettervi in marcia.

Comprendere i Concetti Chiave

Come gli Agenti Utilizzano i Plugin

Al centro di tutto ciò, un agente IA opera su un ciclo di ‘riflettere-pianificare-agire’. Quando gli viene presentato un invito, l’agente ‘riflette’ prima sulla migliore linea di condotta. 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 dell’agente condivide questi componenti fondamentali :

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

Avvio Veloce : Crea il Tuo Primo Plugin

Per questo avvio veloce, utilizzeremo un framework basato su Python che semplifica lo sviluppo di agenti. Molti framework come LangChain, LlamaIndex, o anche le capacità di chiamata di funzione di OpenAI forniscono meccanismi simili. Ci concentreremo sui principi che sono trasferibili tra di essi.

Requisiti Preliminari

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

Esempio 1 : Un Plugin di Calcolatrice Semplice

Iniziamo con un plugin molto basilare che effettua l’addizione. Anche se un LLM può fare semplici operazioni matematiche, questo illustra chiaramente 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:
 """
 Aggiunge due numeri insieme.
 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 sono utili. Forniscono decoratori o classi specifiche per trasformare una funzione Python ordinaria in uno strumento accessibile da un agente. Dobbiamo fornire una descrizione e, implicitamente, il LLM inferirà i parametri dalla firma della funzione e dalle docstring.

Utilizziamo una rappresentazione concettuale del framework (simile a come LangChain o LlamaIndex l’abstrarebbero) :

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

# Oppure, più praticamente, utilizzando la creazione di strumenti integrata di un framework :

# Esempio con la creazione di strumento di funzione di LangChain
from langchain.tools import create_function_tool

def add_numbers(num1: float, num2: float) -> float:
 """
 Aggiunge due numeri insieme.
 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 aggiungere due numeri. Utile quando devi sommare due valori numerici."
)

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

La description è fondamentale. Il LLM si basa notevolmente su questo per comprendere l’obiettivo del plugin e quando invocarlo. Rendere tutto ciò chiaro, conciso e mettere in evidenza la sua utilità.

Passo 3 : Integrare con un Agente

Ora dobbiamo fornire questo strumento a un agente IA. Questo comporta generalmente l’istanza di un LLM e di una classe di agente, quindi passare la nostra lista di strumenti a quest’ultimo.

Utilizzando LangChain come esempio :

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

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

# Gli strumenti che abbiamo creato
tools = [add_tool]

# Recuperare l'invito dal hub di LangChain
prompt = hub.pull("hwchase17/openai-tools-agent")

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

# Creare un esecutore di agente per far funzionare l'agente
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# Ora, facciamolo funzionare!
response = agent_executor.invoke({"input": "Qual è la somma di 123 e 456?"})
print(response["output"])

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


> Entrato in una nuova catena di esecuzione di AgentExecutor...
Pensiero :
L'utente chiede di sommare due numeri. Lo strumento `add_numbers` è appropriato 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 terminata.
La somma di 123 e 456 è 579.0.

Esempio Pratico 2 : Un Plugin Meteo

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

Passo 1 : Ottenere una Chiave API

Vai su l’API OpenWeatherMap e registrati per ottenere una chiave API gratuita.

Passo 2 : Definire la Funzione del Plugin

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


import requests
import os
from typing import Dict, Any

# Assicurati di definire la tua chiave API come variabile d'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 esempio, "Londra", "New York").
 unit (str): L'unità di temperatura. Può essere "metric" (Celsius) o "imperial" (Fahrenheit). Per impostazione predefinita "metric".

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

 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 le 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 durante l'analisi dei dati meteorologici: chiave mancante {e}. Risposta: {data}"}

Passo 3: Creare 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 viene richiesta la meteo attuale, la temperatura o le condizioni in un luogo. "
 "Fornisci il nome della città e, eventualmente, l'unità (metrica per Celsius, imperiale 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 richiede.

Passo 4: Integrare e Testare

Aggiungi il nuovo strumento all’elenco degli strumenti del tuo agente e testalo.


# ... (importazioni precedenti e configurazione del LLM)

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

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

# Testare il plugin meteorologico
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"])

Risultato atteso (variabile in base al meteo reale e alla configurazione della chiave API):


> Entrata in una nuova stringa AgentExecutor...
Riflessione:
L'utente chiede la meteo 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'}
Riflessione:
La meteo a Tokyo è una pioggia leggera con una temperatura di 15.2 Celsius, percepita come 14.8 Celsius. L'umidità è del 90% e la velocità del vento è di 3.09 m/s.
Risposta finale: A Tokyo, la meteo attuale è una pioggia leggera, con una temperatura di 15.2°C (percepita come 14.8°C). L'umidità è del 90% e la velocità del vento è di 3.09 m/s.
> Stringa terminata.
A Tokyo, la meteo attuale è una pioggia leggera, con una temperatura di 15.2°C (percepita come 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

Come visto nell’esempio meteo, i plugin nel mondo reale interagiscono con sistemi esterni che possono fallire. Implementa sempre una gestione degli errori solida (blocchi try-except) per catturare i problemi di rete, errori API o formati di dati imprevisti. Restituisci messaggi di errore informativi affinché l’agente possa capire cosa è andato storto e eventualmente comunicarlo 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 deve essere utilizzato.
  • Quali argomenti si aspetta e i loro tipi/scopi.
  • Tutte le restrizioni o effetti collaterali.

Validazione dei Parametri

Sebbene il LLM cerchi di inferire i parametri, è utile praticare la validazione delle entrate all’interno delle tue funzioni di plugin. Questo impedisce a dati imprevisti di causare problemi se il LLM commette un errore o se l’utente fornisce un’entrata malformata.

Operazioni Asincrone

Per i plugin che comportano operazioni di lunga durata (ad esempio, query complesse in un database, download di file di grandi dimensioni), considera di implementarli 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 è senza stato. Tuttavia, per interazioni più complesse, un agente potrebbe aver bisogno di mantenere uno stato nel corso di più turni o chiamate di plugin. Questo è un argomento più avanzato e comporta spesso che il framework dell’agente gestisca la cronologia della conversazione o una memoria di stato dedicata.

Sicurezza

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

  • Controllo degli Accessi: Assicurati che i plugin accedano solo alle risorse per cui sono autorizzati.
  • Sanificazione delle Entrate: Previeni attacchi di iniezione se le entrate del plugin vengono passate a database o comandi shell.
  • Minimo Privilegio: Fornisci ai plugin solo le autorizzazioni minime necessarie per svolgere il loro compito.

Catena di 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 pertinenti, poi uno strumento di ‘sintesi’ per distillare queste informazioni e infine uno strumento ’email’ per inviare il riepilogo. Progetta i tuoi plugin per essere 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 di linguaggio, trasformandoli da generatori di testo sofisticati in agenti intelligenti e orientati all’azione. Seguendo questa guida di avviamento rapido e comprendendo i principi fondamentali, puoi iniziare a integrare dati esterni, servizi e logiche complesse nelle tue applicazioni di IA.

Non dimenticare di concentrarti su descrizioni chiare, una gestione degli errori robusta e di progettare funzioni atomiche e componibili. Man mano che ti senti più a tuo agio, potrai esplorare argomenti più avanzati come le operazioni asincrone, la gestione dello stato e la sicurezza per costruire agenti IA sempre più sofisticati e affidabili. Il futuro dell’interazione con l’IA 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