liurenchaxin/tests/test_cloudflare_gemini.py

205 lines
7.1 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.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
测试Cloudflare网关的Gemini API
使用用户提供的新配置
"""
import requests
import json
import logging
# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
def test_cloudflare_gemini():
"""测试Cloudflare网关的Gemini API"""
# 用户提供的新配置
API_KEY = "AIzaSyAQ2TXFAzmTKm4aFqgrjkhjgsp95bDsAyE"
BASE_URL = "https://gateway.ai.cloudflare.com/v1/e167cb36a5b95cb3cc8daf77a3f7d0b3/default/google-ai-studio"
MODEL = "models/gemini-2.5-pro"
logger.info(f"🧪 测试Cloudflare Gemini配置:")
logger.info(f"📡 BASE_URL: {BASE_URL}")
logger.info(f"🔑 API_KEY: {API_KEY[:10]}...")
logger.info(f"🤖 MODEL: {MODEL}")
# 构建请求
url = f"{BASE_URL}/v1beta/{MODEL}:generateContent"
headers = {
"Content-Type": "application/json",
"x-goog-api-key": API_KEY
}
payload = {
"contents": [
{
"parts": [
{
"text": "你好,请简单介绍一下你自己"
}
]
}
],
"generationConfig": {
"maxOutputTokens": 1000,
"temperature": 0.7
}
}
try:
logger.info("🚀 发送请求到Cloudflare网关...")
logger.info(f"📍 请求URL: {url}")
response = requests.post(
url,
json=payload,
headers=headers,
timeout=60
)
logger.info(f"📊 状态码: {response.status_code}")
if response.status_code == 200:
result = response.json()
logger.info(f"✅ 请求成功!")
logger.info(f"📋 完整响应: {json.dumps(result, ensure_ascii=False, indent=2)}")
# 提取内容
if 'candidates' in result and len(result['candidates']) > 0:
candidate = result['candidates'][0]
if 'content' in candidate and 'parts' in candidate['content']:
content = candidate['content']['parts'][0].get('text', '')
logger.info(f"🗣️ Gemini回应: {content}")
return True, content
return True, "响应格式异常"
else:
logger.error(f"❌ 请求失败: {response.status_code}")
logger.error(f"📋 错误响应: {response.text}")
return False, response.text
except requests.exceptions.Timeout:
logger.error(f"⏰ 请求超时 (60秒)")
return False, "请求超时"
except requests.exceptions.ConnectionError as e:
logger.error(f"🔌 连接错误: {e}")
return False, str(e)
except Exception as e:
logger.error(f"💥 未知错误: {e}")
return False, str(e)
def test_gemini_breakdown():
"""测试Gemini的问题分解能力"""
API_KEY = "AIzaSyAQ2TXFAzmTKm4aFqgrjkhjgsp95bDsAyE"
BASE_URL = "https://gateway.ai.cloudflare.com/v1/e167cb36a5b95cb3cc8daf77a3f7d0b3/default/google-ai-studio"
MODEL = "models/gemini-2.5-pro"
url = f"{BASE_URL}/v1beta/{MODEL}:generateContent"
headers = {
"Content-Type": "application/json",
"x-goog-api-key": API_KEY
}
topic = "工作量证明vs无限制爬虫从李时珍采药到AI数据获取的激励机制变革"
payload = {
"contents": [
{
"parts": [
{
"text": f"你是太上老君负责将复杂问题分解为多个子问题。请将以下问题分解为3-5个子问题以JSON格式返回\n\n{topic}\n\n返回格式:{{\"subtopics\": [{{\"title\": \"子问题标题\", \"description\": \"详细描述\"}}]}}"
}
]
}
],
"generationConfig": {
"maxOutputTokens": 2000,
"temperature": 0.7
}
}
try:
logger.info("🧠 测试Gemini问题分解能力...")
response = requests.post(
url,
json=payload,
headers=headers,
timeout=60
)
logger.info(f"📊 状态码: {response.status_code}")
if response.status_code == 200:
result = response.json()
logger.info(f"✅ 分解测试成功!")
# 提取内容
if 'candidates' in result and len(result['candidates']) > 0:
candidate = result['candidates'][0]
if 'content' in candidate and 'parts' in candidate['content']:
content = candidate['content']['parts'][0].get('text', '')
logger.info(f"📋 分解结果:\n{content}")
# 尝试解析JSON
try:
# 提取JSON部分
if '```json' in content:
json_start = content.find('```json') + 7
json_end = content.find('```', json_start)
json_content = content[json_start:json_end].strip()
elif '{' in content and '}' in content:
json_start = content.find('{')
json_end = content.rfind('}') + 1
json_content = content[json_start:json_end]
else:
json_content = content
parsed_json = json.loads(json_content)
logger.info(f"🎯 JSON解析成功: {json.dumps(parsed_json, ensure_ascii=False, indent=2)}")
return True, parsed_json
except json.JSONDecodeError as e:
logger.warning(f"⚠️ JSON解析失败: {e}")
logger.warning(f"📝 原始内容: {content}")
return True, content
return True, "响应格式异常"
else:
logger.error(f"❌ 分解测试失败: {response.status_code}")
logger.error(f"📋 错误响应: {response.text}")
return False, response.text
except Exception as e:
logger.error(f"💥 分解测试错误: {e}")
return False, str(e)
if __name__ == "__main__":
logger.info("🎯 开始Cloudflare Gemini API测试")
# 基础连接测试
success1, result1 = test_cloudflare_gemini()
if success1:
logger.info("🎉 基础测试通过!")
# 问题分解测试
success2, result2 = test_gemini_breakdown()
if success2:
logger.info("🎉 所有测试通过Gemini API工作正常")
logger.info("✅ 可以安全运行完整的循环赛系统")
else:
logger.error("💀 问题分解测试失败")
else:
logger.error("💀 基础连接测试失败")
logger.info("🏁 测试完成")