jpskill.com
🛠️ 開発・MCP コミュニティ

search-layer

ウェブ検索が必要なあらゆる質問に対し、複数の検索エンジンを使い、意図を理解して最適な情報源を選び、重複を排除して質の高い検索結果を提供するSkill。

📜 元の英語説明(参考)

DEFAULT search tool for ALL search/lookup needs. Multi-source search and deduplication layer with intent-aware scoring. Integrates Brave Search (web_search), Exa, Tavily, and Grok to provide high-coverage, high-quality results. Automatically classifies query intent and adjusts search strategy, scoring weights, and result synthesis. Use for ANY query that requires web search — factual lookups, research, news, comparisons, resource finding, "what is X", status checks, etc. Do NOT use raw web_search directly; always route through this skill.

🇯🇵 日本人クリエイター向け解説

一言でいうと

ウェブ検索が必要なあらゆる質問に対し、複数の検索エンジンを使い、意図を理解して最適な情報源を選び、重複を排除して質の高い検索結果を提供するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o search-layer.zip https://jpskill.com/download/8502.zip && unzip -o search-layer.zip && rm search-layer.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/8502.zip -OutFile "$d\search-layer.zip"; Expand-Archive "$d\search-layer.zip" -DestinationPath $d -Force; ri "$d\search-layer.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して search-layer.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → search-layer フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

Search Layer v2.2 — 意図感知多源検索プロトコル

四つのソースが同等のレベルです:Brave (web_search) + Exa + Tavily + Grok。意図に応じて自動的に戦略を選択し、重みを調整し、合成を行います。

実行フロー

ユーザーのクエリ
    ↓
[Phase 1] 意図分類 → 検索戦略の決定
    ↓
[Phase 2] クエリ分解 & 拡張 → サブクエリの生成
    ↓
[Phase 3] 多源並列検索 → Brave + search.py (Exa + Tavily + Grok)
    ↓
[Phase 4] 結果の統合 & ソート → 重複排除 + 意図による重み付けスコアリング
    ↓
[Phase 5] 知識合成 → 構造化された出力

Phase 1: 意図分類

検索リクエストを受け取った後、まず意図のタイプを判断し、次に検索戦略を決定します。ユーザーにどのモードを使用するかを尋ねないでください。

意図 識別信号 Mode Freshness 权重偏向
Factual "什么是 X"、"X 的定义"、"What is X" answer 权威 0.5
Status "X 最新进展"、"X 现状"、"latest X" deep pw/pm 新鮮度 0.5
Comparison "X vs Y"、"X 和 Y 区别" deep py キーワード 0.4 + 权威 0.4
Tutorial "怎么做 X"、"X 教程"、"how to X" answer py 权威 0.5
Exploratory "深入了解 X"、"X 生态"、"about X" deep 权威 0.5
News "X 新闻"、"本周 X"、"X this week" deep pd/pw 新鮮度 0.6
Resource "X 官网"、"X GitHub"、"X 文档" fast キーワード 0.5

詳細な分類ガイドは references/intent-guide.md を参照してください。

判断ルール

  1. クエリ内の信号語をスキャンします
  2. 複数のタイプが一致する場合は、最も具体的なものを選択します
  3. 判断できない場合は、デフォルトで exploratory を使用します

Phase 2: クエリ分解 & 拡張

意図のタイプに基づいて、ユーザーのクエリをサブクエリのセットに拡張します。

共通ルール

  • 技術的な同義語の自動拡張:k8s→Kubernetes, JS→JavaScript, Go→Golang, Postgres→PostgreSQL
  • 中国語の技術クエリ:英語のバリアントも生成します(例: "Rust 异步编程" → 追加で "Rust async programming" を検索)

意図による拡張

意図 拡張戦略 示例
Factual "definition"、"explained" を追加 "WebTransport" → "WebTransport", "WebTransport explained overview"
Status 年、"latest"、"update" を追加 "Deno 进展" → "Deno 2.0 latest 2026", "Deno update release"
Comparison 3つのサブクエリに分割 "Bun vs Deno" → "Bun vs Deno", "Bun advantages", "Deno advantages"
Tutorial "tutorial"、"guide"、"step by step" を追加 "Rust CLI" → "Rust CLI tutorial", "Rust CLI guide step by step"
Exploratory 2〜3の角度に分割 "RISC-V" → "RISC-V overview", "RISC-V ecosystem", "RISC-V use cases"
News "news"、"announcement"、日付を追加 "AI 新闻" → "AI news this week 2026", "AI announcement latest"
Resource 具体的なリソースタイプを追加 "Anthropic MCP" → "Anthropic MCP official documentation"

