\n\n\n\n Creare plugin per agenti: una guida pratica per un avvio rapido - AgntKit \n

Creare plugin per agenti: una guida pratica per un avvio rapido

📖 12 min read2,305 wordsUpdated Apr 5, 2026

Introduzione : La potenza dei plugin d’agente

Nel campo in rapida evoluzione dell’intelligenza artificiale, i modelli di linguaggio ampio (LLM) stanno diventando sempre più sofisticati. Tuttavia, anche i LLM più avanzati hanno limitazioni intrinseche: funzionano solo sui loro dati di addestramento, mancano di accesso a informazioni in tempo reale e non possono interagire direttamente con sistemi esterni o svolgere azioni specifiche. È qui che entrano in gioco i plugin d’agente. I plugin d’agente consentono ai LLM di espandere le loro capacità, fungendo da ponti verso il mondo esterno. Essi consentono a un agente IA di svolgere compiti per i quali non è stato esplicitamente addestrato, di accedere a dati proprietari, di interagire con API e di eseguire azioni nel mondo reale.

Pensa a un LLM come a una mente brillante con una vasta conoscenza, ma senza mani e occhi al di là dei suoi dati interni. Un plugin gli dà queste mani e questi occhi. Trasforma un’IA conversazionale in un’IA atta all’azione, capace non solo di comprendere, ma anche di fare. In questo articolo, esploreremo gli aspetti pratici della creazione di plugin d’agente, concentrandoci su un approccio per un avvio rapido con esempi concreti per aiutarti a iniziare.

Comprendere il concetto di base : LLM, agente e plugin

Prima di iniziare a scrivere codice, consolidiamo la nostra comprensione dei componenti chiave :

  • Modello di linguaggio ampio (LLM) : L’IA fondamentale che comprende e genera il linguaggio umano. È il cervello del nostro agente. Esempi : GPT-4, Claude, Llama 2.
  • Agente : Un entità intelligente che utilizza un LLM per ragionare, pianificare ed eseguire compiti. Il compito dell’agente è decidere quando e come utilizzare gli strumenti disponibili (plugin) per raggiungere l’obiettivo di un utente. Questo comporta spesso un ciclo di riflessione e ragionamento.
  • Plugin (o strumento/funzione) : Un pezzo di codice che l’agente può chiamare per eseguire un’azione specifica o recuperare un’informazione precisa. Ogni plugin ha un obiettivo ben definito, parametri di input e un output atteso.

Il flusso di interazione si svolge generalmente come segue : L’utente pone una domanda → L’agente interpreta la richiesta → L’agente decide se è necessario un plugin → L’agente chiama il plugin con i parametri appropriati → Il plugin si esegue e restituisce i risultati → L’agente elabora i risultati e risponde all’utente.

L’anatomia di un plugin d’agente

Sebbene framework e piattaforme specifiche possano avere le proprie convenzioni, i componenti fondamentali di un plugin d’agente sono sorprendentemente simili :

  1. Nome : Un identificatore unico e descrittivo per il plugin (ad esempio, getCurrentWeather, searchWikipedia, sendEmail).
  2. Descrizione : Una spiegazione chiara e concisa di cosa fa il plugin e quando deve essere utilizzato. Questo è cruciale affinché il LLM comprenda il suo scopo e decida se deve invocarlo.
  3. Parametri (Schema) : Una definizione degli input che il plugin si aspetta. Questo è spesso descritto utilizzando uno schema JSON, specificando i nomi dei parametri, i tipi, le descrizioni e se sono richiesti.
  4. Implementazione (Codice) : Il codice reale che esegue l’azione desiderata quando il plugin viene invocato. Potrebbe essere una chiamata a un’API esterna, l’interrogazione di un database, l’esecuzione di un calcolo locale o l’interazione con un’interfaccia utente.
  5. Output : I dati restituiti dal plugin dopo l’esecuzione.

Avvio rapido : creazione di un semplice plugin meteo

Esploriamo un esempio pratico. Creeremo un plugin che recupera la meteo attuale di una città specifica. Per semplificare, utilizzeremo un’API fittizia, ma i principi si applicano direttamente alle API reali.

Passo 1 : Definire lo scopo e l’interfaccia del plugin

