| |
| """ |
| 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() |
|
|