Agents Course documentation

¿Qué es la Llamada a Funciones?

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

¿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:

  1. Pensar : ¿Qué acción(es) necesito tomar para cumplir el objetivo?
  2. Actuar : Formatear la acción con el parámetro correcto y detener la generación.
  3. 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!

  1. Un nuevo rol para una Acción
  2. 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