Saltar al contenido principal

Casos de uso

La función Function Calling permite que el modelo interactúe con herramientas externas para obtener información en tiempo real o ejecutar operaciones específicas. Esta función mejora la precisión de los datos y, al mismo tiempo, amplía las capacidades del modelo, haciendo que el modelo no se limite a generar texto, sino que pueda admitir escenarios de aplicación más dinámicos y prácticos. Algunos ejemplos de casos de uso de Function Calling son:
  • Consulta de información dinámica: permite obtener datos dinámicos en tiempo real desde sistemas externos mediante llamadas a API, como el clima, noticias o cotizaciones bursátiles. Por ejemplo, al llamar a una API meteorológica para obtener información climática en tiempo real, cuando el usuario pregunta por el clima actual, el modelo puede indicarle las condiciones meteorológicas en ese momento, en lugar de proporcionar un pronóstico desactualizado.
  • Automatización de tareas: permite ejecutar operaciones específicas mediante llamadas a funciones, de modo que el usuario pueda activar operaciones automatizadas en segundo plano a través de una conversación. Por ejemplo, al llamar a la API de un sitio de venta de entradas para reservar boletos, cuando el usuario pregunta cómo comprar entradas para una atracción, el modelo ya no solo le indica cómo hacerlo, sino que puede ayudarle directamente a completar la reserva.

Modelos compatibles

Los siguientes modelos son compatibles con Function Calling:

Cómo usarlo

  1. Define las funciones de herramienta que el modelo debe llamar.
  2. Agrega el parámetro tools en la solicitud para definir las funciones que el modelo debe usar.

Ejemplo de uso

A continuación se proporciona un ejemplo completo de código en Python. Se usa como ejemplo la consulta del clima actual en una ubicación para demostrar cómo usar Function Calling. Para conocer el formato específico de la API de Function Calling, consulta la API de creación de solicitudes de conversación de chat.

1. Inicializar el cliente

Debes inicializar el cliente con tu clave de API de JieKou AI.
from openai import OpenAI
import json

client = OpenAI(
    base_url="https://api.highwayapi.ai/openai",
    api_key="<Your API Key>",
)

model = "deepseek/deepseek-v3"

2. Definir la función que se llamará

Define la función que el modelo debe llamar. El siguiente ejemplo en Python muestra una función para obtener información meteorológica.
# Función de ejemplo para simular la obtención de datos meteorológicos.
def get_weather(location):
    """Obtiene el clima actual de la ubicación especificada"""
    print("Llamando a la función get_weather, ubicación: ", location)
    # En una aplicación real, aquí debes llamar a una API meteorológica externa.
    # Este es un ejemplo simplificado que devuelve datos codificados.
    return json.dumps({"位置": location, "温度": "20 摄氏度"})

3. Construir una solicitud de API que incluya herramientas y el mensaje del usuario

Crea la solicitud de llamada a la API. Esta solicitud incluye el parámetro tools, que define la función que el modelo debe usar, así como el mensaje del usuario.
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Obtiene el clima de una ubicación; el usuario debe proporcionar primero la ubicación",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "Información de la ciudad, por ejemplo: Shanghái",
                    }
                },
                "required": ["location"]
            },
        }
    },
]
messages = [
    {
        "role": "user",
        "content": "¿Qué tiempo hace en Shanghái?"
    }
]
# Envía la solicitud e imprime la respuesta
response = client.chat.completions.create(
    model=model,
    messages=messages,
    tools=tools,
)
# En producción, comprueba si la respuesta contiene una llamada a herramienta
tool_call = response.choices[0].message.tool_calls[0]
print(tool_call.model_dump())
Salida:
{'id': '0', 'function': {'arguments': '{"location": "上海"}', 'name': 'get_weather'}, 'type': 'function'}

4. Responder según el resultado de la llamada a la función y obtener la respuesta final

A continuación, procesa la llamada a la función, ejecuta la función get_weather y envía el resultado de vuelta al modelo para generar la respuesta final para el usuario.
# Asegúrate de que la llamada a herramienta se haya definido en el paso anterior
if tool_call:
    # Amplía el historial de conversación y agrega el mensaje de llamada a herramienta del asistente
    messages.append(response.choices[0].message)

    function_name = tool_call.function.name
    if function_name == "get_weather":
        function_args = json.loads(tool_call.function.arguments)
        # Ejecuta la función y obtiene la respuesta
        function_response = get_weather(
            location=function_args.get("location"))
        # Agrega la respuesta de la función a los mensajes
        messages.append(
            {
                "tool_call_id": tool_call.id,
                "role": "tool",
                "content": function_response,
            }
        )

    # Obtiene la respuesta final del modelo, incluido el resultado de la función
    answer_response = client.chat.completions.create(
        model=model,
        messages=messages,
        # Nota: no incluyas aquí el parámetro tools
    )
    print(answer_response.choices[0].message)
Salida:
ChatCompletionMessage(content="La temperatura actual en Shanghái es de 20 grados Celsius. Ten en cuenta que las condiciones meteorológicas pueden cambiar en cualquier momento; te recomendamos consultar el pronóstico más reciente para obtener información más precisa.", refusal=None, role='assistant', function_call=None, tool_calls=None)

Código completo

from openai import OpenAI
import json

client = OpenAI(
    base_url="https://api.highwayapi.ai/openai",
    api_key="<Your API Key>",
)

model = "deepseek/deepseek-v3"

# Función de ejemplo para simular la obtención de datos meteorológicos.
def get_weather(location):
    """Obtiene el clima actual de la ubicación especificada"""
    print("Llamando a la función get_weather, ubicación: ", location)
    # En una aplicación real, aquí debes llamar a una API meteorológica externa.
    # Este es un ejemplo simplificado que devuelve datos codificados.
    return json.dumps({"位置": location, "温度": "20 摄氏度"})

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Obtiene el clima de una ubicación; el usuario debe proporcionar primero la ubicación",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "Información de la ciudad, por ejemplo: Shanghái",
                    }
                },
                "required": ["location"]
            },
        }
    },
]

messages = [
    {
        "role": "user",
        "content": "¿Qué tiempo hace en Shanghái?"
    }
]

# Envía la solicitud e imprime la respuesta
response = client.chat.completions.create(
    model=model,
    messages=messages,
    tools=tools,
)

# En producción, comprueba si la respuesta contiene una llamada a herramienta
tool_call = response.choices[0].message.tool_calls[0]
print(tool_call.model_dump())

# Asegúrate de que la llamada a herramienta se haya definido en el paso anterior
if tool_call:
    # Amplía el historial de conversación y agrega el mensaje de llamada a herramienta del asistente
    messages.append(response.choices[0].message)

    function_name = tool_call.function.name
    if function_name == "get_weather":
        function_args = json.loads(tool_call.function.arguments)
        # Ejecuta la función y obtiene la respuesta
        function_response = get_weather(
            location=function_args.get("location"))
        # Agrega la respuesta de la función a los mensajes
        messages.append(
            {
                "tool_call_id": tool_call.id,
                "role": "tool",
                "content": function_response,
            }
        )

    # Obtiene la respuesta final del modelo, incluido el resultado de la función
    answer_response = client.chat.completions.create(
        model=model,
        messages=messages,
        # Nota: no incluyas aquí el parámetro tools
    )
    print(answer_response.choices[0].message)