Nome : get_current_weather
Descrizione : « Recupera le condizioni meteorologiche attuali per una città specificata. Utile per rispondere a domande sulla temperatura, l’umidità e lo stato generale della meteorologia in un luogo specifico. »
Parametri : Abbiamo bisogno della city. Supponiamo che sia una stringa e che sia richiesta.

Passo 2 : Implementare la funzione del plugin

Utilizzeremo Python per i nostri esempi, poiché è ampiamente adottato nella comunità IA. Puoi usare qualsiasi linguaggio, ma i concetti rimangono gli stessi.


import json

def get_current_weather(city: str) -> dict:
 """
 Recupera le condizioni meteorologiche attuali per una città specificata.
 
 Args:
 city (str): Il nome della città per ottenere la meteo.
 
 Returns:
 dict: Un dizionario contenente informazioni meteorologiche (ad esempio, temperatura, condizioni, umidità).
 """
 # In uno scenario reale, faresti qui una chiamata API,
 # ad esempio, utilizzando requests.get('https://api.weatherapi.com/v1/current.json?key=YOUR_KEY&q={city}')
 
 # Per questo esempio, restituiremo dati fittizi
 mock_weather_data = {
 "London": {"temperature": 15, "conditions": "Nuvoloso", "humidity": 80},
 "New York": {"temperature": 22, "conditions": "Soleggiato", "humidity": 60},
 "Tokyo": {"temperature": 28, "conditions": "Piovoso", "humidity": 90},
 "Paris": {"temperature": 18, "conditions": "Parzialmente nuvoloso", "humidity": 70},
 }
 
 weather = mock_weather_data.get(city, {"temperature": "N/A", "conditions": "Sconosciuto", "humidity": "N/A"})
 
 return {"city": city, **weather}

Passo 3 : Descrivere il plugin per il LLM (Schema di chiamata di funzione)

Questa è senza dubbio la fase più critica. Il LLM non esegue direttamente il codice Python; ha bisogno di una descrizione strutturata del plugin per generare la chiamata di funzione corretta. La maggior parte dei fornitori di LLM (OpenAI, Google, Anthropic, ecc.) offre una capacità di “chiamata di funzione” o “utilizzo di strumento”, dove fornisci uno schema JSON che descrive le tue funzioni. Ecco come sarebbe descritto il nostro plugin meteo :


{
 "type": "function",
 "function": {
 "name": "get_current_weather",
 "description": "Recupera le condizioni meteorologiche attuali per una città specificata. Utile per rispondere a domande sulla temperatura, l'umidità e lo stato generale della meteorologia in un luogo specifico.",
 "parameters": {
 "type": "object",
 "properties": {
 "city": {
 "type": "string",
 "description": "Il nome della città (ad esempio, Londra, New York, Tokyo)"
 }
 },
 "required": ["city"]
 }
 }
}

Elementi chiave nello schema :

  • type: "function" : Indica che si tratta di una definizione di funzione.
  • function.name : Corrisponde esattamente al nostro nome di funzione Python.
  • function.description : È ciò che il LLM legge! Sii chiaro e dettagliato. Includi casi d’uso e esempi se utile.
  • function.parameters : Un oggetto JSON Schema standard che definisce gli input.
  • properties : Definisce ogni parametro (city nel nostro caso).
  • required : Elenco dei parametri che devono essere forniti.

Integrazione con un LLM (Esempio OpenAI)

Ora vediamo come un agente LLM utilizzerebbe questo plugin. Utilizzeremo l’API di chiamata di funzione di OpenAI come esempio, ma i concetti sono trasferibili ad altri fornitori.


import openai
import os

# Supponiamo che OPENAI_API_KEY sia definito nelle tue variabili d'ambiente
# openai.api_key = os.getenv("OPENAI_API_KEY") 

# Il nostro schema dello strumento definito
tools = [
 {
 "type": "function",
 "function": {
 "name": "get_current_weather",
 "description": "Ottiene le condizioni meteorologiche attuali per una città specificata. Utile per rispondere a domande riguardanti la temperatura, l'umidità e le previsioni meteorologiche generali in un luogo specifico.",
 "parameters": {
 "type": "object",
 "properties": {
 "city": {
 "type": "string",
 "description": "Il nome della città (ad esempio, Londra, New York, Tokyo)"
 }
 },
 "required": ["city"]
 }
 }
 }
]

