Felo API PlatformFelo API Platform

Badania

Zamień jedno pytanie w brief badawczy ze źródłami

Zapytaj web, zapisz strony stojące za odpowiedzią jako Markdown, dodaj to, co mówią praktycy na X, i zachowaj dowody w LiveDoc, który można później przeszukać.

Czas20 minutPoziomŚredniZaktualizowano2026-10-29
Dla kogoFounderzy i operatorzyBadacze rynkuZespoły GTM

Skopiuj prompt

Podmień pola w nawiasach kwadratowych i wklej do Claude Code, Codex albo AI z dostępem do terminala. Instaluje skill Felo, pyta przed wydaniem kredytów i uruchamia workflow.

Przygotuj briefing badawczy ze źródłami na temat [pytanie lub decyzja].

Zakres: [rynek, region, język]. Okres: [ostatnie 30 dni / ostatnie 12 miesięcy]. Odbiorcy: [kto przeczyta]. Głębokość: [przegląd na jedną stronę / pełny briefing].

Przygotuj briefing w Markdown zawierający:
1. Krótką odpowiedź w trzech punktach.
2. Tabelę dowodów: twierdzenie, tytuł źródła, URL, data publikacji.
3. Punkty, w których źródła się nie zgadzają.
4. To, co pozostaje nieznane.
5. Pełną listę źródeł.

Zasady:
- Każde twierdzenie faktograficzne wymaga linku do źródła. Oddziel fakty, opinie i własne wnioski.
- Nigdy nie wymyślaj cytatów, metryk, dat ani źródeł. Brak danych zapisuj jako „Brak danych”, nigdy zero.
- Preferuj źródła pierwotne. X traktuj jako sygnał od praktyków, nie jako dowód.
- Zamień okres na konkretne daty rozpoczęcia i zakończenia i podaj strefę czasową.
- Zanim zużyjesz kredyty, pokaż planowane wywołania API i poczekaj na moją zgodę.
- Nie twórz zadania cyklicznego, nie wysyłaj wiadomości i niczego nie publikuj.
- Zapisz wynik w ./research-brief.md i podsumuj go w czacie.

Kopia zawiera też kroki instalacji i zasady bezpieczeństwa.

Co otrzymujesz

Przykładowy wynik jednego uruchomienia. Nie generowanie na żywo.

Przykładowy briefing (fragment)

Czy małe modele zastąpią duże w botach wsparcia?

Krótka odpowiedź

  • Małe modele wystarczają do klasyfikacji i odpowiedzi pierwszej linii.
  • Wąskim gardłem jest jakość wyszukiwania, nie rozmiar modelu.
  • Zespoły, które przeszły, raportują niższy koszt ticketu, a nie wyższy wskaźnik rozwiązań.
TwierdzenieŹródłoData
Jakość wyszukiwania decyduje o jakości odpowiedzihttps://example.com/rag-eval2026-10-12
Koszt rozwiązania ticketu spadł o 38%https://example.com/support-case2026-09-28

Gdzie źródła się różnią

Benchmarki dostawców pokazują niemal parytet; niezależne testy wciąż widzą lukę przy wieloetapowych zwrotach.

Co pozostaje nieznane

Czy luka zamknie się dzięki lepszym narzędziom, czy potrzebny jest większy model.

Dokładne wywołania

Dla deweloperów: ten sam workflow jako kod, w kolejności wykonania.

