0 / 0

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

Última actualización: 27 may 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:

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.

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'

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:

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

Python

Véase la clase ModelInference 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:

Más información

Tema principal: Automatización de tareas con agentes de IA