多Agent深度语义搜索流水线——把"关键词大海捞针"变成"语义精准命中"
场景演示
你的企业知识库里堆了上万份文档:会议纪要、项目报告、技术方案、客服记录……
当你需要找"去年Q3那个涉及供应链中断的复盘材料"时,关键词搜索能做什么?
- 搜"供应链"→ 出来一堆无关的采购文档
- 搜"复盘"→ 出来一堆团建复盘、周会复盘
- 搜"2025 Q3 供应链 中断"→ 勉强命中,但位置不对还要手动翻
这不是搜索工具的问题,是关键词匹配 vs 语义理解的代差。
多Agent深度语义搜索流水线,把这件事变成:你描述需求,系统理解意图,直接吐出最相关的文档片段和来源。
Step by Step
第一步:构建语义索引 Agent
负责把非结构化文档转换为语义向量并存入向量数据库(Milvus/Pgvector/Chroma)。
核心动作:
- 读取原始文档(PDF/Word/飞书文档/Notion)
- 分块(Chunking):按段落或语义单元切分,每块 512~1024 tokens
- 调用 Embedding 模型生成向量
- 写入向量数据库,附原文和元数据(来源、日期、作者)
# 伪代码示意
def index_document(doc_path):
chunks = chunk_file(doc_path)
for chunk in chunks:
vector = embedding_model.encode(chunk.text)
vector_db.upsert({
"id": chunk.id,
"vector": vector,
"metadata": {
"source": doc_path,
"date": chunk.date,
"author": chunk.author,
"text": chunk.text
}
})
使用的 tools:feishu_wiki(读取文档)、exec(调 API)、向量数据库连接器
第二步:语义理解 Agent
负责接收用户的自然语言查询,理解真实意图,拆解成多个语义检索子问题。
典型工作流:
用户问:"帮我找一下去年影响比较大的技术故障,以及我们后续采取了哪些改进措施"
语义理解 Agent 拆解:
- "技术故障" → 可能涉及:系统宕机、bug、事故报告
- "影响比较大" → 优先级高、严重级别、影响范围广
- "改进措施" → 应对方案、复盘结论、action items
- "去年" → 时间范围过滤
每个子问题独立检索,最后合并、去重、排序。
使用的 skills:multi-search-engine(验证)、 tavily-search(外部补充)
第三步:检索 Agent × N
多个检索 Agent 并行工作,每个负责一个子问题的语义检索:
| Agent | 负责子问题 | 检索策略 |
|---|---|---|
| 故障检索 Agent | 找技术故障相关文档 | 向量相似度 + 时间过滤 |
| 影响分析 Agent | 找影响评估相关文档 | 语义扩展:中断、宕机、故障 |
| 改进措施 Agent | 找改进/复盘相关文档 | 向量+关键词双路召回 |
每个 Agent 返回 Top-K 结果和置信度分数。
使用的 tools:exec(向量数据库查询)、feishu_drive(读取飞书文档原文)
第四步:综合总结 Agent
接收各检索 Agent 的结果,做三件事:
- 结果合并:多路召回结果做 RRF(Reciprocal Rank Fusion)融合
- 上下文组装:把相关文档片段拼成可读上下文
- 答案生成:基于上下文,用 LLM 生成直接回答,附上来源引用
最终输出:
📄 找到 3 份相关文档:
>
1. 【故障复盘】2025-Q3 华东区支付系统中断报告 — 2025-07-15
- 摘要:7月14日因第三方支付接口超时导致华东区支付失败约47分钟,影响订单约12,000单……
- 改进措施:已上线接口熔断机制,第三方回调超时阈值从3s调整为1s……
>
2. 2025年Q3技术稳定性总结 — 2025-10-08
- 摘要:Q3共发生P0故障2起,P1故障5起,其中影响最大为……
- 改进措施:已建立故障分级响应SOP,上线后P0故障平均恢复时间从45分钟缩短至18分钟……
>
3. SRE月报2025-09 — 2025-09-30
- 摘要:本月重大故障1起,根因为……
- 改进措施:已在全链路追踪中新增3个关键节点探针……
第五步:定时增量更新(可选)
用 Cron 每天/每周触发一次增量索引:
- 扫描指定文件夹/飞书知识库
- 对比已有索引时间戳,只索引新增/修改的文档
- 避免全量重建,节省 token 和时间
# 每天早上8点增量更新索引
openclaw cron add \
--name "知识库增量索引" \
--schedule "0 8 * * *" \
--payload "索引增量文档"
可复制提示词
语义搜索 Agent 主提示词
你是一个企业知识库语义搜索助手。
用户会输入自然语言查询,你需要:
1. 理解用户的真实信息需求(可能涉及多个子主题)
2. 将查询拆解为 2-4 个语义检索子问题
3. 对每个子问题,说明你期望检索到什么样的文档
格式:
【子问题1】:xxx → 期望:xxx
【子问题2】:xxx → 期望:xxx
...
注意:
- 不要直接回答,先拆解检索意图
- 子问题之间尽量互不重叠
- 考虑同义词扩展(如"故障"→"宕机""中断""事故")
检索结果总结 Agent 提示词
你是一个知识库总结助手。
以下是语义搜索返回的多条文档片段和来源信息。请:
1. 去重和合并相关内容
2. 基于所有片段生成直接回答
3. 每条引用注明来源(用 [来源N] 格式)
输出格式:
## 找到的相关内容
[直接用自然语言回答用户的问题]
## 参考来源
1. [文档标题](链接) — 日期
> 相关原文片段
---
使用的 skills
| 技能 | 用途 |
|---|---|
feishu_wiki | 读取飞书知识库文档 |
feishu_drive | 读取飞书云盘原始文档 |
multi-search-engine | 外部信息补充检索 |
tavily-search | 多源信息聚合验证 |
exec | 调用 Embedding API / 向量数据库 |
halo-backend-publisher | 发布搜索结果报告 |
价值与注意事项
核心价值
- 从"找关键词"到"找答案":用户不需要知道文档里用了什么词,系统理解意图后直接给答案
- 多路召回 + RRF 融合:避免单一检索路径的遗漏,结果更全面
- 子问题并行检索:充分利用多 Agent 并发能力,速度快
- 来源可溯:每条答案都附原文引用,可点击跳转到原始文档
- 定时增量索引:知识库持续更新,无需人工维护
注意事项
- 向量数据库选择:没有向量库可以先用 Chroma(本地轻量),生产环境推荐 Milvus/Pgvector
- Embedding 模型:中文场景推荐 BGE-large-zh 或 text2vec-large-chinese,效果差异明显
- Chunking 策略:不是越大越好,建议针对不同类型文档(技术文档、会议记录)调优块大小
- 元数据设计:索引时务必记录日期、来源、作者等元数据,方便时间过滤和来源筛选
- 隐私边界:涉及敏感文档时,向量库建议本地部署,不用第三方 SaaS
如果你也在用 OpenClaw 构建类似的工作流,欢迎交流。
系列文章更多场景,可查看:OpenClaw 有价值应用系列