Agents Course documentation
¿Qué es la Llamada a Funciones?
¿Qué es la Llamada a Funciones?
La llamada a funciones es una forma para que un LLM realice acciones en su entorno. Fue introducida primero en GPT-4, y posteriormente fue reproducida en otros modelos.
Al igual que las herramientas de un Agente, la llamada a funciones le da al modelo la capacidad de realizar una acción en su entorno. Sin embargo, la capacidad de llamada a funciones es aprendida por el modelo, y depende menos de los prompts que otras técnicas de agentes.
Durante la Unidad 1, el Agente no aprendió a usar las Herramientas, simplemente proporcionamos la lista, y confiamos en el hecho de que el modelo era capaz de generalizar al definir un plan usando estas Herramientas.
Mientras que aquí, con la llamada a funciones, el Agente es ajustado (entrenado) para usar Herramientas.
¿Cómo “aprende” el modelo a realizar una acción?
En la Unidad 1, exploramos el flujo de trabajo general de un agente. Una vez que el usuario ha dado algunas herramientas al agente y le ha proporcionado una consulta, el modelo pasará por el ciclo:
- Pensar : ¿Qué acción(es) necesito tomar para cumplir el objetivo?
- Actuar : Formatear la acción con el parámetro correcto y detener la generación.
- Observar : Obtener el resultado de la ejecución.
En una conversación “típica” con un modelo a través de una API, la conversación alternará entre mensajes del usuario y del asistente de esta manera:
conversation = [
{"role": "user", "content": "Necesito ayuda con mi pedido"},
{"role": "assistant", "content": "Estaré encantado de ayudar. ¿Podrías proporcionar tu número de pedido?"},
{"role": "user", "content": "Es ORDER-123"},
]
¡La llamada a funciones trae nuevos roles a la conversación!
- Un nuevo rol para una Acción
- Un nuevo rol para una Observación
Si tomamos la API de Mistral como ejemplo, se vería así:
conversation = [
{
"role": "user",
"content": "¿Cuál es el estado de mi transacción T1001?"
},
{
"role": "assistant",
"content": "",
"function_call": {
"name": "retrieve_payment_status",
"arguments": "{\"transaction_id\": \"T1001\"}"
}
},
{
"role": "tool",
"name": "retrieve_payment_status",
"content": "{\"status\": \"Paid\"}"
},
{
"role": "assistant",
"content": "Tu transacción T1001 ha sido pagada exitosamente."
}
]
… ¿Pero dijiste que hay un nuevo rol para las llamadas a funciones?
Sí y no, en este caso y en muchas otras APIs, el modelo formatea la acción a tomar como un mensaje de “asistente”. La plantilla de chat luego representará esto como tokens especiales para la llamada a funciones.
[AVAILABLE_TOOLS]
– Inicio de la lista de herramientas disponibles[/AVAILABLE_TOOLS]
– Fin de la lista de herramientas disponibles[TOOL_CALLS]
– Hacer una llamada a una herramienta (es decir, realizar una “Acción”)[TOOL_RESULTS]
– “Observar” el resultado de la acción[/TOOL_RESULTS]
– Fin de la observación (es decir, el modelo puede decodificar nuevamente)
Hablaremos nuevamente sobre la llamada a funciones en este curso, pero si quieres profundizar puedes consultar esta excelente sección de documentación.
Ahora que hemos aprendido qué es la llamada a funciones y cómo funciona, vamos a agregar algunas capacidades de llamada a funciones a un modelo que aún no tiene esas capacidades: google/gemma-2-2b-it, agregando algunos nuevos tokens especiales al modelo.
Para poder hacer eso, primero necesitamos entender el fine-tuning y LoRA.
< > Update on GitHub