Agentic RAG: Lassen Sie den Agenten suchen


Die von uns erstellte Anwendung ist eine RAG-App.

Das Rezept ist einfach: Teilen, einbetten, abrufen und dann antworten.

Auf dem Papier sieht es sauber aus. Sobald Sie es jedoch auf reale Fälle anwenden, wird es sehr schnell kompliziert: Die Ähnlichkeitssuche findet ähnliche Formulierungen, aber nicht unbedingt nützliche Abschnitte, die richtigen Beweise werden nie im abgerufenen Kontext angezeigt, da sie einen zu niedrigen Rang haben, oder wichtiger Kontext kann über Abschnittsgrenzen hinweg aufgeteilt sein.

Bei unzureichendem Kontext hat das LLM wenig Spielraum, sich zu erholen.

Wie wäre es additionally, wenn wir eine Rückholung durchführen würden? iterativ? Was wäre, wenn das Modell suchen, lesen, entscheiden kann, ob genügend Beweise vorliegen, und bei Bedarf erneut suchen kann? Wahrscheinlich brauchen wir die Vektoreinbettungen gar nicht erst.

Das ist die Prämisse von Agent RAG.

In diesem Beitrag erstellen wir einen Mini-Agenten-RAG-Workflow mit dem OpenAI Brokers SDK. Wir untersuchen, wie der Agent seine Antwort iterativ sucht, liest und begründet.

Am Ende gehen wir einen Schritt zurück und besprechen kurz die Überlegungen zum Aufbau einer praktischen Agenten-RAG-Lösung.


1. Fallstudie: Beantwortung einer Richtlinienfrage mit Agentic RAG

Für unsere Fallstudie erstellen wir einen Richtlinien-RAG-Agenten über eine Sammlung von Unternehmensrichtliniendokumenten.

1.1 Kuratierung der Dokumentensammlung

Hier habe ich sechs synthetische Unternehmensrichtliniendokumente erstellt. Es handelt sich bei allen um Markdown-Dateien. Jedes hat einen Titel, ein Datum des Inkrafttretens, eine kurze Zusammenfassung und den Richtlinientext.

Um realistisch zu sein, decken diese Dokumente sechs allgemeine Bereiche der Unternehmenspolitik ab:

  1. approval_matrix.mdmit Genehmigungsstufen für allgemeine Geschäftsreiseentscheidungen, gültig ab 1. Juli 2025.
  2. conference_guidelines.mdmit Regeln für den Besuch externer Veranstaltungen, gültig ab 15. Mai 2025.
  3. faq.mdmit informellen Antworten auf häufige Reisefragen, gültig ab 1. September 2025.
  4. policy_updates_2026.mdmit Aktualisierungen zu Unterkunft, Konferenzreisen und Genehmigungszeitplan für 2026, gültig ab 1. Januar 2026.
  5. remote_work_policy.mdmit Regeln für Fernarbeit, gültig ab 1. Februar 2026.
  6. travel_policy.mdmit Commonplace-Reisebuchungsregeln für Flüge, Unterkunft, Verpflegung und Transport, gültig ab 1. März 2025.

Wir haben bewusst darauf geachtet, dass die Antwort auf eine politische Frage möglicherweise nicht in einem Dokument enthalten ist. Dadurch können wir das gewünschte Agentenverhalten erkennen.

Hier finden Sie die vollständigen synthetischen Dokumente und das Agenten-RAG-Implementierungsnotizbuch Hier.

1.2 Definieren des Agenten

Als nächstes konfigurieren wir den Agenten. Dafür verwenden wir das OpenAI Brokers SDK.

Auf hoher Ebene ist der Agent genau das:

# pip set up openai-agents
from brokers import Agent

agent = Agent(
    title="Coverage analysis assistant",
    directions=INSTRUCTIONS,
    mannequin="gpt-5.4",
    instruments=(list_docs, search_docs, read_doc),
)

Zwei Teile müssen wir durchgehen: die Anweisungen des Agenten und die Instruments, auf die er Zugriff hat.

Zuerst die Anleitung. Hier definieren wir das gewünschte Suchverhalten:

# Observe: This instruction is iterated with AI
INSTRUCTIONS = """
(Position)
You're a cautious inside coverage analysis assistant.

(Analysis conduct)
Reply worker coverage questions utilizing the doc instruments.
Discover sufficient related proof to help the reply.
Maintain conclusions grounded within the coverage paperwork.

(Anticipated output)
Give a direct reply first.
Then briefly clarify the proof.
Cite the doc filenames used for every essential declare.
""".strip()

