Creazione di flussi di lavoro guidati da agenti con l'API di chat

Ultimo aggiornamento: 20 mar 2025
Creazione di flussi di lavoro guidati da agenti con l'API di chat

Utilizzate l'API di chat watsonx.ai con i modelli di fondazione che supportano le chiamate agli strumenti per creare applicazioni guidate dagli agenti.

Modi per sviluppare

È possibile creare flussi di lavoro guidati da agenti utilizzando questi metodi di programmazione:

In alternativa, è possibile utilizzare gli strumenti grafici dell'interfaccia utente di watsonx.ai per creare gli agenti. Vedi Agent Lab.

Panoramica

Le applicazioni agenziali consentono a un modello di fondazione di funzionare come un agente che controlla il flusso di interazione con l'utente. Si definiscono i parametri dell'interazione, compresi gli strumenti che il modello di base può utilizzare, ma si permette al modello di base di decidere il passo successivo migliore in base allo stato attuale dell'interazione. Il richiamo di uno strumento è talvolta indicato come richiamo di una funzione.

In un flusso di lavoro reale, si potrebbe voler chiamare sempre uno strumento all'inizio di ogni interazione. Più avanti nello scambio, si potrebbero utilizzare prompt diversi in base al modo in cui l'utente risponde alle domande di follow-up su un'attività. Oppure si potrebbero chiamare vari strumenti di terze parti necessari per completare il flusso di lavoro. È possibile definire queste opzioni e lasciare che sia il modello di fondazione a scegliere il prompt da restituire o lo strumento da utilizzare al momento giusto.

Ad esempio, un'applicazione per la prenotazione di un ristorante potrebbe dover raccogliere le seguenti informazioni e poi creare una prenotazione:

  • Ubicazione
  • Numero di ospiti
  • Data e ora

L'ordine di raccolta delle informazioni può essere importante solo in alcune località, dove il numero di ospiti per tavolo è limitato o dove sono disponibili più posti a sedere all'esterno in caso di bel tempo. È possibile tenere conto di queste condizioni nel codice e lasciare che il modello di fondazione determini quando chiamare strumenti aggiuntivi, come un'applicazione meteo di terze parti, prima che l'agente completi una richiesta di prenotazione.

Modelli di fondazione supportati

Quando si costruisce un flusso di lavoro agenziale, si deve scegliere un modello di base che soddisfi i seguenti requisiti:

  • Gestisce le attività di chat
  • Supporta la chiamata agli strumenti
  • Può scegliere l'azione successiva

Per ottenere programmaticamente un elenco di modelli di fondazione che supportano la chiamata di strumenti dall'API della chat, specificare il parametro 'filters=task_function_calling quando si invia una richiesta del metodo List the available foundation models.

Vedere il riferimento API.

Ad esempio:

curl -X GET \
  'https://{region}.ml.cloud.ibm.com/ml/v1/foundation_model_specs?version=2024-10-10&filters=task_function_calling'
Nota: non è possibile utilizzare l'API Chat per lo sviluppo di chiamate agli strumenti da un modello di fondazione deploy on demand o personalizzato.

Costruire con Python

Vedere la classe Model Inference della libreria watsonx.ai Python.

Esempi di quaderni Python

Sono disponibili i seguenti quaderni campione:

API REST

I diversi modelli di fondazione gestiscono la chiamata degli strumenti in modi diversi. Gli esempi seguenti mostrano alcune differenze:

Riferimento API

Per i dettagli sui metodi API, consultare la documentazione di riferimento dell'API.

Esempio di richiesta di chiamata di strumenti

L'esempio seguente definisce due strumenti, una funzione per l'addizione e una per la moltiplicazione. L'esempio invia l'input dell'utente al modello di fondazione e lascia che il modello scelga quale strumento utilizzare per rispondere alla domanda.

Nell'esempio seguente, sostituire la variabile '{url} con il valore giusto per la propria istanza, ad esempio 'us-south.ml.cloud.ibm.com. Aggiungete il vostro token al portatore e l'ID del progetto.

curl -X POST \
  'https://{url}/ml/v1/text/chat?version=2024-10-08' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer eyJraWQiOi...'
  --data '{
      "model_id": "mistralai/mistral-large",
      "project_id": "4947c695-a374-428c-acca-332c1a1dc9e9",
      "messages": [
        {
          "role": "user",
          "content": [
            {
              "type": "text",
              "text": "What is 2 plus 4?"
            }
          ]
        }
      ],
      "tools": [
        {
          "type": "function",
          "function": {
            "name": "add",
            "description": "Adds the values a and b to get a sum.",
            "parameters": {
              "type": "object",
              "properties": {
                "a": {
                  "description": "A number value",
                  "type": "float"
                },
                "b": {
                  "description": "A number value",
                  "type": "float"
                }
              },
              "required": [
                "a",
                "b"
              ]
            }
          }
        },
        {
          "type": "function",
          "function": {
          "name": "multiply",
            "description": "Multiplies the values a and b.",
            "parameters": {
              "type": "object",
              "properties": {
                "a": {
                  "description": "A number value",
                  "type": "float"
                },
                "b": {
                  "description": "A number value",
                  "type": "float"
                }
              },
              "required": [
                "a",
                "b"
              ]
            }
          }
        }
      ],
      "tool_choice_option": "auto",
      "max_tokens": 300,
      "time_limit": 1000
      }'

