Saltar al contenido principal

GPT-4.5 Tutorial de Llamada a Funciones: Extraer cotizaciones bursátiles y noticias con IA

Construye un sistema de IA de llamada multifunción para extraer cotizaciones bursátiles y noticias utilizando el modelo más avanzado de OpenAI.
Actualizado 7 mar 2025  · 12 min de lectura

Los grandes modelos lingüísticos (LLM) suelen tener dificultades para generar de forma coherente salidas estructuradas, como JSON, incluso cuando se utilizan técnicas avanzadas de ingeniería de prontitud. Aunque la ingeniería rápida puede mejorar los resultados, no es infalible: aún pueden producirse errores durante las pruebas, que provoquen fallos ocasionales. Entonces, ¿cómo puedes garantizar siempre unos resultados estructurados precisos y fiables?

Llamada a funciones en los LLM se refiere a la capacidad de estos modelos para producir respuestas de datos estructurados, normalmente en forma de objetos JSON. Esta función permite a los LLM ir más allá de la simple generación de texto e interactuar con sistemas externos, API y herramientas. Aprovechando la llamada a funciones, los LLM pueden realizar tareas más complejas, basadas en el contexto, manteniendo la estructura y precisión requeridas.

En este tutorial, aprenderemos a utilizar GPT-4.5para crear un script de llamada a funciones. En primer lugar, implementaremos una única función para extraer los precios de las acciones de Internet. A continuación, añadiremos otra función que permita a la LLM elegir entre varias herramientas y seleccionar la más adecuada en función de las indicaciones del usuario.

Al final de este tutorial, aprenderás a construir tu propia aplicación inteligente que pueda proporcionar los precios de las acciones de cualquier empresa y también ofrecer noticias.

Imagen del autor

Capacidades de llamada a funciones de GPT-4.5

GPT-4.5, el último modelo de OpenAI, introduce varias funciones avanzadas, incluida la capacidad mejorada de llamada a funciones. Estas capacidades están diseñadas para mejorar la capacidad del modelo de interactuar con sistemas externos y realizar tareas complejas invocando funciones específicas basadas en las entradas del usuario.

Fuente: Modelo - API OpenAI

Éstas son las principales características de la Llamada a Función de GPT-4.5:

1. Integración con API

GPT-4.5 admite la llamada a funciones a través de la API de finalización de chats, la API de asistentes y la API de lotes. Esto permite a los desarrolladores integrar perfectamente el modelo en sus aplicaciones, permitiéndole realizar tareas como recuperar datos, procesarlos e incluso ejecutar comandos dentro de un entorno de software.

2. Salidas estructuradas

El modelo puede devolver salidas estructuradas, como JSON, lo que resulta especialmente útil para los desarrolladores que necesitan que el modelo interactúe con otros sistemas o herramientas que requieren formatos de datos específicos.

3. Capacidad de visión

Aunque GPT-4.5 no admite salidas multimodales como voz o vídeo, sí admite capacidades de visión mediante entradas de imagen. Esto permite al modelo procesar y analizar datos visuales, que pueden combinarse con llamadas a funciones para realizar tareas que impliquen tanto datos de texto como de imagen.

4. Funcionalidades avanzadas

La función de llamada a funciones de GPT-4.5 está diseñada para simplificar los flujos de trabajo complejos, permitiendo que el modelo sugiera o invoque funciones escritas en tu código. Esto puede ser especialmente útil para automatizar tareas repetitivas o integrar la toma de decisiones impulsada por la IA en los sistemas de software existentes.

Descubre todos los detalles sobre el nuevo modelo OpenAI leyendo el blog GPT 4.5: Características, acceso, comparación GPT-4o y más.

GPT-4.5 Llamada a una sola función

Ahora construiremos un sencillo sistema de llamada a funciones utilizando el modelo GPT-4.5 y la biblioteca Yahooquery. La biblioteca Yahooquery nos ayudará a extraer cualquier dato relacionado con acciones de Yahoo Finanzas. 

Nuestra solución permitirá a los usuarios hacer preguntas sobre los precios de las acciones, activando una función específica que recupera el precio de las acciones de Internet y genera una respuesta. Es así de sencillo. 

Empezaremos instalando las bibliotecas openai y yahooquery mediante el comando PIP.

!pip install openai yahooquery -q

Crear una función de cotización de acciones  

Crea una función Python que tome un ticker (por ejemplo, AAPL) y devuelva el precio de ese ticker. Utiliza yahooquery en el backend para extraer datos relevantes.

