{"id":26114,"date":"2026-10-22T09:24:02","date_gmt":"2026-10-22T08:24:02","guid":{"rendered":"https:\/\/nowtec.solutions\/?p=26114"},"modified":"2026-10-22T09:24:02","modified_gmt":"2026-10-22T08:24:02","slug":"prozedurale-graphen-agenten-gedaechtnis","status":"publish","type":"post","link":"https:\/\/nowtec.solutions\/de\/blog\/prozedurale-graphen-agenten-gedaechtnis\/","title":{"rendered":"Prozedurale Graphen: Ein Ged\u00e4chtnis, das sich selbst umschreibt"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">In der letzten Sitzung habe ich vier Memory-Engines f\u00fcr Whale, unser Agent Harness, verglichen und am Ende cognee gew\u00e4hlt. Dann las ich ein Paper und implementierte etwas v\u00f6llig anderes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das Paper ist <em>Procedural Graphs: Self-Evolving Execution Structures for LLM Agents<\/em> von Yuxing Lu, Yicheng Chen, Shanchan Wu und Sercan \u00d6. Ar\u0131k bei Google, Georgia Tech und der Universit\u00e4t Peking (<a href=\"https:\/\/arxiv.org\/abs\/2609.09153\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">arXiv:2609.09153<\/a>, 8. September 2026). Es schl\u00e4gt keine bessere Datenbank vor. Es gibt eine andere Antwort auf die Frage, <em>wozu<\/em> das Ged\u00e4chtnis eines Agenten \u00fcberhaupt da ist \u2014 und nachdem ich das Abstract zweimal gelesen hatte, war der Vergleich der Vorwoche keine Shortlist mehr, sondern ein Satz Kriterien, in denen das Paper einfach besser abschnitt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fakten gegen Prozeduren<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Das meiste Ged\u00e4chtnis f\u00fcr Sprachmodelle speichert Fakten. Die klassische Form ist ein Tripel: Entit\u00e4t, Relation, Entit\u00e4t. Z\u00fcrich \u2014 liegt in \u2014 Schweiz. Man stellt eine Frage \u00fcber die Welt und bekommt eine Antwort. Es ist eine <em>Was-ist<\/em>-Struktur.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ein prozeduraler Graph speichert die andere Art von Wissen, in derselben Form: Prozedur, Relation, Prozedur. Es ist eine <em>Was-zu-tun<\/em>-Struktur. Die Knoten sind keine Dinge, die der Agent weiss, sondern Schritte, die er gegangen ist, und die Kanten sind, wie diese Schritte aufeinander folgen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Diese Unterscheidung klingt akademisch, bis man einem Agenten zusieht, der zweimal an derselben Aufgabe scheitert. Die Fakten waren nie das Problem. Er wusste, was eine Liquidit\u00e4tsplanung ist. Was ihm fehlte, war das Wissen, dass <em>dieser eine Schritt erfahrungsgem\u00e4ss auf diese eine Weise schiefgeht<\/em> \u2014 und genau das h\u00e4lt ein prozeduraler Graph fest.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Orientierung, die lenkt, ohne vorzuschreiben<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Der Mechanismus, der mir am besten gef\u00e4llt, sitzt mitten im Loop. Bei jedem Entscheidungsschritt bestimmt das Framework den aktiven Knoten des Agenten im Graphen, und ein Guidance-Modell \u00fcbersetzt den umliegenden Teilgraphen in eine situative Orientierung auf Schrittebene: ein kurzer Kontext dazu, wo der Agent steht und was von hier aus erfahrungsgem\u00e4ss funktioniert.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Diese Orientierung wird an den Prompt des Solvers angeh\u00e4ngt. Entschieden wird weiterhin vom Solver. Das Paper formuliert es so, dass die Orientierung die n\u00e4chste Aktion <em>beeinflusst, ohne sie vorzuschreiben<\/em>, und diese Formulierung leistet echte Arbeit \u2014 sie ist der Unterschied zwischen Ged\u00e4chtnis als Ratschlag und Ged\u00e4chtnis als Schiene. Ein Agent auf einer Schiene kann den Fall nicht mehr behandeln, den man nicht vorhergesehen hat. Und der war der ganze Grund, einen Agenten zu bauen statt ein Skript.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Der Teil, der sich selbst weiterentwickelt<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Hier verdient das Verfahren seinen Namen. Ein Refiner \u2014 selbst ein Sprachmodell \u2014 vergleicht gescheiterte Verl\u00e4ufe mit gelungenen und schl\u00e4gt \u00c4nderungen am Graphen vor: Topologie \u00e4ndern, Attribute an einem Knoten \u00e4ndern, beschneiden. Verworfene Varianten bleiben erhalten statt gel\u00f6scht zu werden, damit der Graph sich merkt, was <em>nicht<\/em> noch einmal zu versuchen ist. Man startet mit einem minimalen Skelett, und der Loop l\u00e4sst es wachsen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das Ged\u00e4chtnis des Agenten ist damit kein Protokoll, das l\u00e4nger wird. Es ist eine Struktur, die besser wird \u2014 oder mindestens anders, in eine Richtung, die man pr\u00fcfen kann.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Drei Entscheidungen, die die Sitzung gef\u00fcllt haben<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Das Paper zu lesen dauerte zwanzig Minuten. Der Rest der Sitzung ging in Entscheidungen, die es einem nicht abnimmt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Wie der Graph gespeichert wird.<\/strong> Ich habe ein paar Optionen abgewogen \u2014 eine JSON-Graph-Spezifikation, die Graphviz-JSON-Variante, GraphML, einfaches YAML \u2014 und bin beim Node-Link-JSON von <a href=\"https:\/\/networkx.org\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">NetworkX<\/a> gelandet, geschrieben und direkt wieder eingelesen \u00fcber <code>json_graph.node_link_data<\/code> und <code>node_link_graph<\/code>. Die Begr\u00fcndung war langweilig, und ich w\u00fcrde sie wieder so treffen: Es ist f\u00fcr Menschen lesbar, es diffst in Git, es braucht keine Abh\u00e4ngigkeit, die wir nicht schon haben, und es liefert die Graph-Validierung gratis mit, statt handgeschrieben.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Was passiert, wenn der Graph ung\u00fcltig ist.<\/strong> Die verlockende Antwort ist, hart abzubrechen \u2014 kaputtes Ged\u00e4chtnis, alles anhalten. Das ist falsch. Wenn die Ged\u00e4chtnis-Validierung den Agenten anhalten kann, dann ist das Ged\u00e4chtnis ein neuer Weg, auf dem der Lauf stirbt, und man hat das System verschlechtert, indem man ihm Wissen hinzugef\u00fcgt hat. Der Validator warnt also, gebunden an das Log-Level, und der Agent arbeitet mit der Orientierung weiter, die er sicher ableiten konnte. Ein Ged\u00e4chtnis ist eine Verbesserung, keine Abh\u00e4ngigkeit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Wann der Refiner l\u00e4uft.<\/strong> Nicht nach jedem Schritt \u2014 das ist eine Steuer auf jeden einzelnen Zug, bezahlt in Tokens und Latenz. Er l\u00e4uft an der Sitzungsgrenze, wenn der Loop durch ist und ein vollst\u00e4ndiger Verlauf zum Vergleich vorliegt. Die Entscheidung, die ich in der Aufnahme als offen notiert habe, ist weiter offen: Wir brauchen Zahlen dazu, was eine Iteration des Loops in Tokens kostet, bevor wir hier weiter justieren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Test-first gebaut, von einem Agenten<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Die Implementierung selbst entstand mit Claude Code und dem Superpowers-Plugin, testgetrieben, mit mir als Aufsicht statt als Tipper. Es lief gut genug, um leicht beunruhigend zu sein: Specs, Tests, Implementierung, gr\u00fcn.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die ehrliche Fassung dieses Satzes ist aber diese: Wenn ein Agent den Code schreibt, ist das, was man pr\u00fcfen muss, nicht mehr der Code \u2014 es ist der <em>Plan<\/em>. Jeder Fehler, den ich beim Selbsttippen bemerkt h\u00e4tte, muss nun beim Lesen auffallen, was der Agent zu tun beabsichtigt, bevor er es tut. Was zuf\u00e4llig genau das Thema der n\u00e4chsten Sitzung ist: Wie stellt man einen Kritiker und einen Menschen vor einen Plan?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Am Ende dieser Sitzung hatten wir einen Agent-Loop, der mehrere Iterationen l\u00e4uft, ein <code>refine<\/code>-Kommando, ein Ged\u00e4chtnis, das den Verlauf aufzeichnet und sich daran verbessert, und Tests \u00fcber das Ganze.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Die Session ansehen<\/h2>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube\" style=\"margin:2rem 0\">\n<a href=\"https:\/\/youtu.be\/I_B6WlJcofA\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display:block;position:relative;border-radius:10px;overflow:hidden;background:#000;text-decoration:none;line-height:0\">\n<img decoding=\"async\" src=\"https:\/\/i.ytimg.com\/vi\/I_B6WlJcofA\/maxresdefault.jpg\" alt=\"Creating an AI Agent Harness: Iteration 4 \u2014 Memory Engine Implementation\" loading=\"lazy\" style=\"display:block;width:100%;height:auto;aspect-ratio:16\/9;object-fit:cover\">\n<span style=\"position:absolute;inset:0;display:flex;align-items:center;justify-content:center\">\n<span style=\"width:76px;height:54px;border-radius:14px;background:rgba(18,18,18,.82);display:flex;align-items:center;justify-content:center\">\n<span style=\"width:0;height:0;border-left:21px solid #fff;border-top:13px solid transparent;border-bottom:13px solid transparent;margin-left:5px\"><\/span>\n<\/span><\/span>\n<span style=\"position:absolute;left:0;right:0;bottom:0;padding:.85rem 1rem;background:linear-gradient(transparent,rgba(0,0,0,.85));color:#fff;font-size:.9rem;line-height:1.4\">Creating an AI Agent Harness: Iteration 4 \u2014 Memory Engine Implementation &#8212; auf YouTube ansehen &#8594;<\/span>\n<\/a>\n<figcaption class=\"wp-element-caption\">Kapitel: 00:00 Start der Memory-Arbeit \u00b7 02:27 Agent-Loop und Ged\u00e4chtnisstruktur \u00b7 06:46 Implementierung und Setup \u00b7 10:23 Wahl des Graph-Datenformats \u00b7 17:06 Komponenten des Memory-Systems \u00b7 42:39 N\u00e4chste Schritte planen \u00b7 45:42 Testgetriebener Fortschritt \u00b7 49:54 Abschluss.<\/figcaption>\n<\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>Die bisherigen Folgen:<\/strong> https:\/\/www.youtube.com\/playlist?list=PLPbgiIdJb7gE<\/li>\n\n\n<li><strong>Der Memory-Engine-Vergleich davor:<\/strong> https:\/\/nowtec.solutions\/de\/blog\/memory-engine-fuer-agent-loop\/<\/li>\n\n\n<li><strong>Code:<\/strong> https:\/\/github.com\/nowtec\/whale<\/li>\n\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Dieser Artikel wurde unter Zuhilfenahme von KI-Tools verfasst und vor der Ver\u00f6ffentlichung von unserem Team gepr\u00fcft (EU-KI-Verordnung, Art. 50).<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die meisten Ged\u00e4chtnisse speichern Fakten \u2014 was was ist. Ein prozeduraler Graph speichert, was zu tun ist, und schreibt sich um, wenn ein Schritt scheitert. Wie wir das in Whale implementiert haben, und die drei Entscheidungen, die das Paper einem nicht abnimmt.<\/p>\n","protected":false},"author":4,"featured_media":26092,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[5],"tags":[],"class_list":["post-26114","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech-trends-and-innovation"],"acf":[],"_links":{"self":[{"href":"https:\/\/nowtec.solutions\/de\/wp-json\/wp\/v2\/posts\/26114","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nowtec.solutions\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nowtec.solutions\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nowtec.solutions\/de\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/nowtec.solutions\/de\/wp-json\/wp\/v2\/comments?post=26114"}],"version-history":[{"count":1,"href":"https:\/\/nowtec.solutions\/de\/wp-json\/wp\/v2\/posts\/26114\/revisions"}],"predecessor-version":[{"id":26115,"href":"https:\/\/nowtec.solutions\/de\/wp-json\/wp\/v2\/posts\/26114\/revisions\/26115"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nowtec.solutions\/de\/wp-json\/wp\/v2\/media\/26092"}],"wp:attachment":[{"href":"https:\/\/nowtec.solutions\/de\/wp-json\/wp\/v2\/media?parent=26114"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nowtec.solutions\/de\/wp-json\/wp\/v2\/categories?post=26114"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nowtec.solutions\/de\/wp-json\/wp\/v2\/tags?post=26114"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}