L'output di esempio mostra che il modello, in questo caso mistral-large, è in grado di scegliere lo strumento corretto da utilizzare per il compito, la funzione 'add.

{
  "id": "chatcmpl-2f47da4026950db321698cb733b25e89",
  "model_id": "mistralai/mistral-large",
  "model": "mistralai/mistral-large",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "tool_calls": [
          {
            "id": "H6KoCbaZV",
            "type": "function",
            "function": {
              "name": "add",
              "arguments": "{\"a\": 2, \"b\": 4}"
            }
          }
        ]
      },
      "finish_reason": "tool_calls"
    }
  ],
  "created": 1739311926,
  "model_version": "2.0.0",
  "created_at": "2025-02-11T22:12:07.243Z",
  "usage": {
    "completion_tokens": 25,
    "prompt_tokens": 189,
    "total_tokens": 214
  },
  "system": {
    "warnings": [
      {
        "message": "This model is a Non-IBM Product governed by a third-party license that may impose use restrictions and other obligations. By using this model you agree to its terms as identified in the following URL.",
        "id": "disclaimer_warning",
        "more_info": "https://dataplatform.cloud.ibm.com/docs/content/wsj/analyze-data/fm-models.html?context=wx"
      }
    ]
  }
}

Esempio di richiesta di chiamata di utensili con granite-3-2b-instruct

La richiesta seguente definisce due strumenti, una funzione per l'addizione e una per la moltiplicazione, e chiede al modello di fondazione granite-3-2b-instruct quale strumento utilizzare.

I modelli Granite possono chiamare meglio gli strumenti quando si fornisce un prompt di sistema con la richiesta. Viene utilizzato il seguente prompt di sistema:

You are Granite, sviluppato da IBM. Sei un assistente AI con accesso ai seguenti strumenti. Quando è necessario uno strumento per rispondere alla domanda dell'utente, rispondere con <|tool_call|> seguito da un elenco JSON di strumenti utilizzati. Se uno strumento non è presente nell'elenco di strumenti fornito, informare l'utente che non si è in grado di soddisfare la richiesta.

Nell'esempio seguente, sostituire la variabile '{url} con il valore giusto per la propria istanza, ad esempio 'us-south.ml.cloud.ibm.com. Aggiungete il vostro token al portatore e l'ID del progetto.

curl -X POST \
  'https://{url}/ml/v1/text/chat?version=2024-10-08' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer eyJraWQiOi...'

Il corpo della richiesta contiene il seguente frammento JSON:

{
  "model_id": "ibm/granite-3-2b-instruct",
  "project_id": "4947c695-a374-428c-acca-332c1a1dc9e9",
  "messages": [
    {
      "role":"system",
      "content":[
        {
          "type":"text",
          "text":"You are Granite, developed by IBM. You are a helpful AI assistant with access to the following tools. When a tool is required to answer the user's query, respond with <|tool_call|> followed by a JSON list of tools used. If a tool does not exist in the provided list of tools, notify the user that you do not have the ability to fulfill the request."
      }
      ]
    },
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "What is 2 times 4?"
        }
      ]
    }
  ],
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "add",
        "description": "Adds the values a and b to get a sum.",
        "parameters": {
          "type": "object",
          "properties": {
            "a": {
              "description": "A number value",
              "type": "float"
            },
            "b": {
              "description": "A number value",
               "type": "float"
            }
          },
          "required": [
            "a",
            "b"
          ]
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "multiply",
        "description": "Multiplies the values a and b.",
        "parameters": {
          "type": "object",
          "properties": {
            "a": {
              "description": "A number value",
              "type": "float"
            },
            "b": {
              "description": "A number value",
               "type": "float"
            }
          },
          "required": [
            "a",
            "b"
          ]
        }
      }
    }
  ],
  "tool_choice_option": "auto",
  "max_tokens": 300,
  "time_limit": 10000
}

Il modello di fondazione granite-3-2b-instruct è in grado di scegliere lo strumento corretto per rispondere alla domanda.

La risposta è la seguente:

{
  "id": "chatcmpl-ac80d63a85209b48592435687086e1c2",
  "model_id": "ibm/granite-3-2b-instruct",
  "model": "ibm/granite-3-2b-instruct",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "tool_calls": [
          {
            "id": "chatcmpl-tool-3297286588a24459b0042943cae55629",
            "type": "function",
            "function": {
              "name": "multiply",
              "arguments": "{\"a\": 2, \"b\": 4}"
            }
          }
        ]
      },
      "finish_reason": "tool_calls"
    }
  ],
  "created": 1739311794,
  "model_version": "1.1.0",
  "created_at": "2025-02-11T22:09:55.048Z",
  "usage": {
    "completion_tokens": 28,
    "prompt_tokens": 348,
    "total_tokens": 376
  }
}

Ulteriori informazioni

Argomento principale: Codificare soluzioni di IA generativa