OKF + RAG: Eine hybride Architektur für zuverlässige KI-Agenten
Googles Open Knowledge Format liefert KI-Agenten präzise, git-basiert versionierte Antworten, während RAG die unstrukturierten Archivdateien abdeckt. Wie ein kleiner Router beides in einem einzigen Agenten vereint.
Fragt man einen KI-Agenten nach einem weithin bekannten Faktum, antwortet er fließend. Bittet man ihn jedoch um die genaue Churn-Formel des eigenen Unternehmens, das Schema einer internen API oder das Handbuch für einen Datenbank-Failover, kann er etwas liefern, das plausibel klingt, aber völlig erfunden ist. Das ist das Problem der Halluzinationen, und es ist ein Hauptgrund, warum Unternehmen zögern, echte Aufgaben an Agenten zu übertragen.
Die Standardlösung der letzten zwei Jahre war RAG: Das Modell wird mit einer Vektordatenbank von Unternehmensdokumenten verbunden, alles, was relevant erscheint, wird abgerufen und in die Anfrage eingefügt. Bei großen Mengen an unstrukturiertem Text funktioniert das. Seine Schwäche liegt darin, dass es probabilistisch arbeitet. Es liefert Abschnitte, die semantisch zur Frage ähnlich sind, was etwas anderes ist als Abschnitte, die autoritativ sind. Wenn es um die offizielle Umsatzformel oder den Vertrag eines Zahlungsendpunkts geht, reicht Ähnlichkeit nicht aus.
Im Juni 2026 führte Google Cloud das Open Knowledge Format (OKF) ein – eine anbieterunabhängige Spezifikation für sorgfältig zusammengestelltes Wissen, das in Markdown-Dateien gespeichert wird. Wenn man die präzisen Suchfunktionen damit in Kombination mit dem breiten Zugriff von RAG setzt, erhält man eine Architektur, die für Agenten in Betracht kommt, die sowohl präzise als auch forschend arbeiten müssen.
Zwei Arten von Informationen
Stellen Sie sich einen neuen Mitarbeiter an seinem ersten Tag vor. Vor ihm werden zwei Dinge platziert.
Das Erste ist eine sorgfältig gepflegte interne Wiki: kanonische Definitionen, API-Dokumentationen, Formeln für Metriken sowie Anleitungen, alles überprüft, genehmigt und versioniert. Wenn sie die offizielle Antwort benötigen, schauen sie dort hin. Das übernimmt die Rolle des OKF.
Das Zweite ist eine Suchmaschine, die alles andere übertrifft: Tausende von Chatnachrichten, E-Mail-Threads, Supportanfragen sowie Transkripte von Meetings. Wenn sie herausfinden wollen, was die Leute zu einem Thema gesagt haben, oder in unstrukturierten Archiven suchen, nutzen sie diese Suchmaschine. Das ist RAG.
Auch das eine für sich genommen reicht nicht aus. Gemeinsam decken sie den gesamten Umfang dessen ab, was eine Organisation weiß.
Was OKF ist
OKF ist absichtlich schlicht gestaltet. Ein Bundle ist ein Verzeichnis von Markdown-Dateien, die in Git gespeichert werden. Jede Datei beschreibt ein Konzept wie eine Tabelle, eine Metrik, einen API-Endpunkt oder ein Handbuch und beginnt mit einem Block aus YAML-Frontmatter für maschinenlesbare Metadaten. Die Spezifikation stellt nur sehr geringe Anforderungen an die Ersteller, und Tools wie Obsidian, Notion oder MkDocs verwenden bereits dieselbe Dateiformatierung. Das Projekt befindet sich in einem öffentlichen Repository.
Ein Datei für eine Geschäftsmetrik kann im Frontmatter Typ, Titel, Beschreibung, Eigentümer, Tags sowie Zeitstempel enthalten. Im Hauptteil werden anschließend die offizielle Formel, einige Regeln (zum Beispiel: Testkonten aus dem Nenner ausschließen und Downgrades des Plans nicht als Abwanderung zählen), die als Quelle der Wahrheit dienende Tabelle sowie Links zu verwandten Konzepten bereitgestellt.
---
type: metric
title: "Monthly Churn Rate"
description: "Official formula for calculating monthly customer churn."
owner: "data-engineering"
tags: [revenue, kpi, board-report]
timestamp: 2026-06-20T10:00:00Z
---
# Monthly Churn Rate
The official churn rate formula used in all board reports and investor decks:
Churn Rate = (Customers Lost During Month / Customers at Start of Month) × 100
### Rules
- **Do NOT** use trial accounts in the denominator.
- **Do NOT** count plan downgrades as churn.
- Source of truth: `analytics.monthly_churn_summary` table.
### Related
- [Monthly Active Users](mau.md)
- [Revenue Dashboard](revenue_dashboard.md)
Warum sich damit abmühen?
- Keine Vektormathematik. Wenn der Agent die Churn-Formel benötigt, liest er diese Datei direkt. Es gibt weder Einbettungen noch Ähnlichkeitswerte oder Top-k-Methoden – immer nur die genehmigte Antwort.
- Integriert in Git-Arbeitsabläufe. Änderungen gehen über Pull Requests, Reviews und Commit-Historien, sodass ein Nachvollziehungsverlauf vorhanden ist, der zeigt, wer die Formel wann und warum geändert hat.
- Keine Infrastruktur nötig. Kein Vektorlager, keine Einbettungspipeline, keine Chunking-Strategie oder Re-Indexierungsarbeiten. Die Dateien befinden sich einfach in einer Ordnerstruktur.
Was RAG ist
RAG verbindet ein Modell mit großen, unstrukturierten Daten in sechs Schritten:
- Dokumente wie PDFs, E-Mails, Wiki-Seiten und Chat-Nachrichten aufnehmen.
- Sie in kleinere Abschnitte aufteilen.
- Jeden Abschnitt mithilfe eines Einbettungsmodells in einen Vektor umwandeln.
- Die Vektoren in einer Datenbank wie Pinecone, Weaviate oder pgvector speichern.
Die Stärke von RAG liegt in seinem Reichweitenpotenzial. Es kann relevante Materialien aus Tausenden von Dokumenten hervorheben, die niemand manuell organisieren könnte. Seine Schwäche ist die Genauigkeit. Da die Ähnlichkeit die Suche steuert, kann es Texte zurückgeben, die zwar verwandt sind, aber nicht autoritativ sind. Wenn drei verschiedene Ansätze Abwanderung leicht unterschiedlich definieren, wählt RAG möglicherweise den falschen.
Das hybride Design
Die kombinierte Architektur stellt einen Router vor beide Speicher. Der Router prüft jede eingehende Abfrage und entscheidet, wohin sie geleitet werden soll: zum sorgfältig zusammengestellten Datensatz, wenn es um eine offizielle Definition geht, oder zur Vektorsuche, wenn die Abfrage offener und explorativer ist.
A simplified Python version of that router does four jobs. It loads every Markdown file in the bundle and indexes them by the title in the frontmatter. It tries a deterministic keyword match of the query against those titles. If that finds a concept, the content is passed along labeled as coming from the official knowledge base. Otherwise it falls back to a vector search, labeled as document search, and then sends the chosen context to the model with an instruction to answer only from what it was given. Labeling the source in the prompt matters, since it tells the model, and later the reader, how much weight the context deserves.
from openai import OpenAI
import os
import glob
import yaml
client = OpenAI()
# 1. Load the OKF knowledge bundle from the local directory
def load_okf_bundle(bundle_path: str) -> dict:
"""Reads all Markdown files in the OKF directory into a searchable dict."""
knowledge = {}
for filepath in glob.glob(f"{bundle_path}/**/*.md", recursive=True):
with open(filepath) as f:
content = f.read()
# Extract the title from YAML frontmatter
if content.startswith("---"):
_, frontmatter, body = content.split("---", 2)
meta = yaml.safe_load(frontmatter)
title = meta.get("title", os.path.basename(filepath))
knowledge[title.lower()] = body.strip()
return knowledge
# 2. Search OKF (deterministic, keyword-based)
def search_okf(query: str, okf_knowledge: dict) -> str | None:
"""Simple keyword match against OKF titles."""
for title, content in okf_knowledge.items():
if title in query.lower():
return content
return None
# 3. Search RAG (probabilistic, vector-based)
def search_rag(query: str) -> str:
"""Placeholder for your vector DB search (Pinecone, Weaviate, etc.)."""
# results = vector_db.similarity_search(query, top_k=5)
return "RAG context: [retrieved chunks would appear here]"
# 4. The Intelligent Router
def answer_query(query: str, okf_bundle_path: str) -> str:
okf_knowledge = load_okf_bundle(okf_bundle_path)
# Try OKF first (deterministic path)
okf_result = search_okf(query, okf_knowledge)
if okf_result:
context = f"[SOURCE: Official Knowledge Base (OKF)]\n{okf_result}"
else:
# Fall back to RAG (probabilistic path)
context = f"[SOURCE: Document Search (RAG)]\n{search_rag(query)}"
# Send to LLM with the retrieved context
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "Answer using ONLY the provided context."},
{"role": "user", "content": f"Context:\n{context}\n\nQuestion: {query}"}
]
)
return response.choices[0].message.content
Die Abgleichmethode hier ist absichtlich einfach gehalten – es handelt sich um eine Suchfunktion nach Titeln – um die Idee sichtbar zu halten. Ein Produktionsystem würde eine bessere Routierung verwenden, wie beispielsweise einen Klassifikator oder einen Metadatenfilter, und mit Fällen umgehen, in denen beide Quellen etwas Relevantes liefern.
Die Schlussfolgerung
Für Unternehmensagenten gibt es keine Wahl zwischen OKF und RAG. Das beste Design nutzt beides. Eine deterministische, von Git gesteuerte Wissensdatenbank schützt die Fakten, die unter keinen Umständen falsch sein dürfen: KPIs, API-Verträge und Betriebsanleitungen. Eine probabilistische Vektorsuche kümmert sich um das große Archiv an unstrukturierten Materialien, das niemand vollständig kuratieren kann. Das Ergebnis ist ein Agent, der präzise arbeitet, wenn Genauigkeit wichtig ist, und explorativ vorgeht, wenn Entdeckung im Vordergrund steht.