统一智能搜索技能,整合多个搜索引擎(百炼 MCP、Tavily、Serper、Exa、Firecrawl),自动选择最佳引擎并融合结果
重要说明: 本技能仅支持 CLI 方式调用,不提供 HTTP API。
点击技能卡片上的 Install 按钮,或手动运行:
bash
cd ~/.agents/skills/smart-search
npm install
方式一:使用配置向导(推荐)
bash
npm run setup
交互式输入 API Key,会自动加密存储到 ~/.openclaw/secrets/smart-search.json.enc。
方式二:逐个配置
bash
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:
json
{
"bailian": "sk-xxx",
"tavily": "tvly-xxx",
"serper": "xxx",
"exa": "xxx",
"firecrawl": "fc-xxx"
}
然后运行:
bash
npm run key:import ./api-keys.json
bash
npm run search "OpenClaw 新功能"
bash
# 在技能目录下执行
cd ~/.agents/skills/smart-search
npm run search "搜索内容"
bash
# 指定结果数量
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=<n>返回结果数量10--language=<zh|en>语言偏好auto--intent=<type>搜索意图general--timeout=<ms>超时时间5000
intent 可选值:
general - 通用搜索academic - 学术搜索(优先 Exa)technical - 技术搜索(优先 Exa)news - 新闻搜索(优先 Tavily)bash
npm run setup
交互式配置所有引擎。
bash
npm run key:status
显示所有引擎的配置状态和配额使用情况。
bash
npm run key:set exa
bash
npm run key:rotate bailian
所有 5 个搜索引擎均已完整实现:
引擎状态免费额度用途配置命令百炼 MCP✅ 已实现2000 次/月中文搜索npm run key:set bailianTavily✅ 已实现1000 次/月高级搜索npm run key:set tavilySerper✅ 已实现2500 次/月Google 结果npm run key:set serperExa✅ 已实现1000 次/月学术/技术搜索npm run key:set exaFirecrawl✅ 已实现500 页/月网页抓取npm run key:set firecrawl
总计: 约 7500 次/月搜索额度 🔍
~/.openclaw/secrets/smart-search.json.encbash
npm run key:status
bash
npm run key:get bailian
npm run search "test"
bash
# 删除旧配置
rm ~/.openclaw/secrets/smart-search.json.enc
# 重新配置
npm run setup
Smart Search 使用 AES-256-GCM 加密存储 API Keys,需要配置主密钥。
bash
# 生成强随机密钥
openssl rand -base64 32
# 设置环境变量
export OPENCLAW_MASTER_KEY="your-generated-key-at-least-32-characters"
或在 .env 文件中配置:
env
OPENCLAW_MASTER_KEY=your-generated-key-at-least-32-characters
bash
# 复制示例文件
cp .env.example .env
# 编辑配置
nano .env
⚠️ 安全要求:
.env 文件提交到版本控制定期轮换 API Key 以增强安全性:
bash
# 查看当前状态
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(仅所有者可读写)
;, &, |, `, $, 等)要求:
设置方法:
bash
# Linux/macOS
export OPENCLAW_MASTER_KEY="your-32-char-secure-random-string-here"
# 或添加到 ~/.bashrc 或 ~/.zshrc(推荐)
echo 'export OPENCLAW_MASTER_KEY="your-key"' >> ~/.bashrc
source ~/.bashrc
# Windows PowerShell
$env:OPENCLAW_MASTER_KEY="your-32-char-secure-random-string-here"
# 或添加到 $PROFILE
echo '$env:OPENCLAW_MASTER_KEY="your-key"' >> $PROFILE
生成安全的主密钥:
bash
# Linux/macOS
openssl rand -base64 32
# 或使用 Node.js
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
安全警告:
加密算法:
密钥生命周期:
~/.openclaw/secrets/smart-search.json.enc代码位置:
src/key-manager.tssrc/utils/sanitize.tssrc/engines/bailian.ts(使用 spawn,shell: false)npm auditnpm test已完成的修复:
ClawHub 安全扫描:
静态分析警告说明:
ClawHub 静态分析工具检测到代码中使用 child_process,但这 不是安全问题:
安全实践:
typescript
// ✅ 安全:使用 spawn,参数作为数组传递
spawn('mcporter', ['call', 'WebSearch.bailian_web_search', `query=${query}`], {
shell: false, // 不通过 shell 执行
stdio: ['pipe', 'pipe', 'pipe']
});
// ❌ 不安全:使用 exec,参数经过 shell 解析
exec(`mcporter call ... query="${query}"`); // 有注入风险
代码位置:
src/engines/bailian.ts - 使用 spawn() + shell: falsescripts/doctor.ts - 使用 spawnSync() 检查依赖scripts/setup-bailian.ts - 使用 spawnSync() 检查配置为什么安全:
spawn() 而非 exec()shell: false 明确禁用 shellvalidateSearchQuery() 验证参考:
问题: "Salt not found in config file"
原因: v1.0.3 的安全修复使用随机盐,旧配置文件不兼容
解决方案:
bash
# 删除旧配置文件
rm ~/.openclaw/secrets/smart-search.json.enc
# 重新配置
npm run setup
问题: "OPENCLAW_MASTER_KEY environment variable is required"
原因: 未设置主密钥环境变量
解决方案:
bash
# 设置环境变量
export OPENCLAW_MASTER_KEY="your-32-char-secure-random-string"
# 或添加到 ~/.bashrc
echo 'export OPENCLAW_MASTER_KEY="your-key"' >> ~/.bashrc
source ~/.bashrc