Pokaż rzeczywiste wywołania API
  1. Zapytaj web

    Chat przeszukuje web, szereguje źródła, pisze odpowiedź i zwraca użyte zasoby. Zachowaj trzy pierwsze: każdy kolejny krok podąża za jednym z tych linków. Helper wysyła klucz raz i rzuca błąd poza 2xx.

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

    Przykładowy wynik

    {
      "answer": "Recent developments include …",
      "sources": [
        { "link": "https://example.com/article", "title": "…" }
      ]
    }
  2. Pobierz strony za odpowiedzią

    Fragment nie wystarczy do briefu. Pobierz strony jako Markdown z trybem czytania, żeby cytaty i nagłówki przetrwały bez szumu nawigacji. Ponowne pytanie o ten sam URL może trafić w cache ekstrakcji.

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

    Przykładowy wynik

    // pages[0].content
    "# Example Article\n\nExtracted article content…"
  3. Dodaj, co mówi X

    Wiadomości pokrywają ogłoszenia; X pokazuje, z czym ludzie spotykają się w praktyce. Szukaj ostatnich siedmiu dni i zachowaj autora oraz czas, żeby brief przypisał każde twierdzenie. Zwiększ limit, by poszerzyć; każda strona wyników ma 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,
    });

    Przykładowy wynik

    { "data": { "tweets": [
      { "content": "…", "author": { "username": "…" }, "created_at": "…" }
    ] } }
  4. Zarchiwizuj dowody w LiveDoc

    Utwórz LiveDoc i dodaj źródła jako zasoby URL. API deduplikuje widziane URL-e i zwraca resource id na URL, więc kolejne pytania mogą przeszukać te same dowody bez ponownego pobierania.

    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. Zapytaj dowody później

    To jest korzyść: kolejne pytanie robi wyszukiwanie semantyczne na LiveDoc zamiast otwartego webu. Podawaj resource_ids tylko, by ograniczyć do znanego podzbioru.

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

    Przykładowy wynik

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

Co zawiera

  • Odpowiedź ze źródłami z Chat API i strony za nią
  • Ekstrakcja pełnych stron jako Markdown dla najmocniejszych źródeł
  • Posty X z autorem i datą jako sygnał praktyków
  • LiveDoc zachowujący dowody do przeszukania przy kolejnych pytaniach

Czego nie robi

  • Tylko źródła publiczne; płatne strony i strony za logowaniem mogą zawieść
  • Zasięg X to sygnał, nie reprezentatywne badanie
  • Bez wywiadów, prywatnych danych i płatnych baz
  • Gdy dowody są cienkie, brief to mówi zamiast wypełniać luki
  • Jedno uruchomienie na prompt; harmonogram w agencie lub cronie

Pytania

Skąd pochodzą źródła?

Chat API zwraca użyte strony, Web Fetch zamienia najmocniejsze w Markdown, a X Search dodaje datowane posty praktyków. Każdy element zachowuje URL.

Czy mogę badać rynek poza technologią?

Tak. Podmień pole zakresu na swój rynek. Nisze mogą mieć mniej publicznych źródeł; brief oznacza te luki zamiast zgadywać.

Czy dowody zostają po uruchomieniu?

Tak, jeśli wykona się krok LiveDoc. Zwrócony short_id pozwala kolejnym pytaniom przeszukać te same strony bez ponownego pobierania.

Ile kosztuje jeden brief?

Rozliczane w kredytach według użycia; aktualne stawki na stronie cen. Prompt pyta o zgodę przed wydaniem.

Czy można uruchamiać co tydzień?

Tak, ale ten prompt działa raz. Umieść harmonogram w agencie lub cronie uruchamiającym ten sam workflow.

A jeśli źródło jest za paywallem?

Jest pomijane i oznaczane jako niedostępne. Brief nigdy nie wypełnia luki wymyślonym faktem ani cytatem.

Powiązane workflowy

Dostosuj

Ta sama receptura, dopasowana do tego, jak naprawdę dostarczasz.

Zapisz brief do pliku

Połącz odpowiedź, fragmenty stron i cytaty X w Markdown, oddaj narzędziu raportowemu lub commituj do repo docs. Trzymaj linki źródeł przy twierdzeniach — brief jest wart tyle, ile jego cytaty.

Uruchamiaj według harmonogramu

Owiń `answer()` w cron i zapisuj każdy brief do datowanego pliku. Ten sam LiveDoc gromadzi źródła, czwarty tydzień odpowiada dowodami z trzech pierwszych.

Pomiń LiveDoc

Jeśli masz już bazę danych, zapisz tam odpowiedź czatu i wyekstrahowane strony. Krok LiveDoc służy wyszukiwaniu, nie domyślnemu storage.

Strony referencyjne za tą recepturą i kolejne kroki.