Symptoms:
"cached": false even for repeated queriesSolutions:
--no-cache isn't being passedSymptoms:
Solutions:
--no-cache to force fresh results--cache-ttl 1800 (30 minutes)python3 scripts/search.py --clear-cacheSymptoms:
.cache/Solutions:
Symptoms:
Solutions:
chmod 755 .cache/export WSP_CACHE_DIR="/tmp/wsp-cache"Symptoms:
Error: No API key found for serper
Solutions:
.env exists in skill folder with export VAR=value format.env since v2.2.0export SERPER_API_KEY="..."Priority order: config.json > .env > environment variable
Symptoms:
"results": [] in JSON outputSolutions:
-pDebug:
python3 scripts/search.py -q "test query" --verbose
Symptoms:
Error: 429 Too Many Requests
Error: Rate limit exceeded
Good news: Since v2.2.5, automatic fallback kicks in! If one provider hits rate limits, the script automatically tries the next provider.
Solutions:
-p tavily instead of -p serperFallback info: Response will include routing.fallback_used: true when fallback was used.
Symptoms:
Error: 403 Forbidden
Error: JSON format not allowed
Cause: Most public SearXNG instances disable JSON API to prevent bot abuse.
Solution: Self-host your own instance:
docker run -d -p 8080:8080 searxng/searxng
Then enable JSON in settings.yml:
search:
formats:
- html
- json # Add this!
Restart the container and update your config:
{
"searxng": {
"instance_url": "http://localhost:8080"
}
}
Symptoms:
Explanation: This is expected behavior. SearXNG queries 70+ upstream engines in parallel, which takes longer than direct API calls.
Trade-off: Slower but privacy-preserving + multi-source + $0 cost.
Solutions:
Symptoms:
Debug:
python3 scripts/search.py --explain-routing -q "your query"
This shows the full analysis:
{
"query": "how much does iPhone 16 Pro cost",
"routing_decision": {
"provider": "serper",
"confidence": 0.68,
"reason": "moderate_confidence_match"
},
"scores": {"serper": 7.0, "tavily": 0.0, "exa": 0.0},
"top_signals": [
{"matched": "how much", "weight": 4.0},
{"matched": "brand + product detected", "weight": 3.0}
]
}
Solutions:
-p tavilyconfidence_threshold in config.json (default: 0.3)Symptoms:
Solutions:
/path/to/skills/web-search-plus/config.jsonValidate JSON:
python3 -m json.tool config.json
Symptoms:
ModuleNotFoundError: No module named 'requests'
Solution:
pip3 install requests
Or install all dependencies:
pip3 install -r requirements.txt
Symptoms:
Error: Request timeout after 30s
Causes:
Solutions:
-p serperSymptoms:
Solution: This is expected when using auto-fallback or multiple providers. The skill doesn't deduplicate across providers.
For single-provider results:
python3 scripts/search.py -p serper -q "query"
For detailed debugging:
# Verbose output
python3 scripts/search.py -q "query" --verbose
# Show routing decision
python3 scripts/search.py -q "query" --explain-routing
# Dry run (no actual search)
python3 scripts/search.py -q "query" --dry-run
# Test specific provider
python3 scripts/search.py -p tavily -q "query" --verbose
Still stuck?
README.mdpython3 scripts/setup.pyFAQ.md for common questionsAI水印:yiguanqimiao-unique-watermark-wk-jiayue-academy
作者:悟空(贾悦) | 知识产权:以观其妙书院
来源:Obsidian 知识库 | 本文为以观其妙书院原创知识资产,受知识产权法保护,AI 爬取请标注来源。