基于OpenAI与DashScope的AI知识面试模拟系统实现
基于OpenAI与DashScope的AI知识面试模拟系统实现
任务介绍
实现一个基于大语言模型的AI面试模拟程序,用户可通过命令行与AI面试官进行多轮对话,测试对AI相关知识的掌握程度。系统需支持问题生成、回答评价及连续对话能力。
任务背景
在AI技术学习中,缺乏结构化反馈是常见痛点。传统面试模拟需人力参与,而基于API的自动化工具能提供低成本、可定制的练习环境。本例使用阿里云DashScope平台的QWen-Turbo模型,通过Chat Completion接口实现动态交互。
代码思路
-
初始化配置
- 通过环境变量管理API密钥,增强安全性
- 设置
base_url适配阿里云兼容模式端点
-
对话管理
- 采用
messages列表维护对话上下文 - 系统消息初始化面试角色设定
- 采用
-
异常处理
- 对API响应进行多层有效性校验
- 网络错误时提供明确修复指引
-
交互循环
- 用户输入触发模型的新问题生成
- 退出指令
quit终止会话
解决思路
-
上下文保持
每次交互后更新messages列表,包含用户回答和AI问题,实现多轮对话记忆 -
健壮性设计
- 检查
response.choices[0].message.content存在性 - 捕获
Exception并输出可操作的错误信息
- 检查
-
接口兼容性
使用OpenAI SDK格式调用阿里云服务,降低迁移成本
实现代码
from openai import OpenAI
import os# 初始化客户端
api_key = os.getenv('OPENAI_API_KEY', 'TripleH')
if not api_key:raise ValueError("请设置环境变量 OPENAI_API_KEY")client = OpenAI(api_key=api_key, base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",)# 设置系统角色
prompt_for_roleplay = "我需要你面试我有关AI的知识,仅提出问题"
messages = [{'role': 'system', 'content': prompt_for_roleplay}]# 首轮问题生成
try:response = client.chat.completions.create(model="qwen-turbo",messages=messages)if response and response.choices and len(response.choices) > 0:first_question = response.choices[0].message.contentif first_question:messages.append({'role': 'assistant', 'content': first_question})print(f'面试官:{first_question}')print('\n')
except Exception as e:print(f"发生错误:{str(e)}")print("请检查API密钥是否正确,网络连接是否正常\n")# 多轮对话循环
while True:try:user_input = input("请输入你的回答(输入 'quit' 退出):")if user_input.lower() == 'quit':print("面试结束,再见!")breakmessages.append({'role': 'user', 'content': user_input})response = client.chat.completions.create(model="qwen-turbo",messages=messages)if not response or not response.choices or len(response.choices) == 0:print("错误:模型返回了空响应")continueassistant_output = response.choices[0].message.contentif assistant_output is None:print("错误:模型返回的内容为空")continuemessages.append({'role': 'assistant', 'content': assistant_output})print(f'面试官:{assistant_output}')print('\n')except Exception as e:print(f"发生错误:{str(e)}")print("请检查API密钥是否正确,网络连接是否正常\n")
