0Pricing
AI Agents · Lektion

Muster für Deep-Research-Schleifen

Abfragen → lesen → extrahieren → zusammenführen → erneut abfragen: Multi-Hop-Recherche.

Muster für Deep-Research-Schleifen ist eine kostenlose AI Agents-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Agents-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.

Was ist die Deep-Research-Schleife?

Eine Deep-Research-Schleife ist ein Agentenmuster, bei dem der Agent wiederholt sucht, Inhalte liest, Wissenslücken erkennt und erneut sucht, bis er genügend Informationen für eine umfassende Antwort gesammelt hat.

Im Gegensatz zu einer einzelnen Suche bildet dieses Muster die Arbeitsweise eines menschlichen Rechercheurs nach: erkunden → lernen → Unbekanntes entdecken → tiefer recherchieren.

Überblick über die Schleifenarchitektur

Die Deep-Research-Schleife umfasst fünf sich wiederholende Phasen:

  1. Erste Suchanfrage – Suche mit der ursprünglichen Frage des Benutzers
  2. Top-Ergebnisse lesen – zentrale Fakten aus den besten 3 Quellen extrahieren
  3. Lücken identifizieren – welche wichtigen Fragen sind noch unbeantwortet?
  4. Folgeanfragen – gezielte Suchen für die offenen Lücken generieren
  5. Zusammenführen – alle gesammelten Fakten zu einer abschließenden Antwort verbinden
def deep_research(question, max_iterations=3):
    all_facts = []
    queries_used = [question]

    for iteration in range(max_iterations):
        results = search_and_rank(queries_used[-1])
        facts = extract_facts(results, question)
        all_facts.extend(facts)

        gaps = identify_knowledge_gaps(question, all_facts)
        if not gaps:
            print(f'Research complete after {iteration + 1} iterations')
            break

        follow_up = generate_follow_up_query(gaps)
        queries_used.append(follow_up)
        print(f'Iteration {iteration + 1}: {follow_up}')

    return synthesize_answer(question, all_facts)

Phase 1: Erste Suche

Die erste Suche verwendet die ursprüngliche Frage des Benutzers. Rufen Sie 3–5 Ergebnisse ab und extrahieren Sie den Rohtext. In dieser Phase geht es um Breite – Sie verschaffen sich einen Überblick über das Themengebiet.

from tavily import TavilyClient
import os

client = TavilyClient(api_key=os.getenv('TAVILY_API_KEY'))

def initial_search(question, n_results=5):
    results = client.search(
        query=question,
        max_results=n_results,
        search_depth='advanced'  # deeper extraction for research tasks
    )
    return results.get('results', [])

# Also capture the direct answer if available
def get_direct_answer(question):
    results = client.search(query=question, max_results=3)
    return results.get('answer', '')  # Tavily's synthesized answer

Phase 2: Zentrale Fakten extrahieren

Übergeben Sie die rohen Suchergebnisse an das LLM und bitten Sie es, konkrete, überprüfbare Fakten zu extrahieren, die für die Forschungsfrage relevant sind. Fakten sollten atomar sein – ein Sachverhalt pro Eintrag.

EXTRACT_FACTS_PROMPT = '''You are a research assistant.
From the search results below, extract all factual claims relevant to the question.

Question: {question}

Search results:
{results_text}

Return a JSON list of facts:
["GPT-4 was released in March 2023",
 "GPT-4 supports 128k context window",
 ...]

Only include verifiable facts. No opinions or summaries. JSON:'''

def extract_facts(results, question):
    import json
    results_text = '\n\n'.join(
        f"[{i+1}] {r['title']}\n{r['content'][:600]}"
        for i, r in enumerate(results)
    )
    response = llm_call(EXTRACT_FACTS_PROMPT.format(
        question=question, results_text=results_text
    ))
    return json.loads(response)

Phase 3: Wissenslücken identifizieren

Fragen Sie das LLM nach jeder Suchiteration: Welche wichtigen Aspekte der ursprünglichen Frage sind angesichts unseres bisherigen Wissens noch nicht abgedeckt?

Diese Lücken werden zu den Suchanfragen der nächsten Runde.

