🎯 Intent Search 意图搜索
搜索技术 NLP OpenClaw
"用户说'我想吃点好的',关键词搜索给你返回了'好吃的定义'——而 Intent Search 会问你'中餐还是西餐?人均多少?附近有什么忌口?'。这就是懂你和懂字面的区别。"
📖 什么是 Intent Search?
Intent Search(意图搜索)是一种超越关键词匹配的搜索技术。它不是简单地在文档中查找包含查询词的文本,而是试图理解用户搜索背后的真正意图,然后返回最符合用户需求的结果。
核心能力
- 语义理解 - 理解查询的深层含义,而非字面匹配
- 意图分类 - 判断用户是想学习、购买、比较还是导航
- 查询扩展 - 自动补充相关词、同义词、上下位词
- 个性化适配 - 基于用户历史调整搜索结果
⚙️ 工作原理
1. 传统搜索 vs 意图搜索
| 用户查询 | 传统搜索返回 | 意图搜索返回 |
|---|---|---|
| "Python 生成器" | 包含"生成器"和"Python"的所有文档 | Python generator 教程、示例代码、最佳实践 |
| "便宜的笔记本电脑" | 标题含"便宜"的产品页 | 按价格排序的笔记本列表 + 性价比推荐 |
| "怎么治头疼" | 含"治"和"头疼"的页面 | 症状分析 + 可能原因 + 建议就医 |
2. 意图分类体系
搜索意图分类(Search Intent Taxonomy):
├── 信息型(Informational)
│ ├── 学习型:如何、教程、指南
│ ├── 事实型:是什么、定义
│ └── 研究型:对比、评测、排名
│
├── 导航型(Navigational)
│ ├── 品牌导航:官网、登录页
│ └── 功能导航:特定功能页面
│
├── 交易型(Transactional)
│ ├── 购买型:价格、下单、优惠
│ ├── 下载型:软件、资源
│ └── 预约型:订餐、挂号
│
└── 商业调查型(Commercial Investigation)
├── 对比型:A vs B
├── 评测型:值得买吗
└── 推荐型:哪个好
3. 技术实现流程
用户查询: "OpenClaw 怎么配置定时任务"
↓
┌─────────────────────────────────────┐
│ Step 1: 意图识别 │
│ - 分类:信息型 - 学习型 │
│ - 实体:OpenClaw, 定时任务 │
│ - 动作:配置 │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ Step 2: 查询理解与扩展 │
│ - 同义词:cron, schedule, 定时执行 │
│ - 相关词:automation, workflow │
│ - 纠错:OpenClaw → OpenClaw │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ Step 3: 语义检索 │
│ - Embedding 向量化 │
│ - 向量数据库检索 │
│ - 相似度排序 │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ Step 4: 结果重排 │
│ - 意图匹配度打分 │
│ - 新手友好度提升 │
│ - 时效性加权 │
└─────────────────────────────────────┘
↓
返回:OpenClaw Cron 配置教程 + 代码示例 + 最佳实践
🔧 OpenClaw 实战应用
OpenClaw Intent Search Skill
OpenClaw 内置了意图搜索能力,可用于构建智能助手、知识库搜索、RAG 系统等:
// OpenClaw Intent Search 示例
const { intentSearch, rag } = require('openclaw');
// 配置意图搜索引擎
const search = intentSearch.create({
// 意图分类模型
classifier: {
model: 'intent-classifier-v2',
categories: ['informational', 'navigational', 'transactional']
},
// 语义检索配置
retriever: {
provider: 'pinecone',
index: 'knowledge-base',
topK: 10,
threshold: 0.7
},
// 重排策略
reranker: {
model: 'cross-encoder',
factors: ['relevance', 'freshness', 'popularity']
}
});
// 执行搜索
async function searchKnowledge(query, userContext) {
// 1. 意图分析
const intent = await search.classify(query);
console.log('识别意图:', intent);
// { type: 'informational', subType: 'tutorial', entities: ['OpenClaw', '定时任务'] }
// 2. 查询扩展
const expanded = await search.expand(query, intent);
console.log('扩展查询:', expanded);
// ['OpenClaw cron 配置', 'OpenClaw 定时任务教程', 'OpenClaw schedule']
// 3. 语义检索
const results = await search.retrieve(expanded, {
filter: { project: userContext.project },
topK: 5
});
// 4. 重排序
const ranked = await search.rerank(results, {
userLevel: userContext.level, // 'beginner' | 'advanced'
preferRecent: true
});
return ranked;
}
意图分类器训练
# 使用 OpenClaw 训练自定义意图分类器
from openclaw.skills import IntentClassifier
# 准备训练数据
training_data = [
{"query": "OpenClaw 怎么安装", "intent": "informational/tutorial"},
{"query": "OpenClaw 价格", "intent": "transactional/price"},
{"query": "OpenClaw 官网", "intent": "navigational/brand"},
{"query": "OpenClaw 和 LangChain 对比", "intent": "commercial/compare"},
# ... 更多样本
]
# 训练分类器
classifier = IntentClassifier()
classifier.train(
data=training_data,
model="distilbert-base-uncased",
epochs=10,
output_path="./models/my-intent-classifier"
)
# 部署到 OpenClaw
classifier.deploy(
name="my-product-intent",
endpoint="intent-classification"
)
⚡ 最佳实践
1. 意图识别 + RAG 结合
先识别意图,再选择合适的知识库检索:
- 信息型 → 教程文档库
- 交易型 → 产品/价格数据库
- 导航型 → 站点地图索引
2. 多意图处理
一个查询可能包含多个意图:
"OpenClaw 定时任务怎么做,有免费的吗?"
↓
意图 1: 学习定时任务配置(信息型)
意图 2: 了解价格/免费方案(商业调查型)
→ 返回:教程 + 免费套餐信息
⚠️ 常见坑点:
- 过度纠错:用户可能就是想搜索"Pythn"这个品牌,不是拼错
- 意图误判:把购买意图当成信息查询,错过转化机会
- 忽视上下文:同一个词在不同场景有不同意图
- 冷启动问题:新用户没有历史,意图判断可能不准
📊 技术栈对比
| 方案 | 准确率 | 延迟 | 成本 |
|---|---|---|---|
| 关键词匹配 | 低(~60%) | 极低(<10ms) | 免费 |
| BM25 + 规则 | 中(~75%) | 低(~50ms) | 低 |
| Embedding 检索 | 高(~85%) | 中(~100ms) | 中 |
| LLM 意图分析 | 极高(~95%) | 高(~1s) | 高 |
| 混合方案 | 最优(~90%+) | 中高 | 中高 |