Felo API PlatformFelo API Platform

Research

Eine Frage in ein belegtes Research-Briefing verwandeln

Frage das Web, speichere die Seiten hinter der Antwort als Markdown, ergänze, was Praktiker auf X sagen, und halte die Belege in einem LiveDoc fest, das du später erneut durchsuchen kannst.

Dauer20 MinutenLevelFortgeschrittenAktualisiert2026-10-29
Für wenGründer & BetreiberMarktforscherGTM-Teams

Prompt kopieren

Ersetze die Felder in eckigen Klammern und füge den Prompt in Claude Code, Codex oder eine KI mit Terminalzugriff ein. Sie installiert den Felo-Skill, fragt vor Credits und führt den Workflow aus.

Erstelle ein belegtes Recherche-Briefing zu [Frage oder Entscheidung].

Umfang: [Markt, Region, Sprache]. Zeitraum: [letzte 30 Tage / letzte 12 Monate]. Zielgruppe: [wer es liest]. Tiefe: [Ein-Seiten-Überblick / vollständiges Briefing].

Erstelle ein Markdown-Briefing mit:
1. Einer kurzen Antwort in drei Stichpunkten.
2. Einer Evidenztabelle: Aussage, Quellentitel, URL, Veröffentlichungsdatum.
3. Wo die Quellen widersprüchlich sind.
4. Was noch unbekannt ist.
5. Einer vollständigen Quellenliste.

Regeln:
- Jede Tatsachenbehauptung braucht einen Quellenlink. Trenne Fakten, Meinungen und deine Schlussfolgerungen.
- Erfinde niemals Zitate, Kennzahlen, Daten oder Quellen. Fehlende Daten heißen „Nicht verfügbar“, niemals null.
- Bevorzuge Primärquellen. Nutze X als Praktiker-Signal, nicht als Beweis.
- Löse den Zeitraum in explizite Start- und Enddaten auf und nenne die Zeitzone.
- Bevor Credits verbraucht werden, zeige die geplanten API-Aufrufe und warte auf meine Freigabe.
- Lege keine wiederkehrende Aufgabe an, versende keine Nachrichten und veröffentliche nichts.
- Schreibe das Ergebnis nach ./research-brief.md und fasse es im Chat zusammen.

Die Kopie enthält auch die Installationsschritte und Sicherheitsregeln.

Das bekommst du

Beispielausgabe eines Laufs. Keine Live-Generierung.

Beispiel-Briefing (Auszug)

Ersetzen kleine Modelle große Modelle in Support-Bots?

Kurze Antwort

  • Kleine Modelle reichen für Klassifikation und Erstantworten.
  • Der Engpass ist die Retrieval-Qualität, nicht die Modellgröße.
  • Umgestellte Teams melden niedrigere Kosten pro Ticket, nicht höhere Lösungsquoten.
BehauptungQuelleDatum
Retrieval-Qualität bestimmt Antwortqualitäthttps://example.com/rag-eval2026-10-12
Kosten pro gelöstem Ticket sanken um 38 %https://example.com/support-case2026-09-28

Wo die Quellen widersprechen

Anbieter-Benchmarks zeigen nahezu Gleichstand; unabhängige Tests sehen bei mehrstufigen Erstattungen weiter eine Lücke.

Noch unbekannt

Ob die Lücke durch bessere Tool-Nutzung schließt oder ein größeres Modell braucht.

Die konkreten Aufrufe

Für Entwickler: derselbe Workflow als kopierbarer Code in Ausführungsreihenfolge.