GAPS_PROMPT = '''You are a research analyst.

Original research question: {question}

Facts gathered so far:
{facts}

What important aspects of the question are still NOT covered by these facts?
List 2-3 specific knowledge gaps as a JSON array of strings.
If the question is fully answered, return an empty array [].

JSON:'''

def identify_knowledge_gaps(question, facts):
    import json
    facts_text = '\n'.join(f'- {f}' for f in facts)
    response = llm_call(GAPS_PROMPT.format(
        question=question, facts=facts_text
    ))
    return json.loads(response)

Phase 4: Folgeanfragen generieren

Wandeln Sie Wissenslücken in effektive Suchanfragen um. Aus einer Lücke wie „Wir kennen das Preismodell nicht“ wird eine gezielte Suchanfrage wie „GPT-4 API pricing per token 2024“.

QUERY_GEN_PROMPT = '''Convert these knowledge gaps into specific web search queries.

Original topic: {topic}
Knowledge gaps:
{gaps}

Return a JSON array of search query strings.
Make each query specific and searchable.
JSON:'''

def generate_follow_up_queries(topic, gaps):
    import json
    gaps_text = '\n'.join(f'- {g}' for g in gaps)
    response = llm_call(QUERY_GEN_PROMPT.format(
        topic=topic, gaps=gaps_text
    ))
    queries = json.loads(response)
    return queries[:3]  # max 3 follow-up queries per iteration

Abbruchkriterien

Ohne klare Abbruchkriterien läuft die Schleife endlos. Beenden Sie sie, wenn: (1) keine Lücken identifiziert wurden, (2) die maximale Anzahl an Iterationen erreicht ist, (3) das Tokenbudget ausgeschöpft ist oder (4) neue Fakten den vorhandenen zu ähnlich sind (abnehmender Nutzen).

MAX_ITERATIONS = 4
MAX_FACTS = 50
MIN_NEW_FACTS_TO_CONTINUE = 3

def should_continue(gaps, all_facts, new_facts, iteration):
    if iteration >= MAX_ITERATIONS:
        print(f'Stopping: max iterations ({MAX_ITERATIONS}) reached')
        return False
    if not gaps:
        print('Stopping: no knowledge gaps found')
        return False
    if len(all_facts) >= MAX_FACTS:
        print(f'Stopping: fact budget ({MAX_FACTS}) reached')
        return False
    if len(new_facts) < MIN_NEW_FACTS_TO_CONTINUE:
        print(f'Stopping: diminishing returns ({len(new_facts)} new facts)')
        return False
    return True

if __name__ == '__main__':
    print('Continue?', should_continue(gaps=['gap1'], all_facts=['f'] * 10, new_facts=['f1', 'f2', 'f3'], iteration=1))
    print('Continue?', should_continue(gaps=[], all_facts=['f'] * 10, new_facts=['f1'], iteration=1))

Phase 5: Abschließende Antwort zusammenführen

Übergeben Sie nach Beendigung der Schleife alle gesammelten Fakten zur Zusammenführung an das LLM. Die Aufgabe des LLM besteht darin, die Fakten zu einer schlüssigen, gut strukturierten Antwort mit Quellenangaben zu ordnen.

SYNTHESIS_PROMPT = '''You are a research writer.

Original question: {question}

Researched facts (gathered from {n_iterations} search iterations):
{facts}

Write a comprehensive, well-structured answer based on these facts.
Format with clear sections. Be specific and cite facts where relevant.
If any aspect of the question could not be fully answered, say so.

Answer:'''

def synthesize_answer(question, all_facts, n_iterations):
    facts_text = '\n'.join(f'- {f}' for f in all_facts)
    return llm_call(SYNTHESIS_PROMPT.format(
        question=question,
        facts=facts_text,
        n_iterations=n_iterations
    ))

Quellen über Iterationen hinweg verfolgen

In einer Schleife mit mehreren Iterationen sammeln Sie Fakten aus vielen verschiedenen Quellen. Verfolgen Sie, aus welcher Quelle jeder Fakt stammt, damit die abschließende Antwort die Quellen korrekt zitieren kann.

