dingdanquanliucheng/backend/scripts/test_llm.py
taiyi 9ce3b5a4e0 feat: 添加 LLM 连通性诊断脚本
用于排查 DashScope API 连接问题,直接打印 API Key、URL、
Model 配置和请求结果,不依赖 logging 配置。

运行: cd backend && python -m scripts.test_llm

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-02 16:00:11 +08:00

79 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""LLM 连通性诊断脚本。
直接运行python -m backend.scripts.test_llm
不依赖 logging 配置,所有输出直接 print。
"""
import json
import sys
from urllib import request, error
sys.path.insert(0, ".")
from backend.app.core.config import get_settings
settings = get_settings()
api_key = settings.llm_parse_api_key or settings.aliyun_ai_access_key_id
api_url = settings.llm_parse_api_url
model = settings.llm_parse_model
print("=" * 60)
print("LLM 连通性诊断")
print("=" * 60)
print(f"API URL: {api_url}")
print(f"Model: {model}")
print(f"API Key: {api_key[:8]}...{api_key[-4:] if len(api_key) > 12 else '(太短或为空)'}")
print(f"Key 来源: {'llm_parse_api_key' if settings.llm_parse_api_key else 'aliyun_ai_access_key_id (fallback)'}")
print()
if not api_key or api_key == "xxx":
print("[FATAL] API Key 未配置或为默认值 'xxx'")
print("请在 .env 中设置 LLM_PARSE_API_KEY=sk-xxxxx")
sys.exit(1)
payload = json.dumps({
"model": model,
"messages": [
{"role": "system", "content": "你是测试助手。只回复 JSON。"},
{"role": "user", "content": '请返回:{"status": "ok"}'},
],
"temperature": 0.1,
"max_tokens": 64,
}).encode("utf-8")
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}",
}
print("正在发送测试请求到 DashScope...")
req = request.Request(url=api_url, data=payload, headers=headers, method="POST")
try:
with request.urlopen(req, timeout=15) as resp:
body = resp.read().decode("utf-8")
result = json.loads(body)
print(f"[OK] HTTP {resp.status}")
print(f"完整响应:\n{json.dumps(result, indent=2, ensure_ascii=False)}")
content = result.get("choices", [{}])[0].get("message", {}).get("content", "")
print(f"\nLLM 回复内容: {content}")
print("\n[结论] LLM 连通正常!如果页面仍然失败,请检查服务器是否重启。")
except error.HTTPError as exc:
body = exc.read().decode("utf-8", errors="ignore")
print(f"[FAIL] HTTP {exc.code}")
print(f"错误响应: {body}")
if exc.code == 401:
print("\n[结论] API Key 无效!请检查 LLM_PARSE_API_KEY 是否正确。")
elif exc.code == 403:
print("\n[结论] API Key 权限不足!请检查 DashScope 账户状态。")
elif exc.code == 429:
print("\n[结论] 请求频率超限!稍后重试。")
else:
print(f"\n[结论] HTTP 错误 {exc.code},请检查 API 配置。")
except error.URLError as exc:
print(f"[FAIL] 网络错误: {exc.reason}")
print("\n[结论] 无法连接到 DashScope请检查网络。")
except Exception as exc:
print(f"[FAIL] 未知错误: {type(exc).__name__}: {exc}")
import traceback
traceback.print_exc()