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'
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:
Utiliza la API REST para crear un chat que llame a herramientas de terceros: Utiliza watsonx, y mistral-large para realizar conversaciones de chat sencillas y llamadas a herramientas
Utiliza el SDK Python para mantener una conversación entre varios tipos de usuario, como el sistema, el asistente y el usuario, y luego llama a varias herramientas para hacer ecuaciones matemáticas basadas en la entrada del usuario. Ver Utilizar watsonx, y mistral-large para realizar conversaciones de chat sencillas y llamadas de herramientas
Utilizar el SDK de Python para llamar a herramientas que obtienen información para incluir en una conversación, incluso utilizando LangChain para escribir e implementar funciones de calculadora, e ilustrando el flujo de trabajo que se sigue con LangGraph. Véase Utilizar watsonx, y mistral-large con soporte para herramientas para realizar cálculos sencillos.
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
- Credenciales de acceso a los programas
- Añadir la función de chat generativo a sus aplicaciones con la API de chat
- Modelos de cimientos compatibles
Tema principal: Codificación de soluciones de IA generativa