Für diese Fallstudie verlangen wir, dass der Agent die Dokumente nur über drei vordefinierte Instruments erreichen kann:

Das erste ist ein Software, das dem Agenten einen schnellen Überblick über die vorhandenen Dokumente gibt:

@function_tool
def list_docs() -> listing(dict):
    """Listing accessible coverage paperwork with out returning their physique textual content."""
    return (
        {
            "doc_name": doc("doc_name"),
            "title": doc("title"),
            "efficient": doc("efficient"),
            "abstract": doc("abstract"),
        }
        for doc in docs.values()
    )

Das zweite Software ist ein Key phrase-Suchtool. Wir halten es hier einfach: Jedes Dokument wird in Absatzblöcke aufgeteilt, und jede Abfrage wird durch Token-Überlappung mit diesen Blöcken abgeglichen:

@function_tool
def search_docs(question: str) -> listing(dict):
    """Search coverage paperwork and return the highest three brief snippets."""
    query_tokens = tokenize(question)
    scored = ()

    for chunk in chunks:
        rating = len(query_tokens & chunk("tokens"))
        if rating:
            scored.append((rating, chunk))

    scored.type(key=lambda merchandise: merchandise(0), reverse=True)

    outcomes = ()
    for rating, chunk in scored(:3):
        snippet = chunk("textual content").exchange("n", " ")
        if len(snippet) > 420:
            snippet = snippet(:417).rstrip() + "..."
        outcomes.append({
            "doc_name": chunk("doc_name"),
            "title": chunk("title"),
            "part": chunk("part"),
            "snippet": snippet,
            "rating": spherical(rating, 2),
        })

    return outcomes

Das letzte Software ermöglicht es dem Agenten, ein Dokument anhand des Dateinamens zu öffnen:

@function_tool
def read_doc(doc_name: str) -> str:
    """Learn one coverage doc by filename."""
    if doc_name not in docs:
        legitimate = ", ".be a part of(sorted(docs))
        return f"Unknown doc: {doc_name}. Legitimate paperwork: {legitimate}"

    return docs(doc_name)("textual content")

Das ist der vollständige RAG-Agent.

1.3 Ausführen einer Richtlinienfrage

Jetzt testen wir den Agenten mit einer konkreten Frage:

„Ich nehme an einer Konferenz in Berlin teil. Der Veranstalter der Konferenz listet ein offizielles Resort auf, aber der Übernachtungspreis liegt über der normalen Hotelobergrenze. Kann ich dieses Resort buchen und welche Genehmigung benötige ich vor der Buchung?

Wir betreiben den Agenten mit:

from brokers import Runner

outcome = await Runner.run(agent, PROMPT, max_turns=12)

Der Agent lieferte die richtige Antwort: Ja, der Mitarbeiter kann das offizielle Tagungshotel buchen, wenn ein praktischer geschäftlicher Grund vorliegt. Diese Informationen stammen von conference_guidelines.md.

Für den Genehmigungsteil stellte der Agent zunächst fest, dass eine Genehmigung erforderlich ist, da das Resort über der normalen Obergrenze liegt. Dann gab es die entsprechenden Genehmigungsauflagen. Der verwendete Agent travel_policy.md, approval_matrix.mdUnd policy_updates_2026.md um seine Antwort zu unterstützen, was genau das ist, was wir erwarten würden.

Der interessantere Teil ist die Spur, aus der wir lernen können, wie der Agent denkt. Wir können die Spur folgendermaßen darstellen:

for merchandise in outcome.new_items:
    print(sort(merchandise).__name__, merchandise)

outcome.new_items enthält die vom Agenten erzeugten Zwischentoolaufrufe und Toolausgaben. In meinem Durchlauf kann ich sehen, dass der Agent zuerst angerufen hat search_docs() mit Stichworten wie Tagungshotel, Hotelmütze, Zulassung und Berlin. Dann rief es an list_docs() die verfügbaren Versicherungsunterlagen einzusehen. Danach öffnete es die relevanten Dateien mit read_doc(). Erst dann kam die endgültige Antwort.

Das ist genau die Agentenschleife, die wir sehen wollten.


3. Was Sie vor dem Aufbau von Agentic RAG entscheiden sollten

Die Fallstudie, die wir gerade durchgegangen sind, hat nur an der Oberfläche gekratzt. Um basierend auf meiner Erfahrung wirklich eine praktische Agenten-RAG-Lösung zu entwickeln, empfehle ich Ihnen, die folgenden fünf Fragen zu beantworten:

F1: Wie viel Freiheit sollte der Agent haben?

