返回顶部
s

smart-search

统一智能搜索技能,整合多个搜索引擎(百炼 MCP、Tavily、Serper、Exa、Firecrawl),自动选择最佳引擎并融合结果

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.14
安全检测
已通过
103
下载量
0
收藏
概述
安装方式
版本历史

smart-search

# Smart Search - 统一智能搜索 > **重要说明**: 本技能仅支持 CLI 方式调用,不提供 HTTP API。 ## 快速开始 ### 1. 安装依赖 点击技能卡片上的 **Install** 按钮,或手动运行: ```bash cd ~/.agents/skills/smart-search npm install ``` ### 2. 配置 API Key **方式一:使用配置向导(推荐)** ```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 ``` ### 3. 测试搜索 ```bash npm run search "OpenClaw 新功能" ``` ## CLI 使用方式 ### 基本搜索 ```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) ## API Key 管理 ### 配置向导 ```bash npm run setup ``` 交互式配置所有引擎。 ### 查看状态 ```bash npm run key:status ``` 显示所有引擎的配置状态和配额使用情况。 ### 添加引擎 ```bash npm run key:set exa ``` ### 轮换 Key ```bash 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 次/月搜索额度 🔍 ### 智能路由策略 - **中文查询** → 百炼(中文优化) - **英文查询** → Serper(Google 结果) - **学术意图** → 添加 Exa - **技术意图** → 添加 Exa - **新闻意图** → 添加 Tavily - **自动降级** → 引擎失败时自动切换备用引擎 ## 技术细节 - **加密**: AES-256-GCM - **文件位置**: `~/.openclaw/secrets/smart-search.json.enc` - **文件权限**: 0o600(仅所有者可读写) - **密钥派生**: PBKDF2(10 万轮迭代) ## 故障排查 ### 查看所有引擎状态 ```bash 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 ``` #### 方式二:.env 文件 ```bash # 复制示例文件 cp .env.example .env # 编辑配置 nano .env ``` ⚠️ **安全要求**: - 主密钥至少 32 个字符 - 使用随机生成的密钥,不要使用密码或短语 - 不要将 `.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(仅所有者可读写) | --- ## 🔐 安全性 ### 数据安全 - **API Key 存储**: 使用 AES-256-GCM 加密存储 - **文件权限**: 配置文件权限为 0o600(仅所有者可读写) - **无日志记录**: API Key 不会记录到日志中 - **隐私保护**: API Key 本地加密存储,搜索请求直接发送到各搜索引擎官方 API ### 输入验证 - **命令注入防护**: 所有用户输入经过严格验证和转义 - **长度限制**: 搜索关键词最大长度 500 字符 - **特殊字符过滤**: 自动过滤危险字符(`;`, `&`, `|`, `` ` ``, `$`, 等) - **类型验证**: 所有参数经过类型检查 ### 最佳实践 1. ✅ 定期轮换 API Key 2. ✅ 使用环境变量存储 Master Key 3. ✅ 不要分享加密配置文件 4. ✅ 在受信任的环境中运行 5. ✅ 定期更新依赖包 ### 审计 - **访问日志**: 记录所有 API Key 的访问(不记录 Key 本身) - **错误日志**: 记录错误但不包含敏感信息 - **可配置**: 可以禁用日志记录 --- ## 🔐 安全说明 ### 主密钥(OPENCLAW_MASTER_KEY) **要求**: - ✅ 至少 32 字符 - ✅ 使用强随机字符串 - ✅ 通过环境变量设置 - ✅ 不要提交到版本控制 **设置方法**: ```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'))" ``` **安全警告**: - ⚠️ 不要在终端打印密钥 - ⚠️ 不要提交到 Git - ⚠️ 不要分享给他人 - ⚠️ 定期轮换密钥 ### 密钥管理实现 **加密算法**: - AES-256-GCM(认证加密) - PBKDF2 密钥派生(10 万轮迭代) - 随机盐(16 字节,每次加密都不同) **密钥生命周期**: 1. 主密钥通过环境变量提供 2. 使用 PBKDF2 派生加密密钥 3. 随机盐与加密数据一起存储 4. API Key 加密存储在 `~/.openclaw/secrets/smart-search.json.enc` 5. 文件权限:0o600(仅所有者可读写) **代码位置**: - 密钥管理:`src/key-manager.ts` - 输入验证:`src/utils/sanitize.ts` - 安全执行:`src/engines/bailian.ts`(使用 spawn,shell: false) ### 安全最佳实践 1. ✅ 定期轮换 API Key 2. ✅ 使用环境变量存储 Master Key 3. ✅ 不要分享加密配置文件 4. ✅ 在受信任的环境中运行 5. ✅ 定期更新依赖包 6. ✅ 在权限有限的用户账户中运行 7. ✅ 检查依赖:`npm audit` 8. ✅ 运行测试:`npm test` ### 安全审计 **已完成的修复**: - ✅ Shell 注入修复(v1.0.3)- 使用 spawn 替代 exec - ✅ 输入验证增强(v1.0.3)- 白名单 + 注入检测 - ✅ 密钥管理完善(v1.0.3)- 环境变量 + 加密 - ✅ 随机盐生成(v1.0.3)- 每次加密都使用新盐 - ✅ 自动加载 .env(v1.0.11)- 不需要手动 source **ClawHub 安全扫描**: - ✅ 无硬编码密钥 - ✅ 无恶意网络调用 - ✅ 依赖包安全 - ✅ 代码符合声明的目的 ### Shell 命令执行安全说明 **静态分析警告说明**: 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: false` - `scripts/doctor.ts` - 使用 `spawnSync()` 检查依赖 - `scripts/setup-bailian.ts` - 使用 `spawnSync()` 检查配置 **为什么安全**: 1. ✅ 使用 `spawn()` 而非`exec()` 2. ✅ 参数作为数组传递,不经过 shell 解析 3. ✅ 设置 `shell: false` 明确禁用 shell 4. ✅ 所有输入经过 `validateSearchQuery()` 验证 5. ✅ 无用户输入直接传递给 shell **参考**: - Node.js 安全最佳实践:https://nodejs.org/en/docs/guides/security/#child-processes - OWASP 命令注入防护:https://cheatsheetseries.owasp.org/cheatsheets/Injection_Prevention_Cheat_Sheet.html ### 故障排查 **问题**: "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 ```

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 openclaw-smart-search-1776021081 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 openclaw-smart-search-1776021081 技能

通过命令行安装

skillhub install openclaw-smart-search-1776021081

下载 Zip 包

⬇ 下载 smart-search v1.0.14

文件大小: 152.77 KB | 发布时间: 2026-4-13 11:20

v1.0.14 最新 2026-4-13 11:20
openclaw-smart-search 1.0.14

- Minor code maintenance: updates in router implementation (src/router.ts, dist/src/router.js).
- Updated dependency pins in package.json/package-lock.json.
- No functional or breaking changes to CLI or APIs.
- Documentation unaffected; usage remains the same.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部