deepresearch/scripts/test_api_keys.py
2025-07-02 15:35:36 +08:00

279 lines
8.3 KiB
Python
Executable File
Raw Permalink 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.

#!/usr/bin/env python3
"""
测试API密钥是否有效
"""
import os
import sys
from dotenv import load_dotenv
# 添加项目根目录到Python路径
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# 加载环境变量
load_dotenv()
def test_deepseek_api():
"""测试DeepSeek API"""
print("\n测试 DeepSeek API...")
api_key = os.environ.get('DEEPSEEK_API_KEY')
if not api_key:
print("❌ 错误: 未设置 DEEPSEEK_API_KEY")
return False
try:
from openai import OpenAI
base_url = os.environ.get('DEEPSEEK_BASE_URL', 'https://api.deepseek.com/v1')
# 检测是否是火山引擎
if 'volces.com' in base_url:
print(" 检测到火山引擎 ARK 平台")
r1_model = "deepseek-r1-250120"
v3_model = "deepseek-v3-241226"
else:
r1_model = "deepseek-reasoner"
v3_model = "deepseek-chat"
client = OpenAI(
api_key=api_key,
base_url=base_url
)
# 测试V3模型先测试V3因为它更稳定
print(f" 测试 V3 模型 ({v3_model})...")
try:
response = client.chat.completions.create(
model=v3_model,
messages=[{"role": "user", "content": "Hello, this is a test. Reply with OK."}],
max_tokens=10
)
if response.choices[0].message.content:
print(" ✓ V3 模型测试成功")
else:
print(" ❌ V3 模型响应异常")
return False
except Exception as e:
print(f" ❌ V3 模型测试失败: {e}")
# 如果是火山引擎可能需要使用endpoint ID
if 'volces.com' in base_url:
print(" 提示: 火山引擎可能需要使用自定义的 endpoint ID (如 ep-xxxxx)")
return False
# 测试R1模型
print(f" 测试 R1 模型 ({r1_model})...")
try:
response = client.chat.completions.create(
model=r1_model,
messages=[{"role": "user", "content": "Hello, this is a test. Reply with OK."}],
max_tokens=10
)
if response.choices[0].message.content:
print(" ✓ R1 模型测试成功")
else:
print(" ❌ R1 模型响应异常")
# R1失败不影响整体因为V3可以工作
except Exception as e:
print(f" ⚠️ R1 模型测试失败: {e}")
print(" 注意: R1模型可能需要特殊配置或不可用")
print("✅ DeepSeek API 测试通过")
return True
except Exception as e:
print(f"❌ DeepSeek API 测试失败: {e}")
return False
def test_tavily_api():
"""测试Tavily API"""
print("\n测试 Tavily API...")
api_key = os.environ.get('TAVILY_API_KEY')
if not api_key:
print("❌ 错误: 未设置 TAVILY_API_KEY")
return False
try:
from tavily import TavilyClient
client = TavilyClient(api_key=api_key)
# 执行测试搜索
print(" 执行测试搜索...")
response = client.search("test query", max_results=1)
if response and 'results' in response:
print(f" ✓ 搜索返回 {len(response['results'])} 条结果")
print("✅ Tavily API 测试通过")
return True
else:
print(" ❌ 搜索响应异常")
return False
except Exception as e:
print(f"❌ Tavily API 测试失败: {e}")
return False
def test_task_manager():
"""测试任务管理器"""
print("\n测试任务管理器...")
try:
from app.services.task_manager import task_manager
# 测试提交任务
def test_func(x):
return x * 2
task_id = task_manager.submit_task(test_func, 5)
print(f" ✓ 任务提交成功: {task_id}")
# 等待任务完成
import time
time.sleep(1)
# 检查任务状态
status = task_manager.get_task_status(task_id)
if status and status['status'] == 'completed':
print(" ✓ 任务执行成功")
print("✅ 任务管理器测试通过")
return True
else:
print(f" ❌ 任务状态异常: {status}")
return False
except Exception as e:
print(f"❌ 任务管理器测试失败: {e}")
return False
def test_mongodb_connection():
"""测试MongoDB连接可选"""
print("\n测试 MongoDB 连接(可选)...")
mongodb_uri = os.environ.get('MONGODB_URI', 'mongodb://localhost:27017/deepresearch')
try:
from pymongo import MongoClient
client = MongoClient(mongodb_uri, serverSelectionTimeoutMS=5000)
# 测试连接
client.server_info()
print("✅ MongoDB 连接测试通过")
# 测试数据库操作
db = client.get_database()
test_collection = db['test_collection']
# 插入测试文档
result = test_collection.insert_one({'test': 'document'})
# 查询测试文档
doc = test_collection.find_one({'_id': result.inserted_id})
# 删除测试文档
test_collection.delete_one({'_id': result.inserted_id})
if doc and doc['test'] == 'document':
print(" ✓ MongoDB 读写测试通过")
return True
else:
print(" ❌ MongoDB 读写测试失败")
return False
except Exception as e:
print(f"⚠️ MongoDB 连接测试失败(可选): {e}")
print(" 提示: MongoDB是可选的不影响基本功能")
return False
def check_python_version():
"""检查Python版本"""
print("\n检查 Python 版本...")
version = sys.version_info
if version.major == 3 and version.minor >= 8:
print(f"✅ Python 版本: {version.major}.{version.minor}.{version.micro}")
return True
else:
print(f"❌ Python 版本过低: {version.major}.{version.minor}.{version.micro}")
print(" 需要 Python 3.8 或更高版本")
return False
def check_dependencies():
"""检查依赖包"""
print("\n检查依赖包...")
required_packages = [
'flask',
'flask_cors',
'flask_socketio',
'openai',
'tavily',
'pydantic',
'python-dotenv'
]
missing_packages = []
for package in required_packages:
try:
__import__(package)
except ImportError:
missing_packages.append(package)
if missing_packages:
print(f"❌ 缺少以下依赖包: {', '.join(missing_packages)}")
print(" 请运行: pip install -r requirements.txt")
return False
else:
print("✅ 所有必需的依赖包已安装")
return True
def main():
"""主函数"""
print("=" * 60)
print("DeepResearch API 密钥测试工具")
print("=" * 60)
all_passed = True
# 检查Python版本
if not check_python_version():
all_passed = False
# 检查依赖包
if not check_dependencies():
all_passed = False
# 测试DeepSeek API
if not test_deepseek_api():
all_passed = False
# 测试Tavily API
if not test_tavily_api():
all_passed = False
# 测试任务管理器
if not test_task_manager():
all_passed = False
# 测试MongoDB连接可选
test_mongodb_connection() # 不影响整体结果
print("\n" + "=" * 60)
if all_passed:
print("✅ 所有必需的测试都已通过!")
print("\n您可以运行以下命令启动应用:")
print("1. 启动应用: python app.py")
print("\n注意: 不再需要启动 Celery Worker 和 Redis")
else:
print("❌ 有些测试未通过,请检查上述错误信息")
print("\n常见问题:")
print("1. 确保在.env文件中正确设置了API密钥")
print("2. 检查网络连接是否正常")
if __name__ == '__main__':
main()