Phase 3: 多源並列検索

Step 1: Brave(すべてのモード)

各サブクエリに対して web_search を呼び出します。意図に freshness の要件がある場合は、freshness パラメータを渡します。

web_search(query="Deno 2.0 latest 2026", freshness="pw")

Step 2: Exa + Tavily + Grok(Deep / Answer モード)

サブクエリに対して search.py を呼び出し、意図と freshness を渡します。

python3 /home/node/.openclaw/workspace/skills/search-layer/scripts/search.py \
  --queries "子查询1" "子查询2" "子查询3" \
  --mode deep \
  --intent status \
  --freshness pw \
  --num 5

各モードのソース参加マトリックス: | 模式 | Exa | Tavily | Grok | 说明 | |------|-----|--------|------|------| | fast | ✅ | ❌ | fallback | Exa を優先します。Exa のキーがない場合は Grok を使用します | | deep | ✅ | ✅ | ✅ | 3つのソースを並行して実行します | | answer | ❌ | ✅ | ❌ | Tavily のみ(AI answer を含む) |

パラメータの説明: | 参数 | 说明 | |------|------| | --queries | 複数のサブクエリを並行して実行します(位置パラメータを使用して単一のクエリを渡すこともできます) | | --mode | fast / deep / answer | | --intent | 意図のタイプ。スコアリングの重みに影響します(渡さない場合はスコアリングされず、v1 と同じ動作になります) | | --freshness | pd(24h) / pw(週) / pm(月) / py(年) | | --domain-boost | カンマ区切りのドメイン。一致する結果の信頼性スコアに +0.2 します | | --num | ソースごと、クエリごとの結果数 |

Grok ソースの説明

  • completions API を介して Grok モデル(grok-4.1-fast)を呼び出し、そのリアルタイムの知識を利用して構造化された検索結果を返します
  • 時間に敏感なクエリを自動的に検出し、現在の時間のコンテキストを注入します
  • deep モードで Exa、Tavily と並行して実行します
  • ~/.openclaw/credentials/search.json で Grok の apiUrlapiKeymodel を構成する必要があります(または、環境変数 GROK_API_URLGROK_API_KEYGROK_MODEL を使用します)
  • Grok の構成が欠落している場合は、自動的に Exa + Tavily のデュアルソースにダウングレードします

Step 3: 統合

Brave の結果と search.py の出力を統合します。canonical URL で重複排除し、ソースをマークします。

search.py が score フィールドを返した場合は、それを使用してソートします。Brave の結果に score がない場合は、同じ意図の重み付け式を使用して補完します。


Phase 3.5: 引用追跡(Thread Pulling)

検索結果に GitHub issue/PR リンクが含まれており、意図が Status または Exploratory の場合、自動的に引用追跡がトリガーされます。

自動トリガー条件

  • 意図が status または exploratory である
  • 検索結果に github.com/.../issues/ または github.com/.../pull/ URL が含まれている

方式 1: search.py --extract-refs(バッチ)

検索結果から直接引用グラフを抽出します。追加の呼び出しは不要です。

python3 search.py "OpenClaw config validation bug" --mode deep --intent status --extract-refs

出力には refs フィールドが追加され、各結果 URL の引用リストが含まれます。

検索をスキップして、既知の URL から直接引用を抽出することもできます。

python3 search.py --extract-refs-urls "https://github.com/owner/repo/issues/123" "https://github.com/owner/repo/issues/456"

方式 2: fetch-thread(単一 URL のディープクロール)

単一の URL に対して完全なディスカッションフロー + 構造化された引用を取得します。

python3 fetch_thread.py "https://github.com/owner/repo/issues/123" --format json
python3 fetch_thread.py "https://github.com/owner/repo/issues/123" --format markdown
python3 fetch_thread.py "https://github.com/owner/repo/issues/123" --extract-refs-only