Eine gängige Possibility ist genau das, was wir in der früheren Fallstudie getan haben: Wir haben ein paar sorgfältig zusammengestellte Instruments offengelegt, und der Agent darf diese Instruments nur für die Untersuchung verwenden. Dies ist im Hinblick auf Kontrolle, Prüfung und Prüfung unkompliziert.

Wir können dem Agenten aber auch breiteren Zugriff gewähren, etwa auf Shell und Dateisystem. Auf diese Weise kann der Agent direkt Skripte ausführen, um Dateien zu durchsuchen und zu überprüfen und möglicherweise sogar weitere Datenverarbeitungen durchzuführen, um ganz eigenständig nützliche Artefakte zu generieren.

Dieses Muster kann viel wirkungsvoller sein, aber es erhöht auch das Risiko und macht es schwieriger, Verhalten vorherzusagen.

Daher würde ich für die meisten RAG-Anwendungen zunächst mit kuratierten Instruments beginnen und den Shell-/Dateisystemzugriff nur dann hinzufügen, wenn die Komplexität der Aufgabe dies rechtfertigt.

F2: Sollte der Agent nur Rohtext durchsuchen?

Die meisten RAG-Projekte beginnen möglicherweise mit einfachem Textual content wie PDFs, Wiki-Seiten, Handbüchern usw. Das ist in Ordnung.

Aber in der Praxis können wir das Abrufen oft einfacher machen, indem wir a ableiten Wissensschicht über den Rohtexten.

Diese abgeleiteten Wissensartefakte können Dokumentmetadaten, Zusammenfassungen, dokumentübergreifende Hyperlinks sein, oder wir können noch einen Schritt weiter gehen und einen richtigen Wissensgraphen implementieren.

Diese abgeleiteten Wissensartefakte helfen dem Agenten, sich im Korpus zurechtzufinden, während die Rohtexte als Quelle der Wahrheit bleiben.

F3: Brauchen wir noch Einbettungen?

Agentisches RAG bedeutet nicht unbedingt, dass Einbettungen verschwunden sind.

Vektoreinbettungen sind immer noch eine effiziente Möglichkeit, semantisch relevante Texte zu finden, und sie übertrifft oft eine reine Schlüsselwortsuchstrategie.

Im Agenten-RAG hat sich im Wesentlichen geändert, dass der Abruf zu einer „Aktion“ wird, die der Agent ausführen kann. Unter diesem Rahmen kann „Aktion“ immer noch durch einen einbettungsbasierten Retriever, einen schlüsselwortbasierten Retriever oder sogar einen Hybrid-Retriever unterstützt werden.

Einbettungen können additionally immer noch nützlich sein. Sie sind nur eine Möglichkeit, die Suchfunktion des Agenten zu verbessern.

F4: Sollte ein Agent alles erledigen?

Das einfachste Agenten-RAG-Setup besteht aus nur einem Agenten, der die Suche, das Lesen und die Antwort durchführt.

Wenn die Aufgabe jedoch komplexer wird, möchten Sie die Arbeit möglicherweise auf mehrere Agenten aufteilen. Genauer gesagt müssen Sie möglicherweise eine übernehmen Multi-Agenten-Strategie.

Sie können die Arbeit aufteilen Rolle. Zum Beispiel die Planer-Retriever-Autor Cut up: Der Planer entscheidet, welche Beweise benötigt werden, der Retriever sammelt sie und der Autor erstellt die endgültige Antwort anhand der gesammelten Beweise.

Sie können auch teilen nach Quelltypwobei jeder Agent mit maßgeschneiderten Instruments ausgestattet ist und sich auf eine bestimmte Artwork von Quelle konzentriert.

Bedenken Sie jedoch: Ein Multi-Agent-Setup erhöht die Koordinationskomplexität und es gibt keine Garantie dafür, dass die Leistung besser ist als bei einem Single-Agent-Setup. Empirische Checks sind sehr wichtig.

F5: Sollten wir immer Agenten-RAG verwenden?

Vielleicht nicht immer.

Nur weil Agentic RAG zu einem Trendthema wird, heißt das nicht unbedingt, dass Sie immer darauf zurückgreifen sollten.

Agentic RAG bietet mehr Flexibilität, ist jedoch mit Kosten verbunden. Bei diesen Kosten geht es nicht nur um Latenz- oder Tokenkosten, sondern auch um das weniger vorhersehbare Agentenverhalten.

Beginnen Sie immer einfach und fügen Sie dann Agentenschleifen hinzu, wenn die Frage tatsächlich iterativ abgerufen werden muss.

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert