a549bd3b2f
- manage_scheduled_task: INSERT 加 user_id='', 检查 psql 退出码 - search_web: 用 python json.dumps 构造请求体(防止注入) - 删除 lmstudio.rs / LmStudioConfig,仅保留 DeepSeek - config.json 移除 lmstudio 段
37 lines
1.4 KiB
Bash
Executable File
37 lines
1.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# Tavily 搜索 → JSON 输出
|
|
read -r input
|
|
QUERY=$(echo "$input" | python3 -c "import sys,json; print(json.load(sys.stdin).get('query',''))" 2>/dev/null)
|
|
COUNT=$(echo "$input" | python3 -c "import sys,json; print(json.load(sys.stdin).get('count',5))" 2>/dev/null)
|
|
|
|
[ -z "$QUERY" ] && echo '{"error":"请提供 query 参数"}' && exit 0
|
|
|
|
API_KEY="${TAVILY_API_KEY}"
|
|
[ -z "$API_KEY" ] && echo '{"error":"请设置 TAVILY_API_KEY"}' && exit 0
|
|
|
|
export SEARCH_QUERY="$QUERY" SEARCH_COUNT="$COUNT"
|
|
RESP=$(python3 -c "
|
|
import urllib.request, json, os
|
|
key = os.environ['TAVILY_API_KEY']
|
|
query = os.environ['SEARCH_QUERY']
|
|
count = int(os.environ.get('SEARCH_COUNT', 5))
|
|
body = json.dumps({'api_key': key, 'query': query, 'max_results': count, 'include_answer': True}).encode()
|
|
req = urllib.request.Request('https://api.tavily.com/search', data=body, headers={'Content-Type': 'application/json'})
|
|
print(urllib.request.urlopen(req).read().decode())
|
|
" 2>/dev/null)
|
|
|
|
export RESP QUERY COUNT
|
|
python3 -c "
|
|
import os, json
|
|
d = json.loads(os.environ['RESP'])
|
|
result = {
|
|
'query': os.environ['QUERY'],
|
|
'answer': d.get('answer', ''),
|
|
'results': [
|
|
{'title': r.get('title', ''), 'url': r.get('url', ''), 'content': r.get('content', '')[:300]}
|
|
for r in d.get('results', [])[:int(os.environ['COUNT'])]
|
|
]
|
|
}
|
|
print(json.dumps(result, ensure_ascii=False))
|
|
" 2>/dev/null || echo '{"error":"搜索请求失败"}'
|