更新README.md并添加测试文件

This commit is contained in:
陆程杰 2026-01-08 22:23:16 +08:00
parent 6b7e396bb1
commit 81c4b86842
4 changed files with 232 additions and 1 deletions

View File

@ -164,7 +164,7 @@ MIT License
####
|姓名|学号|主要贡献 (具体分工)|
|----|----|------------------|
|陆程杰|2411020124|(组长) 核心逻辑开发、Prompt 编写|
|陆程杰|2411020124|核心逻辑开发、Prompt 编写|
|蒲俊霖|2411020125| 文档撰写、测试与 Bug 修复|
|陈一佳|2411020121| 前端界面设计、PPT 制作|
#### AI面试官项目开发心得

60
test_api.py Normal file
View 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
View 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
View 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=== 测试失败!请检查相关代码 ===")