from openai import OpenAI
import json
from yahooquery import Ticker

def get_stock_price(ticker):
    try:
        # Create a Ticker object for the provided ticker symbol
        t = Ticker(ticker)
        # Retrieve the price data
        price_data = t.price
        # Check if we received valid data for the ticker
        if ticker in price_data and price_data[ticker].get("regularMarketPrice") is not None:
            price = price_data[ticker]["regularMarketPrice"]
        else:
            return f"Price information for {ticker} is unavailable."
    except Exception as e:
        return f"Failed to retrieve data for {ticker}: {str(e)}"
    
    return f"{ticker} is currently trading at ${price:.2f}"

Definir las herramientas mediante la función

El cliente OpenAI no entiende la función de Python, así que tendremos que crear una herramienta que utilice la lista de diccionarios. Debemos proporcionar el nombre, la descripción y el tipo de salida necesarios. 

Siempre que se invoque a esta función, extraerá el nombre del teletipo de la consulta y lo devolverá en un formato estructurado.

tools = [{
    "type": "function",
    "function": {
        "name": "get_stock_price",
        "description": "Get current stock price for a provided ticker symbol from Yahoo Finance using the yahooquery Python library.",
        "parameters": {
            "type": "object",
            "properties": {
                "ticker": {"type": "string"}
            },
            "required": ["ticker"],
            "additionalProperties": False
        },
        "strict": True
    }
}]

Deja que el modelo decida si debe llamar a la función

Vamos a probar nuestra función OpenAI recién creada. Proporciona la finalización del chat con el mensaje del usuario, el nombre del modelo y las herramientas.

client = OpenAI()

messages = [{"role": "user", "content": "What's the current price of Meta stock?"}]

completion = client.chat.completions.create(
    model="gpt-4.5-preview",
    messages=messages,
    tools=tools,
)

print(completion.choices[0].message.tool_calls)

Como podemos ver, GPT-4.5 invocó con precisión el get_stock_price y devolvió el ticker correcto (META).

[ChatCompletionMessageToolCall(id='call_uVGbahRiMnn4AkOJYbv8gfIV', function=Function(arguments='{"ticker":"META"}', name='get_stock_price'), type='function')]

Ejecuta la función con el ticker proporcionado

Ahora podemos proporcionar este ticker a nuestra función Python get_stock_price

tool_call = completion.choices[0].message.tool_calls[0]
args = json.loads(tool_call.function.arguments)

result = get_stock_price(args["ticker"])

print(result)

Como resultado, recibes una respuesta que incluye el nombre del teletipo y su precio correspondiente.

META is currently trading at $640.00

Puedes detenerte aquí, pero para dar una respuesta adecuada en lenguaje natural, tienes que volver a pasar los resultados a la finalización del chat.

Añadir la llamada a la función y el resultado de la herramienta

Añadiremos la respuesta generada de la conversación anterior y también incluiremos la llamada a la herramienta con el ID de la herramienta y los resultados de la herramienta.

messages.append(completion.choices[0].message)  # Model's function call message
messages.append({
    "role": "tool",
    "tool_call_id": tool_call.id,
    "content": str(result)
})

Envía la conversación actualizada al modelo

Ejecuta de nuevo la finalización del chat con el mensaje que incluye el contenido de la llamada a las herramientas.

completion_2 = client.chat.completions.create(
    model="gpt-4.5-preview",
    messages=messages,
    tools=tools,
)

# The final model response incorporating the stock price information
print(completion_2.choices[0].message.content)

Como puedes ver, hemos obtenido el resultado adecuado. 

The current price of Meta stock (META) is $640.00.

Puede que pienses que es un paso inútil, pero cuando tengas una salida compleja, este paso te ayudará a entender los resultados en inglés sencillo en lugar de los resultados en formato JSON.

Si estás confuso sobre la API de OpenAI y quieres aprender más, considera la posibilidad de realizar el curso Fundamentos de la OpenAI para aprender a utilizar la API de OpenAI en los modelos GPT y Whisper de OpenAI.

GPT4.5 Llamada a múltiples funciones

Ahora aprenderemos a añadir otra función a nuestro sistema de IA para que GPT-4.5 pueda decidir automáticamente qué función invocar en función de la petición del usuario. Estamos añadiendo una nueva función de alimentación que devolverá los 3 principales artículos de noticias junto con los enlaces para el teletipo especificado. 

Empieza instalando la biblioteca feedparser con el comando pip. Utilizaremos esta biblioteca para extraer los titulares del teletipo especificado.

