0 / 0
Volver a la versión inglesa de la documentación

Creación de flujos de trabajo basados en agentes con la API de chat

Última actualización: 20 mar 2025
Creación de flujos de trabajo basados en agentes con la API de chat

Utilice la API de chat watsonx.ai con modelos de base que admitan la llamada a herramientas para crear aplicaciones basadas en agentes.

Formas de desarrollarse

Puede crear flujos de trabajo dirigidos por agentes utilizando estos métodos de programación:

También puede utilizar herramientas gráficas de la interfaz de usuario de watsonx.ai para crear agentes. Ver Laboratorio del agente.

Visión general

Las aplicaciones agenéticas permiten que un modelo de base funcione como un agente que controla el flujo de interacción con el usuario. Usted define los parámetros de la interacción, incluidas las herramientas que puede utilizar el modelo base, pero permite que éste decida cuál es el mejor paso siguiente en función del estado actual de la interacción. La llamada a herramientas se denomina a veces llamada a funciones.

En un flujo de trabajo real, es posible que desee llamar siempre a una herramienta al principio de cada interacción. Más adelante en el intercambio, es posible que desee utilizar diferentes avisos en función de cómo responda el usuario a las preguntas de seguimiento sobre una tarea. O puede que desee llamar a varias herramientas de terceros necesarias para completar el flujo de trabajo. Puede definir estas opciones y, a continuación, dejar que el modelo de cimentación elija la indicación a devolver o la herramienta a utilizar cuando llegue el momento.

Por ejemplo, una aplicación de reserva de restaurantes puede necesitar recopilar la siguiente información y, a continuación, crear una reserva:

  • Ubicación
  • Número de invitados
  • Fecha y hora

El orden en que se recoja la información puede importar sólo en algunos lugares, donde el número de comensales permitido por mesa es limitado, o donde se dispone de más asientos en el exterior cuando hace buen tiempo. Puede tener en cuenta estas condiciones en el código y dejar que el modelo base determine cuándo llamar a herramientas adicionales, como una aplicación meteorológica de terceros, antes de que el agente complete una solicitud de reserva.

Modelos de cimientos compatibles

Cuando construyas un flujo de trabajo agéntico, elige un modelo base que cumpla los siguientes requisitos:

  • Gestiona las tareas del chat
  • Admite la llamada a herramientas
  • Puede elegir la siguiente acción

Para obtener programáticamente una lista de modelos básicos que admiten llamadas de herramientas desde la API de chat, especifique el parámetro filters=task_function_calling cuando envíe una solicitud de método Listar los modelos básicos disponibles .

Consulte la referencia de la API.

Por ejemplo:

curl -X GET \
  'https://{region}.ml.cloud.ibm.com/ml/v1/foundation_model_specs?version=2024-10-10&filters=task_function_calling'
Nota: No se puede utilizar la API de chat para el desarrollo de llamadas a herramientas desde un modelo de despliegue bajo demanda o de base personalizada.

Construir con Python

Vea la clase Model Inference de la biblioteca watsonx.ai Python.

Ejemplos de cuadernos de notas de la Colección Tiffany ( Python )

Están disponibles los siguientes cuadernos de muestra:

API REST

Los distintos modelos de fundación gestionan la llamada a las herramientas de formas diferentes. Repase los siguientes ejemplos para ver algunas de las diferencias:

Referencia de API

Para obtener detalles sobre el método API, consulte la documentación de referencia de API .

Ejemplo de solicitud de llamada a una herramienta

El siguiente ejemplo define dos herramientas, una función para la suma y otra para la multiplicación. El ejemplo envía los datos introducidos por el usuario al modelo de base y deja que el modelo elija qué herramienta utilizar para responder a la pregunta.

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

La salida de ejemplo muestra que el modelo, mistral-large en este caso, es capaz de elegir la herramienta correcta para la tarea, la función " 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"
      }
    ]
  }
}

Ejemplo de solicitud de llamada a una herramienta con granite-3-2b-instruct

La siguiente petición define dos herramientas, una función para la suma y otra para la multiplicación, y pregunta al modelo de la fundación granite-3-2b-instruct qué herramienta utilizar.

Los modelos Granite pueden llamar mejor a las herramientas cuando se proporciona un aviso del sistema con la solicitud. Se utiliza el siguiente indicador del sistema:

Eres Granite, desarrollado por IBM. Eres un útil asistente de IA con acceso a las siguientes herramientas. Cuando se necesita una herramienta para responder a la consulta del usuario, responde con <|tool_call|> seguido de una lista JSON de las herramientas utilizadas. Si una herramienta no existe en la lista de herramientas proporcionada, notifique al usuario que no tiene capacidad para satisfacer la solicitud.

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

El cuerpo de la solicitud contiene el siguiente fragmento 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
}

El modelo de base granite-3-2b-instruct es capaz de elegir la herramienta correcta para responder a la consulta.

La respuesta es la siguiente:

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

Más información

Tema principal: Codificación de soluciones de IA generativa