# La funzione Python reale che abbiamo definito in precedenza
def get_current_weather(city: str) -> dict:
 # ... (stessa implementazione di sopra) ...
 mock_weather_data = {
 "London": {"temperature": 15, "conditions": "Nuvoloso", "humidity": 80},
 "New York": {"temperature": 22, "conditions": "Soleggiato", "humidity": 60},
 "Tokyo": {"temperature": 28, "conditions": "Piovoso", "humidity": 90},
 "Paris": {"temperature": 18, "conditions": "Parzialmente nuvoloso", "humidity": 70},
 }
 weather = mock_weather_data.get(city, {"temperature": "N/A", "conditions": "Sconosciuto", "humidity": "N/A"})
 return {"city": city, **weather}

# Un semplice ciclo dell'agente
def run_agent_with_tools(user_query: str):
 messages = [{
 "role": "user", 
 "content": user_query
 }]

 # Primo chiamata al LLM con la richiesta dell'utente e gli strumenti disponibili
 response = openai.chat.completions.create(
 model="gpt-4o", # O gpt-3.5-turbo, ecc.
 messages=messages,
 tools=tools,
 tool_choice="auto" # Consente al LLM di decidere se vuole chiamare uno strumento
 )

 response_message = response.choices[0].message
 messages.append(response_message)

 # Controlla se il LLM ha deciso di chiamare uno strumento
 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":
 # Esegui lo strumento e ottieni il risultato
 tool_output = get_current_weather(city=function_args.get("city"))
 
 # Aggiungi l'output dello strumento alla cronologia della conversazione
 messages.append({
 "tool_call_id": tool_call.id,
 "role": "tool",
 "name": function_name,
 "content": json.dumps(tool_output)
 })
 
 # Seconda chiamata al LLM con l'output dello strumento
 final_response = openai.chat.completions.create(
 model="gpt-4o",
 messages=messages
 )
 print(final_response.choices[0].message.content)
 else:
 print(f"Errore: Strumento sconosciuto chiamato: {function_name}")
 else:
 # Nessuna chiamata allo strumento, solo una risposta diretta dal LLM
 print(response_message.content)

# Casi di test
print("--- Richiesta 1: Meteo a Londra ---")
run_agent_with_tools("Che tempo fa a Londra?")

print("\n--- Richiesta 2: Meteo a New York ---")
run_agent_with_tools("Dimmi la temperatura attuale a New York.")

print("\n--- Richiesta 3: Domanda generale ---")
run_agent_with_tools("Qual è la capitale della Francia?")

print("\n--- Richiesta 4: Meteo in una città sconosciuta ---")
run_agent_with_tools("Che tempo fa ad Atlantide?")

Spiegazione del ciclo dell’agente :

  1. Richiesta dell’utente: L’utente pone una domanda (ad esempio, « Che tempo fa a Londra? »).
  2. Primo chiamata LLM: La richiesta dell’utente e l’elenco degli strumenti disponibili (il nostro get_current_weather schema) vengono inviati al LLM. Il LLM analizza la richiesta e le descrizioni degli strumenti.
  3. Decisione del LLM: Il LLM, in base alla sua comprensione, decide se deve chiamare uno strumento.
    • Se decide di chiamare uno strumento, genererà un oggetto tool_calls specificando il nome dello strumento e i parametri che desidera passare (ad esempio, {"name": "get_current_weather", "arguments": {"city": "London"}}).
    • Se non c’è uno strumento pertinente, genererà una risposta testuale diretta.
  4. Esecuzione dello strumento: Se il LLM genera una chiamata allo strumento, il nostro codice dell’agente intercetta, estrae il nome della funzione e gli argomenti, poi esegue la funzione Python reale (get_current_weather("London")).
  5. Seconda chiamata LLM (con output dello strumento): Il risultato dell’esecuzione dello strumento viene poi inviato nuovamente al LLM, con l’intera cronologia della conversazione. Il LLM ha ora la richiesta originale dell’utente, la sua stessa decisione di chiamare uno strumento e il risultato concreto di quello strumento.
  6. Risposta finale: Il LLM utilizza queste informazioni per formulare una risposta in linguaggio naturale per l’utente, integrando l’output dello strumento.

Concetti avanzati dei plugin e migliori pratiche

Gestione degli errori e solidità