def extract_facts_with_sources(results, question):
    import json

    PROMPT = '''Extract facts from these search results. For each fact include the source URL.

Question: {question}
Results: {results_text}

Return JSON list:
[{{"fact": "GPT-4 supports 128k context", "source": "https://openai.com/..."}}, ...]
JSON:'''

    results_text = '\n\n'.join(
        f"[URL: {r['url']}]\n{r['content'][:500]}"
        for r in results
    )
    response = llm_call(PROMPT.format(
        question=question, results_text=results_text
    ))
    return json.loads(response)

Parallele Suchausführung

Wenn mehrere Folgeanfragen vorliegen, führen Sie sie mit asyncio parallel aus, um die gesamte Recherchezeit zu verkürzen. Dadurch kann sich eine Schleife mit 3 Iterationen von 30 auf 15 Sekunden verkürzen.

import asyncio

async def async_search(client, query):
    # Tavily has async support
    loop = asyncio.get_event_loop()
    result = await loop.run_in_executor(
        None,
        lambda: client.search(query=query, max_results=3)
    )
    return result.get('results', [])

async def parallel_search(queries):
    tasks = [async_search(client, q) for q in queries]
    results_list = await asyncio.gather(*tasks)
    # Flatten
    return [r for results in results_list for r in results]

# Run in event loop
all_results = asyncio.run(parallel_search(follow_up_queries))

Fakten deduplizieren

Verschiedene Quellen stellen denselben Fakt oft mit unterschiedlichen Worten dar. Deduplizieren Sie die Fakten vor dem Zusammenführen mithilfe der Embedding-Ähnlichkeit, damit dieselbe Information in der abschließenden Antwort nicht mehrfach wiederholt wird.

def deduplicate_facts(facts, similarity_threshold=0.92):
    if not facts:
        return facts

    # Get embeddings for all facts
    embeddings = [embed(f) for f in facts]
    unique_indices = [0]  # always keep first

    for i in range(1, len(facts)):
        is_duplicate = False
        for j in unique_indices:
            sim = cosine_similarity(embeddings[i], embeddings[j])
            if sim > similarity_threshold:
                is_duplicate = True
                break
        if not is_duplicate:
            unique_indices.append(i)

    unique_facts = [facts[i] for i in unique_indices]
    print(f'Deduplicated: {len(facts)} -> {len(unique_facts)} facts')
    return unique_facts

Wissenscheck

Was ist das richtige Abbruchkriterium für eine Deep-Research-Schleife, wenn keine Wissenslücken gefunden werden?

Zusammenfassung: Muster der Deep-Research-Schleife

Das Muster der Deep-Research-Schleife: suchen → Fakten extrahieren → Lücken finden → Folgeanfragen generieren → wiederholen → zusammenführen. Dies entspricht der Arbeitsweise eines menschlichen Rechercheurs.

Wichtige Designentscheidungen sind: Abbruchkriterien (maximale Iterationszahl, keine Lücken, abnehmender Nutzen), Quellenverfolgung für die Zuordnung, parallele Suche für höhere Geschwindigkeit und die Deduplizierung von Fakten vor dem Zusammenführen. Beschränken Sie die Schleife auf 3–4 Iterationen, um Detailtiefe, Kosten und Latenz auszubalancieren.

Häufig gestellte Fragen

Ist die Lektion „Muster für Deep-Research-Schleifen“ kostenlos?

Ja — der vollständige Text von „Muster für Deep-Research-Schleifen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Agents-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Muster für Deep-Research-Schleifen“?

Abfragen → lesen → extrahieren → zusammenführen → erneut abfragen: Multi-Hop-Recherche. Du übst AI Agents mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um AI Agents zu starten?

Keine Vorkenntnisse erforderlich. AI Agents auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Muster für Deep-Research-Schleifen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser AI Agents-Lektion Code schreiben und ausführen?

Ja. Jede AI Agents-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Tavily und SerpAPI für die Agentensuche
  2. Suchergebnisse bewerten und filtern
  3. Muster für Deep-Research-Schleifen
  4. Websuche mit RAG kombinieren
← Zurück zu AI Agents