NeoGraph - um motor de agentes que leva o LangGraph para C++
(github.com/fox1245)Olá.
Quero compartilhar o NeoGraph, um motor de orquestração de agentes que eu criei.
Ele é baseado em C++17, e você pode instalá-lo com o comando abaixo.
pip install neograph-engine
Por que eu criei isso
Ao usar o LangGraph, baseado em Python, muitas vezes senti falta de mais desempenho. Como os requisitos necessários para colocar o servidor em operação também são consideráveis, pensei várias vezes que seria bom ter um motor de orquestração leve e rápido. Foi daí que veio a ideia de implementá-lo em C++ para buscar ganhos de performance.
Características
Ele trata grafos como dados, não como código.
A maioria dos frameworks em Python define grafos como objetos Python. O NeoGraph define a própria estrutura do grafo em JSON. Em vez de um objeto StateGraph, ele é definido como um bloco de JSON que cabe em uma única linha do banco de dados.
Assim, as seguintes possibilidades se tornam viáveis.
-
Hot swap sem deploy - para mudar a estrutura do agente (topologia do grafo), basta substituir uma única linha de JSON no banco de dados.
Não há necessidade de redeploy, reinício de processo nem perda de conversas em andamento. -
Multitenancy - é possível executar, dentro de um único processo, estruturas de agentes diferentes para cada cliente. Em testes reais com OpenAI gpt-4o-mini processando 1.000 clientes simultaneamente, o RSS foi de 29 MB e houve 0 erros. Com a mesma configuração no LangGraph, como seria um processo por cliente, estimo que seriam necessários algumas dezenas de GB.
-
Agentes autoevolutivos - o LLM observa as conversas de cada cliente e reescreve o
graph_def(JSON) daquele cliente. Ou seja, o agente "muda sua própria forma" de acordo com o comportamento do usuário.
E ele é rápido
| Framework | Overhead do motor (1 execução de nó) | Em relação ao NeoGraph |
|---|---|---|
| NeoGraph | 5.0 µs | 1× |
| Haystack | 140 µs | 28× |
| LangGraph | 643 µs | 128× |
| LlamaIndex | 1,565 µs | 313× |
| AutoGen | 3,127 µs | 625× |
Claro, isso pode variar dependendo da forma de medição, e quando chamadas reais ao LLM entram no fluxo, o I/O externo passa a dominar, então a velocidade percebida pode acabar sendo parecida.
Acredito que esses números em µs realmente façam diferença em casos de multitenancy/edge, quando milhares de requisições chegam a uma única máquina.
GitHub: https://github.com/fox1245/NeoGraph
PyPI: https://pypi.org/project/neograph-engine/
Feedback é bem-vindo.
Ainda não há comentários.