基于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")
相关推荐
风象南5 小时前
普通人用AI加持赚到的第一个100块
人工智能·后端
牛奶6 小时前
2026年大模型怎么选?前端人实用对比
前端·人工智能·ai编程
牛奶6 小时前
前端人为什么要学AI?
前端·人工智能·ai编程
罗西的思考9 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
冬奇Lab9 小时前
OpenClaw 源码精读(2):Channel & Routing——一条消息如何找到它的 Agent?
人工智能·开源·源码阅读
冬奇Lab9 小时前
一天一个开源项目(第38篇):Claude Code Telegram - 用 Telegram 远程用 Claude Code,随时随地聊项目
人工智能·开源·资讯
格砸11 小时前
从入门到辞职|从ChatGPT到OpenClaw,跟上智能时代的进化
前端·人工智能·后端
可观测性用观测云11 小时前
可观测性 4.0:教系统如何思考
人工智能
sunny86511 小时前
Claude Code 跨会话上下文恢复:从 8 次纠正到 0 次的工程实践
人工智能·开源·github
小笼包包仔11 小时前
OpenClaw 多Agent软件开发最佳实践指南
人工智能