!pip install feedparser -q

Define la función de noticias de bolsa

Crea la función Python get_stock_news que tomará el teletipo como entrada y devolverá los tres titulares de las noticias más importantes con sus enlaces.

import feedparser


def get_stock_news(ticker):
    # Construct the RSS feed URL for the given ticker.
    rss_url = f"https://feeds.finance.yahoo.com/rss/2.0/headline?s={ticker}&region=US&lang=en-US"
    try:
        feed = feedparser.parse(rss_url)
        if not feed.entries:
            return f"No news found for {ticker}."
        # Extract the top 3 news items (title and link)
        news_items = []
        for entry in feed.entries[:3]:
            title = entry.get("title", "No Title")
            link = entry.get("link", "No Link")
            news_items.append(f"{title} ({link})")
        news_str = "\n".join(news_items)
    except Exception as e:
        return f"Failed to retrieve news for {ticker}: {str(e)}"
    
    return f"Latest news for {ticker}:\n{news_str}"

get_stock_news("AAPL")

Hemos reunido los tres titulares principales sobre Apple con los enlaces correspondientes.

'Latest news for AAPL:\nNvidia AI Server Maker Hon Hai Posts 25% Jump in Two-Month Sales 
(https://finance.yahoo.com/news/nvidia-ai-server-maker-hon-075011863.html?.tsrc=rss)\nFoxconn says February revenue rose 56.43% y/y
(https://finance.yahoo.com/news/foxconn-says-february-revenue-rose-074433615.html?.tsrc=rss)\nApple Inc. (AAPL): Among the Best Stocks To Invest In According to Billionaires 
(https://finance.yahoo.com/news/apple-inc-aapl-among-best-051548210.html?.tsrc=rss)'

Definir múltiples herramientas para el precio de las acciones y las noticias

Ahora tenemos que añadir otra función OpenAI llamada get_stock_news con la descripción y la salida adecuadas.

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_stock_price",
            "description": "Get current stock price for a provided ticker symbol using yahooquery.",
            "parameters": {
                "type": "object",
                "properties": {
                    "ticker": {"type": "string"}
                },
                "required": ["ticker"],
                "additionalProperties": False
            },
            "strict": True
        }
    },
    {
        "type": "function",
        "function": {
            "name": "get_stock_news",
            "description": "Get the latest news for a provided ticker symbol by parsing the Yahoo Finance RSS feed using feedparser.",
            "parameters": {
                "type": "object",
                "properties": {
                    "ticker": {"type": "string"}
                },
                "required": ["ticker"],
                "additionalProperties": False
            },
            "strict": True
        }
    }
]

Deja que el modelo decida si debe llamar a una o a ambas funciones

Vamos a probar la función preguntando a GPT-4.5 sobre las acciones de Google y las últimas noticias sobre Google.

messages = [{
    "role": "user",
    "content": "What's the current price of Google stock and can you show me the latest news about it?"
}]


completion = client.chat.completions.create(
    model="gpt-4.5-preview",
    messages=messages,
    tools=tools,
)

completion.choices[0].message.tool_calls

Como podemos ver, ha invocado ambas funciones para los precios de las acciones y las últimas noticias.

[ChatCompletionMessageToolCall(id='call_zfcRJ4EcIUUqHCcN8SErjeoi', function=Function(arguments='{"ticker": "GOOGL"}', name='get_stock_price'), type='function'),
 ChatCompletionMessageToolCall(id='call_jBv8TlSPOyFKcRWHwByxLMb4', function=Function(arguments='{"ticker": "GOOGL"}', name='get_stock_news'), type='function')]

Guardar el resultado de la llamada a la función

El problema es que ambas funciones devuelven el teletipo como resultado. Tenemos que idear una declaración if-else para determinar qué función se invoca. Almacenaremos los resultados de la función en el diccionario.

# The model returns function call requests.
tool_calls = completion.choices[0].message.tool_calls

# Execute each function call based on the tool the model requested
tool_results = {}
for tool_call in tool_calls:
    func_name = tool_call.function.name
    args = json.loads(tool_call.function.arguments)
    if func_name == "get_stock_price":
        tool_results["price"] = get_stock_price(args["ticker"])
    elif func_name == "get_stock_news":
        tool_results["news"] = get_stock_news(args["ticker"])

Añadir la llamada a la función y los resultados de la herramienta

Ahora añadiremos los resultados generados anteriormente y el resultado de la función con el ID de la herramienta. 

messages.append(completion.choices[0].message)  # Append the model's function call message

