基于OpenAI与DashScope的AI知识面试模拟系统实现

基于OpenAI与DashScope的AI知识面试模拟系统实现

任务介绍

实现一个基于大语言模型的AI面试模拟程序,用户可通过命令行与AI面试官进行多轮对话,测试对AI相关知识的掌握程度。系统需支持问题生成、回答评价及连续对话能力。

任务背景

在AI技术学习中,缺乏结构化反馈是常见痛点。传统面试模拟需人力参与,而基于API的自动化工具能提供低成本、可定制的练习环境。本例使用阿里云DashScope平台的QWen-Turbo模型,通过Chat Completion接口实现动态交互。

代码思路

  1. 初始化配置

    • 通过环境变量管理API密钥,增强安全性
    • 设置base_url适配阿里云兼容模式端点
  2. 对话管理

    • 采用messages列表维护对话上下文
    • 系统消息初始化面试角色设定
  3. 异常处理

    • 对API响应进行多层有效性校验
    • 网络错误时提供明确修复指引
  4. 交互循环

    • 用户输入触发模型的新问题生成
    • 退出指令quit终止会话

解决思路

  1. 上下文保持

    每次交互后更新messages列表,包含用户回答和AI问题,实现多轮对话记忆

  2. 健壮性设计

    • 检查response.choices[0].message.content存在性
    • 捕获Exception并输出可操作的错误信息
  3. 接口兼容性

    使用OpenAI SDK格式调用阿里云服务,降低迁移成本

实现代码

python 复制代码
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.content
        if 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("面试结束,再见!")
            break
        
        messages.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("错误:模型返回了空响应")
            continue
            
        assistant_output = response.choices[0].message.content
        
        if assistant_output is None:
            print("错误:模型返回的内容为空")
            continue
        
        messages.append({'role': 'assistant', 'content': assistant_output})
        
        print(f'面试官:{assistant_output}')
        print('\n')
        
    except Exception as e:
        print(f"发生错误:{str(e)}")
        print("请检查API密钥是否正确,网络连接是否正常\n")
相关推荐
东方佑1 天前
波动力学语言模型(Wave Dynamics Language Model, WDLM)
人工智能·语言模型·自然语言处理
John_ToDebug1 天前
CLAUDE.md 与 Skills 的区别:一张表彻底分清
人工智能·经验分享·ai
程序员cxuan1 天前
我花了两天时间,终于把 Codex 额度掉太快的问题整明白了!!
人工智能·后端·程序员
IT_陈寒1 天前
Vue这个动态响应坑把我整不会了
前端·人工智能·后端
feasibility.1 天前
ROS2+Gazebo+VLM服务:纯仿真环境下的具身智能闭环系统| 大脑-小脑分离控制
人工智能·机器人·ros·仿真·具身智能·vla·vlm
lqqjuly1 天前
自动驾驶仿真平台:理论、架构与实践
人工智能·机器学习·自动驾驶
“码”力全开1 天前
解耦异构算力与多协议接入:基于Docker与源码交付的开源企业级GB28181/RTSP边缘计算AI视频管理平台架构深度解析
人工智能·docker·开源
J2虾虾1 天前
Spring AI Alibaba文档
java·人工智能·spring
Mr数据杨1 天前
【CanMV K210】传感器实验 U 型光电传感器遮挡检测与 LED 提示
人工智能·硬件开发·canmv k210
向量引擎1 天前
当搜索开始替人整理答案:我重新理解了向量检索和 API 中间层
人工智能·gpt·aigc·ai编程·ai写作·key·agi