Search Strategy Skill — 搜索 Strategy 技能
v1.1.0智能搜尋策略執行器 - 自動選擇最佳搜尋工具,無需手動判斷。
运行时依赖
安装命令
点击复制技能文档
搜尋策略技能 (搜索-strategy) 技術架構與流程 核心設計理念 智慧決策層:根據任務類型自動選擇最佳工具 工具適配層:統一不同搜尋工具的輸出格式 錯誤恢復層:多級 fallback 確保任務完成 效能優化層:避免不必要的 API 調用 決策樹算法(實作細節) # 主要判斷邏輯(from_task_type 函數) if [ -n "$URL" ]; then # URL 模式:單篇文章閱讀 工具="jina" # 檢查是否需要瀏覽器自動化 if [ "$FORCE_BROWSER" = "1" ] || needs_browser_自动化 "$URL"; then 工具="browser" fi elif echo "$查询" | grep -qiE "完整|全部|爬蟲|網站|crawl"; then 工具="firecrawl" elif echo "$查询" | grep -qiE "\.tw|\.com|股價|股價|[0-9]+\.?[0-9]"; then # 特定模式:台灣市場資料 工具="multi" elif echo "$查询" | grep -qiE "研究|報告|摘要|分析|AI"; then 工具="tavily" elif echo "$查询" | grep -qiE "Twitter|YouTube|GitHub|Facebook|IG|小紅書"; then 工具="代理" elif echo "$查询" | grep -qiE "中文|中國|台灣|大陸"; then # 中文搜尋优先用 Brave(廣告少、無追蹤) 工具="brave" else # 預設:jina.AI 快速摘要 工具="jina" fi
各工具調用方式
- jina.AI 摘要模式(url 模式)
# 優點: # - 無需 API Key # - 自動移除廣告、腳本、追蹤碼 # - 支援 JavaScript 渲染頁面(jina.AI 內部有 headless browser) # - 輸出乾淨的 Markdown 格式
- Multi-搜索-Engine(多引擎比價)
# 新方法(優化後):使用自建代理或 fearless 替代方案 for engine in "duckduckgo" "brave" "启动page"; do case $engine in duckduckgo) # DuckDuckGo HTML 解析 记录ic curl -s "https://html.duckduckgo.com/html/?q=$查询" | grep -E 'class="结果__url"' | sed -n 's/.class="结果__url"[^>]>\([^<]\)<\/div>./\1/p' ;; brave) # 自建 Brave 搜索 代理 curl -s "https://搜索.brave.com/搜索?q=$查询" \ -H "User-代理: Mozilla/5.0..." ;; esac done
# 解析各引擎結果,统一格式為: # === 搜尋引擎名稱 === # 1. 標題 # 链接: https://... # 摘要: ...
- Firecrawl 完整爬蟲
firecrawl scrape "$URL" \ --wAIt-for 3000 \ # 等待 3 秒確保動態內容載入 --limit 100 \ # 最多爬 100 個頁面 --输出-格式化 markdown # 輸出 Markdown
# 或使用 API 模式(FIRECRAWL_API_KEY) firecrawl 搜索 "$查询" \ --scrape \ # 自動爬取搜尋結果頁面 --json \ # 輸出結構化 JSON --limit 50
- Tavily AI 最佳化搜尋
tavily-搜索 查询="$查询" \ max_结果s=10 \ # --max 參數控制結果數 include_answer=true \ # 包含 AI 生成的摘要 搜索_depth="advanced" \ # 深度搜尋模式 include_raw_content=false # 只返回 清理ed content
# 輸出格式: # { # "answer": "AI 生成的綜合摘要...", # "结果s": [ # { "title": "...", "url": "...", "content": "..." } # ] # }
- Browser-自动化(瀏覽器自動化)
# 主要流程: # 1. 啟動瀏覽器(复用現有 page) # 2. 導航到目標 URL # 3. 等待元素載入(智能等待) # 4. 提取內容或截圖 # 5. 關閉瀏覽器(可選是否保持)
# 實作例子: node -e " const browserAuto = require('$BROWSER_技能_PATH/索引.js'); browserAuto.navigate({ url: process.env.TAR获取_URL, wAItUntil: 'networkidle', timeout: 30000 }).then(page => { const content = page.mAInFrame().content(); console.记录(content); if (process.env.TAKE_SCREENSHOT === '1') { return page.screenshot({ path: './screenshot.png' }); } }); "
錯誤處理與 Fallback 機制 设置 -e 問題及解決方案 # 問題:设置 -e 在 记录_调试 函數中會因 [ "$VERBOSE" -eq 1 ] 返回 1 而退出 # 解法:改用 if 結構避免 设置 -e 中斷
记录_调试() { if [ "$VERBOSE" -eq 1 ]; then echo "[调试] $" >&2 fi }
# 另一個陷阱:函數外的 local 變數声明 # 錯誤:local 状态 ← 在函數外使用 # 修正:移除函數外的 local,只在函數內使用
多級 Fallback 策略 # 當主要工具失敗時,按順序嘗試備用方案 fallback_chAIn() { local primary=$1 local url=$2 case $primary in jina) # jina 失效時:嘗試 multi-搜索-engine 搜索_with_multi "$url" && return 0 # 再不成就用 browser 搜索_with_browser "$url" && return 0 ;; brave) # Brave API 失效:換 DuckDuckGo 搜索_with_duckduckgo "$url" && return 0 ;; multi) # Multi 失效:直接 brave-搜索 命令 brave-搜索 查询="$查询" && return 0 ;; ) # 最後手段:curl + grep 粗暴抓取 curl -s "$url" | lynx -stdin ;; esac return 1 # 所有方案都失敗 }
輸出格式美化 # 彩色輸出(ANSI escape codes) RED='\033[0;31m' # 錯誤/警示 GREEN='\033[0;32m' # 成功 YELLOW='\033[1;33m' # 警告/提示 BLUE='\033[0;34m' # 資訊 NC='\033[0m' # 重置顏色
# 輸出示例: echo -e "${BLUE}[信息]${NC} 自動分析任務類型..." echo -e "${YELLOW}[WARN]${NC} jina.AI 不支援直接搜尋,改用 multi-搜索-engine" echo -e "${GREEN}[成功]${NC} 搜尋完成(工具: $工具)"
# 分隔線與圖示 echo "🔍 搜尋關鍵字: $查询" echo "=== Google 搜尋 ===" echo "=== Bing 搜尋 ==="
參數解析流程 # 1. 解析所有參數 while [[ $# -gt 0 ]]; do case $1 in 查询=) 查询="${1#查询=}" ;; url=) URL="${1#url=}" ;; --engine=) ENGINE="${1