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à:
- Conversazione tra più utenti con un modello di fondazione
- Chiacchierate con un modello della fondazione sulle immagini
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.
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:
- Utilizzare l'API REST per completare le attività di conversazione: Utilizzare watsonx e mistral-large per effettuare semplici conversazioni in chat e chiamate a strumenti
- Usare l'SDK Python per chattare su un'immagine: Utilizzare watsonx e il modello meta-llama/llama-3-2-11b-vision-instruct per l'elaborazione delle immagini per generare una descrizione del logo IBM
- Utilizzare l'SDK Python per generare risposte in formato JSON durante la chat con il modello
granite-3-3-8b-instruct
: Utilizzare watsonx e ibm/granite-3-3-8b-instruct per eseguire conversazioni in chat con risposte in formato JSON - Utilizzare l'SDK Python per chattare con il modello
granite-3-3-8b-instruct
e controllare la risposta del modello nei seguenti modi:- Il modello fornisce dettagli sul ragionamento utilizzato per generare una risposta.
- Il modello riassume un argomento utilizzando i contenuti direttamente dall'argomento o parafrasando i contenuti con parole proprie. Per ulteriori informazioni, vedere Utilizzare watsonx, e ibm/granite-3-3-8b-instruct per eseguire conversazioni via chat con ruoli di controllo.
Ulteriori informazioni
- Credenziali per l'accesso al programma
- Prompt Lab
- Conversazione con documenti e immagini
- Chattare con i file audio
- Creazione di flussi di lavoro guidati da agenti con l'API di chat
- Modelli di fondazione supportati
Argomento principale: Generazione di testo con codice