0 / 0

Aggiunta di una funzione di chat generativa alle applicazioni con l'API di chat

Ultimo aggiornamento: 20 giu 2025
Aggiunta di una funzione di chat generativa alle applicazioni con l'API di chat

Utilizzate l'API di chat watsonx.ai per creare flussi di lavoro conversazionali che utilizzano modelli di fondazione per generare risposte.

Modi per sviluppare

È possibile creare flussi di lavoro di chat utilizzando questi metodi di programmazione:

In alternativa, è possibile utilizzare gli strumenti grafici dell'interfaccia utente di watsonx.ai per creare flussi di lavoro di chat. Vedere Chattare con documenti e immagini.

Panoramica

L'API di chat watsonx.ai implementa metodi per interagire con i modelli di fondazione in modo conversazionale. È possibile identificare diversi tipi di messaggi, come le richieste del sistema, gli input dell'utente e i risultati del modello di fondazione, comprese le domande e le risposte di follow-up specifiche per l'utente. Utilizzare l'API della chat per imitare il flusso di lavoro che si ottiene quando si interagisce con un modello di fondazione da Prompt Lab in modalità chat.

Modelli di fondazione supportati

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

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

Ad esempio:

curl -X GET \
  'https://{region}.ml.cloud.ibm.com/ml/v1/foundation_model_specs?version=2024-10-10&filters=function_text_chat'

Per ulteriori informazioni sui modelli di fondazione che supportano le chiamate agli strumenti, vedere Creazione di flussi di lavoro guidati da agenti con l'API della chat.

API REST

È possibile utilizzare l'API Chat per i seguenti tipi di attività:

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

Esempio di chat per più utenti

Ad esempio, il comando seguente invia una richiesta di chat con il modello di fondazione.

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

curl --request POST '{url}/ml/v1/text/chat?version=2024-10-08'
-H 'Authorization: Bearer eyJhbGciOiJSUzUxM...'
-H 'Content-Type: application/json'
-H 'Accept: application/json'
-d '{
  "model_id": "meta-llama/llama-3-8b-instruct",
  "project_id": "4947c695-a374-428c-acca-332c1a1dc9e9",
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful assistant that avoids causing harm. When you do not know the answer to a question, you say 'I don't know'."
    },
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "I have a question about Earth. How many moons does the Earth have?"
        }
      ]
    },
    {
      "role": "assistant",
      "content": "The Earth has one natural satellite, which is simply called the Moon."
    },
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "What about Saturn?"
        }
      ]
    }
  ],
  "max_tokens": 300,
  "time_limit": 1000
}'

Esempio di risposta:

{
  "id": "chat-45932923166b4607bde75207a0a9f5d4",
  "model_id": "meta-llama/llama-3-8b-instruct",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Saturn has a total of 82 confirmed moons!"
      },
      "finish_reason": "stop"
    }
  ],
  "created": 1728404199,
  "created_at": "2024-10-08T16:16:40.102Z",
  "usage": {
    "completion_tokens": 12,
    "prompt_tokens": 87,
    "total_tokens": 99
  },
  "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 chat su un'immagine

Questo esempio chiede al modello di spiegare ciò che l'immagine seguente illustra.

Un diagramma che mostra un esempio di testo alternativo efficace per un'immagine.

Il codice di esempio equivale a chattare con un'immagine di Prompt Lab. Per informazioni sul metodo alternativo che utilizza l'interfaccia utente, vedere Chattare con le immagini caricate.

I requisiti di immagine per le immagini che vengono richiamate dall'API della chat sono i seguenti:

  • Aggiungere un'immagine per ogni chat
  • I tipi di file supportati sono PNG o JPEG
  • Un'immagine viene conteggiata come circa 1.200-3.000 gettoni, a seconda delle dimensioni dell'immagine

Per elaborare l'immagine, è necessario codificarla come Base64, che converte i dati binari dell'immagine in una stringa di caratteri. È possibile utilizzare uno strumento online per convertire l'immagine o utilizzare un codice.

Il seguente esempio di codice Python codifica un'immagine ospitata. Se si chiama l'API REST da un notebook Python, si può usare questo codice per codificare l'immagine. Quindi, quando si definisce la richiesta POST, si può specificare la variabile image_b64_encoded_string come valore url.

import wget, os, base64

filename = 'downloaded-image.png'
url = 'https://www.ibm.com/able/static/my-input-image.png'

if not os.path.isfile(filename):
    wget.download(url, out=filename)

with open(filename, 'rb') as image_file:
    image_b64_encoded_string = base64.b64encode(image_file.read()).decode('utf-8')

La seguente richiesta API REST utilizza l'API chat per chattare su un'immagine specificata con una stringa Base64-encoded.

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

curl --request POST '{url}/ml/v1/text/chat?version=2024-10-09'
-H 'Authorization: Bearer eyJhbGciOiJSUzUxM...'
-H 'Content-Type: application/json'
-H 'Accept: application/json'
-d '{
    "model_id": "meta-llama/llama-3-2-11b-vision-instruct",
    "project_id": "4947c695-a374-428c-acca-332c1a1dc9e9",
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "image_url",
            "image_url": {
              "url": "<encoded_string>"
            }
          },
          {
            "type": "text",
            "text": "What does the image convey about alternative image text?"
          }
        ]
      }
    ],
    "max_tokens": 300,
    "time_limit": 10000
  }'

Esempio di risposta:

{
  "id": "chat-f5f3ab2b8d7f4657b72a4f868e24f3fd",
  "model_id": "meta-llama/llama-3-2-90b-vision-instruct",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "The image shows a bar chart on a laptop screen with alternative image text that describes the content of the image. The alternative image text is \"bar chart showing month's daily sales against historical average.\" This text provides a clear and concise description of the image, allowing users who cannot see the image to understand its content.\n\n**Key Points:**\n\n*   The image is a bar chart on a laptop screen.\n*   The alternative image text describes the content of the image.\n*   The alternative image text is \"bar chart showing month's daily sales against historical average.\"\n*   The text provides a clear and concise description of the image.\n\n**Conclusion:**\n\nThe image conveys that alternative image text should be used to provide a clear and concise description of an image, even if the image cannot be seen. This is important for accessibility reasons, as it allows users who cannot see the image to still understand its content."
      },
      "finish_reason": "stop"
    }
  ],
  "created": 1728564568,
  "model_version": "3.2.0",
  "created_at": "2024-10-10T12:49:35.286Z",
  "usage": {
    "completion_tokens": 184,
    "prompt_tokens": 21,
    "total_tokens": 205
  },
  "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"
      }
    ]
  }
}

Risoluzione dei problemi dell'API della chat

Se la risposta è in formato HTML e menziona 'Gateway time-out, probabilmente la richiesta ha richiesto troppo tempo ed è scaduta. Aumenta il valore del campo 'time_limit specificato nella richiesta.

Python

Vedere la classe ModelInference della libreria watsonx.ai Python.

Per iniziare, vedere i seguenti notebook di esempio:

Ulteriori informazioni

Argomento principale: Generazione di testo con codice