NeoGraph – Eine auf C++ portierte Agent-Engine von LangGraph
(github.com/fox1245)Hallo.
Ich möchte meine selbst entwickelte Agent-Orchestrierungs-Engine NeoGraph vorstellen.
Sie basiert auf C++17 und kann mit dem folgenden Befehl installiert werden.
pip install neograph-engine
Warum habe ich sie entwickelt?
Bei der Nutzung des Python-basierten LangGraph war ich oft unzufrieden mit der Performance. Auch die Anforderungen an die benötigte Server-Hardware sind recht hoch. Deshalb dachte ich oft, dass es gut wäre, eine schlanke und schnelle Orchestrierungs-Engine zu haben, und so entstand der Ansatz, sie in C++ zu implementieren, um die Performance zu verbessern.
Besonderheiten?
Graphen werden nicht als Code, sondern als Daten behandelt.
Die meisten Python-Frameworks definieren Graphen als Python-Objekte. NeoGraph definiert die Graphstruktur selbst als JSON. Nicht als StateGraph-Objekt, sondern als ein einzelner JSON-Block, der in genau eine Datenbankzeile passt.
Dadurch werden unter anderem folgende Dinge möglich.
-
Hot-Swap ohne Deployment – Um die Agent-Struktur (Graph-Topologie) zu ändern, muss lediglich eine JSON-Zeile in der DB ausgetauscht werden.
Weder ein neues Deployment noch ein Prozessneustart noch der Verlust laufender Konversationen sind erforderlich. -
Multi-Tenant – Innerhalb eines Prozesses können pro Kunde unterschiedliche Agent-Strukturen ausgeführt werden. In einem tatsächlichen Test mit OpenAI gpt-4o-mini bei gleichzeitiger Verarbeitung von 1.000 Kunden lag der RSS bei 29 MB, bei 0 Fehlern. Mit derselben Konfiguration in LangGraph wäre aufgrund eines Prozesses pro Kunde wohl ein Bedarf von grob mehreren Dutzend GB zu erwarten.
-
Selbst-evolvierender Agent – Das LLM betrachtet die Gespräche jedes Kunden und schreibt dessen
graph_def(JSON) neu. Mit anderen Worten: Der Agent „verändert seine Form selbst“ entsprechend dem Nutzerverhalten.
Und es ist schnell.
| Framework | Engine-Overhead (1 Node-Ausführung) | Im Vergleich zu NeoGraph |
|---|---|---|
| NeoGraph | 5.0 µs | 1× |
| Haystack | 140 µs | 28× |
| LangGraph | 643 µs | 128× |
| LlamaIndex | 1,565 µs | 313× |
| AutoGen | 3,127 µs | 625× |
Natürlich kann das je nach Messmethode variieren, und sobald echte LLM-Aufrufe dazukommen, dominiert externes I/O, sodass sich die gefühlte Geschwindigkeit angleichen kann.
Ich denke, dass diese µs-Werte vor allem in Multi-Tenant- oder Edge-Fällen mit Tausenden von Requests auf einer einzigen Box wirklich Bedeutung haben.
GitHub: https://github.com/fox1245/NeoGraph
PyPI: https://pypi.org/project/neograph-engine/
Feedback ist willkommen.
Noch keine Kommentare.