Openclaw Smart Search
by @fdenny11gg
统一智能搜索技能,整合多个搜索引擎(百炼 MCP、Tavily、Serper、Exa、Firecrawl),自动选择最佳引擎并融合结果
clawhub install openclaw-smart-search📖 About This Skill
name: smart-search description: 统一智能搜索技能,整合多个搜索引擎(百炼 MCP、Tavily、Serper、Exa、Firecrawl),自动选择最佳引擎并融合结果 homepage: https://github.com/openclaw/skills/tree/main/smart-search metadata: { "openclaw": { "emoji": "🔍", "requires": { "bins": ["node", "mcporter"] }, "env": ["OPENCLAW_MASTER_KEY"], "install": [ { "id": "node", "kind": "node", "package": "typescript ts-node @types/node dotenv", "label": "Install TypeScript dependencies", }, ], }, }
Smart Search - 统一智能搜索
> 重要说明: 本技能仅支持 CLI 方式调用,不提供 HTTP API。
快速开始
1. 安装依赖
点击技能卡片上的 Install 按钮,或手动运行:
cd ~/.agents/skills/smart-search
npm install
2. 配置 API Key
方式一:使用配置向导(推荐)
npm run setup
交互式输入 API Key,会自动加密存储到 ~/.openclaw/secrets/smart-search.json.enc。
方式二:逐个配置
npm run key:set bailian
npm run key:set tavily
npm run key:set serper
npm run key:set exa
npm run key:set firecrawl
方式三:从文件导入
创建 api-keys.json:
{
"bailian": "sk-xxx",
"tavily": "tvly-xxx",
"serper": "xxx",
"exa": "xxx",
"firecrawl": "fc-xxx"
}
然后运行:
npm run key:import ./api-keys.json
3. 测试搜索
npm run search "OpenClaw 新功能"
CLI 使用方式
基本搜索
# 在技能目录下执行
cd ~/.agents/skills/smart-search
npm run search "搜索内容"
带参数搜索
# 指定结果数量
npm run search "OpenClaw 新功能" -- --count=10学术搜索(优先使用 Exa)
npm run search "LLM Agent planning" -- --intent=academic技术搜索
npm run search "TypeScript 最佳实践" -- --intent=technical新闻搜索
npm run search "最新 AI 动态" -- --intent=news指定语言
npm run search "OpenClaw" -- --language=zh
参数说明
| 参数 | 说明 | 默认值 |
|------|------|--------|
| --count= | 返回结果数量 | 10 |
| --language= | 语言偏好 | auto |
| --intent= | 搜索意图 | general |
| --timeout= | 超时时间 | 5000 |
intent 可选值:
general - 通用搜索academic - 学术搜索(优先 Exa)technical - 技术搜索(优先 Exa)news - 新闻搜索(优先 Tavily)API Key 管理
配置向导
npm run setup
交互式配置所有引擎。
查看状态
npm run key:status
显示所有引擎的配置状态和配额使用情况。
添加引擎
npm run key:set exa
轮换 Key
npm run key:rotate bailian
支持的搜索引擎
所有 5 个搜索引擎均已完整实现:
| 引擎 | 状态 | 免费额度 | 用途 | 配置命令 |
|------|------|----------|------|----------|
| 百炼 MCP | ✅ 已实现 | 2000 次/月 | 中文搜索 | npm run key:set bailian |
| Tavily | ✅ 已实现 | 1000 次/月 | 高级搜索 | npm run key:set tavily |
| Serper | ✅ 已实现 | 2500 次/月 | Google 结果 | npm run key:set serper |
| Exa | ✅ 已实现 | 1000 次/月 | 学术/技术搜索 | npm run key:set exa |
| Firecrawl | ✅ 已实现 | 500 页/月 | 网页抓取 | npm run key:set firecrawl |
总计: 约 7500 次/月搜索额度 🔍
智能路由策略
技术细节
~/.openclaw/secrets/smart-search.json.enc故障排查
查看所有引擎状态
npm run key:status
测试单个引擎
npm run key:get bailian
npm run search "test"
重新配置
# 删除旧配置
rm ~/.openclaw/secrets/smart-search.json.enc重新配置
npm run setup
🔑 密钥管理
主密钥配置
Smart Search 使用 AES-256-GCM 加密存储 API Keys,需要配置主密钥。
#### 方式一:环境变量(推荐)
# 生成强随机密钥
openssl rand -base64 32设置环境变量
export OPENCLAW_MASTER_KEY="your-generated-key-at-least-32-characters"
或在 .env 文件中配置:
OPENCLAW_MASTER_KEY=your-generated-key-at-least-32-characters
#### 方式二:.env 文件
# 复制示例文件
cp .env.example .env编辑配置
nano .env
⚠️ 安全要求:
.env 文件提交到版本控制密钥轮换
定期轮换 API Key 以增强安全性:
# 查看当前状态
npm run key:status轮换指定引擎
npm run key:rotate bailian完全重新配置
rm ~/.openclaw/secrets/smart-search.json.enc
npm run setup
加密技术细节
| 项目 | 说明 |
|------|------|
| 加密算法 | AES-256-GCM |
| 密钥派生 | PBKDF2-SHA256 |
| 迭代次数 | 100,000 轮 |
| 盐值 | 随机生成 16 字节盐,与加密配置一起存储 |
| 存储位置 | ~/.openclaw/secrets/smart-search.json.enc |
| 文件权限 | 0o600(仅所有者可读写) |
🔐 安全性
数据安全
输入验证
;, &, |, ` `, $, 等)最佳实践
1. ✅ 定期轮换 API Key 2. ✅ 使用环境变量存储 Master Key 3. ✅ 不要分享加密配置文件 4. ✅ 在受信任的环境中运行 5. ✅ 定期更新依赖包
审计
🔐 安全说明
主密钥(OPENCLAW_MASTER_KEY)
要求:
设置方法:
# Linux/macOS
export OPENCLAW_MASTER_KEY="your-32-char-secure-random-string-here"或添加到 ~/.bashrc 或 ~/.zshrc(推荐)
echo 'export OPENCLAW_MASTER_KEY="your-key"' >> ~/.bashrc
source ~/.bashrcWindows PowerShell
$env:OPENCLAW_MASTER_KEY="your-32-char-secure-random-string-here"或添加到 $PROFILE
echo '$env:OPENCLAW_MASTER_KEY="your-key"' >> $PROFILE
生成安全的主密钥:
# Linux/macOS
openssl rand -base64 32或使用 Node.js
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
安全警告:
密钥管理实现
加密算法:
密钥生命周期:
1. 主密钥通过环境变量提供
2. 使用 PBKDF2 派生加密密钥
3. 随机盐与加密数据一起存储
4. API Key 加密存储在 ~/.openclaw/secrets/smart-search.json.enc
5. 文件权限:0o600(仅所有者可读写)
代码位置:
(使用 spawn,shell: false)安全最佳实践
1. ✅ 定期轮换 API Key
2. ✅ 使用环境变量存储 Master Key
3. ✅ 不要分享加密配置文件
4. ✅ 在受信任的环境中运行
5. ✅ 定期更新依赖包
6. ✅ 在权限有限的用户账户中运行
7. ✅ 检查依赖:npm audit
8. ✅ 运行测试:npm test
安全审计
已完成的修复:
ClawHub 安全扫描:
Shell 命令执行安全说明
静态分析警告说明:
ClawHub 静态分析工具检测到代码中使用 child_process,但这不是安全问题:
安全实践:
// ✅ 安全:使用 spawn,参数作为数组传递 spawn('mcporter', ['call', 'WebSearch.bailian_web_search',query=${query}], { shell: false, // 不通过 shell 执行 stdio: ['pipe', 'pipe', 'pipe'] });mcporter call ... query="${query}"// ❌ 不安全:使用 exec,参数经过 shell 解析 exec(
); // 有注入风险
代码位置:
- 使用 spawn() + shell: false - 使用 spawnSync() 检查依赖 - 使用 spawnSync() 检查配置为什么安全:
1. ✅ 使用 spawn() 而非exec()
2. ✅ 参数作为数组传递,不经过 shell 解析
3. ✅ 设置 shell: false 明确禁用 shell
4. ✅ 所有输入经过 validateSearchQuery()` 验证
5. ✅ 无用户输入直接传递给 shell
参考:
故障排查
问题: "Salt not found in config file"
原因: v1.0.3 的安全修复使用随机盐,旧配置文件不兼容
解决方案:
# 删除旧配置文件
rm ~/.openclaw/secrets/smart-search.json.enc重新配置
npm run setup
问题: "OPENCLAW_MASTER_KEY environment variable is required"
原因: 未设置主密钥环境变量
解决方案:
# 设置环境变量
export OPENCLAW_MASTER_KEY="your-32-char-secure-random-string"或添加到 ~/.bashrc
echo 'export OPENCLAW_MASTER_KEY="your-key"' >> ~/.bashrc
source ~/.bashrc