Context Products entwickeln
Wie aus Dokumenten, Gesprächen und Quellcode Context Products werden, Schritt für Schritt von der Ingestion bis zum Code-Wissensgraphen, für Plattform- und Datenteams.
Verfasst von
-
Stefan Munz Gründer & Co-CEO
Aktualisiert:
Agentic Engineering 5
Unsere Position. Der Engpass ist für uns nicht mehr der Code, sondern der Kontext (öffnet in einem neuen Tab). Gemeint sind die Standards, Konventionen und Entscheidungen, die nur in den Köpfen erfahrener Entwickler:innen stecken. Jede falsche Antwort eines Agenten ist ein Befund aus einem Dokumentations-Audit. Die Abhilfe: den Standard dort aufschreiben, wo der Agent und der nächste Mensch ihn finden.
Die folgenden Pipelines unterscheiden sich je nach Quelle. Jede bewahrt aber Struktur und Metadaten, die bei einem rohen Dump verloren gingen. Ein Agent kann dann über das Ergebnis schlussfolgern, statt aus Fragmenten zu raten.
Wie macht ihr aus rohen Unternehmensdaten Context Products?
Pipelines für Ingestion und Transformation machen aus den wichtigsten Quellen des Unternehmens strukturierte Assets. Diese werden anschließend im Context-Katalog registriert. Extrahieren allein ist dabei nicht das Ziel. Die Pipelines verknüpfen rohe Information zu einer vernetzten Wissensbasis, über die Agenten schlussfolgern können. Dieses “cognify” ist ein Prinzip von Memory-Frameworks wie Cognee (topoteretes - Cognee - The Open-Source AI Memory Platform for Agents (öffnet in einem neuen Tab)).
Unternehmenswissen aufnehmen
Ein großer Teil des Unternehmenswissens liegt unstrukturiert oder halbstrukturiert vor. Robuste Pipelines, die diese Information verarbeiten, sind deshalb eine grundlegende Fähigkeit.
Unstrukturierter Text (Confluence, Jira)
Dokumente aus Wissensbasen wie Confluence und Issue-Trackern wie Jira bilden den Kern des Domain Context. Eine wirksame Ingestion-Pipeline für diese Quellen hat mehrere Schritte:
- Extraktion: Über die offiziellen REST-APIs zieht ihr die Inhalte aus den Quellsystemen. Bei Confluence extrahiert ihr den Inhalt der Seiten in bestimmten Spaces. Bei Jira holt ihr Beschreibungen, Kommentare und wichtige Felder der Issues, die zu einer JQL-Abfrage passen (Medium - Building a Confluence-Powered Search Engine Using LangChain and LLMs (öffnet in einem neuen Tab)).
- Chunking: Rohe Dokumente sind oft zu groß für das Kontextfenster eines LLM. Ihr müsst sie deshalb in kleinere, semantisch zusammenhängende Chunks teilen. Statt naiv in feste Größen zu schneiden, nutzt ihr intelligente Strategien. Ihr teilt etwa an HTML-Überschriften (
<h1>,<h2>), an Absätzen oder an den Abschnitten eines Jira-Issues (Shakudo - Building a Confluence Q&A App with LangChain and ChatGPT (öffnet in einem neuen Tab)). - Anreicherung: Während der Verarbeitung müssen entscheidende Metadaten erhalten bleiben und an jedem Chunk hängen. Dazu gehören Quell-URL, Seitentitel, Autor:in, Erstellungsdatum und relevante Labels oder Tags, etwa der Key des Confluence-Space oder des Jira-Projekts. Diese Metadaten braucht ihr zum Filtern und für die Quellenangaben in der fertigen Antwort der KI.
- Vektorisierung und Speicherung: Jeder Chunk läuft dann durch ein Embedding-Modell, das ihn als numerischen Vektor darstellt. Die Vektoren landen zusammen mit Text und Metadaten in einem Retrieval-System, etwa einer Enterprise-Suchmaschine, und lassen sich später abfragen (Shakudo - Building a Confluence Q&A App with LangChain and ChatGPT (öffnet in einem neuen Tab)).
Gesprächsverläufe
Gesprächsverläufe sind eine eigene, dynamische Form von Kontext und für Konversations-Agenten unverzichtbar. Anders als statische Dokumente wächst dieser Kontext mit jeder Interaktion. Er braucht deshalb aktive Verwaltung, damit er die Token-Limits nicht sprengt und die Kontinuität erhalten bleibt (Mem0 - LLM Chat History Summarization Guide October 2025 (öffnet in einem neuen Tab)). Jede Strategie wägt dabei Genauigkeit gegen Kosten ab:
-
Conversation Buffer Memory: Der einfachste Ansatz behält den gesamten rohen Verlauf. Dabei geht nichts verloren, doch der Ansatz skaliert nicht und sprengt schnell die Token-Limits des Modells (Pinecone - Conversational Memory for LLMs with Langchain (öffnet in einem neuen Tab)).
-
Conversation Window Memory: Praktischer ist es, nur die letzten k Interaktionen zu behalten. Das ist effizient, riskiert aber den Verlust wichtiger Informationen aus früheren Teilen des Gesprächs (Pinecone - Conversational Memory for LLMs with Langchain (öffnet in einem neuen Tab)).
-
Conversation Summary Memory: Hier schreibt ein LLM in regelmäßigen Abständen eine laufende Zusammenfassung des Gesprächs. Das spart viele Tokens, kann beim Zusammenfassen aber Nuancen und konkrete Details verlieren (Managing Context History Best Practices (öffnet in einem neuen Tab)).
Eine ausgefeilte Agenten-Architektur kann die Ansätze kombinieren. Ein kurzer Window-Buffer hält den unmittelbaren Kontext. Ein Hintergrundprozess wertet das Gespräch rückblickend aus und überführt wichtige Fakten und Entscheidungen in ein strukturierteres, zusammengefasstes Langzeitgedächtnis. Diese aktive Verwaltung ist eine Kernaufgabe der Agent-Context-Schicht.
Fortgeschrittenes Memory: mehr als Zusammenfassen
Einfache Memory-Strategien sind nützlich. Agentische Systeme auf dem Stand der Technik brauchen aber einen ausgefeilteren Ansatz, der sich an der menschlichen Kognition orientiert. Plattformen wie Zep und Cognee leisten hier Pionierarbeit. Sie bauen persistente Langzeitspeicher, die über einfache Gesprächsprotokolle hinausgehen (arXiv - Zep: A Temporal Knowledge Graph Architecture for Agent Memory (öffnet in einem neuen Tab)).
Diese Systeme folgen einem ähnlichen Prinzip wie das menschliche Gehirn, das episodisches und semantisches Gedächtnis unterscheidet:
- Episodisches Gedächtnis: hält die rohen Ereignisse einer Interaktion in ihrer Reihenfolge fest, etwa das Transkript einer Chat-Sitzung.
- Semantisches Gedächtnis: zieht aus diesen Ereignissen die wichtigsten Fakten, Entitäten und Beziehungen und fügt sie zu einer strukturierten Wissensbasis zusammen.
Frameworks wie Zep bauen dafür für jede:n Nutzer:in oder jede Sitzung einen temporalen Wissensgraphen (getzep - Zep Cloud: Examples & Integrations (öffnet in einem neuen Tab)). Mit jedem neuen Gespräch extrahiert das System automatisch Entitäten und Fakten. Es fügt sie in den Graphen ein und aktualisiert vorhandene Information. So kann der Agent darüber schlussfolgern, wie sich Information über die Zeit ändert, etwa die Vorliebe einer Person von einer Sitzung zur nächsten (Zep: Context Engineering Platform for AI Agents (öffnet in einem neuen Tab)).
Braucht der Agent Kontext, holt er nicht einfach ein rohes Chat-Protokoll. Er fragt den reichhaltigen Graphen ab und stellt daraus einen strukturierten, Token-sparenden Block zusammen. Darin stehen die relevantesten Fakten, Vorlieben und früheren Interaktionen (Zep: Context Engineering Platform for AI Agents (öffnet in einem neuen Tab)). Dieser Ansatz der “memory formation” liefert viel tieferen und verlässlicheren Kontext als einfaches Zusammenfassen. Er macht wirklich personalisiertes und kontextbewusstes Verhalten des Agenten möglich (arXiv - Zep: A Temporal Knowledge Graph Architecture for Agent Memory (öffnet in einem neuen Tab)).
Code als Kontext modellieren: von Quelldateien zu semantischem Verständnis
KI-Agenten in der Softwareentwicklung reicht roher Quellcode als Kontext nicht. Sie brauchen ein tiefes, strukturelles Verständnis der Codebasis. Ein “Technical Context”-Produkt mit hoher Abbildungstreue entsteht in mehreren Stufen zunehmender Abstraktion. Der Weg führt vom rohen Text über die syntaktische Struktur bis zu den semantischen Beziehungen.
Syntaktische Analyse mit Abstract Syntax Trees (ASTs)
Übliches textbasiertes Chunking taugt für Quellcode nicht, weil es die grammatische Struktur ignoriert. Es schneidet Code oft mitten in einer Funktions- oder Klassendefinition. Der Chunk ist dann syntaktisch ungültig und bedeutungslos (Enhancing LLM Code Generation with RAG and AST-Based Chunking (öffnet in einem neuen Tab)).
Richtig ist es, den Code in einen Abstract Syntax Tree (AST) zu parsen. Ein AST stellt die syntaktische Struktur des Codes als Baum dar. Jeder Knoten steht für ein Konstrukt wie eine Funktionsdeklaration, ein if-Statement oder eine Variablenzuweisung (Wikipedia - Abstract syntax tree (öffnet in einem neuen Tab)).
In der Praxis nutzt ihr ASTs so:
- Parser wählen: Wählt einen robusten Code-Parser. tree-sitter ist eine ausgezeichnete Wahl: schnell, fehlertolerant und mit einer großen Bibliothek an Grammatiken für viele Programmiersprachen (arXiv - Abstract Syntax Tree for Programming Language Understanding and Representation: How Far Are We? (öffnet in einem neuen Tab)). Für Sprachen mit eigenen oder komplexen Grammatiken eignen sich andere Tools wie ANTLR (Reddit - AST for any code : r/Compilers (öffnet in einem neuen Tab)).
- Code parsen: Für jede Quelldatei im Repository erzeugt der gewählte Parser den zugehörigen AST.
- Knoten extrahieren: Ein Programm durchläuft dann den AST und zieht die semantisch sinnvollen Code-Einheiten heraus. Statt beliebiger Chunks entsteht eine Sammlung vollständiger Funktionen, Klassen, Methoden und Import-Blöcke. So ist jedes Stück Kontext für das LLM syntaktisch vollständig und logisch geschlossen (Enhancing LLM Code Generation with RAG and AST-Based Chunking (öffnet in einem neuen Tab)).
Den Code-Wissensgraphen bauen
Ein AST zeigt eine einzelne Datei in der Tiefe. Das komplexe Geflecht von Beziehungen zwischen den Dateien einer großen Codebasis erfasst er nicht. Um diese Abhängigkeiten abzubilden, baut ihr aus den strukturierten Daten der ASTs einen Code-Wissensgraphen (DZone - Enhancing Code Analysis With Code Graphs (öffnet in einem neuen Tab)). Er stellt das gesamte Softwareprojekt als Netz verbundener Entitäten dar und erlaubt mächtige Abfragen zu Struktur und Auswirkungen.
Der Graph entsteht systematisch:
- Schema definieren: Ein Graph-Schema modelliert die Code-Entitäten und ihre Beziehungen. Knotentypen wären etwa Module, File, Class, Function und Variable. Als Beziehungen kämen IMPORTS, DEFINED_IN, CALLS, INHERITS_FROM und INSTANTIATES dazu (FalkorDB - Code Graph: From Visualization to Integration (öffnet in einem neuen Tab)).
- Graph aus den ASTs befüllen: Die Ingestion-Pipeline geht den AST jeder Datei durch. Für jeden relevanten AST-Knoten, etwa eine Funktionsdefinition, legt sie einen passenden Function-Knoten im Graphen an. Dann zieht sie Beziehungen entlang der Code-Struktur, etwa eine CALLS-Kante zu einer anderen Funktion oder eine INHERITS_FROM-Kante zur Elternklasse.
- Abhängigkeiten ergänzen: Danach reichert ihr den Graphen mit Informationen über externe Abhängigkeiten an. Mit Tools wie der GitHub Dependency Graph API legt ihr Knoten für Bibliotheken von Drittanbietern an. Von den Modulen des Projekts führen dann DEPENDS_ON-Kanten zu diesen externen Paketen (GitHub Docs - About the dependency graph (öffnet in einem neuen Tab)).
- Speichern und abfragen: Den fertigen Graphen ladet ihr in eine native Graphdatenbank wie Neo4j. Ihre mächtige und effiziente Abfragesprache, etwa Cypher, durchläuft den Graphen. So beantwortet ihr komplexe Fragen zur Codebasis, an denen andere Methoden scheitern (Neo4j - Generative AI - Ground LLMs with Knowledge Graphs (öffnet in einem neuen Tab)).
Verwandte Seiten
- Speicher- und Retrieval-Architekturen: wo jedes fertige Context Product gespeichert und abgefragt wird.
- Die Plattformschicht: der Katalog, in dem jedes Context Product registriert ist.
- Persistentes Agenten-Memory: warum ein Gedächtnis, das nur wächst, am Ende nichts Nützliches mehr enthält.
- Just-in-time Retrieval: was gegen vorberechnete Indizes für Coding-Agents spricht.
- Strategie und Architektur: wer welches Context Product verantwortet und warum.
Quellen
Artikel
- Building a Confluence Q&A App with LangChain and ChatGPT (öffnet in einem neuen Tab) - Tutorial von Shakudo. Es zerlegt Confluence-Seiten entlang ihrer Struktur, erzeugt Embeddings und speichert sie für eine Frage-Antwort-App.
- Building a Confluence-Powered Search Engine Using LangChain and LLMs (öffnet in einem neuen Tab) - Tutorial, das Confluence-Seiten und Jira-Issues über ihre REST-APIs in eine Such-Pipeline mit LangChain holt.
- Code Graph: From Visualization to Integration (öffnet in einem neuen Tab) - Artikel von FalkorDB, der Module, Klassen und Funktionen als Graph-Schema mit Import-, Aufruf- und Vererbungsbeziehungen modelliert.
- Conversational Memory for LLMs with Langchain (öffnet in einem neuen Tab) - Leitfaden von Pinecone. Er vergleicht Buffer, Window und Summary Memory für Chat-Agenten und wägt jeweils Genauigkeit gegen Kosten ab.
- Enhancing Code Analysis With Code Graphs (öffnet in einem neuen Tab) - Artikel bei DZone. Er baut aus geparstem Quellcode einen Code-Wissensgraphen, der Fragen zu Struktur und Auswirkungen beantwortet.
- Enhancing LLM Code Generation with RAG and AST-Based Chunking (öffnet in einem neuen Tab) - Blogpost darüber, warum Text-Chunking Quellcode zerbricht. AST-basiertes Chunking hält dagegen jede abgerufene Einheit syntaktisch vollständig.
- LLM Chat History Summarization Guide October 2025 (öffnet in einem neuen Tab) - Leitfaden von Mem0. Er hält wachsende Gesprächsverläufe in den Token-Limits und wahrt die Kontinuität über Interaktionen hinweg.
- Managing Context History Best Practices (öffnet in einem neuen Tab) - Blogpost über Strategien für den Kontextverlauf generativer KI. Laufende Zusammenfassungen gehören dazu, ebenso ihr Verlust an Nuancen.
Dokumentation
- About the dependency graph (öffnet in einem neuen Tab) - Dokumentation von GitHub zum Dependency Graph. Er ergänzt einen Code-Wissensgraphen um Pakete von Drittanbietern und ihre Kanten.
- Abstract syntax tree (öffnet in einem neuen Tab) - Wikipedia-Artikel, der den Abstract Syntax Tree definiert: den Baum syntaktischer Konstrukte, den ein Parser aus Quellcode baut.
Paper und Berichte
- Abstract Syntax Tree for Programming Language Understanding and Representation: How Far Are We? (öffnet in einem neuen Tab) - Studie auf arXiv. Sie vergleicht AST-basierte Code-Darstellungen und Parser wie tree-sitter für Aufgaben des Programmverständnisses.
- Zep: A Temporal Knowledge Graph Architecture for Agent Memory (öffnet in einem neuen Tab) - Paper auf arXiv über den temporalen Wissensgraphen von Zep. Er trennt episodisches von semantischem Gedächtnis für langlebige Agenten.
Posts
- AST for any code (öffnet in einem neuen Tab) - Thread in Reddit r/Compilers über das Parsen beliebiger Sprachen in Syntaxbäume. Für eigene Grammatiken verweist er auf ANTLR.
- The constraint is the context (öffnet in einem neuen Tab) - LinkedIn-Post mit der These, jede falsche Antwort eines Agenten sei ein Befund aus einem Dokumentations-Audit. Abhilfe schafft der aufgeschriebene Standard.
Tools und Repositories
- Generative AI - Ground LLMs with Knowledge Graphs (öffnet in einem neuen Tab) - Produktseite von Neo4j. Sie verankert Sprachmodelle in einer Graphdatenbank, die mit Cypher abgefragt wird.
- Zep: Context Engineering Platform for AI Agents (öffnet in einem neuen Tab) - Kommerzielle Context-Plattform von Zep. Sie stellt aus einem temporalen Wissensgraphen Token-sparende Blöcke aus Fakten und Vorlieben zusammen.
- getzep/zep (öffnet in einem neuen Tab) - Repository von getzep mit Beispielen und Integrationen für das Agenten-Memory von Zep auf Basis temporaler Wissensgraphen, unter der Lizenz Apache-2.0.
- topoteretes/cognee (öffnet in einem neuen Tab) - Open-Source-Plattform von topoteretes für KI-Memory, die rohe Daten zu einer vernetzten Wissensbasis für Agenten macht, lizenziert unter Apache-2.0.