Skip to content
Back to skills

Search Orchestrator

ASecurity

搜索编排底座 · 把"江西附近游玩"这类模糊地理意图转成结构化查询矩阵,调度online-search / 美团连接器 / xhs-explore skill 做 fan-out → fan-in 多源混合检索,输出带置信度的候选地点 + 内容证据池。是 03/04/06/09 的共用底座。

  • 417 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added September 8, 2026
researchpythongo

Works with

  • cli
  • mcp

Security analysis

A100/100

Pro scans all 8 files and shows the line behind each finding

Scanned September 8, 2026

npx -y skills add infometa/workbuddyskills --skill search-orchestrator --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Search Orchestrator?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Search Orchestrator
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/infometa-search-orchestrator/badge)](https://www.skillsdirectory.com/skills/infometa-search-orchestrator)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: search-orchestrator
description: 搜索编排底座 · 把"江西附近游玩"这类模糊地理意图转成结构化查询矩阵,调度online-search / 美团连接器 / xhs-explore skill 做 fan-out → fan-in 多源混合检索,输出带置信度的候选地点 + 内容证据池。是 03/04/06/09 的共用底座。
version: 1.0.0
author:
tags: [travel, search, geo-fanout, multi-source, orchestrator]
license: MIT
triggers:
  - 上游 skill 需要基于地理位置做"附近 / 周边 / 区域"模糊搜索时
  - 用户输入"X 附近游玩"、"X 周边自驾"、"X 一日游"等模糊地理意图
  - 03 / 04 / 06 / 09 任一 skill 调用前
inputs:
  - name: intent
    type: string
    doc: 用户原始自然语言意图,如"江西附近游玩 4 天"
    required: true
  - name: user_profile
    type: file
    formats: [json]
    doc: 来自 preference-load 的偏好画像
    required: true
  - name: domain
    type: string
    enum: [destination, poi, accommodation, risk]
    doc: 调用方告诉我搜什么类型,决定查询模板和数据源组合
    required: true
outputs:
  - name: candidates
    type: file
    format: json
    doc: 候选地点 + 每地点的内容证据池(笔记、评论、坐标)+ 数据置信度标记
---

# 搜索编排底座(search-orchestrator)

## 我解决什么问题

通用 AI 看到"江西附近游玩"会笼统说"庐山很好"。
我会做这套事:

1. **地理 fan-out**:调online-search(地理搜索) 拿候选地点池(庐山/婺源/三清山/龙虎山/井冈山/鄱阳湖…)
2. **查询矩阵生成**:对每个候选地点 × 用户偏好 × 季节 生成 15-20 条精准查询
3. **多源串行执行**:美团连接器 + xhs-explore skill(含限速/熔断)+ WebSearch 兜底
4. **去重 + 排序 + 深读**:Top 30 笔记拿全文,Top 5 拿评论
5. **置信度标记**:每条数据都带 🟢🟡⚪

## 工作流程

```
intent + user_profile + domain
   ↓
Step 1: parse_intent.py        解析中心点 / 半径 / 时间
   ↓
Step 2: geo_fanout.py          online-search(地理搜索) → 候选地点 Top 6-10
   ↓
Step 3: query_expand.py        候选 × 偏好 × 季节 → 15-20 条查询
   ↓
Step 4: 并发执行(≤2 worker,带熔断)
        ├─ meituan_search.py   调美团连接器
        ├─ xhs_batch_search.py 调 xhs-explore skill
        └─ web_fallback.py     WebSearch 兜底
   ↓
Step 5: dedupe_rank.py         按 note_id/POI 去重,按 likes×comments 排序
   ↓
Step 6: deep_read.py           Top 30 read 全文 + Top 5 comments
   ↓
candidates.json
   ↓ 返回上游 skill
```

## 查询矩阵生成规则(C: 模板 + LLM 混合)

90% 走 `query_templates.json` 的模板填空:
```json
{
  "destination": [
    "{location} 攻略",
    "{location} 必去",
    "{location} 避雷",
    "{location} {season} 推荐",
    "{location} {duration}日游"
  ],
  "poi": [
    "{location} {category}",
    "{location} 本地人 {category}",
    "{location} {category} 性价比"
  ],
  "accommodation": [
    "{location} {tier_label} 酒店推荐",
    "{location} 民宿 真实体验",
    "{location} 住哪里 方便"
  ],
  "risk": [
    "{location} 避雷",
    "{location} 被坑",
    "{location} 注意事项"
  ]
}
```

10% LLM 创造性扩展:基于 user_profile 的特殊偏好生成 1-2 条规则覆盖不到的查询,
如「江西小众老建筑」「成都 不爬山 拍照机位」。

## 反风控约束(与 xhs-explore skill 协同)

- 并发上限 2,超过会触发 461/471
- 连续 3 次错误 → 立即降级到 WebSearch
- 同目的地 30 天内查询本地缓存(`data/.cache/xhs/`)

## 数据置信度

每条返回的 candidate 必须带:
```json
{
  "name": "庐山",
  "source": "online-search+xhs",
  "confidence": "green",
  "search_data": { ... },
  "xhs_evidence": [ {note_id, snippet, sentiment} ],
  "queried_at": "2026-06-03T17:00:00+08:00"
}
```

`confidence` 取值:
- 🟢 green:MCP/CLI 一手数据
- 🟡 yellow:WebSearch 抓取
- ⚪ gray:references/ 静态兜底

## 上游 skill 怎么调我

```python
# 例:destination-research 调用本 skill
import subprocess, json
result = subprocess.run([
    "python", "skills/search-orchestrator/scripts/orchestrate.py",
    "--intent", "江西附近游玩 4 天",
    "--profile", "data/user_profile.json",
    "--domain", "destination",
    "--output", "data/.cache/run-{run_id}/candidates.json"
], capture_output=True, text=True)
candidates = json.loads(open("data/.cache/run-xxx/candidates.json").read())
```

## 反模式

- ❌ 直接调用各种 MCP / CLI,绕开本 skill(会导致重复发请求 / 没有去重 / 没有熔断)
- ❌ 在上游 skill 自己做查询扩展(应该统一在这里做,保证策略一致)
- ❌ 不带 domain 参数(不知道用哪套查询模板)

---

_这个 skill 是整个 agent 的"检索操作系统",所有需要外部数据的 skill 都要走这里。_

Files in this skill

  • SKILL.md4.9 KB
  • scripts/dedupe_rank.py2 KB
  • scripts/deep_read.py2.3 KB
  • scripts/geo_fanout.py4.3 KB
  • scripts/orchestrate.py6.7 KB
  • scripts/query_expand.py3.8 KB
  • scripts/query_templates.json1.8 KB
  • scripts/xhs_batch_search.py5.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in research →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.