Le API del mondo reale falliscono. I tuoi plugin devono gestire gli errori con facilità (problemi di rete, input non validi, limiti di rate API, ecc.). Restituisci messaggi di errore informativi dal tuo plugin, e il LLM può spesso usarli per informare l’utente o anche tentare di nuovo con parametri corretti.


def get_current_weather_solid(city: str) -> dict:
 try:
 # Simulare una chiamata API con errori potenziali
 if city == "Error City":
 raise ValueError("La chiamata API è fallita per Error City: Servizio non disponibile.")
 # ... resto della logica di dati mock riusciti ...
 return {"city": city, **weather}
 except Exception as e:
 return {"error": str(e), "city": city}

Plugin multipli e orchestrazione degli strumenti

Il vero potere di un agente risiede nell’uso di più plugin. Immagina un agente “pianificatore di viaggi” con plugin per :

  • search_flights(origin, destination, date)
  • book_hotel(city, check_in, check_out)
  • get_attractions(city)

Il LLM, attraverso il suo ragionamento, può concatenare questi strumenti. Ad esempio, se un utente chiede, « Pianifica un viaggio a Parigi il mese prossimo e trova cose da fare », il LLM potrebbe prima chiamare search_flights, poi book_hotel (se confermato dall’utente), ed infine get_attractions.

Quando fornisci più strumenti, basta aggiungere più schemi JSON alla lista tools nella tua chiamata LLM.

Ragionamento e riflessione degli agenti

Gli agenti sofisticati non eseguono semplicemente strumenti; ragionano sulle loro azioni. Framework come LangChain e LlamaIndex forniscono astrazioni per questo, coinvolgendo spesso :

  • Pianificazione: Decomporre obiettivi complessi in compiti secondari.
  • Selezione degli strumenti: Scegliere lo strumento più appropriato per ogni sottocompito.
  • Generazione dei parametri: Estrarre gli argomenti necessari dal contesto della conversazione.
  • Esecuzione: Eseguire lo strumento.
  • Osservazione: Interpreta l’output dello strumento.
  • Riflessione: Valutare se l’obiettivo è stato raggiunto o se sono necessarie ulteriori azioni/correzioni.

La descrizione del tuo plugin da parte del LLM è centrale a questo ragionamento. Una descrizione vaga porta a una selezione di strumenti scadente.

Considerazioni di sicurezza

  • Validazione degli input: Valida sempre gli input ricevuti dal tuo plugin, anche se generati dal LLM. Input malevoli o inaspettati possono portare a vulnerabilità.
  • Minimo privilegio: Assicurati che il tuo plugin abbia accesso solo alle risorse di cui ha assolutamente bisogno.
  • Dati sensibili: Fai estrema attenzione nella gestione di informazioni sensibili. Evita di esporre direttamente segreti nelle descrizioni dei plugin o nei log.
  • Controllo accessi/Limiti di rate: Proteggi i tuoi sistemi backend da abusi implementando limiti di rate appropriati e autenticazione per le API sottostanti del tuo plugin.

Operazioni asincrone

Molte azioni di plugin del mondo reale (ad esempio, inviare email, query lunghe di database) sono asincrone. Il tuo agente potrebbe dover gestire questo restituendo un ID di lavoro e avendo un altro plugin per controllare lo stato del lavoro, o utilizzando webhooks.

Conclusione

Costruire plugin per agenti è un’abilità trasformativa per chiunque lavori con LLM. Questo va oltre la semplice conversazione, consentendo ai sistemi di IA di diventare veramente interattivi e azionabili. Seguendo la guida rapida, hai imparato i componenti fondamentali: definire l’obiettivo del plugin, implementare la sua logica e, in modo cruciale, descriverlo efficacemente utilizzando uno schema JSON per il LLM. Il potere di queste descrizioni non può essere esagerato: esse sono il ponte tra la comprensione linguistica di un LLM e la sua capacità di interagire con il mondo reale.

Proseguendo, non dimenticate di concentrarvi su descrizioni chiare, una buona gestione degli errori e un’orchestrazione riflessiva di più strumenti. È nel potenziale degli agenti IA di integrarsi armoniosamente con il vasto ecosistema di software e dati, e i plugin sono la chiave per sbloccare questo potenziale. Iniziate a sperimentare, costruite i vostri strumenti personalizzati e guardate i vostri agenti IA prendere vita!

🕒 Published:

✍️
Written by Jake Chen

AI technology writer and researcher.

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