|
|
|
|
|
""" |
|
|
Test OpenAI integration |
|
|
""" |
|
|
|
|
|
import os |
|
|
import json |
|
|
from openai import OpenAI |
|
|
|
|
|
|
|
|
def test_openai_connection(): |
|
|
"""Test basic OpenAI connection""" |
|
|
api_key = os.getenv("OPENAI_API_KEY") |
|
|
base_url = os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1") |
|
|
|
|
|
if not api_key: |
|
|
print("❌ 请先设置 OPENAI_API_KEY 环境变量") |
|
|
print(" export OPENAI_API_KEY=your_api_key_here") |
|
|
return False |
|
|
|
|
|
try: |
|
|
client = OpenAI( |
|
|
api_key=api_key, |
|
|
base_url=base_url |
|
|
) |
|
|
|
|
|
print(f"🔗 连接到: {base_url}") |
|
|
print(f"🔑 API Key: {api_key[:4]}...{api_key[-4:]}") |
|
|
|
|
|
|
|
|
response = client.chat.completions.create( |
|
|
model=os.getenv("OPENAI_MODEL", "gpt-4o-mini"), |
|
|
messages=[ |
|
|
{"role": "user", "content": "Hello! Please respond with just 'OK' to confirm the connection."} |
|
|
], |
|
|
max_tokens=10, |
|
|
temperature=0 |
|
|
) |
|
|
|
|
|
result = response.choices[0].message.content.strip() |
|
|
print(f"✅ 连接成功! 响应: {result}") |
|
|
|
|
|
return True |
|
|
|
|
|
except Exception as e: |
|
|
print(f"❌ 连接失败: {e}") |
|
|
return False |
|
|
|
|
|
|
|
|
def test_scoring_function(): |
|
|
"""Test the scoring functionality similar to what's used in app.py""" |
|
|
api_key = os.getenv("OPENAI_API_KEY") |
|
|
|
|
|
if not api_key: |
|
|
print("❌ 请先设置 OPENAI_API_KEY 环境变量") |
|
|
return False |
|
|
|
|
|
try: |
|
|
client = OpenAI( |
|
|
api_key=api_key, |
|
|
base_url=os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1") |
|
|
) |
|
|
|
|
|
|
|
|
test_challenges = [ |
|
|
{ |
|
|
"id": "test1", |
|
|
"title": "Build a Python Web API", |
|
|
"prize": 500.0, |
|
|
"deadline": "2025-02-15", |
|
|
"tags": ["python", "api", "web"], |
|
|
"description": "Create a REST API using Python and FastAPI framework" |
|
|
}, |
|
|
{ |
|
|
"id": "test2", |
|
|
"title": "React Frontend Development", |
|
|
"prize": 300.0, |
|
|
"deadline": "2025-02-20", |
|
|
"tags": ["react", "frontend", "javascript"], |
|
|
"description": "Build a modern React application with responsive design" |
|
|
} |
|
|
] |
|
|
|
|
|
scoring_prompt = ( |
|
|
"You are an expert Topcoder challenge analyst. Analyze items and rate match to the query.\n" |
|
|
f"Query: python web development\n" |
|
|
"Items: " + json.dumps(test_challenges) + "\n\n" |
|
|
"Instructions:\n" |
|
|
"- Consider skills, tags, and brief description.\n" |
|
|
"- Higher prize is slightly better all else equal.\n" |
|
|
"- Return ONLY JSON array of objects: [{id, score, reason}] where 0<=score<=1.\n" |
|
|
"- Do not include any extra text." |
|
|
) |
|
|
|
|
|
print("🧪 测试智能评分功能...") |
|
|
|
|
|
response = client.chat.completions.create( |
|
|
model=os.getenv("OPENAI_MODEL", "gpt-4o-mini"), |
|
|
messages=[ |
|
|
{"role": "system", "content": "You are a helpful assistant. Return JSON only."}, |
|
|
{"role": "user", "content": scoring_prompt} |
|
|
], |
|
|
temperature=0.2, |
|
|
timeout=30 |
|
|
) |
|
|
|
|
|
result = response.choices[0].message.content.strip() |
|
|
print(f"📊 评分结果: {result}") |
|
|
|
|
|
|
|
|
try: |
|
|
scores = json.loads(result) |
|
|
print("✅ JSON解析成功!") |
|
|
for item in scores: |
|
|
print(f" - {item.get('id')}: 分数={item.get('score')}, 原因={item.get('reason')}") |
|
|
return True |
|
|
except json.JSONDecodeError as e: |
|
|
print(f"❌ JSON解析失败: {e}") |
|
|
return False |
|
|
|
|
|
except Exception as e: |
|
|
print(f"❌ 评分测试失败: {e}") |
|
|
return False |
|
|
|
|
|
|
|
|
def test_planning_function(): |
|
|
"""Test the planning functionality""" |
|
|
api_key = os.getenv("OPENAI_API_KEY") |
|
|
|
|
|
if not api_key: |
|
|
print("❌ 请先设置 OPENAI_API_KEY 环境变量") |
|
|
return False |
|
|
|
|
|
try: |
|
|
client = OpenAI( |
|
|
api_key=api_key, |
|
|
base_url=os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1") |
|
|
) |
|
|
|
|
|
|
|
|
test_challenges = [ |
|
|
{ |
|
|
"title": "Build a Python Web API", |
|
|
"prize": 500.0, |
|
|
"deadline": "2025-02-15", |
|
|
"tags": ["python", "api", "web"] |
|
|
} |
|
|
] |
|
|
|
|
|
prompt = ( |
|
|
"You are a concise challenge scout. Given compact challenge metadata, output:\n" |
|
|
"- Top 3 picks (title + brief reason)\n" |
|
|
"- Quick plan of action (3 bullets)\n" |
|
|
f"Constraints: keyword='python', min_prize>=100, within 30 days.\n" |
|
|
f"Data: {json.dumps(test_challenges)}" |
|
|
) |
|
|
|
|
|
print("📋 测试计划生成功能...") |
|
|
|
|
|
response = client.chat.completions.create( |
|
|
model=os.getenv("OPENAI_MODEL", "gpt-4o-mini"), |
|
|
messages=[ |
|
|
{"role": "system", "content": "You are a helpful, terse assistant."}, |
|
|
{"role": "user", "content": prompt} |
|
|
], |
|
|
temperature=0.3, |
|
|
timeout=30 |
|
|
) |
|
|
|
|
|
result = response.choices[0].message.content.strip() |
|
|
print(f"📝 计划结果:\n{result}") |
|
|
print("✅ 计划生成成功!") |
|
|
|
|
|
return True |
|
|
|
|
|
except Exception as e: |
|
|
print(f"❌ 计划测试失败: {e}") |
|
|
return False |
|
|
|
|
|
|
|
|
def main(): |
|
|
print("🤖 OpenAI API 集成测试") |
|
|
print("=" * 40) |
|
|
|
|
|
|
|
|
if not test_openai_connection(): |
|
|
print("\n❌ 基本连接测试失败,请检查配置") |
|
|
return |
|
|
|
|
|
print("\n" + "-" * 40) |
|
|
|
|
|
|
|
|
if not test_scoring_function(): |
|
|
print("❌ 评分功能测试失败") |
|
|
return |
|
|
|
|
|
print("\n" + "-" * 40) |
|
|
|
|
|
|
|
|
if not test_planning_function(): |
|
|
print("❌ 计划功能测试失败") |
|
|
return |
|
|
|
|
|
print("\n" + "=" * 40) |
|
|
print("🎉 所有测试通过! OpenAI集成工作正常") |
|
|
print("现在可以运行主应用: python app.py") |
|
|
print("=" * 40) |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
main() |
|
|
|