研究
把一個問題變成有來源的研究簡報
先問一遍網路,把答案背後的頁面抓成 Markdown,再加入 X 上的實務者聲音,最後把證據存進一個之後還能繼續查詢的 LiveDoc。
複製 prompt
把方括號裡的欄位替換掉,然後貼到 Claude Code、Codex 或任何能存取終端機的 AI。它會安裝 Felo skill、在花額度前詢問,並執行這套工作流程。
為[問題或決策]製作一份附來源的研究簡報。 範圍:[市場、地區、語言]。時間範圍:[過去 30 天 / 過去 12 個月]。讀者:[誰會讀]。深度:[一頁速覽 / 完整簡報]。 輸出一份 Markdown 簡報,包含: 1. 用三條要點給出簡短回答。 2. 證據表:主張、來源標題、URL、發布日期。 3. 來源之間有分歧的地方。 4. 仍然未知的內容。 5. 完整來源清單。 規則: - 每個事實性主張都要有來源連結。區分事實、觀點和你自己的推論。 - 不要編造引文、指標、日期或來源。資料缺失時寫「暫無資料」,不要寫零。 - 優先使用一手來源。X 只用來觀察實務工作者訊號,不作為證據。 - 把時間範圍落實成明確的開始與結束日期,並註明時區。 - 消耗額度前,先展示預計執行的 API 呼叫並等待我批准。 - 不要建立排程任務、傳送訊息或發布任何內容。 - 將結果寫入 ./research-brief.md,並在對話中總結。
複製的內容也包含安裝步驟和安全規則。
你會得到什麼
一次執行的範例輸出,不是即時生成。
小模型會取代支援機器人的大模型嗎?
簡短回答
- 小模型在分類與第一線回答上已經足夠。
- 瓶頸是檢索品質,不是模型大小。
- 切換的團隊回報的是單工單成本下降,而不是解決率上升。
| 主張 | 來源 | 日期 |
|---|---|---|
| 檢索品質決定回答品質 | https://example.com/rag-eval | 2026-10-12 |
| 單一已解決工單成本下降 38% | https://example.com/support-case | 2026-09-28 |
來源分歧
廠商基準顯示幾乎持平;獨立測試在多步退款上仍有差距。
仍然未知
這個差距會因更好的工具使用而縮小,還是需要更大的模型。
實際呼叫
給開發者:同一套工作流程的可複製程式碼,依執行順序排列。
展開實際 API 呼叫
向網路提問
Chat 會搜尋網路、給來源排序、寫出答案,並回傳用到的資源。保留前三個來源:後面的每一步都會沿著其中一條連結繼續。下方的 helper 只送出一次 Key,非 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) }; }範例輸出
{ "answer": "Recent developments include …", "sources": [ { "link": "https://example.com/article", "title": "…" } ] }抓取答案背後的頁面
只有摘要不夠。開啟 readability 後用 Markdown 抓取整頁,讓引語和標題保留下來,同時去掉導覽等雜訊。再次請求同一個 URL 會命中擷取快取。
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 })), ), );範例輸出
// pages[0].content "# Example Article\n\nExtracted article content…"
補上 X 上的聲音
新聞涵蓋的是發佈,X 涵蓋的是人們在實務裡遇到的東西。搜尋最近七天,並保留作者和時間戳,讓簡報可以標註每一條主張的出處。增大
limit可以擴大範圍;每一頁結果都會帶 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, });範例輸出
{ "data": { "tweets": [ { "content": "…", "author": { "username": "…" }, "created_at": "…" } ] } }把證據存進 LiveDoc
建立一個 LiveDoc,把來源作為 URL 資源加進去。API 會對已經見過的 URL 去重,並為每個 URL 回傳 resource id,這樣後來的問題可以直接檢索同一批證據,而不必再次抓取。
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之後再問這批證據
這才是回報:下一個問題在 LiveDoc 上做語意檢索,而不是重新翻開放網路。只有想限定到已知子集時,才傳
resource_ids。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); }範例輸出
[ { "title": "…", "content": "…", "score": 0.92 } ]
包含什麼
- 來自 Chat API 的有來源回答,以及答案背後的頁面
- 對最強來源做整頁 Markdown 擷取
- 帶作者和時間戳的 X 貼文,作為實務者訊號
- 把證據保存為可查詢 LiveDoc,供後續問題重複使用
不做什麼
- 只涵蓋公開來源;付費牆或僅登入可見的頁面可能失敗
- X 覆蓋只是訊號,不代表有代表性的調查
- 不做訪談,不碰私有資料或付費資料庫
- 證據不足時會明確說明,而不是補猜測
- 每個 prompt 執行一次;定時執行交給你的 agent 或 cron
常見問題
來源從哪裡來?
Chat API 會回傳它用過的頁面,Web Fetch 把其中最相關的頁面轉成 Markdown,X Search 補充帶日期的實務者貼文。每一項都會保留 URL。
可以做科技產業以外的市場研究嗎?
可以。把範圍佔位符換成你的市場即可。小眾市場的公開來源可能更少,簡報會標出這些空白,而不是猜。
執行結束後證據還在嗎?
在。LiveDoc 步驟會保留證據,回傳的 short_id 讓之後的問題可以繼續檢索同一批頁面,而不必重新抓取。
一份簡報要花多少?
依用量計費,目前費率在價格頁面。prompt 會在花額度之前請你確認。
可以每週跑一次嗎?
可以,但這段 prompt 只執行一次。把排程放在能執行同一套工作流程的 agent 或 cron 裡。
來源在付費牆後面怎麼辦?
跳過並標記為不可用。簡報不會用一個編造的事實或引語去填補付費牆後的空白。
相關工作流程
改成你的版本
同一套配方,依你實際的交付方式調整。
把簡報寫入檔案
把回答、頁面節錄和 X 引語拼成 Markdown,再交給報告工具或提交到文件倉庫。來源連結要始終跟在主張旁邊——簡報的價值取決於引用。
定時執行
把 `answer()` 包進 cron,每次把簡報寫到一個帶日期的檔案。同一個 LiveDoc 會持續累積來源,第四週可以直接用前三週收集的證據來回答。
跳過 LiveDoc
如果你已經有資料庫,可以把 chat 答案和抓取到的頁面存進去。LiveDoc 步驟是為了檢索,不是預設的儲存方案。
繼續深入
這套配方背後的參考頁面,以及下一步可以看什麼。