for tool_call in tool_calls:
    func_name = tool_call.function.name
    result_content = tool_results.get("price") if func_name == "get_stock_price" else tool_results.get("news")
    messages.append({
        "role": "tool",
        "tool_call_id": tool_call.id,
        "content": result_content
    })

Envía la conversación actualizada al modelo

Cuando pasamos el mensaje resultante a la GPT-4.5, ésta ha generado unos resultados sorprendentes que son perfectamente razonables.

from IPython.display import display, Markdown

completion_2 = client.chat.completions.create(
    model="gpt-4.5-preview",
    messages=messages,
    tools=tools,
)

# The final model response incorporates both stock price and news.
Markdown(completion_2.choices[0].message.content)

Obtuvimos el precio de las acciones de Google y enlaces a las principales noticias sobre Google. 

El código fuente y los resultados están disponibles en el Espacio de trabajo DataLab. Todo lo que tienes que hacer es añadir tu propiaclave de la API de OpenAI a la variable de entorno, y podrás ejecutarlo todo por tu cuenta.

Conclusión

Hemos forzado grandes modelos lingüísticos para que generen una salida estructurada y luego la pasen a una API o a otra función de Python para ejecutar una tarea específica. La IA avanzada, como GPT-4.5, puede utilizar múltiples servicios o API para generar respuestas altamente integradas. 

En el futuro, utilizaremos llamadas de función y agentes para controlar todo lo que nos rodea; basta con enviar una orden de voz a tu IA, y ésta invocará las herramientas necesarias basándose en tu orden y realizará cambios en el sistema.

Tenemos la GPT-4.5, pero muchos expertos en IA están esperando la GPT-5, que se espera que esté más cerca de la AGI. Puedes saberlo todo sobre el próximo modelo leyendo el blog Todo lo que sabemos sobre la GPT-5 .


Abid Ali Awan's photo
Author
Abid Ali Awan
LinkedIn
Twitter

Soy un científico de datos certificado que disfruta creando aplicaciones de aprendizaje automático y escribiendo blogs sobre ciencia de datos. Actualmente me centro en la creación de contenidos, la edición y el trabajo con grandes modelos lingüísticos.

Temas

Los mejores cursos de DataCamp

curso

Developing AI Systems with the OpenAI API

3 hr
6.3K
Leverage the OpenAI API to get your AI applications ready for production.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado

blog

10 maneras de utilizar ChatGPT para las finanzas

Descubre cómo los modelos lingüísticos de IA como ChatGPT pueden revolucionar tus operaciones financieras, desde la generación de informes hasta la traducción de jerga financiera.
Matt Crabtree's photo

Matt Crabtree

13 min

An avian AI exits its cage

blog

12 alternativas de código abierto a GPT-4

Alternativas de código abierto a GPT-4 que pueden ofrecer un rendimiento similar y requieren menos recursos informáticos para funcionar. Estos proyectos vienen con instrucciones, fuentes de código, pesos del modelo, conjuntos de datos e IU de chatbot.
Abid Ali Awan's photo

Abid Ali Awan

9 min

An AI juggles tasks

blog

Cinco proyectos que puedes crear con modelos de IA generativa (con ejemplos)

Aprende a utilizar modelos de IA generativa para crear un editor de imágenes, un chatbot similar a ChatGPT con pocos recursos y una aplicación clasificadora de aprobación de préstamos y a automatizar interacciones PDF y un asistente de voz con GPT.
Abid Ali Awan's photo

Abid Ali Awan

10 min

tutorial

Tutorial de llamada a funciones de OpenAI

Descubra cómo la nueva capacidad de llamada a funciones de OpenAI permite a los modelos GPT generar salidas JSON estructuradas, resolviendo problemas comunes de desarrollo causados por salidas irregulares.
Abid Ali Awan's photo

Abid Ali Awan

12 min

tutorial

Visión GPT-4: Guía completa para principiantes

Este tutorial le presentará todo lo que necesita saber sobre GPT-4 Vision, desde cómo acceder a él hasta ejemplos prácticos del mundo real y sus limitaciones.
Arunn Thevapalan's photo

Arunn Thevapalan

12 min

tutorial

Ajuste fino de GPT-3 mediante la API OpenAI y Python

Libere todo el potencial de GPT-3 mediante el ajuste fino. Aprenda a utilizar la API de OpenAI y Python para mejorar este modelo de red neuronal avanzado para su caso de uso específico.
Zoumana Keita 's photo

Zoumana Keita

12 min

Ver másVer más