test_qwen_api.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. """
  2. Qwen API 连通性测试脚本
  3. 验证 API Key 和模型名称是否可用
  4. """
  5. import os
  6. import sys
  7. # 手动读取 .env(避免引入项目依赖)
  8. env_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), ".env")
  9. if os.path.exists(env_file):
  10. for line in open(env_file):
  11. line = line.strip()
  12. if line and not line.startswith("#") and "=" in line:
  13. key, _, val = line.partition("=")
  14. os.environ.setdefault(key.strip(), val.strip())
  15. API_KEY = os.environ.get("QWEN_API_KEY", "")
  16. BASE_URL = os.environ.get("QWEN_BASE_URL", "https://dashscope.aliyuncs.com/compatible-mode/v1")
  17. MODEL = os.environ.get("QWEN_MODEL", "qwen-plus")
  18. MAX_TOKENS = int(os.environ.get("QWEN_MAX_TOKENS", "4096"))
  19. TEMPERATURE = float(os.environ.get("QWEN_TEMPERATURE", "0.1"))
  20. BLUE = "\033[34m"
  21. GREEN = "\033[32m"
  22. RED = "\033[31m"
  23. YELLOW = "\033[33m"
  24. RESET = "\033[0m"
  25. print(f"\n{BLUE}╔══════════════════════════════════════╗{RESET}")
  26. print(f"{BLUE}║ Qwen API 连通性测试 ║{RESET}")
  27. print(f"{BLUE}╚══════════════════════════════════════╝{RESET}\n")
  28. # 检查配置
  29. print(f"{YELLOW}[配置]{RESET}")
  30. print(f" API Key: {API_KEY[:16]}...{API_KEY[-4:]}" if len(API_KEY) > 20 else f" API Key: {API_KEY or '(空)'}")
  31. print(f" Base URL: {BASE_URL}")
  32. print(f" Model: {MODEL}")
  33. print(f" MaxTokens:{MAX_TOKENS}")
  34. print(f" Temp: {TEMPERATURE}\n")
  35. if not API_KEY:
  36. print(f"{RED}[错误] QWEN_API_KEY 为空,请先填入 .env 文件{RESET}")
  37. sys.exit(1)
  38. # 引入 openai
  39. try:
  40. from openai import OpenAI
  41. except ImportError:
  42. print(f"{RED}[错误] 缺少 openai 包,请先安装: pip install openai{RESET}")
  43. sys.exit(1)
  44. print(f"{YELLOW}[测试1] 基础连通性 — 发送简单问候...{RESET}")
  45. client = OpenAI(api_key=API_KEY, base_url=BASE_URL)
  46. messages = [
  47. {"role": "system", "content": "你是一个药典助手,用中文简短回答。"},
  48. {"role": "user", "content": "你好,请用一句话介绍自己。"},
  49. ]
  50. try:
  51. resp = client.chat.completions.create(
  52. model=MODEL,
  53. messages=messages,
  54. max_tokens=256,
  55. temperature=TEMPERATURE,
  56. )
  57. answer = resp.choices[0].message.content or ""
  58. usage = resp.usage
  59. print(f"{GREEN} ✓ 调用成功!{RESET}")
  60. print(f" 回答: {answer[:200]}")
  61. print(f" Token用量: 输入={usage.prompt_tokens}, 输出={usage.completion_tokens}")
  62. print(f" Model: {resp.model}\n")
  63. except Exception as e:
  64. print(f"{RED} ✗ 失败: {e}{RESET}\n")
  65. sys.exit(1)
  66. # 测试2:模拟药典查询场景(测试长回答能力)
  67. print(f"{YELLOW}[测试2] 药典场景 — 查询药品信息...{RESET}")
  68. messages2 = [
  69. {
  70. "role": "system",
  71. "content": (
  72. "你是中华药典AI助手,知识来源为《中华人民共和国药典》。"
  73. "回答须基于药典原文,不得编造。回答格式:结论 → 原文引用 → 来源标注。"
  74. ),
  75. },
  76. {
  77. "role": "user",
  78. "content": "请模拟回答:阿莫西林的贮藏条件是什么?(即使没有检索到原文,也要模拟格式示范)",
  79. },
  80. ]
  81. try:
  82. resp2 = client.chat.completions.create(
  83. model=MODEL,
  84. messages=messages2,
  85. max_tokens=MAX_TOKENS,
  86. temperature=TEMPERATURE,
  87. )
  88. answer2 = resp2.choices[0].message.content or ""
  89. usage2 = resp2.usage
  90. print(f"{GREEN} ✓ 调用成功!{RESET}")
  91. print(f" 回答: {answer2[:300]}...")
  92. print(f" Token用量: 输入={usage2.prompt_tokens}, 输出={usage2.completion_tokens}")
  93. print(f" Model: {resp2.model}\n")
  94. except Exception as e:
  95. print(f"{RED} ✗ 失败: {e}{RESET}\n")
  96. # 总结
  97. print(f"{BLUE}══════════════════════════════════════{RESET}")
  98. print(f"{GREEN} API Key 验证通过,Qwen API 可用!{RESET}")
  99. print(f"{GREEN} 下一步:docker compose up -d 启动全栈环境{RESET}")
  100. print(f"{BLUE}══════════════════════════════════════{RESET}\n")