Chatgpt algo como: “Por favor, busque toda la tecnología para mí y resume tendencias y patrones en función de lo que cree que estaría interesado”, sabrá que obtendrá algo genérico, donde busca algunos sitios web y fuentes de noticias y lo entrega.
Esto se debe a que ChatGPT está construido para casos de uso general. Aplica métodos de búsqueda normales para obtener información, a menudo limitándose a algunas páginas web.
Este artículo le mostrará cómo construir un agente de nicho que pueda explorar toda la tecnología, agregar millones de textos, filtrar datos basados en una persona y encontrar patrones y temas sobre los que puede actuar.
El objetivo de este flujo de trabajo es evitar sentarse y desplazarse por foros y redes sociales por su cuenta. El agente debe hacerlo por usted, agarrando lo que sea útil.
Podremos lograr esto utilizando una fuente de datos única, un flujo de trabajo controlado y algunas técnicas rápidas de encadenamiento.
Al almacenar en caché los datos, podemos mantener el costo hasta unos pocos centavos por informe.
Si quieres probar el bot sin arrancarlo tú mismo, puedes unirte a esto Discordia canal. Encontrarás el repositorio aquí Si quieres construirlo por tu cuenta.
Este artículo se centra en la arquitectura general y en cómo construirla, no en los detalles de codificación más pequeños, ya que puede encontrarlos en Github.
Notas sobre el edificio
Si eres nuevo en construir con agentes, es posible que este sea lo suficientemente innovador.
Aún así, si desea crear algo que funcione, deberá aplicar una gran cantidad de ingeniería de software a sus aplicaciones de IA. Incluso si LLMS ahora puede actuar por su cuenta, aún necesitan orientación y barandas.
Para los flujos de trabajo como este, donde hay una ruta clara que el sistema debe tomar, debe construir sistemas “de flujo de trabajo” más estructurados. Si tiene un humano en el bucle, puede trabajar con algo más dinámico.
La razón por la que este flujo de trabajo funciona tan bien es porque tengo una muy buena fuente de datos detrás de él. Sin este foso de datos, el flujo de trabajo no podría hacerlo mejor que chatgpt.
Preparación y almacenamiento en caché de datos
Antes de que podamos construir un agente, necesitamos preparar una fuente de datos en la que pueda aprovechar.
Algo, creo que muchas personas se equivocan cuando trabajan con los sistemas LLM es la creencia de que la IA puede procesar y agregar datos por sí solo.
En algún momento, podríamos darles suficientes herramientas para construir por su cuenta, pero aún no estamos allí en términos de confiabilidad.
Entonces, cuando construimos sistemas como este, necesitamos tuberías de datos para que sean tan limpias como para cualquier otro sistema.
El sistema que he creado aquí usa una fuente de datos que ya tenía disponible, lo que significa que entiendo cómo enseñarle al LLM a aprovecharlo.
Ingiere miles de textos de foros y sitios web tecnológicos por día y utiliza pequeños modelos de PNL para desglosar las principales palabras clave, clasificarlas y analizar el sentimiento.
Esto nos permite ver qué palabras clave están en tendencia en diferentes categorías durante un período de tiempo específico.
Para construir este agente, agregué otro punto final que recopila “hechos” para cada una de estas palabras clave.
Este punto final recibe una palabra clave y un período de tiempo, y el sistema clasifica los comentarios y las publicaciones por compromiso. Luego procesa los textos en trozos con modelos más pequeños que pueden decidir qué “hechos” mantener.
Aplicamos un último LLM para resumir qué hechos son más importantes, manteniendo intactas las citas de origen.
Este es un tipo de proceso de encadenamiento rápido, y lo construí para imitar el motor de citas de Llamaindex.
La primera vez que se requiere el punto final para una palabra clave, puede tardar hasta medio minuto en completarse. Pero dado que el sistema almacena el resultado, cualquier solicitud de repetición toma solo unos pocos milisegundos.
Mientras los modelos sean lo suficientemente pequeños, el costo de ejecutar esto en unos pocos cientos de palabras clave por día es mínimo. Más tarde, podemos hacer que el sistema ejecute varias palabras clave en paralelo.
Probablemente pueda imaginar ahora que podemos construir un sistema para obtener estas palabras clave y hechos para construir diferentes informes con LLM.
Cuándo trabajar con modelos pequeños vs más grandes
Antes de seguir adelante, solo mencionemos que elegir el tamaño del modelo correcto es importante.
Creo que esto está en la mente de todos en este momento.
Hay modelos bastante avanzados que puede usar para cualquier flujo de trabajo, pero a medida que comenzamos a aplicar más y más LLM a estas aplicaciones, el número de llamadas por ejecución se suma rápidamente y esto puede ser costoso.
Entonces, cuando pueda, use modelos más pequeños.
Viste que usé modelos más pequeños para citar y agrupar fuentes en trozos. Otras tareas que son excelentes para modelos pequeños incluyen enrutar y analizar el lenguaje natural en datos estructurados.
Si encuentra que el modelo se está vacilando, puede dividir la tarea en problemas más pequeños y usar el encadenamiento rápido, primero haga una cosa y luego use ese resultado para hacer el siguiente, y así sucesivamente.
Todavía desea usar LLM más grandes cuando necesite encontrar patrones en textos muy grandes, o cuando se comunique con los humanos.
En este flujo de trabajo, el costo es mínimo porque los datos se almacenan en caché, utilizamos modelos más pequeños para la mayoría de las tareas, y las únicas llamadas LLM únicas son las finales.
Cómo funciona este agente
Veamos cómo funciona el agente debajo del capó. Construí el agente para ejecutar dentro de Discord, pero ese no es el foco aquí. Nos centraremos en la arquitectura del agente.
Dividí el proceso en dos partes: una configuración y una noticia. El primer proceso le pide al usuario que configure su perfil.
Como ya sé cómo trabajar con la fuente de datos, he creado un indicador de sistema bastante extenso que ayuda a la LLM a traducir esas entradas en algo con lo que podamos obtener datos más adelante.
PROMPT_PROFILE_NOTES = """
You are tasked with defining a user persona based on the user's profile summary.
Your job is to:
1. Pick a short personality description for the user.
2. Select the most relevant categories (major and minor).
3. Choose keywords the user should track, strictly following the rules below (max 6).
4. Decide on time period (based only on what the user asks for).
5. Decide whether the user prefers concise or detailed summaries.
Step 1. Personality
- Write a short description of how we should think about the user.
- Examples:
- CMO for non-technical product → "non-technical, skip jargon, focus on product keywords."
- CEO → "only include highly relevant keywords, no technical overload, straight to the point."
- Developer → "technical, interested in detailed developer conversation and technical terms."
[...]
"""
También he definido un esquema para las salidas que necesito:
class ProfileNotesResponse(BaseModel):
personality: str
major_categories: List[str]
minor_categories: List[str]
keywords: List[str]
time_period: str
concise_summaries: bool
Sin tener conocimiento de dominio de la API y cómo funciona, es poco probable que un LLM descubra cómo hacerlo por sí solo.
Podría intentar construir un sistema más extenso donde el LLM primero intente aprender la API o los sistemas que se supone que debe usar, pero eso haría que el flujo de trabajo sea más impredecible y costoso.
Para tareas como esta, trato de usar siempre salidas estructuradas en formato JSON. De esa manera podemos validar el resultado, y si la validación falla, lo volvemos a ejecutar.
Esta es la forma más fácil de trabajar con LLM en un sistema, especialmente cuando no hay humanos en el bucle para verificar lo que devuelve el modelo.
Una vez que el LLM ha traducido el perfil de usuario en las propiedades que definimos en el esquema, almacenamos el perfil en alguna parte. Usé MongoDB, pero eso es opcional.
El almacenamiento de la personalidad no es estrictamente requerido, pero debe traducir lo que el usuario dice en un formulario que le permite generar datos.
Generando los informes
Veamos lo que sucede en el segundo paso cuando el usuario desencadena el informe.
Cuando el usuario golpea el /news Comando, con o sin un período de tiempo establecido, primero obtenemos los datos del perfil de usuario que hemos almacenado.
Esto le da al sistema el contexto que necesita para obtener datos relevantes, utilizando tanto categorías como palabras clave vinculadas al perfil. El período de tiempo predeterminado es semanal.
A partir de esto, obtenemos una lista de palabras clave top y tendencias para el período de tiempo seleccionado que puede ser interesante para el usuario.
Sin esta fuente de datos, construir algo como esto habría sido difícil. Los datos deben estar preparados de antemano para que el LLM funcione correctamente con él.
Después de obtener palabras clave, podría tener sentido agregar un paso LLM que filme las palabras clave irrelevantes para el usuario. No hice eso aquí.
Cuanta información más innecesaria se entrega una LLM, más difícil será para centrarse en lo que realmente importa. Su trabajo es asegurarse de que lo que sea que lo alimente sea relevante para la pregunta real del usuario.
A continuación, usamos el punto final preparado anteriormente, que contiene “hechos” almacenados en caché para cada palabra clave. Esto nos brinda información ya examinada y ordenada para cada uno.
Ejecutamos llamadas de palabras clave en paralelo para acelerar las cosas, pero la primera persona en solicitar una nueva palabra clave aún tiene que esperar un poco más.
Una vez que los resultados están en, combinamos los datos, eliminamos los duplicados y analizamos las citas para que cada hecho vuelva a una fuente específica a través de un número de palabras clave.
Luego ejecutamos los datos a través de un proceso de cadena rápida. El primer LLM encuentra de 5 a 7 temas y los clasifica por relevancia, basado en el perfil de usuario. También saca los puntos clave.
El segundo pase LLM utiliza tanto los temas como los datos originales para generar dos longitudes de resumen diferentes, junto con un título.
Podemos hacer esto para asegurarnos de reducir la carga cognitiva en el modelo.
Este último paso para construir el informe lleva más tiempo, ya que elegí usar un modelo de razonamiento como GPT-5.
Podrías cambiarlo por algo más rápido, pero encuentro que los modelos avanzados son mejores en estas últimas cosas.
El proceso completo lleva unos minutos, dependiendo de cuánto ya se haya almacenado en caché ese día.
Echa un vistazo al resultado final a continuación.
Si desea mirar el código y construir este bot, puede encontrarlo aquí. Si solo desea generar un informe, puede unirse a este canal.
Tengo algunos planes para mejorarlo, pero me complace escuchar comentarios si lo encuentran útil.
Y si quieres un desafío, puedes reconstruirlo en otra cosa, como un generador de contenido.
Notas sobre agentes de construcción
Cada agente que construya será diferente, por lo que este no es un plan para construir con LLM. Pero puede ver el nivel de ingeniería de software que esto exige.
Los LLM, al menos por ahora, no eliminan la necesidad de un buen software e ingenieros de datos.
Para este flujo de trabajo, estoy usando principalmente LLM para traducir el lenguaje natural en JSON y luego moverlo a través del sistema mediante programación. Es la forma más fácil de controlar el proceso de agente, pero tampoco es lo que la gente suele imaginar cuando piensan en aplicaciones de IA.
Hay situaciones en las que usar un agente más libre es ideal, especialmente cuando hay un humano en el bucle.
Sin embargo, espero que hayas aprendido algo, o hayas inspirado para construir algo por tu cuenta.
Si quieres seguir mi escritura, sígueme aquí, mi sitio web, Sustitucióno LinkedIn.
❤