Felo API PlatformFelo API Platform

Research

Maak van één vraag een onderbouwde researchbrief

Vraag het web, bewaar de pagina’s achter het antwoord als Markdown, voeg toe wat practitioners op X zeggen en houd het bewijs in een LiveDoc dat je later opnieuw kunt doorzoeken.

Tijd20 minutenNiveauGevorderdBijgewerkt2026-10-29
Voor wieOprichters & operatorsMarktonderzoekersGTM-teams

Prompt kopiëren

Vervang de velden tussen blokhaken en plak in Claude Code, Codex of een AI met terminaltoegang. Die installeert de Felo-skill, vraagt voor credits en voert de workflow uit.

Maak een onderbouwd onderzoeksbrief voor [vraag of beslissing].

Bereik: [markt, regio, taal]. Tijdvenster: [laatste 30 dagen / laatste 12 maanden]. Publiek: [wie het leest]. Diepgang: [overzicht van één pagina / volledig brief].

Lever een Markdown-brief met:
1. Een kort antwoord in drie punten.
2. Een bewijstabel: bewering, titel van de bron, URL, publicatiedatum.
3. Waar de bronnen van mening verschillen.
4. Wat nog onbekend is.
5. Een volledige bronnenlijst.

Regels:
- Elke feitelijke bewering heeft een bronlink. Scheid feiten, meningen en je eigen gevolgtrekkingen.
- Verzin nooit citaten, cijfers, datums of bronnen. Ontbrekende data heet ‘Niet beschikbaar’, nooit nul.
- Geef primaire bronnen voorrang. Gebruik X als signaal van vakgenoten, niet als bewijs.
- Zet het tijdvenster om in expliciete begin- en einddatums en noem de tijdzone.
- Voordat er credits worden gebruikt, toon je de geplande API-aanroepen en wacht je op mijn goedkeuring.
- Maak geen terugkerende taak, stuur geen berichten en publiceer niets.
- Schrijf het resultaat naar ./research-brief.md en vat het samen in de chat.

De kopie bevat ook de installatiestappen en veiligheidsregels.

Wat je krijgt

Voorbeelduitvoer van een run. Geen live generatie.

Voorbeeldbrief (fragment)

Vervangen kleine modellen grote in supportbots?

Kort antwoord

  • Kleine modellen volstaan al voor classificatie en eerstelijns antwoorden.
  • De bottleneck is retrievalkwaliteit, niet modelgrootte.
  • Overgestapte teams melden lagere kosten per ticket, niet hogere oplossingspercentages.
ClaimBronDatum
Retrievalkwaliteit bepaalt antwoordkwaliteithttps://example.com/rag-eval2026-10-12
Kosten per opgelost ticket daalden 38%https://example.com/support-case2026-09-28

Waar de bronnen van mening verschillen

Leveranciersbenchmarks tonen bijna pariteit; onafhankelijke tests zien nog een kloof bij meerstaps terugbetalingen.

Nog onbekend

Of de kloof sluit met betere tooling of een groter model vereist.

De exacte aanroepen

Voor ontwikkelaars: dezelfde workflow als kopieerbare code in uitvoeringsvolgorde.

