NeoGraph - un motor de agentes que lleva LangGraph a C++
(github.com/fox1245)Hola.
Quiero compartir NeoGraph, un motor de orquestación de agentes que desarrollé.
Está basado en C++17 y se puede instalar con el siguiente comando.
pip install neograph-engine
¿Por qué lo hice?
Al usar LangGraph, basado en Python, muchas veces sentí que el rendimiento se quedaba corto. Como además los requisitos para levantar el servidor suelen ser bastante altos, pensé que sería ideal contar con un motor de orquestación ligero y rápido, así que eso llevó a implementarlo en C++ con la idea de mejorar el rendimiento.
¿Características?
Maneja el grafo como datos, no como código.
La mayoría de los frameworks de Python definen el grafo como objetos de Python. NeoGraph define la propia estructura del grafo en JSON. No se define como un objeto StateGraph, sino como un bloque de JSON que cabe en una sola fila de una base de datos.
Por eso, se vuelven posibles cosas como las siguientes.
-
Hot swap sin despliegue: para cambiar la estructura del agente (la topología del grafo), basta con reemplazar una sola línea de JSON en la base de datos.
No hace falta volver a desplegar, reiniciar procesos ni se pierde ninguna conversación en curso. -
Multitenancy: es posible ejecutar dentro de un mismo proceso estructuras de agentes distintas para cada cliente. En una prueba real con OpenAI gpt-4o-mini, al procesar 1,000 clientes de forma simultánea, el RSS fue de 29 MB y hubo 0 errores. Con la misma configuración en LangGraph, estimo que al requerir un proceso por cliente harían falta varias decenas de GB.
-
Agente autoevolutivo: el LLM observa las conversaciones de cada cliente y vuelve a escribir el
graph_def(JSON) de ese cliente. Es decir, el agente "cambia su propia forma" según el comportamiento del usuario.
Y además es rápido.
| Framework | Overhead del motor (1 ejecución de nodo) | Frente a NeoGraph |
|---|---|---|
| NeoGraph | 5.0 µs | 1× |
| Haystack | 140 µs | 28× |
| LangGraph | 643 µs | 128× |
| LlamaIndex | 1,565 µs | 313× |
| AutoGen | 3,127 µs | 625× |
Por supuesto, esto puede variar según el método de medición, y cuando entra una llamada real al LLM, el I/O externo domina, así que la velocidad percibida puede terminar siendo parecida.
Creo que estos valores en µs realmente cobran sentido en casos multitenant o de edge donde llegan miles de solicitudes a una sola máquina.
GitHub: https://github.com/fox1245/NeoGraph
PyPI: https://pypi.org/project/neograph-engine/
Agradezco cualquier comentario.
Aún no hay comentarios.