- 添加 5 个用户级别 Skills: - auto-commit: 自动 Git 提交 - karpathy-guidelines: 编码规范指南 - opencli-websearch: 多源网络搜索 - pdf-reader: PDF 内容提取 - repo-analyzer: 项目深度分析 - 添加 Playwright MCP 配置 (21 个浏览器自动化工具) - 创建完整的 README.md 文档说明
7.2 KiB
7.2 KiB
name, description
| name | description |
|---|---|
| opencli-websearch | 使用 Qoder WebSearch 和 OpenCLI 同时进行多源网络搜索,合并结果并提供全面的信息检索。支持谷歌、知乎、ArXiv、小红书、StackOverflow、HackerNews 等多个数据源。当用户需要搜索信息、研究话题或获取多源数据时自动使用。 |
OpenCLI 多源 Web 搜索
概述
本 Skill 提供并行搜索能力,同时使用 Qoder 内置 WebSearch 和 OpenCLI 的多源适配器进行搜索,合并结果以提供更全面的信息覆盖。
搜索策略
并行搜索架构
用户查询
├──→ Qoder WebSearch (通用搜索)
└──→ OpenCLI 多源搜索
├──→ 学术源: arxiv
├──→ 技术源: stackoverflow, hackernews
├──→ 社交源: xiaohongshu, zhihu (需浏览器)
├──→ 新闻源: 36kr, bbc, reuters
└──→ 通用源: google (需浏览器)
数据源分类
| 类别 | 数据源 | 模式 | 适用场景 |
|---|---|---|---|
| 学术 | arxiv | 公开 | 论文、研究 |
| 技术 | stackoverflow, hackernews | 公开 | 编程、技术讨论 |
| 中文社交 | zhihu, xiaohongshu | 浏览器 | 中文社区内容 |
| 新闻 | 36kr, bbc, reuters | 公开 | 时事新闻 |
| 通用 | 浏览器 | 广泛搜索 |
使用方法
基本搜索
当用户需要搜索信息时,自动执行以下流程:
-
启动并行搜索
- 调用 Qoder WebSearch
- 同时调用 OpenCLI 多源搜索
-
OpenCLI 搜索执行
# 学术搜索 opencli arxiv search "{query}" --limit 5 # 技术搜索 opencli stackoverflow search "{query}" --limit 5 opencli hackernews top # 或搜索相关 # 新闻搜索 (36kr 支持中文) opencli 36kr search "{query}" --limit 5 # 其他公开源 opencli gitee search "{query}" --limit 5 -
结果合并与去重
- 合并所有来源的结果
- 按相关性和来源多样性排序
- 标注每个结果的来源
深度内容获取
对于重要结果,使用 OpenCLI 下载完整内容:
# 下载网页内容为 Markdown
opencli web read --url "{url}" --output "{output_path}"
临时数据存储
所有下载的内容存储在:
~/Downloads/opencli-websearch-data/
├── {timestamp}_{query_hash}/
│ ├── metadata.json # 搜索元数据
│ ├── results.json # 合并后的搜索结果
│ └── content/
│ ├── arxiv_{id}.md
│ ├── web_{hash}.md
│ └── ...
执行流程
Step 1: 分析查询意图
判断查询类型以选择最佳数据源:
- 学术/研究 → 优先 arxiv, google-scholar
- 编程/技术 → 优先 stackoverflow, hackernews
- 中文内容 → 优先 zhihu, xiaohongshu, 36kr
- 新闻/时事 → 优先 bbc, reuters, 36kr
- 通用查询 → 全源搜索
Step 2: 并行执行搜索
# 伪代码示意
sources = select_sources(query_intent)
results = {}
# Qoder WebSearch
results['qoder'] = websearch(query)
# OpenCLI 多源搜索
for source in sources:
results[source] = opencli_search(source, query)
Step 3: 结果处理
- 格式化: 统一不同来源的结果格式
- 去重: 基于 URL 和标题相似度去重
- 排序: 按来源权威性和相关性排序
- 摘要: 为每个结果生成简要摘要
Step 4: 深度获取(可选)
对于高相关性结果:
- 使用
opencli web read获取完整内容 - 存储到本地临时目录
- 提供内容摘要给用户
输出格式
搜索结果报告
## 搜索结果: {query}
### 概览
- 搜索源: {sources}
- 总结果数: {count}
- 存储位置: ~/Downloads/opencli-websearch-data/{timestamp}/
### 按来源分类
#### 学术来源
1. [标题](url) - arxiv
- 摘要: ...
#### 技术来源
1. [标题](url) - stackoverflow
- 摘要: ...
#### 中文来源
1. [标题](url) - zhihu
- 摘要: ...
### 推荐深度阅读
- [文档1](path) - 已下载完整内容
- [文档2](path) - 已下载完整内容
工具函数
执行 OpenCLI 搜索
def opencli_search(source: str, query: str, limit: int = 5) -> list:
"""
使用 OpenCLI 搜索指定数据源
Args:
source: 数据源名称 (arxiv, stackoverflow, etc.)
query: 搜索查询
limit: 结果数量限制
Returns:
搜索结果列表
"""
# 构建命令
cmd = f"opencli {source} search '{query}' --limit {limit}"
# 执行并解析结果
...
下载文档内容
def download_content(url: str, output_dir: str) -> str:
"""
使用 OpenCLI web read 下载文档
Args:
url: 文档 URL
output_dir: 输出目录
Returns:
下载文件的本地路径
"""
filename = hash(url) + ".md"
output_path = os.path.join(output_dir, filename)
cmd = f"opencli web read --url '{url}' --output '{output_path}'"
# 执行命令
...
return output_path
创建存储目录
def create_storage_dir(query: str) -> str:
"""
创建临时存储目录
Returns:
存储目录路径
"""
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
query_hash = hashlib.md5(query.encode()).hexdigest()[:8]
dir_name = f"{timestamp}_{query_hash}"
storage_path = os.path.expanduser(f"~/Downloads/opencli-websearch-data/{dir_name}")
os.makedirs(storage_path, exist_ok=True)
os.makedirs(os.path.join(storage_path, "content"), exist_ok=True)
return storage_path
错误处理
常见错误
| 错误码 | 原因 | 解决方案 |
|---|---|---|
| BROWSER_CONNECT | 浏览器扩展未连接 | 提示用户打开 Chrome 并启用扩展 |
| TIMEOUT | 搜索超时 | 减少结果数量或更换数据源 |
| NOT_FOUND | 无搜索结果 | 尝试其他数据源或修改查询词 |
降级策略
当某个数据源失败时:
- 记录错误信息
- 继续处理其他数据源
- 在结果中标注失败的数据源
- 建议用户可选的替代方案
最佳实践
- 查询优化: 对于中文查询,优先使用中文数据源
- 结果数量: 每个源默认获取 5 条,避免过多噪声
- 深度获取: 只对高相关性结果下载完整内容
- 存储管理: 定期清理 ~/Downloads/opencli-websearch-data/ 下的旧数据
- 来源标注: 始终标注每个结果的来源,便于用户判断可信度
示例
示例 1: 学术研究
用户: "搜索关于大语言模型路由的论文"
执行:
# 并行搜索
opencli arxiv search "large language model routing" --limit 5
opencli arxiv search "LLM router" --limit 5
# Qoder websearch 同时执行
示例 2: 技术问题
用户: "Python 异步编程最佳实践"
执行:
opencli stackoverflow search "python async best practices" --limit 5
opencli hackernews top | grep -i python
# Qoder websearch 同时执行
示例 3: 中文内容
用户: "小红书上的 AI 工具推荐"
执行:
opencli xiaohongshu search "AI工具推荐" --limit 5
# 注意: 需要浏览器扩展已连接