GitHub シナリオ(issue/PR):API を介して本文 + すべての comments + timeline イベント(cross-references、commits)を取得し、以下を抽出します。

  • Issue/PR 引用(#123、owner/repo#123)
  • Duplicate マーク
  • Commit 引用
  • 関連する PR/issue(timeline cross-references)
  • 外部 URL

一般的な web シナリオ:web fetch + 正規表現による引用リンクの抽出。

Agent 実行フロー

Step 1: search-layer 検索 → 初期結果の取得
Step 2: search.py --extract-refs または fetch-thread → 手がかりグラフの抽出
Step 3: Agent による高価値な手がかりの絞り込み(LLM が追跡する価値のあるものを判断)
Step 4: fetch-thread による各高価値な手がかりのディープクロール
Step 5: 情報が閉じるか、深さの制限に達するまで Step 2-4 を繰り返します(推奨 max_depth=3)

Phase 4: 結果のソート

スコアリング式

score = w_keyword × keyword_match + w_freshness × freshness_score + w_authority × authority_score

重みは意図によって決定されます(Phase 1 の表を参照)。各項目の内訳:

  • keyword_match (0-1):タイトル+概要におけるクエリ語のカバー率
  • freshness_score (0-1):公開日に基づき、新しいほど高い(日付がない場合は=0.5)
  • authority_score (0-1):ドメインの信頼性レベルに基づく
    • Tier 1 (1.0): github.com, stackoverflow.com, 公式ドキュメントサイト
    • Tier 2 (0.8): HN, dev.to, 著名な技術ブログ
    • Tier 3 (0.6): Medium, 掘金, InfoQ
    • Tier 4 (0.4): その他

完全なドメインスコアリングテーブルは references/authority-domains.json を参照してください。

Domain Boost

--domain-boost パラメータを使用して、重み付けするドメインを手動で指定します(一致する結果の信頼性スコアに +0.2 します)。

search.py "query" --mode deep --intent tutorial --domain-boost dev.to,freecodecamp.org

推奨される組み合わせ:

  • Tutorial → dev.to, freecodecamp.org, realpython.com, baeldung.com
  • Resource → github.com
  • News → techcrunch.com, arstechnica.com, theverge.com

Phase 5: 知識合成

結果の数に応じて合成戦略を選択します。

小さな結果セット(≤5 件)

各項目を個別に表示し、各項目にソースラベルとスコアを付けます。

1. [Title](url) — snippet... `[brave, exa]` ⭐0.85
2. [Title](url) — snippet... `[tavily]` ⭐0.72

中程度の結果セット(5〜15 件)

トピックごとにクラスタリングし、各グループの概要を示します。

**トピック A: [説明]**
- [結果1] — 要点... `[source]`
- [結果2] — 要点... `[source]`

**トピック B: [説明]**
- [結果3] — 要点... `[source]`

大きな結果セット(15件以上)

高レベルの概要 + 上位5件 + 詳細なヒント:


[主要な発
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Search Layer v2.2 — 意图感知多源检索协议

四源同级:Brave (web_search) + Exa + Tavily + Grok。按意图自动选策略、调权重、做合成。

执行流程

用户查询
    ↓
[Phase 1] 意图分类 → 确定搜索策略
    ↓
[Phase 2] 查询分解 & 扩展 → 生成子查询
    ↓
[Phase 3] 多源并行检索 → Brave + search.py (Exa + Tavily + Grok)
    ↓
[Phase 4] 结果合并 & 排序 → 去重 + 意图加权评分
    ↓
[Phase 5] 知识合成 → 结构化输出

Phase 1: 意图分类

收到搜索请求后,先判断意图类型,再决定搜索策略。不要问用户用哪种模式。

意图 识别信号 Mode Freshness 权重偏向
Factual "什么是 X"、"X 的定义"、"What is X" answer 权威 0.5
Status "X 最新进展"、"X 现状"、"latest X" deep pw/pm 新鲜度 0.5
Comparison "X vs Y"、"X 和 Y 区别" deep py 关键词 0.4 + 权威 0.4
Tutorial "怎么做 X"、"X 教程"、"how to X" answer py 权威 0.5
Exploratory "深入了解 X"、"X 生态"、"about X" deep 权威 0.5
News "X 新闻"、"本周 X"、"X this week" deep pd/pw 新鲜度 0.6
Resource "X 官网"、"X GitHub"、"X 文档" fast 关键词 0.5

详细分类指南见 references/intent-guide.md

判断规则

  1. 扫描查询中的信号词
  2. 多个类型匹配时选最具体的
  3. 无法判断时默认 exploratory

Phase 2: 查询分解 & 扩展

根据意图类型,将用户查询扩展为一组子查询:

通用规则

  • 技术同义词自动扩展:k8s→Kubernetes, JS→JavaScript, Go→Golang, Postgres→PostgreSQL
  • 中文技术查询:同时生成英文变体(如 "Rust 异步编程" → 额外搜 "Rust async programming")

按意图扩展

意图 扩展策略 示例
Factual 加 "definition"、"explained" "WebTransport" → "WebTransport", "WebTransport explained overview"
Status 加年份、"latest"、"update" "Deno 进展" → "Deno 2.0 latest 2026", "Deno update release"
Comparison 拆成 3 个子查询 "Bun vs Deno" → "Bun vs Deno", "Bun advantages", "Deno advantages"
Tutorial 加 "tutorial"、"guide"、"step by step" "Rust CLI" → "Rust CLI tutorial", "Rust CLI guide step by step"
Exploratory 拆成 2-3 个角度 "RISC-V" → "RISC-V overview", "RISC-V ecosystem", "RISC-V use cases"
News 加 "news"、"announcement"、日期 "AI 新闻" → "AI news this week 2026", "AI announcement latest"
Resource 加具体资源类型 "Anthropic MCP" → "Anthropic MCP official documentation"

Phase 3: 多源并行检索

Step 1: Brave(所有模式)

对每个子查询调用 web_search。如果意图有 freshness 要求,传 freshness 参数:

web_search(query="Deno 2.0 latest 2026", freshness="pw")

Step 2: Exa + Tavily + Grok(Deep / Answer 模式)

对子查询调用 search.py,传入意图和 freshness:

python3 /home/node/.openclaw/workspace/skills/search-layer/scripts/search.py \
  --queries "子查询1" "子查询2" "子查询3" \
  --mode deep \
  --intent status \
  --freshness pw \
  --num 5

各模式源参与矩阵: | 模式 | Exa | Tavily | Grok | 说明 | |------|-----|--------|------|------| | fast | ✅ | ❌ | fallback | Exa 优先;无 Exa key 时用 Grok | | deep | ✅ | ✅ | ✅ | 三源并行 | | answer | ❌ | ✅ | ❌ | 仅 Tavily(含 AI answer) |

参数说明: | 参数 | 说明 | |------|------| | --queries | 多个子查询并行执行(也可用位置参数传单个查询) | | --mode | fast / deep / answer | | --intent | 意图类型,影响评分权重(不传则不评分,行为与 v1 一致) | | --freshness | pd(24h) / pw(周) / pm(月) / py(年) | | --domain-boost | 逗号分隔的域名,匹配的结果权威分 +0.2 | | --num | 每源每查询的结果数 |

Grok 源说明

  • 通过 completions API 调用 Grok 模型(grok-4.1-fast),利用其实时知识返回结构化搜索结果
  • 自动检测时间敏感查询并注入当前时间上下文
  • 在 deep 模式下与 Exa、Tavily 并行执行
  • 需要在 ~/.openclaw/credentials/search.json 中配置 Grok 的 apiUrlapiKeymodel(或通过环境变量 GROK_API_URLGROK_API_KEYGROK_MODEL
  • 如果 Grok 配置缺失,自动降级为 Exa + Tavily 双源

Step 3: 合并

将 Brave 结果与 search.py 输出合并。按 canonical URL 去重,标记来源。

如果 search.py 返回了 score 字段,用它排序;Brave 结果没有 score 的,用同样的意图权重公式补算。


Phase 3.5: 引用追踪(Thread Pulling)

当搜索结果中包含 GitHub issue/PR 链接,且意图为 Status 或 Exploratory 时,自动触发引用追踪。

自动触发条件

  • 意图为 statusexploratory
  • 搜索结果中包含 github.com/.../issues/github.com/.../pull/ URL

方式 1: search.py --extract-refs(批量)

在搜索结果上直接提取引用图,无需额外调用:

python3 search.py "OpenClaw config validation bug" --mode deep --intent status --extract-refs

输出中会多一个 refs 字段,包含每个结果 URL 的引用列表。

也可以跳过搜索,直接对已知 URL 提取引用:

python3 search.py --extract-refs-urls "https://github.com/owner/repo/issues/123" "https://github.com/owner/repo/issues/456"

方式 2: fetch-thread(单 URL 深度抓取)

对单个 URL 拉取完整讨论流 + 结构化引用:

python3 fetch_thread.py "https://github.com/owner/repo/issues/123" --format json
python3 fetch_thread.py "https://github.com/owner/repo/issues/123" --format markdown
python3 fetch_thread.py "https://github.com/owner/repo/issues/123" --extract-refs-only

GitHub 场景(issue/PR):通过 API 拉取正文 + 全部 comments + timeline 事件(cross-references、commits),提取:

  • Issue/PR 引用(#123、owner/repo#123)
  • Duplicate 标记
  • Commit 引用
  • 关联 PR/issue(timeline cross-references)
  • 外部 URL

通用 web 场景:web fetch + 正则提取引用链接。

Agent 执行流程

Step 1: search-layer 搜索 → 获取初始结果
Step 2: search.py --extract-refs 或 fetch-thread → 提取线索图
Step 3: Agent 筛选高价值线索(LLM 判断哪些值得追踪)
Step 4: fetch-thread 深度抓取每个高价值线索
Step 5: 重复 Step 2-4,直到信息闭环或达到深度限制(建议 max_depth=3)

Phase 4: 结果排序

评分公式

score = w_keyword × keyword_match + w_freshness × freshness_score + w_authority × authority_score

权重由意图决定(见 Phase 1 表格)。各分项:

  • keyword_match (0-1):查询词在标题+摘要中的覆盖率
  • freshness_score (0-1):基于发布日期,越新越高(无日期=0.5)
  • authority_score (0-1):基于域名权威等级
    • Tier 1 (1.0): github.com, stackoverflow.com, 官方文档站
    • Tier 2 (0.8): HN, dev.to, 知名技术博客
    • Tier 3 (0.6): Medium, 掘金, InfoQ
    • Tier 4 (0.4): 其他

完整域名评分表见 references/authority-domains.json

Domain Boost

通过 --domain-boost 参数手动指定需要加权的域名(匹配的结果权威分 +0.2):

search.py "query" --mode deep --intent tutorial --domain-boost dev.to,freecodecamp.org

推荐搭配:

  • Tutorial → dev.to, freecodecamp.org, realpython.com, baeldung.com
  • Resource → github.com
  • News → techcrunch.com, arstechnica.com, theverge.com

Phase 5: 知识合成

根据结果数量选择合成策略:

小结果集(≤5 条)

逐条展示,每条带源标签和评分:

1. [Title](url) — snippet... `[brave, exa]` ⭐0.85
2. [Title](url) — snippet... `[tavily]` ⭐0.72

中结果集(5-15 条)

按主题聚类 + 每组摘要:

**主题 A: [描述]**
- [结果1] — 要点... `[source]`
- [结果2] — 要点... `[source]`

**主题 B: [描述]**
- [结果3] — 要点... `[source]`

大结果集(15+ 条)

高层综述 + Top 5 + 深入提示:

[一段综述,概括主要发现]

**Top 5 最相关结果:**
1. ...
2. ...

共找到 N 条结果,覆盖 [源列表]。需要深入哪个方面?

合成规则

  • 先给答案,再列来源(不要先说"我搜了什么")
  • 按主题聚合,不按来源聚合(不要"Brave 结果:... Exa 结果:...")
  • 冲突信息显性标注:不同源说法矛盾时明确指出
  • 置信度表达
    • 多源一致 + 新鲜 → 直接陈述
    • 单源或较旧 → "根据 [source],..."
    • 冲突或不确定 → "存在不同说法:A 认为...,B 认为..."

降级策略

  • Exa 429/5xx → 继续 Brave + Tavily + Grok
  • Tavily 429/5xx → 继续 Brave + Exa + Grok
  • Grok 超时/错误 → 继续 Brave + Exa + Tavily
  • search.py 整体失败 → 仅用 Brave web_search(始终可用)
  • 永远不要因为某个源失败而阻塞主流程

向后兼容

不带 --intent 参数时,search.py 行为与 v1 完全一致(无评分,按原始顺序输出)。

现有调用方(如 github-explorer)无需修改。


快速参考

场景 命令
快速事实 web_search + search.py --mode answer --intent factual
深度调研 web_search + search.py --mode deep --intent exploratory
最新动态 web_search(freshness="pw") + search.py --mode deep --intent status --freshness pw
对比分析 web_search × 3 queries + search.py --queries "A vs B" "A pros" "B pros" --intent comparison
找资源 web_search + search.py --mode fast --intent resource