Live Research

作者 brightdatae825f02fbcd7无许可证264 个星标收录于 2026年10月8日更新于 2026年10月8日仓库昨天更新

Produce a deep, multi-source, cited research brief on a topic from live web data using Bright Data's Discover API (intent-ranked web search + parsed page content). Use when the user wants "live research", to "research <topic> deeply", "research the latest on", "write a report on", "give me a briefing / literature review / market scan", "find and synthesize everything about", or otherwise wants a synthesized, source-grounded answer rather than a list of links. Decomposes the question into multiple intent-ranked Discover queries, pulls page content, deduplicates and ranks by relevance, then synthesizes a structured brief with inline citations. Built on the `discover-api` skill. For competitor-specific intel use `competitive-intel`; for social/brand sentiment use `brand-listening`; for a retrieval *system* (not a one-off report) use `rag-pipeline`.

AI 生成的概览

通过按意图排序的网络搜索并综合所抓取的网页内容,生成带引用的多来源研究简报。

功能
将研究问题拆解为若干子问题,针对每个角度执行一次按意图排序的搜索并同时获取网页内容,然后对结果进行合并、去重和质量筛选。它从保留的来源中提取论点,撰写带行内引用的结构化简报,包含编号来源列表、来源间的矛盾以及明确指出的信息空白。附带一个脚本用于完成合并、去重和过滤步骤。
适用场景
适用于用户需要针对某主题进行深度实时研究、简报、文献综述或市场扫描,或需要综合的、有来源支撑的答案而非链接列表的场景。它适合一次性报告,不适用于可复用的检索系统,也不适用于以竞争对手或舆情为特定目标的工作。
运行要求
需要访问 Bright Data 的 Discover API,可通过 bdata 命令行工具(需安装并用 bdata login 认证)或环境变量 BRIGHTDATA_API_TOKEN 中的 API 令牌,并需要网络访问。该技能附带一个可执行的合并脚本,手动合并路径还需 jq。

Bright Data — Live Research

Turn one research question into a cited, synthesized brief by fanning out intent-ranked Discover queries, reading the best sources, and writing up findings with inline citations. This is a workflow on top of the discover-api skill — read that for the API mechanics, modes, and parameters.

Use this when the deliverable is understanding (a report/briefing), not a link list (that's search/discover-api) and not a standing system (that's rag-pipeline).

Setup gate

Discover must be reachable. Quick check (CLI path):

bash
command -v bdata >/dev/null 2>&1 || echo "CLI missing — see bright-data-best-practices/references/cli-setup.md"bdata zones >/dev/null 2>&1 || echo "not authenticated — run: bdata login"

(SDK/REST paths just need BRIGHTDATA_API_TOKEN.)

The method

Step 1 — Scope the question (do this first, don't skip)

If the question is broad or ambiguous, ask 2–3 clarifying questions before spending API calls: time horizon, geography/market, depth, and what decision the research supports. A sharp scope is what makes the intent parameters good.

Step 2 — Decompose into sub-questions

Break the topic into 4–8 angles (definitions, key players, mechanisms, evidence, counter-evidence, recent developments, risks). Each angle becomes one Discover call with its own tailored intent. This beats one broad query — num_results is capped at 20, so coverage comes from breadth of queries, not one big call.

Step 3 — Run Discover per angle (in parallel), with content

bash
# one call per angle; --include-content so you read sources in the same passbdata discover "stablecoin regulation 2026" \  --intent "recent regulatory actions and proposed legislation, primary sources" \  --include-content --num-results 15 -o angle_regulation.json &
bdata discover "stablecoin reserve transparency" \  --intent "audits, attestations, reserve composition disclosures" \  --include-content --num-results 15 -o angle_reserves.json &wait

For maximum coverage on a hard topic, use the raw REST flow with "mode":"deep" (see discover-api) — deep is exhaustive but slower and REST-only.

Step 4 — Merge, dedup, rank, quality-gate

  • Each bdata discover -o file is an object {status, results: [...]} — flatten .results[] from every file before merging.
  • Dedup by URL (normalize: strip query/fragment, lowercase host).
  • Sort by relevance_score desc.
  • Quality-gate the content (a high relevance_score can still be a 404 stub or a nav-only page): drop rows where content is null, matches a block-page signature, is shorter than ~200 chars, or looks like "not found".
bash
# VERIFIED: this is the correct merge. `jq -s 'add | unique_by(.link)'` does NOT work —# each file is {results:[...]}, so you must flatten .results[] first.jq -s '  [ .[].results[] ]                                   # flatten results from all files  | unique_by(.link)                                  # dedup by URL  | map(select(      .content != null      and (.content | length) > 200                   # drop empty / 404 stubs      and ((.content | test("just a moment|captcha|access denied|cf-browser|page not found|post not found"; "i")) | not)    ))  | sort_by(-.relevance_score)' angle_*.json > corpus.jsonecho "kept $(jq length corpus.json) sources"

Or just run the helper (same logic, tested): scripts/merge_corpus.sh -o corpus.json angle_*.json (-m <n> sets the min content length). Copying the jq by hand is error-prone — prefer the script.

Note: with --include-content, the leading part of content is usually page nav/boilerplate (menus, logos). When extracting claims (Step 5), skip past the chrome to the article body.

Step 5 — Read & extract claims

From each kept source's content, pull the specific claims, numbers, dates, and quotes that answer a sub-question. Track which URL each claim came from — you'll cite it.

Step 6 — Synthesize the brief

Write the structured brief (template in references/brief-template.md). Every non-obvious claim gets an inline citation [n] mapping to a numbered source list. Note disagreements between sources rather than averaging them away.

Step 7 — Verify before delivering

  • Every claim traceable to a source in the list? (no orphan claims)
  • Conflicting sources surfaced, not hidden?
  • Gaps named explicitly ("no primary source found for X")?
  • Recency stated — when was this collected, how fresh are the sources?

Quality bar

  • Breadth via queries, depth via content. Many sharp intents > one vague query.
  • Cite everything. A research brief with uncited claims is an opinion. Map each [n] to a real URL from the corpus.
  • Prefer primary sources. Rank filings/docs/announcements over aggregators when relevance_score is comparable.
  • Surface dissent. If sources conflict, say so and attribute both sides.
  • Name the gaps. "Couldn't find …" is a finding, not a failure to hide.

Red flags

  • One broad Discover call and calling it "live research" — decompose into angles.
  • Writing claims from memory/training data instead of from retrieved content — every claim must come from the corpus.
  • Fabricating citations or relevance_scores — if a call failed, report the gap.
  • Ignoring --include-content and just listing links — that's discover-api, not research.
  • Averaging away contradictions between sources.
  • Forgetting to dedup — the same article via 3 aggregators inflates apparent consensus.

References

  • references/brief-template.md [blocked] — the output structure (exec summary, findings per sub-question, contradictions, gaps, numbered sources) and a worked citation example.
  • scripts/merge_corpus.sh [blocked] — Step 4 as a tested one-liner: flatten .results[] across angle files, dedup by URL, quality-gate (null/short/404/block-page), sort by relevance_score.

Related skills

  • discover-api — the underlying API (modes, params, trigger/poll). Read first.
  • rag-pipeline — when the user wants a reusable retrieval system, not a one-time report.
  • competitive-intel — competitor-focused research (pricing, hiring, positioning).
  • brand-listening — social/sentiment research across Reddit/X/TikTok/etc.

来源与署名

来源:brightdata/skills位于skills/live-research提交e825f02

许可证: 无许可证

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架