Deep-Search 深度搜索
围绕一个资料任务持续「查找 → 判断 → 交付」,而不是一次检索即答。
> 不是"什么都能查、什么都能答",也不是"给问答加联网开关"——而是选择合适的查找方式、依据结果补齐证据、整理成可继续使用的交付材料。
你会看到什么(问题 → 产物 → 答案)
| 你想做的事 | 本技能给出的产物 | 长什么样 |
|---|---|---|
| 在资料里找东西 / 盘点 / 归纳 | 检索就绪查询 + 分层定位结果 | Glob→Grep→Read 命中的文件清单 |
| 跨文档对比异同 | 维度化对比表 + 缺口标注 | md 工作底稿 + HTML 报告卡片 |
| 结合公开网络分析 | [内]/[外] 分离的结论 |
含「研究方法」与「来源分区」的报告 |
| 翻旧对话找某次讨论 | 历史上下文并入检索 | 来源分区新增「历史对话」一类 |
When to use(何时使用)
以下情况使用本 skill:
- 用户要求搜索 / 查看 / 找知识库中的文件、资料、文档
- 用户要求盘点近期资料、归纳重点、汇总结论
- 用户要求对比多份文档的异同
- 用户要求查某指标 / 错误码 / 版本号 / 专有名词出现在哪里
- 用户要求结合知识库与公开信息分析(联网作为常规检索手段,默认可用)
- 用户要求把查找结果整理成报告 / 表格
即使用户没说"搜索",只要任务是"在资料里查找并汇总结论"都适用。
> 不要触发:简单的单文件读取、无检索的纯问答(AI 可直接处理,加载 skill 反而浪费)。
输入与协作(能力边界补充)
输入字段表(本技能以自然语言任务驱动,无强制结构化参数;下列线索帮助更准):
| 线索 | 必填? | 默认 | 作用 |
|---|---|---|---|
| 任务描述 | 必填 | — | 一句话说清要查 / 整理什么 |
| 范围提示 | 选填 | 当前工作区范围 | 指定目录 / 时间窗 / 文件类型 |
| 范围扩大信号 | 选填 | 不触发 | 任务含"上次 / 之前 / 历史"自动纳入对话检索,无需确认 |
无输入降级:未给范围时默认当前工作区范围,不静默崩、不擅自扩全库;范围模糊则一次确认,仍不明用最小默认范围并明示。
关联技能分工(均为可选协作,缺失不影响本技能核心功能):
- 金融数据类(实时行情 / 财报等结构化数据):交给专用数据技能,本技能专注通用资料检索整理。
- 报告仪表盘类:本技能产出 md + HTML 报告;可视化仪表盘 / 运营视图可由报告类技能承接。
- 知识库归档类:检索结论可经归档类技能存入知识库,形成可复用先验。
- 技能发布审查类:发布前就绪审查可用发布审计类技能(与本技能无运行耦合)。
Core workflow(核心流程)
核心九阶段,按顺序执行;其前后各加一层增强(用户上下文加载 + 学习闭环):
- 用户上下文加载(启动即读) — 读取 WorkBuddy 系统自带用户画像,提炼领域词表 / 实体别名 / 结果偏好,用于 Query 消歧与结果聚焦(详见「用户上下文层」);同步读取
references/learnings.md作为历史先验(详见「学习闭环」) - 理解任务并拆解 — 判断复杂度(单查 / 盘点 / 对比 / 结合外部),拆子任务
- 范围确认 — 默认当前范围;若用户提及"上次 / 之前 / 之前聊过 / 翻记录 / 旧对话 / 历史讨论 / 那次"等,直接把历史对话(
conversation_search)纳入检索范围,无需额外确认(详见「历史对话检索」);只在"扩大文件范围"影响结论且无法默认时,一次一问 - 查询理解 — 解析
{范围, 实体, 时间, 意图}四维 + 按改写决策树生成检索就绪查询集(用户口语词先过「用户上下文层」别名映射再改写) - 检索路由级联 — 定主题域 → 实体消歧(条件)→ 关系拓扑 → 补证
- 检索方式决策 — 按查询特征自动选关键词 / 语义 / 文件定位
- 定位 → 读取 — 先 Glob 定位 + 读 frontmatter 元数据,再 Read 正文
- 证据补齐 — 只补缺口,足够即停,不重复已确认内容
- 诚实标注 — 未覆盖处标"未找到 / 未涉及",绝不补写
- 整理交付 — 生成 md 底稿 + HTML 报告
- 学习闭环(末段 loop) — 自我总结本次检索得失,写入
references/learnings.md供下次先验(详见「学习闭环」)
> 第 3、4、5 步的详细规则:读 references/retrieval.md(含查询理解层改写决策树)
> 第 9 步的交付规范与模板:读 references/delivery.md、assets/report-template.html
Retrieval decision(检索决策要点)
| 查询特征 | 选择 |
|---|---|
| 含精确标识(错误码 / 版本号 / 日期 / 专有名词) | 关键词精确匹配 |
| 主题 / 归纳 / 近似表述 | 语义检索(有后端时)+ 同义词扩展 Grep |
| 以文件名 / 时间为线索 | 先定位文件(Glob + 元数据),再读内容 |
| 跨文档比较 | 按维度拆分,先汇总证据,再只补缺口 |
| 需要外部信息 | 进入「外部深度检索子流」(见下方专节 / references/retrieval.md 第八节):WebSearch 多查询 + WebFetch 深读,结论标 [外] |
关键心智:漏召常在检索之前——先帮用户把 Query 变清楚(改写/扩展,详见 references/retrieval.md 第二节决策树),再走检索;检索是逐步收窄的路由机制——先导航定主题,再消歧,再走关系,最后补证。
外部深度检索子流(需外部信息时启用)
> 当本地/知识库检索后仍存在证据缺口,或主题涉当前外部变化(新闻、公开行业动态、实时数据)时,进入本子流。逻辑提炼自多源深度研究方法:先规划、再检索、深读取证、引用可追溯——不依赖任何外部 CLI/脚本,直接用本环境 WebSearch / WebFetch。
按以下步骤执行(详细规则见 references/retrieval.md 第八节):
- E1 子问题拆解(3-5 个):把主题拆成可独立检索的子问题(如"现状 / 数据 / 驱动因素 / 主要玩家 / 风险"),避免一次性宽搜漏召。
- E2 多查询 Web + News:对每个子问题用 2-3 组关键词变体(
WebSearch),web 与 news 混合;瞄准 15-30 个唯一来源,去重合并。 - E3 源优先级筛选:优先 官方 / 学术 / 权威媒体 > 博客 > 论坛;时间上优先近 12 个月。
- E4 WebFetch 深读 Top 3-5:对最 promising 的 URL 用
WebFetch取全文取证,不只用搜索摘要。 - E5 引用标注 + 单源存疑:每条外部结论标
[外]并附 URL;仅单一来源支撑的结论追加"未验证"提示,不暗示确证。
质量红线(与关键约束同源):
1. 每条外部主张必须有 URL 出处,无出处不写。
2. 仅单一来源 → 标"未验证",不升级为定论。
3. 近 12 个月优先;旧源须显式标注时间。
4. 找不到 → 标 [⚠ 未覆盖],不编造。
5. 内/外来源分别支撑,并入 phase 9 统一交付,不混淆。
Delivery(交付要点)
- 产物:md 工作底稿(含 wikilink 可溯源)+ HTML 单页报告(积木卡片风,单文件可分享/打印)
- 默认输出目录:
<workspace>/outputs/deep-search/;文件名deep-search-{YYYYMMDD}-{slug}.{md,html}(slug 取主题短码);目录不存在则创建 - 来源标注:结论级
[内] / [外] / [内+外] / [⚠未覆盖]+ 证据清单表 - 进阶口径模块:仅跨文档对比 / 专业术语查询时启用(
支撑答"信不信",口径答"按什么标准") - 免责声明:高风险领域 / 对比建议 / 跨文档对比才触发;
仅整理不解释模式自动跳过 - 模板:assets/report-template.html、assets/report-template.md
典型检索的工具调用序列(执行透视)
> 以"查最近一个月关于某主题的资料并归纳重点"为例,本 skill 的实际执行序列:
# 阶段 0 加载用户上下文(画像 / learnings 作为检索聚焦先验)
# 阶段 3 改写查询:口语词过别名映射 → 检索就绪查询集
Glob "**/*.md" # 先按文件名 / 时间线索定位候选文件
Grep -n "主题关键词" <候选目录> # 关键词精确匹配,缩小范围
Read <命中的文件> # 读正文取证,按 [内]/[外] 标注来源
# 阶段 7 证据补齐:仅补缺口,足够即停
# 阶段 9 整理交付:写 <workspace>/outputs/deep-search/ 下的 md + HTML
> 之所以先 Glob 再 Grep 再 Read,是因为分层定位能减少无用全文扫描;之所以"足够即停",是因为这能避免重复已确认内容、控制 token 消耗。
用户上下文层(启动即加载)
> 目标:提高对检索用语(Query)和检索结果(Result)的精确理解与界定。
> 关于"安装时":技能本身无法在安装时执行代码,故落地为「每次启动检索任务时加载用户画像」——等价效果,且能随画像更新实时生效。
加载来源(WorkBuddy 系统自带用户画像,按可用度读取,缺失不臆造):
- 云端长期画像 <memory> 块(会话开始自动注入:用户身份、偏好、长期习惯)
- 用户级长期记忆:~/.workbuddy/MEMORY.md
- 工作区项目约定:./.workbuddy/memory/MEMORY.md
提炼为「用户上下文」短期记忆(仅用于检索聚焦):
- 领域词表:用户主业与关注领域。例:某用户主业为 X 行业 → 领域词表 [行业术语 / 相关标的 / 关键指标]
- 实体别名映射(口语 → 库内规范词):把用户口头简称映射为知识库规范名。
- 例:简称A→规范名、术语B→规范所指(从用户画像自动提取,绝不写死)
- 结果优先级偏好:用户偏好的资料类型、可信源、近期近因权重
- 术语口径:用户惯用表述 → 真实所指(避免歧义,与 §四 实体消歧互补:这里是"用户侧"消歧,§四是"知识库侧"消歧)
用于精确界定(三处落点):
1. Query 改写前置消歧:用户口语词先过别名映射,再进检索就绪查询集(phase 3)
2. 结果排序偏置:同相关度下,优先呈现命中领域词表的资料
3. 范围/口径判定:用户说"我的持仓/组合"等,按画像界定具体对象,避免泛化
约束:画像仅用于"聚焦与界定",绝不依据画像臆造画像外内容或结论;画像缺失/冲突时退化为中性检索。
历史对话检索(conversation_search 直接触发)
> 对应 phase 2 范围确认中的历史对话分支,让「翻旧对话找某次讨论」触发更直接。
直接触发信号词(命中即纳入检索范围,无需额外确认):
- "上次 / 之前 / 之前聊过 / 之前讨论过 / 那次 / 翻记录 / 翻一下对话 / 旧对话 / 历史讨论 / 我们聊过的"
执行:
- 调用 conversation_search,query 须自包含(重述要找的讨论主题 + 时间/背景),因该工具看不到当前对话
- 返回结果作为「历史上下文」来源,与文件来源并列标注(来源分区加「历史对话」一类)
- 若用户同时给了文件范围,则文件 + 历史对话并行检索,结果合并去重
范围确认简化:命中上述信号词时,不再追问"是否要查历史对话"——已隐含授权。仅当要扩大文件范围时才按 phase 2 一次一问。
学习闭环(检索经验回放)
> 让检索在对话/任务间持续变准:每次任务末自我总结,沉淀为下次任务开局即读的先验。
何时写:每次检索任务交付前(phase 10),或长对话每 3-5 轮做一次阶段性总结。
写入位置:references/learnings.md(首次运行自动创建表头;随技能走,跨任务/跨会话累积)。
每条学习条目格式:
### [YYYY-MM-DD] <本次任务主题短码>
- 触发 Query:<用户原话>
- 歧义/坑点:<本次最易漏召或误判的点>
- 消解方式:<如何界定/映射才命中>
- 可复用映射:<新增的 口语→规范 或 实体别名>
- 结果质量:<命中/漏召/误判,及改进>
- 下次建议:<一句话给下次先验>
开局即读:phase 0 用户上下文加载时同步读 references/learnings.md,把历史映射/坑点并入本次「用户上下文」,使消歧与排序直接受益。
循环:learnings 越积越准;定期(如每 30 条)回看去重,把高频映射反哺「用户上下文层」的默认词表。
约束:learnings 只记"检索方法学"经验(怎么找更准),不记用户隐私原文;涉及个人敏感内容仅记抽象方法。
Critical constraints(关键约束 · 即反模式红线)
这些约束既是关键约束,也是使用本技能时最易踩的反模式——一旦做错代价高、且 AI 有倾向做错,因此下硬命令:
- 绝不补写缺失内容——一律标注"未找到 / 未涉及 / 当前资料未覆盖"(因为补写会污染知识库、破坏结论可追溯性)
- 绝不擅自扩大范围——未经确认不把搜索扩到全库(因为扩大范围可能触及用户未预期/未授权的资料)
- 绝不混淆来源——内部资料与公开信息分开标注、分别支撑(因为混源会让结论失去可审计性)
- 绝不臆造路径——找不到文件时给近似建议,不编造(因为臆造路径会误导后续检索、破坏信任)
> 为什么:相关片段 ≠ 完整答案;编造会污染知识积累,也破坏结论的可追溯性。
Error handling(错误处理)
| 场景 | 处理 |
|---|---|
| 找不到目标文件 | 报告"未找到" + Glob 近似建议 |
| 无向量检索后端 | 降级同义词扩展 Grep,标注"本次用关键词检索" |
| 需外部信息但检索失败 | 标注 [外] 缺失,回退内部结论并明示缺口 |
| 跨文档某维度缺失 | 标注"当前资料未覆盖" |
| 环境无 aliases 字段 | 跳过实体消歧,标注"未执行实体消歧" |
| 范围表述模糊 | 确认一次,仍不明则用最小默认范围并明示 |
| 交付路径不存在 | 创建目标目录,或询问用户 |
Examples(示例)
盘点 + 归纳
> "盘点当前范围最近 7 天新入库资料:先告诉我有几篇,再归纳大家重点关注的投资问题。"
跨文档对比(触发进阶口径 + 免责声明)
> "对比《A 指南(2025版)》和《B 共识(2026版)》中痛风治疗方案的异同。"
结合外部
> "先按知识库里 2026 年 AI 产品资料总结要点;再联网查 7 月公开行业变化;整理成行业分析报告。"
仅整理不解释(免触发开关)
> "仅整理不解释:把最近一个月的资料按主题列个清单。"
Delivery self-check(交付前自检清单)
交付前逐条确认,缺一项不交付:
- ☐ 无补写:所有结论均有来源,未覆盖处标
[⚠ 未覆盖],无凭空内容 - ☐ 内/外分离:内部资料与公开信息分别标注、分别支撑,未混淆
- ☐ 范围未擅自扩大:搜索范围与用户确认/默认范围一致
- ☐ 来源可溯源:证据清单表的
来源列指向具体文件/URL - ☐ 模板条件块已清理:未启用进阶模块则已删
口径与来源块及口径列;未触发免责声明则已删页脚声明;纯内部检索已删"联网"项与"公开信息"块 - ☐ 来源标注:内部
[内]与公开[外]已正确区分,公开信息均标[外] - ☐ 学习闭环已落:本次检索的可复用经验已写入
references/learnings.md(无新经验则注明"无新经验",不空写) - ☐ 外部检索合规:若用了
[外]来源——确认唯一源达 15-30、单源标"未验证"、近 12 月优先、每条附 URL、报告「研究方法」已填检索查询数与深读篇数
排障与 FAQ
症状速查表
| 你遇到的现象 | 看哪条 |
|---|---|
| 检索范围默认多大、会不会翻全库 | Q1 |
| 想查"上次 / 之前聊过"的对话 | Q2 |
| 联网查到的外部信息靠谱吗 | Q3 |
| 找不到目标文件 / 路径 | Q4 |
| 报告输出到哪了 | Q5 |
| 检索漏召 / 不准 | Q6 |
| 只想整理不要解释 | Q7 |
| 想把结论存回知识库 | Q8 |
- Q1 检索范围默认多大? 默认当前工作区范围;仅当"扩大文件范围"影响结论且无法默认时,才一次确认,不擅自扩全库。
- Q2 想查历史对话? 任务里出现"上次 / 之前 / 那次 / 翻记录 / 历史讨论"等信号词,自动把
conversation_search纳入检索范围,无需额外确认。 - Q3 外部信息靠谱吗? 所有
[外]结论附 URL 出处;仅单一来源支撑的标"未验证",不升级为定论;近 12 个月优先,旧源显式标时间。 - Q4 找不到文件? 如实标"未找到",用
Glob给近似建议,绝不编造路径。 - Q5 报告在哪? 默认
<workspace>/outputs/deep-search/,文件名deep-search-{YYYYMMDD}-{slug}.{md,html}。 - Q6 漏召 / 不准? 在任务里给出口语别名,用户上下文层自动映射到知识库规范词;命中坑点写入
references/learnings.md沉淀为下次先验。 - Q7 仅整理不解释? 在请求前加"仅整理不解释",技能跳过免责声明与解释性口径,只做归集。
- Q8 存回知识库? 检索结论可经
Work_investment_archiver归档;本技能本身只产出报告、不自动写库。