Creando agentes con function-calling y Gemini-API

¿Sabías que puedes crear tus propios agentes utilizando la API de Gemini?

Un agente es un sistema que en base a cierta información de entrada, puede procesar esta información para realizar una acción en base a los objetivos predefinidos.

Un ejemplo de estos sistemas son los ChatBots como los de OpenAI, DeepSeek o incluso los que trabajamos en Telygen. Estos sistemas toman el mensaje del usuario, lo procesan y realizan la acción solicitada. Ejemplos de estas acciones son: agendar citas para una clínica medica, obtener información de la WEB como: el clima, las noticias o resultados de los partidos de fútbol.

Existen miles de herramientas y formas para crear estos sistemas de IA tipo agentes, pero en este blog exploraremos un agente creado a partir de Gemini API y Python. Lo mejor de todo esto: Es totalmente gratis!

Gemini API esta disponible como un SDK en los principales repositorios de Python, JavaScript, Go, Java y App Script. En el siguiente ejemplo vemos la instalacion utilizando ‘pip’ con Python:

pip install -q -U google-genai

La API de Gemini nos describe como enviar consultas al modelo de gemini:

from google import genai

# The client gets the API key from the environment variable `GEMINI_API_KEY`.
client = genai.Client()

response = client.models.generate_content(
    model="gemini-2.5-flash", contents="Explain how AI works in a few words"
)
print(response.text)

Con esto tenemos una forma para interactuar con el modelo, pero nosotros tenemos que mostrarle una forma para poder “actuar” en base a las necesidades u objetivos de los usuarios.

Para que el modelo tome acción, le tenemos que brindar las herramientas, en este caso “tools” que serán llamadas a través de la funcion “function calling” de la API de Gemini. Según la documentación nos muestra 4 pasos para integrar esta característica:

  1. Define la declaración de la función: Define la declaración de la función en el código de tu aplicación. Las declaraciones de funciones describen el nombre, los parámetros y el propósito de la función al modelo.
  2. Llama al LLM con declaraciones de funciones: Envía la instrucción del usuario junto con las declaraciones de funciones al modelo. Analiza la solicitud y determina si sería útil una llamada a una función. Si es así, responde con un objeto JSON estructurado.
  3. Ejecutar código de función (tu responsabilidad): El modelo no ejecuta la función por sí mismo. Es responsabilidad de tu aplicación procesar la respuesta y verificar si hay una llamada a función, en caso de que
    Sí: Extrae el nombre y los argumentos de la función, y ejecuta la función correspondiente en tu aplicación.
    No: El modelo proporcionó una respuesta de texto directa a la instrucción (este flujo se enfatiza menos en el ejemplo, pero es un resultado posible).
  4. Crea una respuesta fácil de usar: Si se ejecutó una función, captura el resultado y envíalo de vuelta al modelo en un turno posterior de la conversación. Usará el resultado para generar una respuesta final y fácil de usar que incorpore la información de la llamada a la función.

Define la declaración de la función:

En este ejemplo se declara una función para agendar citas:

# Define the function declaration for the model
schedule_meeting_function = {
    "name": "schedule_meeting",
    "description": "Schedules a meeting with specified attendees at a given time and date.",
    "parameters": {
        "type": "object",
        "properties": {
            "attendees": {
                "type": "array",
                "items": {"type": "string"},
                "description": "List of people attending the meeting.",
            },
            "date": {
                "type": "string",
                "description": "Date of the meeting (e.g., '2024-07-29')",
            },
            "time": {
                "type": "string",
                "description": "Time of the meeting (e.g., '15:00')",
            },
            "topic": {
                "type": "string",
                "description": "The subject or topic of the meeting.",
            },
        },
        "required": ["attendees", "date", "time", "topic"],
    },
}

Se declara el cliente y las funciones que puede llamar el modelo:

# Configure the client and tools
client = genai.Client()
tools = types.Tool(function_declarations=[schedule_meeting_function])
config = types.GenerateContentConfig(tools=[tools])

Se llama al modelo y se incluyen las herramientas que tiene disponibles para ejecutar de la mejor maner la solicitud del usuario:

# Send request with function declarations
response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="Schedule a meeting with Bob and Alice for 03/14/2025 at 10:00 AM about the Q3 planning.",
    config=config,
)

Procesamos la respuesta del LLM, en caso que incluya la funcion declarada, se ejecuta la funcion y enviamos la respuesta al cliente:

# Check for a function call
if response.candidates[0].content.parts[0].function_call:
    function_call = response.candidates[0].content.parts[0].function_call
    print(f"Function to call: {function_call.name}")
    print(f"Arguments: {function_call.args}")
    #  In a real app, you would call your function here:
    #  result = schedule_meeting(**function_call.args)
else:
    print("No function call found in the response.")
    print(response.text)

Finalmente, el LLM puede enviar una notificación de ejecución al usuario con el resultado de la función ejecutada.

Como puedes observar, crear un agente solo nos tomo 4 sencillos pasos utilzando la API de Gemini. Si quieres conocer mas de como estos agentes pueden potenciar tu negocio no dudes en escribirnos.

Telygen blog.

fuente