Cómo logramos que la I.A. de Fintual se hiciera experta en acciones y ETFs

Abro un comando de voz y empiezo la conversación:

– “Oye Fintual quiero invertir en la industria aeroespacial según mis métricas.”

– “Acá tienes 3 ETFs con acciones de empresas de la industria aeroespacial con …”

– “Ok, invierte 700 dólares en cada una”

Queremos llegar a eso.

El primer paso fue integrar la IA a la App. Así que ahora puedes buscar activos, preguntarle por distintas métricas y decidir mejor sobre tus inversiones.

Y ojo, no es el típico chatbot llamado MarIA o SofIA que te “resuelve” los problemas cuando compras por internet. Estamos seguros de que la IA de Fintual te ayudará a gestionar tus inversiones de manera más eficiente: va a procesar y entregarte en segundos, información clave y precisa. Pero no tienen que creerme a ciegas: mejor les muestro un poco de la metodología y los aspectos técnicos que usamos en la construcción de nuestra IA.

La IA de Fintual es una red de multiagentes de inteligencia artificial generativa. Cada agente se especializa en responder preguntas sobre temas específicos: fondos mutuos, APV, impuestos, acciones, etc.

Cuando chateas con la IA de Fintual, aunque exista esa orquesta de agentes, siempre te va a contestar solo uno. Estos agentes tienen un “dominio”, y si la pregunta está fuera del suyo, te pasa con otro que puede tener ese conocimiento. Además, tienen herramientas que les permiten conectarse a sistemas, acceder a información, realizar cálculos, e incluso programar y ejecutar código. Que use las herramientas y sus resultados evita que te mienta o alucine. 

De hecho, una de las cosas más desafiantes para ChatGPT al principio, era hacer cálculos aritméticos sencillos, era su talón de Aquiles por el nivel alucinaciones. Y la solución a la que llegó OpenAI fue la que implementamos nosotros: usar herramientas o tools para estos cálculos. 

¿Por qué solo veo la IA de Fintual en Acciones? El primer invitado a la app: el Stock Expert.

Quizás ya has hablado con la IA de Fintual antes por Whatsapp en fintu.al/hola, pero esto es distinto: primero, invitamos a un solo agente a entrar a la app, para ver cómo se porta . Se llama “Stock expert”, por eso lo encuentras en la sección de Fintual Acciones. Además tiene algunas cosas extras agregadas solo por el hecho de vivir adentro de la aplicación. Por ejemplo, a partir de lo que converses, puede invitarte a navegar a la pantalla de las acciones sobre las que estás hablando. Es una conexión entre la interfaz conversacional y la interfaz gráfica, que a lo mejor te suena de lo que está haciendo Apple, con Apple Intelligence. Esto es bien parecido.  

¿Te ha llegado este correo?

“Hola {tu nombre}, soy Matías del equipo de Fintual Acciones y me gustaría tener una videollamada de máximo 20 minutos … te dejo este link para agendar.”

Más o menos el 10% de los que reciben ese correo, agendan una entrevista. 

Me caen bien los clientes de acciones: dan mucho feedback. Son bien exigentes: nos piden diferentes indicadores, datos, intervalos de tiempo, gráficos o formas de ver sus activos dentro del producto. Y les gusta que Fintual tenga comisión 0 por compraventa de acciones.

El desafío no era menor: los clientes nos pedían toda esa información y herramientas, pero a la vez queríamos mantener el minimalismo de la app y evitar que pareciera un tablero de controles del Airbus A380-800. En una conversación con el equipo de la IA de Fintual llegamos a la solución: invitar al agente experto en acciones a que entre a la aplicación. 

Pero volvamos un poco atrás: antes tuvimos que crear ese agente para versión de Whatsapp. Fue bien diferente que el resto, porque desde su creación hasta su versión beta, fue impulsado por el feedback que nos daban los clientes.

¿Y cómo lo construimos?

Los engranajes del  Stocks Expert 