Exacte API-aanroepen tonen
  1. Stel het web een vraag

    Chat doorzoekt het web, rangschikt bronnen, schrijft het antwoord en geeft de gebruikte resources terug. Bewaar de top drie: elke volgende stap volgt een van die links. De helper stuurt de sleutel één keer en gooit een fout bij een niet-2xx-reactie.

    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) };
    }

    Voorbeelduitvoer

    {
      "answer": "Recent developments include …",
      "sources": [
        { "link": "https://example.com/article", "title": "…" }
      ]
    }
  2. Haal de pagina’s achter het antwoord op

    Een fragment is niet genoeg voor een brief. Haal de pagina’s op als Markdown met leesbaarheid aan, zodat citaten en koppen bewaard blijven zonder navigatieruis. Dezelfde URL opnieuw opvragen kan de extractiecache raken.

    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 })),
      ),
    );

    Voorbeelduitvoer

    // pages[0].content
    "# Example Article\n\nExtracted article content…"
  3. Voeg toe wat X zegt

    Nieuws dekt aankondigingen; X laat zien waar mensen in de praktijk tegenaan lopen. Zoek de laatste zeven dagen en bewaar auteur en tijd zodat de brief elke bewering kan toeschrijven. Verhoog limit voor een breder net; elke resultatenpagina heeft een 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,
    });

    Voorbeelduitvoer

    { "data": { "tweets": [
      { "content": "…", "author": { "username": "…" }, "created_at": "…" }
    ] } }
  4. Bewaar het bewijs in een LiveDoc

    Maak een LiveDoc en voeg de bronnen toe als URL-resources. De API dedupliceert wat het al heeft gezien en geeft per URL een resource id terug, zodat latere vragen hetzelfde bewijs kunnen doorzoeken zonder opnieuw op te halen.

    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. Vraag het bewijs later opnieuw

    Dat is de winst: de volgende vraag doet semantische zoekopdracht op de LiveDoc in plaats van het open web. Geef resource_ids alleen mee als je tot een bekende subset wilt beperken.

    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);
    }

    Voorbeelduitvoer

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

Wat inbegrepen is

  • Onderbouwd antwoord van de Chat API en de pagina’s erachter
  • Markdown-extractie van volledige pagina’s voor de sterkste bronnen
  • X-posts met auteur en tijd als practitionersignaal
  • LiveDoc dat bewijs doorzoekbaar houdt voor latere vragen

Wat het niet doet

  • Alleen openbare bronnen; paywall- en loginpagina’s kunnen falen
  • X-dekking is een signaal, geen representatief onderzoek
  • Geen interviews, privégegevens of betaalde databases
  • Als bewijs dun is, zegt de brief dat in plaats van gaten te vullen
  • Één run per prompt; planning hoort bij je agent of cron

Vragen

Waar komen de bronnen vandaan?

De Chat API geeft de gebruikte pagina’s terug, Web Fetch maakt de sterkste pagina’s Markdown en X Search voegt gedateerde posts van practitioners toe. Elk item behoudt zijn URL.

Kan ik een markt buiten tech onderzoeken?

Ja. Vervang de scopeplek door je markt. Nichemarkten hebben soms minder openbare bronnen; de brief markeert die gaten in plaats van te gissen.

Blijft het bewijs na de run bewaard?

Ja, als de LiveDoc-stap draait. De teruggegeven short_id laat latere vragen dezelfde pagina’s doorzoeken zonder ze opnieuw op te halen.

Wat kost een brief?

Facturering op basis van gebruikte credits; actuele tarieven staan op de prijspagina. De prompt vraagt goedkeuring voordat er wordt uitgegeven.

Kan ik het elke week draaien?

Ja, maar deze prompt draait één keer. Zet de planning in een agent of cron die dezelfde workflow uitvoert.

Wat als een bron achter een paywall zit?

Die wordt overgeslagen en als niet beschikbaar gemarkeerd. De brief vult het gat nooit met een verzonnen feit of citaat.

Gerelateerde workflows

Maak het van jou

Hetzelfde recept, aangepast aan hoe je echt oplevert.

Schrijf de brief naar een bestand

Voeg antwoord, paginafragmenten en X-citaten samen in Markdown en geef dat aan je rapportagetool of commit het in de docs-repo. Houd bronlinks naast de beweringen — de brief is zo goed als zijn citaten.

Draai het volgens schema

Verpak `answer()` in een cron en schrijf elke brief naar een gedateerd bestand. Dezelfde LiveDoc verzamelt bronnen, zodat week vier antwoordt met het bewijs van week één tot drie.

Sla de LiveDoc over

Heb je al een database, sla daar dan het chatantwoord en de geëxtraheerde pagina’s op. De LiveDoc-stap is voor zoeken, niet voor standaardopslag.

De referentiepagina’s achter dit recept en de volgende stappen.