test_cohere_api_key.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. """
  2. 测试 Cohere API Key 是否有效
  3. 用于验证 API Key 是否可以正常使用
  4. """
  5. import sys
  6. import os
  7. from typing import Optional
  8. import requests
  9. from loguru import logger
  10. # 配置日志
  11. logger.remove()
  12. logger.add(
  13. sys.stdout,
  14. level="INFO",
  15. format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <level>{message}</level>",
  16. )
  17. def test_cohere_api_key(api_key: str) -> dict:
  18. """
  19. 测试 Cohere API Key 是否有效
  20. Args:
  21. api_key: Cohere API Key
  22. Returns:
  23. 测试结果
  24. """
  25. # Cohere API 端点
  26. base_url = "https://api.cohere.ai/v1"
  27. headers = {
  28. "Authorization": f"Bearer {api_key}",
  29. "Content-Type": "application/json",
  30. }
  31. # 测试 1: 检查 API Key 基本信息
  32. logger.info("测试 1: 检查 API Key 基本信息...")
  33. try:
  34. # 使用 models 端点测试(轻量级)
  35. response = requests.get(
  36. f"{base_url}/models",
  37. headers=headers,
  38. timeout=10,
  39. )
  40. logger.debug(f"响应状态码: {response.status_code}")
  41. logger.debug(f"响应内容: {response.text[:200]}")
  42. if response.status_code == 200:
  43. logger.success("✅ API Key 验证成功!")
  44. models = response.json()
  45. return {
  46. "success": True,
  47. "message": "API Key 有效",
  48. "status_code": response.status_code,
  49. "models_count": len(models.get("models", [])),
  50. }
  51. elif response.status_code == 401:
  52. logger.error("❌ API Key 认证失败 - 无效的 API Key")
  53. return {
  54. "success": False,
  55. "message": "API Key 认证失败",
  56. "error": "Unauthorized",
  57. "status_code": 401,
  58. }
  59. elif response.status_code == 403:
  60. logger.error("❌ API Key 权限不足 - 可能是账户权限问题")
  61. return {
  62. "success": False,
  63. "message": "API Key 权限不足",
  64. "error": "Forbidden",
  65. "status_code": 403,
  66. }
  67. else:
  68. logger.warning(f"⚠️ 意外的响应状态码: {response.status_code}")
  69. return {
  70. "success": False,
  71. "message": f"意外的响应: {response.status_code}",
  72. "error": response.text[:200],
  73. "status_code": response.status_code,
  74. }
  75. except requests.exceptions.RequestException as e:
  76. logger.error(f"❌ 请求异常: {str(e)}")
  77. return {
  78. "success": False,
  79. "message": f"请求失败: {str(e)}",
  80. "error": str(e),
  81. }
  82. # 测试 2: 尝试使用 rerank 端点(如果测试1失败)
  83. logger.info("测试 2: 尝试使用 rerank 端点...")
  84. try:
  85. rerank_data = {
  86. "model": "rerank-multilingual-v3.0",
  87. "query": "test query",
  88. "documents": ["test document 1", "test document 2"],
  89. "top_n": 2,
  90. }
  91. response = requests.post(
  92. f"{base_url}/rerank",
  93. headers=headers,
  94. json=rerank_data,
  95. timeout=10,
  96. )
  97. logger.debug(f"Rerank 响应状态码: {response.status_code}")
  98. logger.debug(f"Rerank 响应内容: {response.text[:200]}")
  99. if response.status_code == 200:
  100. logger.success("✅ Rerank API 测试成功!")
  101. return {
  102. "success": True,
  103. "message": "Rerank API 可用",
  104. "status_code": response.status_code,
  105. }
  106. else:
  107. logger.warning(f"⚠️ Rerank API 测试失败: {response.status_code}")
  108. return {
  109. "success": False,
  110. "message": f"Rerank API 测试失败: {response.status_code}",
  111. "error": response.text[:200],
  112. "status_code": response.status_code,
  113. }
  114. except requests.exceptions.RequestException as e:
  115. logger.error(f"❌ Rerank 请求异常: {str(e)}")
  116. return {
  117. "success": False,
  118. "message": f"Rerank 请求失败: {str(e)}",
  119. "error": str(e),
  120. }
  121. def main():
  122. """主函数"""
  123. # 从命令行参数或环境变量获取 API Key
  124. api_key = sys.argv[1] if len(sys.argv) > 1 else os.environ.get("COHERE_API_KEY")
  125. if not api_key:
  126. logger.error("❌ 请提供 Cohere API Key")
  127. logger.info("使用方法: python test_cohere_api_key.py <API_KEY>")
  128. logger.info("或设置环境变量: COHERE_API_KEY=<API_KEY>")
  129. return 1
  130. # 隐藏部分 API Key(安全显示)
  131. masked_key = api_key[:8] + "..." + api_key[-4:] if len(api_key) > 12 else "***"
  132. logger.info(f"🔍 测试 Cohere API Key: {masked_key}")
  133. result = test_cohere_api_key(api_key)
  134. print("\n" + "=" * 60)
  135. print("测试结果:")
  136. print("=" * 60)
  137. print(f"成功: {result.get('success', False)}")
  138. print(f"消息: {result.get('message', 'N/A')}")
  139. if result.get("error"):
  140. print(f"错误: {result.get('error')}")
  141. if result.get("status_code"):
  142. print(f"状态码: {result.get('status_code')}")
  143. if not result.get("success"):
  144. print("\n" + "=" * 60)
  145. print("可能的原因:")
  146. print("=" * 60)
  147. print("1. API Key 无效或已过期")
  148. print("2. API Key 格式不正确(应该没有空格或换行)")
  149. print("3. Cohere 账户权限不足")
  150. print("4. API Key 未激活或账户未验证")
  151. print("5. 网络连接问题")
  152. print("\n建议:")
  153. print("- 检查 Cohere Dashboard: https://dashboard.cohere.com/")
  154. print("- 确认 API Key 是否正确复制(无多余空格)")
  155. print("- 检查账户状态和权限")
  156. return 0 if result.get("success") else 1
  157. if __name__ == "__main__":
  158. sys.exit(main())