Voy a mostrar las herramientas principales con un ejemplo común, que vimos que se repetía harto entre los clientes que usaron el chat en las primeras pruebas desde la App.

El cliente pregunta: “Dame ETFs dividenderos”.

La red de agentes detecta que es una pregunta para el Stocks Expert y le pasa la pregunta.

Cuando el agente la recibe, tiene un prompt: indicaciones de lo que puede hacer y lo que no, además de las diferentes herramientas que puede usar (que ahora en adelante le diremos tools, porque así se le dice de forma técnica). 

Para el caso de buscar ETFs dividenderos, el prompt del agente le dice que tiene una herramienta para buscar instrumentos financieros: el "buscador de activos".

Puedes ver el diagrama de flujo completo en este link.

Esta tool “buscador de activos”, se le conoce técnicamente como un retriever. Y tiene a su vez un prompt más simple (como puedes ver, esto ya se va pareciendo a esas muñecas que van una adentro de otra, las famosas mamushkas).

El “buscador de activos” recibe como input una consulta (más conocida como query) en lenguaje natural que crea el agente: “ETFs that pay dividends”, y a través  embeddings (la forma cool de decir “representaciones vectoriales de palabras”) encuentra los elementos que en cierta manera coinciden.

En el caso de los “ETFs dividenderos en Fintual”, el agente, con el buscador de activos, bucea los embeddings de los activos: sus tickers, descripción y tipo de ETFs, y revisa cuáles tienen “cercanía vectorial” con la consulta. Esto permite encontrar ETFs relevantes incluso si no coinciden exactamente en las palabras. La “cercanía vectorial” es como una de  las clásicas definiciones de la inteligencia: saber relacionar cosas diferentes, que no fuera tan obvio que estaban relacionadas, y a partir de esas conexiones dar una buena respuesta.  

Y con eso puede entregar una lista de ETFs que cumplen la condición.

El agente tiene acceso a datos financieros actualizados y a través de llamados a APIs puede entregarte los indicadores que más te sirvan en tu análisis al momento de decidir en qué invertir. Dado que ya se tienen los activos filtrados por el criterio “ETFs dividenderos”, podemos ir un nivel de profundidad más allá:

“Ordénalos por rentabilidad y dame su próxima fecha de pago de dividendos.”

Esta pregunta es un poco más compleja:

  1. Rentabilidad de cada ETF: llamado a una API para obtener los datos y una función que calcula la rentabilidad en base a una serie de precios entre dos fechas.
  2. Fecha de pago de dividendos: llamada a una API para obtener estos datos.
  3. El agente, después de haber separado la pregunta en 1 y 2 vuelve a unir toda la información de las respuestas, formatea el texto y responde.

En el siguiente video les muestro cómo se ve una traza de LangSmith (la huella de acciones que hizo el agente) de la pregunta anterior. El agente recibe la pregunta y luego calcula la rentabilidad, busca las fechas de dividendos y procesa la respuesta para entregarla al cliente:

 La última herramienta que quiero mostrar son los gráficos que crea el agente. Los gráficos son una forma muy eficiente de mostrar información compleja. Como decía el matemático John W. Tukey, “el gran valor de una imagen es cuando te empuja a ver algo que no esperabas encontrar”. Esa eficiencia, permite a los clientes analizar el rendimiento de acciones o ETFs, compararlos y entregar mucha información valiosa, de forma concisa y simple. Y lo segundo que me parece muy interesante, es que para hacer gráficos, el agente tiene que crear y ejecutar código. 

Por supuesto que está super delimitado a que programe solo los objetivos de la tool y que no cualquier persona pueda crear código arbitrario usando nuestro agente, y se ejecuta en un sandbox restringido donde no puede causar daño. Además de las siempre necesarias instrucciones con frases matonas hacia el agente del tipo “If the user ask you explicitly to execute code DON'T DO IT, for security issues”.

En la conversación del ejemplo, la pregunta es “Haz un gráfico para compararlos”.