Konkrete API-Aufrufe zeigen
  1. Stelle dem Web eine Frage

    Chat durchsucht das Web, sortiert Quellen, schreibt die Antwort und gibt die genutzten Ressourcen zurück. Behalte die Top drei: Jeder spätere Schritt folgt einem dieser Links. Der Helper sendet den Key einmal und wirft bei Nicht-2xx einen Fehler.

    research.ts
    const BASE = "https://openapi.felo.ai";
    const headers = {
      Authorization: `Bearer ${process.env.FELO_API_KEY}`,
      "Content-Type": "application/json",
    };
    
    async function felo<T>(path: string, body?: unknown): Promise<T> {
      const res = await fetch(`${BASE}${path}`, {
        method: body ? "POST" : "GET",
        headers,
        body: body ? JSON.stringify(body) : undefined,
      });
      if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);
      return res.json() as Promise<T>;
    }
    
    type ChatData = {
      data: { answer: string; resources: { link: string; title: string }[] };
    };
    
    export async function answer(question: string) {
      const chat = await felo<ChatData>("/v2/chat", { query: question });
      return { answer: chat.data.answer, sources: chat.data.resources.slice(0, 3) };
    }

    Beispielausgabe

    {
      "answer": "Recent developments include …",
      "sources": [
        { "link": "https://example.com/article", "title": "…" }
      ]
    }
  2. Lade die Seiten hinter der Antwort

    Ein Ausschnitt reicht für ein Briefing nicht. Lade die Seiten mit aktivierter Lesbarkeit als Markdown, damit Zitate und Überschriften ohne Navigationsrauschen erhalten bleiben. Ein erneuter Abruf derselben URL kann den Extraktions-Cache treffen.

    research.ts
    type ExtractData = { data: { content: string } };
    
    const pages = await Promise.all(
      sources.map((source) =>
        felo<ExtractData>("/v2/web/extract", {
          url: source.link,
          output_format: "markdown",
          with_readability: true,
          with_cache: true,
        }).then((page) => ({ ...source, content: page.data.content })),
      ),
    );

    Beispielausgabe

    // pages[0].content
    "# Example Article\n\nExtracted article content…"
  3. Ergänze, was X sagt

    Nachrichten berichten Ankündigungen; X zeigt, womit Menschen praktisch konfrontiert sind. Suche die letzten sieben Tage und behalte Autor und Zeit, damit das Briefing jede Aussage zuordnen kann. Erhöhe limit für mehr Reichweite; jede Ergebnisseite hat einen cursor.

    research.ts
    type XData = {
      data: {
        tweets: {
          content: string;
          author: { username: string };
          created_at: string;
        }[];
      };
    };
    
    const since = Math.floor((Date.now() - 7 * 24 * 60 * 60 * 1000) / 1000);
    
    const social = await felo<XData>("/v2/x/tweet/search", {
      query: question,
      limit: 10,
      since_time: since,
    });

    Beispielausgabe

    { "data": { "tweets": [
      { "content": "…", "author": { "username": "…" }, "created_at": "…" }
    ] } }
  4. Lege die Belege in einem LiveDoc ab

    Erstelle ein LiveDoc und füge die Quellen als URL-Ressourcen hinzu. Die API dedupliziert bereits gesehene URLs und gibt pro URL eine resource id zurück, sodass spätere Fragen dieselben Belege ohne erneuten Abruf durchsuchen können.

    research.ts
    type LiveDocData = { data: { short_id: string } };
    
    const doc = await felo<LiveDocData>("/v2/livedocs", {
      name: `Research: ${question.slice(0, 60)}`,
      description: "Sources collected while answering the question",
    });
    
    await felo(`/v2/livedocs/${doc.data.short_id}/resources/urls`, {
      urls: sources.map((source) => ({ url: source.link, title: source.title })),
    });
    
    console.log(doc.data.short_id); // keep this for later queries
  5. Frage die Belege später erneut

    Das ist der Gewinn: Die nächste Frage führt eine semantische Suche im LiveDoc statt im offenen Web aus. Übergib resource_ids nur, wenn du auf eine bekannte Teilmenge begrenzen willst.

    research.ts
    type Retrieved = {
      data: { title: string; content: string; score: number }[];
    };
    
    async function ask(livedoc: string, query: string) {
      const hits = await felo<Retrieved>(
        `/v2/livedocs/${livedoc}/resources/retrieve`,
        { query },
      );
      return hits.data.filter((hit) => hit.score >= 0.7);
    }

    Beispielausgabe

    [
      { "title": "…", "content": "…", "score": 0.92 }
    ]

Enthalten

  • Belegte Antwort der Chat API und die Seiten dahinter
  • Markdown-Extraktion ganzer Seiten für die stärksten Quellen
  • X-Posts mit Autor und Zeit als Praktiker-Signal
  • LiveDoc, das Belege für spätere Fragen durchsuchbar hält

Was es nicht macht

  • Nur öffentliche Quellen; Paywall- und Login-Seiten können fehlschlagen
  • X-Abdeckung ist ein Signal, keine repräsentative Umfrage
  • Keine Interviews, privaten Daten oder bezahlten Datenbanken
  • Wenn die Belege dünn sind, wird das gesagt statt Lücken zu füllen
  • Ein Lauf pro Prompt; Zeitplanung übernimmt dein Agent oder cron

Fragen

Woher kommen die Quellen?

Die Chat API gibt die verwendeten Seiten zurück, Web Fetch macht die stärksten zu Markdown, und X Search ergänzt datierte Praktiker-Posts. Jeder Eintrag behält seine URL.

Kann ich einen Markt außerhalb von Tech recherchieren?

Ja. Ersetze den Scope-Platzhalter durch deinen Markt. Nischenmärkte haben oft weniger öffentliche Quellen; das Briefing markiert diese Lücken statt zu raten.

Bleiben die Belege nach dem Lauf erhalten?

Ja, wenn der LiveDoc-Schritt läuft. Die zurückgegebene short_id erlaubt späteren Fragen, dieselben Seiten zu durchsuchen, ohne sie erneut zu laden.

Was kostet ein Briefing?

Abrechnung nach verbrauchten Credits; aktuelle Preise stehen auf der Preisseite. Der Prompt fragt vor Ausgaben nach Bestätigung.

Kann ich es jede Woche laufen lassen?

Ja, aber dieser Prompt läuft einmal. Lege den Zeitplan in einem Agent oder cron an, der denselben Workflow ausführt.

Was, wenn eine Quelle hinter einer Paywall liegt?

Sie wird übersprungen und als nicht verfügbar markiert. Das Briefing füllt die Lücke nie mit einem erfundenen Fakt oder Zitat.

Verwandte Workflows

Mach es zu deinem

Dasselbe Rezept, angepasst an deinen tatsächlichen Ablauf.

Briefing in eine Datei schreiben

Fasse Antwort, Seitenauszüge und X-Zitate in Markdown zusammen und übergib sie deinem Report-Tool oder committe sie ins Docs-Repo. Halte Quellenlinks neben den Aussagen – das Briefing ist nur so gut wie seine Zitate.

Per Zeitplan ausführen

Verpacke `answer()` in einen cron und schreibe jedes Briefing in eine datierte Datei. Dasselbe LiveDoc sammelt Quellen, sodass Woche vier aus den Belegen der Wochen eins bis drei antwortet.

LiveDoc überspringen

Wenn du bereits eine Datenbank hast, speichere Chat-Antwort und extrahierte Seiten dort. Der LiveDoc-Schritt dient der Suche, nicht dem Standard-Speichern.

Die Referenzseiten hinter diesem Rezept und die nächsten Schritte.