0 / 0

Añadir la función de chat generativo a sus aplicaciones con la API de chat

Última actualización: 23 jun 2025
Añadir la función de chat generativo a sus aplicaciones con la API de chat

Utilice la API de chat watsonx.ai para crear flujos de trabajo conversacionales que utilicen modelos de fundamentos para generar respuestas.

Formas de desarrollarse

Puede crear flujos de trabajo de chat utilizando estos métodos de programación:

También puede utilizar herramientas gráficas de la interfaz de usuario de watsonx.ai para crear flujos de trabajo de chat. Véase Conversar con documentos e imágenes.

Información General

La API de chat watsonx.ai implementa métodos para interactuar con los modelos de la fundación de forma conversacional. Puede identificar distintos tipos de mensajes, como una consulta del sistema, entradas del usuario y salidas del modelo de cimentación, incluidas las preguntas y respuestas de seguimiento específicas del usuario. Utilice la API de chat para imitar el flujo de trabajo que se obtiene al interactuar con un modelo de la fundación desde la página Prompt Lab en modo chat.

Modelos de cimientos compatibles

Para obtener mediante programación una lista de los modelos de cimientos compatibles con la API de chat, especifique el parámetro " filters=function_text_chat " al enviar una solicitud del método Listar los modelos de cimientos disponibles.

Para obtener detalles del método API, consulte la documentación de referencia de la API watsonx.ai.

Por ejemplo:

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

Para obtener más información sobre los modelos de base que admiten la llamada a herramientas, consulte Creación de flujos de trabajo basados en agentes con la API de chat.

API REST

Puede utilizar la API de chat para los siguientes tipos de tareas:

Para obtener detalles del método API, consulte la documentación de referencia de la API watsonx.ai.

Ejemplo de chat para varios usuarios

Por ejemplo, el siguiente comando envía una solicitud para chatear con el modelo de la fundación.

En el siguiente ejemplo, sustituya la variable {url} por el valor correcto para su instancia, como us-south.ml.cloud.ibm.com. Añade tu propio token al portador y tu ID de proyecto.

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
}'

Respuesta de ejemplo:

{
  "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"
      }
    ]
  }
}

Ejemplo de chat sobre una imagen

En este ejemplo se pide al modelo que explique lo que ilustra la siguiente imagen.

Diagrama que muestra un ejemplo de texto alternativo eficaz para una imagen.

El código de muestra equivale a chatear con una imagen de Prompt Lab. Para obtener más información sobre el método alternativo que utiliza la interfaz de usuario, consulte Chatear con imágenes cargadas.

Los requisitos de imagen para las imágenes a las que se hace referencia desde la API de chat son los siguientes:

  • Añadir una imagen por chat
  • Los tipos de archivo admitidos son PNG o JPEG
  • Una imagen equivale aproximadamente a entre 1.200 y 3.000 fichas, dependiendo del tamaño de la imagen

Para procesar la imagen, debe codificarla como Base64, que convierte los datos binarios de la imagen en una cadena de caracteres. Puedes utilizar una herramienta en línea para convertir la imagen o utilizar un código.

El siguiente ejemplo de código Python codifica una imagen alojada. Si llama a la API REST desde un cuaderno Python, puede utilizar este código para codificar la imagen. Luego, cuando defina la solicitud POST, puede especificar la image_b64_encoded_string variable como el url valor.

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 siguiente solicitud de la API REST utiliza la API de chat para chatear sobre una imagen que se especifica con una cadena Base64-encoded.

En el siguiente ejemplo, sustituya la variable {url} por el valor correcto para su instancia, como us-south.ml.cloud.ibm.com. Añade tu propio token al portador y tu ID de proyecto.

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
  }'

Respuesta de ejemplo:

{
  "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"
      }
    ]
  }
}

Resolución de problemas de la API de chat

Si la respuesta está en formato HTML y menciona ' Gateway time-out, es probable que la petición haya tardado demasiado y haya caducado. Aumenta el valor del campo ' time_limit ' que especifiques en la solicitud.

Python

Véase la clase ModelInference de la biblioteca watsonx.ai Python.

Para empezar, consulte los siguientes cuadernos de muestra:

Más información

Tema principal: Generar texto con código