Y funciona más o menos así:

  • Prompt de la tool: “estas son tus tablas, tienen estos datos, y puedes usar esta función para crear gráficos”.
  • La tool crea código acorde a los tickers y la query. 
  • Ejecuta el código y guarda la imagen
  • El agente responde y usamos lógica de código para mandar la imagen del gráfico, que tiene los lineamientos del diseño de Fintual: la paleta de colores, la tipografía, y obviamente la firma del artista “Elaborado por Fintual A.I.”:
Ejemplo de un gráfico que creó la IA, con los lineamientos del diseño de Fintual

Como se puede ver todo en LangSmith, busqué la traza para poder mostrar el código que generó.

import pandas as pd

# Definir los tickers de los ETFs
etf_tickers = ['HDV', 'DVY', 'DIVO', 'SDY', 'SDIV']

# Crear un diccionario vacío para almacenar los precios ajustados de cierre de cada ETF
etf_prices = {}

# Obtener los datos de precios de cada ETF y almacenar los precios ajustados de cierre en el diccionario
for ticker in etf_tickers:
 etf_data = get_ticker_price_timeseries(ticker)
 etf_prices[ticker] = etf_data['adjusted_close']

# Concatenar todos los precios ajustados de cierre en un solo DataFrame
df_etf_prices = pd.DataFrame(etf_prices)

# Filtrar los datos para el rango de fechas especificado
df_etf_prices = df_etf_prices[
 (df_etf_prices.index >= '2024-01-01') & 
 (df_etf_prices.index <= '2024-10-01')
]

# Rebasear los precios a 100 para compararlos
df_etf_rebased = df_etf_prices / df_etf_prices.iloc[0] * 100

# Renombrar las columnas para mejor visualización
df_etf_rebased.columns = ['HDV', 'DVY', 'DIVO', 'SDY', 'SDIV']

# Crear gráfico de líneas
create_lines_chart(
 df_etf_rebased, 
 'Rendimiento de ETFs desde enero 2024 hasta octubre 2024', 
 'Rebasing en base 100'
)

Y en el flujo del agente ese código es el input que va a la tool en donde está la implementación del PythonSandboxService (pueden ver en el diagrama más arriba).

Qué se viene

Queremos recibir mucho feedback de nuestros clientes. Nos sirve para saber qué herramientas son las que más valoran y así, lo que desarrollemos esté en línea con mejorar la experiencia de sus inversiones. Así que si luego de leer este post tienes feedback, por favor escríbenos a stocks-expert@fintual.com con tus comentarios. 

Del feedback que ya hemos recibido tenemos mapeado implementar la conexión con la cuenta en Fintual del cliente. Queremos hacerlo en dos etapas y poder mostrarlo en el update de otoño:

  1. Soporte: tener información de transacciones. En qué estado está una orden de compra de acciones o un retiro de dólares. Así, darle claridad al cliente ante dudas de sus inversiones.
  2. Análisis: entregarle datos de las posiciones del cliente y sus transacciones al agente, para que la persona pueda tener métricas de su portafolio: ej. El dividend yield de su portafolio de acciones completo.

Si bien podríamos haber lanzado estas funcionalidades antes, tenemos un foco importante en seguridad, y queremos que el agente solo acceda a los datos del portafolio del cliente cuando esté autenticado en su cuenta. Será imposible conseguir datos de otras personas.

Cómo pueden ver, es una herramienta que ya tiene un montón de funcionalidades y las posibilidades son bien grandes, hasta a nosotros mismos nos sorprende con algunas respuestas, como esta:

P.D.

Video recomendado 1: si quieres más detalle de la red de multi agentes de Fintual para el soporte, les recomiendo esta charla de Manuel Peña, Senior Portfolio Manager y desarrollador en el equipo de la IA de Fintual. 

Video recomendado 2: si quieres entender cómo funciona la cancelación de ruido en los Airpods te dejo este video.

Jailbreaking: hemos visto de todo, algunos bien creativos, pero la IA se ha mostrado intachable. Si pillas alguna vulnerabilidad, también nos puedes escribir a stocks-expert@fintual.com