更新README.md并添加测试文件
This commit is contained in:
parent
6b7e396bb1
commit
81c4b86842
@ -164,7 +164,7 @@ MIT License
|
||||
####
|
||||
|姓名|学号|主要贡献 (具体分工)|
|
||||
|----|----|------------------|
|
||||
|陆程杰|2411020124|(组长) 核心逻辑开发、Prompt 编写|
|
||||
|陆程杰|2411020124|核心逻辑开发、Prompt 编写|
|
||||
|蒲俊霖|2411020125| 文档撰写、测试与 Bug 修复|
|
||||
|陈一佳|2411020121| 前端界面设计、PPT 制作|
|
||||
#### AI面试官项目开发心得
|
||||
|
||||
60
test_api.py
Normal file
60
test_api.py
Normal file
@ -0,0 +1,60 @@
|
||||
import logging
|
||||
from services.deepseek_service import deepseek_service
|
||||
|
||||
# 设置日志
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
def test_feedback_generation():
|
||||
logger.info("开始测试反馈生成功能")
|
||||
|
||||
# 准备测试数据
|
||||
conversation_history = [
|
||||
{"role": "assistant", "content": "你好!我是面试官,现在开始针对前端开发岗位的面试。请做一下自我介绍。"},
|
||||
{"role": "user", "content": "你好,我叫张三,有3年前端开发经验,熟悉React、Vue等框架。"},
|
||||
{"role": "assistant", "content": "请介绍一下你最印象深刻的项目。"},
|
||||
{"role": "user", "content": "我在之前的公司负责开发了一个电商网站,使用React框架,优化了页面加载速度,提升了用户体验。"}
|
||||
]
|
||||
|
||||
system_prompt = """作为一位专业的面试评估专家,请对整场面试进行全面评估。
|
||||
|
||||
请提供:
|
||||
1. 整体表现评分(0-100分)和评级(优秀/良好/一般/需改进)
|
||||
2. 各轮回答的详细分析(针对每个问题和回答给出具体评价)
|
||||
3. strengths(优势)- 列出至少3点
|
||||
4. areas_for_improvement(需要改进的方面)- 列出至少3点
|
||||
5. 具体的准备建议(针对改进点给出可操作的建议)
|
||||
|
||||
请用中文回复,格式清晰、结构化,避免过于笼统的描述。"""
|
||||
|
||||
user_prompt = f"请分析以下针对前端开发岗位的面试对话并给出综合反馈:\n\n" + "\n\n".join([
|
||||
f"{'面试官' if msg['role'] == 'assistant' else '候选人'}:{msg['content']}"
|
||||
for msg in conversation_history
|
||||
])
|
||||
|
||||
messages = [
|
||||
{"role": "system", "content": system_prompt},
|
||||
{"role": "user", "content": user_prompt}
|
||||
]
|
||||
|
||||
try:
|
||||
logger.info("准备调用DeepSeek API")
|
||||
response = deepseek_service._call_api(messages)
|
||||
logger.info("API调用成功")
|
||||
logger.debug(f"API响应:{response}")
|
||||
|
||||
feedback = response["choices"][0]["message"]["content"]
|
||||
logger.info("生成的反馈内容:")
|
||||
logger.info(feedback)
|
||||
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.error(f"API调用失败:{str(e)}", exc_info=True)
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
success = test_feedback_generation()
|
||||
if success:
|
||||
logger.info("测试成功")
|
||||
else:
|
||||
logger.info("测试失败")
|
||||
68
test_feedback_feature.py
Normal file
68
test_feedback_feature.py
Normal file
@ -0,0 +1,68 @@
|
||||
import requests
|
||||
import json
|
||||
|
||||
# 测试服务器地址
|
||||
BASE_URL = "http://127.0.0.1:5000"
|
||||
|
||||
def test_feedback_feature():
|
||||
print("=== 测试请求反馈功能 ===")
|
||||
|
||||
# 1. 开始面试
|
||||
print("\n1. 开始面试...")
|
||||
start_data = {
|
||||
"job_position": "前端开发工程师",
|
||||
"difficulty": "intermediate"
|
||||
}
|
||||
|
||||
start_response = requests.post(f"{BASE_URL}/api/interview/start", json=start_data)
|
||||
if start_response.status_code != 200:
|
||||
print(f"开始面试失败:{start_response.json().get('error')}")
|
||||
return False
|
||||
|
||||
start_result = start_response.json()
|
||||
interview_id = start_result.get("interview_id")
|
||||
first_question = start_result.get("question")
|
||||
|
||||
print(f"面试ID: {interview_id}")
|
||||
print(f"第一个问题: {first_question}")
|
||||
|
||||
# 2. 回答问题并请求反馈
|
||||
print("\n2. 回答问题并请求反馈...")
|
||||
answer_data = {
|
||||
"interview_id": interview_id,
|
||||
"answer": "我有3年的前端开发经验,主要使用React框架,熟悉JavaScript、HTML、CSS等技术。",
|
||||
"request_feedback": True
|
||||
}
|
||||
print(f"发送的请求数据:{json.dumps(answer_data)}")
|
||||
|
||||
answer_response = requests.post(f"{BASE_URL}/api/interview/answer", json=answer_data)
|
||||
if answer_response.status_code != 200:
|
||||
print(f"提交回答失败:{answer_response.json().get('error')}")
|
||||
return False
|
||||
|
||||
answer_result = answer_response.json()
|
||||
|
||||
print(f"反馈请求成功")
|
||||
print(f"是否结束: {answer_result.get('ended')}")
|
||||
|
||||
if answer_result.get('feedback'):
|
||||
print(f"\n3. 收到反馈:")
|
||||
print(answer_result['feedback'])
|
||||
|
||||
# 验证反馈是否包含改进建议
|
||||
if '改进建议' in answer_result['feedback'] or '建议' in answer_result['feedback']:
|
||||
print("\n✅ 反馈中包含改进建议")
|
||||
else:
|
||||
print("\n❌ 反馈中未包含明确的改进建议")
|
||||
|
||||
return True
|
||||
else:
|
||||
print(f"\n❌ 未收到反馈")
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
success = test_feedback_feature()
|
||||
if success:
|
||||
print("\n=== 测试通过!请求反馈功能正常工作 ===")
|
||||
else:
|
||||
print("\n=== 测试失败!请求反馈功能存在问题 ===")
|
||||
103
test_interview_flow.py
Normal file
103
test_interview_flow.py
Normal file
@ -0,0 +1,103 @@
|
||||
#!/usr/bin/env python3
|
||||
import requests
|
||||
import json
|
||||
import time
|
||||
|
||||
base_url = "http://127.0.0.1:5000"
|
||||
|
||||
def test_interview_flow():
|
||||
print("=== 测试面试完整流程 ===")
|
||||
|
||||
# 1. 开始面试
|
||||
print("\n1. 开始面试...")
|
||||
start_response = requests.post(
|
||||
f"{base_url}/api/interview/start",
|
||||
headers={"Content-Type": "application/json"},
|
||||
json={"job_position": "前端开发工程师", "difficulty": "medium"}
|
||||
)
|
||||
|
||||
if start_response.status_code != 200:
|
||||
print(f"开始面试失败: {start_response.status_code}")
|
||||
print(start_response.text)
|
||||
return False
|
||||
|
||||
start_data = start_response.json()
|
||||
interview_id = start_data.get("interview_id")
|
||||
print(f"面试ID: {interview_id}")
|
||||
print(f"第一个问题: {start_data.get('question')}")
|
||||
|
||||
# 2. 回答第一个问题
|
||||
print("\n2. 回答第一个问题...")
|
||||
answer1 = "我有3年前端开发经验,熟悉React和Vue框架。"
|
||||
answer1_response = requests.post(
|
||||
f"{base_url}/api/interview/answer",
|
||||
headers={"Content-Type": "application/json"},
|
||||
json={"interview_id": interview_id, "answer": answer1, "request_feedback": False}
|
||||
)
|
||||
|
||||
if answer1_response.status_code != 200:
|
||||
print(f"回答问题失败: {answer1_response.status_code}")
|
||||
print(answer1_response.text)
|
||||
return False
|
||||
|
||||
answer1_data = answer1_response.json()
|
||||
print(f"第二个问题: {answer1_data.get('question')}")
|
||||
|
||||
# 3. 回答第二个问题
|
||||
print("\n3. 回答第二个问题...")
|
||||
answer2 = "我在项目中使用过React Hooks,特别是useState、useEffect和useContext,能够有效管理组件状态和副作用。"
|
||||
answer2_response = requests.post(
|
||||
f"{base_url}/api/interview/answer",
|
||||
headers={"Content-Type": "application/json"},
|
||||
json={"interview_id": interview_id, "answer": answer2, "request_feedback": False}
|
||||
)
|
||||
|
||||
if answer2_response.status_code != 200:
|
||||
print(f"回答问题失败: {answer2_response.status_code}")
|
||||
print(answer2_response.text)
|
||||
return False
|
||||
|
||||
answer2_data = answer2_response.json()
|
||||
|
||||
if answer2_data.get('ended'):
|
||||
print("面试结束")
|
||||
else:
|
||||
print(f"第三个问题: {answer2_data.get('question')}")
|
||||
|
||||
# 4. 生成面试反馈
|
||||
print("\n4. 生成面试反馈...")
|
||||
|
||||
# 构造对话历史
|
||||
conversation_history = [
|
||||
{"role": "assistant", "content": start_data.get('question')},
|
||||
{"role": "user", "content": answer1},
|
||||
{"role": "assistant", "content": answer1_data.get('question')},
|
||||
{"role": "user", "content": answer2}
|
||||
]
|
||||
|
||||
if not answer2_data.get('ended') and answer2_data.get('question'):
|
||||
conversation_history.append({"role": "assistant", "content": answer2_data.get('question')})
|
||||
|
||||
feedback_response = requests.post(
|
||||
f"{base_url}/api/interview/feedback",
|
||||
headers={"Content-Type": "application/json"},
|
||||
json={"interview_id": interview_id, "conversation_history": conversation_history}
|
||||
)
|
||||
|
||||
if feedback_response.status_code != 200:
|
||||
print(f"生成反馈失败: {feedback_response.status_code}")
|
||||
print(feedback_response.text)
|
||||
return False
|
||||
|
||||
feedback_data = feedback_response.json()
|
||||
print("\n=== 面试反馈 ===")
|
||||
print(feedback_data.get('feedback', ''))
|
||||
|
||||
return True
|
||||
|
||||
if __name__ == "__main__":
|
||||
success = test_interview_flow()
|
||||
if success:
|
||||
print("\n=== 测试成功!完整的面试流程正常工作 ===")
|
||||
else:
|
||||
print("\n=== 测试失败!请检查相关代码 ===")
|
||||
Loading…
Reference in New Issue
Block a user