省级住房城乡建设主管部门网站平邑网站建设
2026/1/2 1:59:46 网站建设 项目流程
省级住房城乡建设主管部门网站,平邑网站建设,asp网站安装到空间,中山网站建设收费标准我将为您创建一个AI面试助手程序#xff0c;帮助应届生备战职场面试。这个程序将结合自然语言处理和模板生成技术。项目结构ai_interview_assistant/├── main.py├── interview_assistant.py├── question_generator.py├── template_manager.py├── r…我将为您创建一个AI面试助手程序帮助应届生备战职场面试。这个程序将结合自然语言处理和模板生成技术。项目结构ai_interview_assistant/├── main.py├── interview_assistant.py├── question_generator.py├── template_manager.py├── response_evaluator.py├── utils.py├── config.py├── data/│ ├── questions.json│ ├── templates.json│ └── examples.json└── README.md1. 配置文件 (config.py)# -*- coding: utf-8 -*-面试助手配置文件包含程序运行的各种配置参数import os# 基础配置BASE_DIR os.path.dirname(os.path.abspath(__file__))DATA_DIR os.path.join(BASE_DIR, data)# 文件路径配置QUESTIONS_FILE os.path.join(DATA_DIR, questions.json)TEMPLATES_FILE os.path.join(DATA_DIR, templates.json)EXAMPLES_FILE os.path.join(DATA_DIR, examples.json)# AI模型配置简化版实际项目中可接入真实AI APIAI_CONFIG {model_type: template_based, # 基于模板的生成方式max_response_length: 500,temperature: 0.7,top_k: 50,language: zh-CN}# 面试类别配置INTERVIEW_CATEGORIES {technical: 技术面试,hr: 人力资源面试,behavioral: 行为面试,case: 案例面试,general: 综合面试}# 模板配置TEMPLATE_STYLES {STAR: 情境(Situation)、任务(Task)、行动(Action)、结果(Result),PREP: 观点(Point)、理由(Reason)、例子(Example)、观点重申(Point),CAR: 情况(Context)、行动(Action)、结果(Result),SOFT: 软技能回答模板}# 评分标准EVALUATION_CRITERIA {content_quality: 0.3, # 内容质量structure: 0.25, # 结构完整性relevance: 0.25, # 相关性professionalism: 0.2 # 专业度}2. 工具函数 (utils.py)# -*- coding: utf-8 -*-工具函数模块提供各种辅助功能import jsonimport reimport randomfrom datetime import datetimefrom typing import List, Dict, Any, Optionaldef load_json_file(file_path: str) - Dict[str, Any]:加载JSON文件Args:file_path: JSON文件路径Returns:解析后的字典数据try:with open(file_path, r, encodingutf-8) as f:return json.load(f)except FileNotFoundError:print(f警告: 文件 {file_path} 未找到)return {}except json.JSONDecodeError:print(f错误: 文件 {file_path} 格式不正确)return {}def save_json_file(data: Dict[str, Any], file_path: str) - bool:保存数据到JSON文件Args:data: 要保存的数据file_path: 保存路径Returns:保存是否成功try:# 确保目录存在os.makedirs(os.path.dirname(file_path), exist_okTrue)with open(file_path, w, encodingutf-8) as f:json.dump(data, f, ensure_asciiFalse, indent2)return Trueexcept Exception as e:print(f保存文件失败: {e})return Falsedef clean_text(text: str) - str:清理文本去除多余空格和特殊字符Args:text: 原始文本Returns:清理后的文本if not text:return # 去除多余空格text re.sub(r\s, , text.strip())# 去除特殊字符保留中文、英文、数字和基本标点text re.sub(r[^\u4e00-\u9fa5a-zA-Z0-9\s.,!?;:。], , text)return textdef extract_keywords(text: str, top_k: int 5) - List[str]:提取关键词简化版实现Args:text: 输入文本top_k: 返回关键词数量Returns:关键词列表# 简单的词频统计words re.findall(r[\u4e00-\u9fa5a-zA-Z]{2,}, text.lower())# 过滤停用词简化版stop_words {的, 了, 在, 是, 我, 有, 和, 就, 不, 人, 都, 一, 一个, 上, 也, 很, 到, 说, 要, 去, 你, 会, 着, 没有, 看, 好, 自己, 这}word_freq {}for word in words:if word not in stop_words and len(word) 1:word_freq[word] word_freq.get(word, 0) 1# 按频率排序并返回前k个sorted_words sorted(word_freq.items(), keylambda x: x[1], reverseTrue)return [word for word, freq in sorted_words[:top_k]]def generate_timestamp() - str:生成时间戳字符串return datetime.now().strftime(%Y%m%d_%H%M%S)def validate_email(email: str) - bool:验证邮箱格式pattern r^[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,}$return re.match(pattern, email) is not Nonedef validate_phone(phone: str) - bool:验证手机号格式中国pattern r^1[3-9]\d{9}$return re.match(pattern, phone) is not None3. 问题生成器 (question_generator.py)# -*- coding: utf-8 -*-面试问题生成器负责生成和管理各类面试问题import randomimport jsonfrom typing import List, Dict, Anyfrom .utils import load_json_file, clean_text, extract_keywordsclass QuestionGenerator:def __init__(self, questions_file: str data/questions.json):初始化问题生成器Args:questions_file: 问题数据文件路径self.questions_data load_json_file(questions_file)self.current_category generaldef get_questions_by_category(self, category: str, limit: int 10) - List[Dict[str, Any]]:根据类别获取面试问题Args:category: 问题类别limit: 返回问题数量Returns:问题列表if category not in self.questions_data:category generalquestions self.questions_data.get(category, [])if limit 0 and len(questions) limit:return random.sample(questions, limit)return questionsdef search_questions(self, keyword: str, category: str all) - List[Dict[str, Any]]:根据关键词搜索问题Args:keyword: 搜索关键词category: 问题类别all表示所有类别Returns:匹配的问题列表results []search_term keyword.lower()categories_to_search [category] if category ! all else self.questions_data.keys()for cat in categories_to_search:if cat not in self.questions_data:continuefor question in self.questions_data[cat]:question_text question.get(question, ).lower()if search_term in question_text or search_term in question.get(keywords, []):results.append({**question,category: cat})return resultsdef generate_custom_question(self, job_position: str, company_type: str tech) - Dict[str, Any]:根据职位和公司类型生成定制问题Args:job_position: 职位名称company_type: 公司类型Returns:生成的问题templates [f请谈谈你对{job_position}这个职位的理解以及为什么认为自己适合这个岗位,f在{company_type}公司工作你认为最重要的能力是什么,f描述一次你在学习或实践中解决{job_position}相关问题的经历。,f如果让你设计一个{job_position}的工作流程你会如何规划,f你认为{job_position}在未来3-5年内会有什么发展趋势]question_text random.choice(templates)keywords extract_keywords(question_text)return {question: question_text,category: custom,difficulty: medium,keywords: keywords,type: open_ended,generated_at: self._get_current_time()}def get_interview_scenario(self, scenario_type: str full_interview) - List[Dict[str, Any]]:获取完整面试场景的问题组合Args:scenario_type: 面试场景类型Returns:面试问题序列scenarios {full_interview: [{category: hr, count: 3},{category: technical, count: 4},{category: behavioral, count: 3}],technical_focus: [{category: technical, count: 6},{category: behavioral, count: 2}],entry_level: [{category: hr, count: 4},{category: behavioral, count: 4},{category: general, count: 2}]}if scenario_type not in scenarios:scenario_type full_interviewselected_scenario scenarios[scenario_type]interview_questions []for item in selected_scenario:category item[category]count item[count]questions self.get_questions_by_category(category, count)for q in questions:q[scenario] scenario_typeinterview_questions.append(q)return interview_questionsdef analyze_question_difficulty(self, question: str) - str:分析问题难度简化版Args:question: 问题文本Returns:难度等级# 基于关键词和问题长度简单判断length len(question)complex_keywords [设计, 架构, 策略, 分析, 评估, 优化, 创新, 领导]keyword_count sum(1 for kw in complex_keywords if kw in question)if length 100 or keyword_count 2:return hardelif length 50 or keyword_count 1:return mediumelse:return easydef _get_current_time(self) - str:获取当前时间字符串from datetime import datetimereturn datetime.now().strftime(%Y-%m-%d %H:%M:%S)4. 模板管理器 (template_manager.py)# -*- coding: utf-8 -*-回答模板管理器提供各种面试回答模板和结构指导import jsonfrom typing import Dict, List, Anyfrom .utils import load_json_file, clean_textclass TemplateManager:def __init__(self, templates_file: str data/templates.json):初始化模板管理器Args:templates_file: 模板数据文件路径self.templates_data load_json_file(templates_file)self.current_template_style STARdef get_template(self, template_name: str) - Dict[str, Any]:获取指定模板Args:template_name: 模板名称Returns:模板信息return self.templates_data.get(template_name, {})def get_all_templates(self) - Dict[str, Dict[str, Any]]:获取所有可用模板Returns:所有模板字典return self.templates_datadef generate_star_response(self, situation: str, task: str, action: str, result: str) - str:生成STAR格式回答Args:situation: 情境描述task: 任务描述action: 行动描述result: 结果描述Returns:格式化回答template 【情境】{situation}【任务】{task}【行动】{action}【结果】{result}.strip()return template.format(situationclean_text(situation),taskclean_text(task),actionclean_text(action),resultclean_text(result))def generate_prep_response(self, point: str, reason: str, example: str, point_restate: str) - str:生成PREP格式回答Args:point: 观点reason: 理由example: 例子point_restate: 重申观点Returns:格式化回答template 【观点】{point}【理由】{reason}【例子】{example}【重申观点】{point_restate}.strip()return template.format(pointclean_text(point),reasonclean_text(reason),exampleclean_text(example),point_restateclean_text(point_restate))def generate_car_response(self, context: str, action: str, result: str) - str:生成CAR格式回答Args:context: 情况描述action: 行动描述result: 结果描述Returns:格式化回答template 【情况】{context}【行动】{action}【结果】{result}.strip()return template.format(contextclean_text(context),actionclean_text(action),resultclean_text(result))def generate_soft_skill_response(self, skill: str, experience: str, learning: str, application: str) - str:生成软技能回答模板Args:skill: 技能名称experience: 相关经验learning: 学到的东西application: 未来应用Returns:格式化回答template 关于{skill}这个软技能【相关经验】{experience}【心得体会】{learning}【未来应用】{application}我认为这个技能在未来的工作中会持续发挥重要作用。.strip()return template.format(skillskill,experienceclean_text(experience),learningclean_text(learning),applicationclean_text(application))def suggest_template_for_question(self, question: str) - str:根据问题推荐合适的模板Args:question: 面试问题Returns:推荐的模板名称question_lower question.lower()# 基于关键词推荐模板if any(word in question_lower for word in [经历, 经验, 项目, 例子, 举例]):return STARelif any(word in question_lower for word in [看法, 认为, 觉得, 观点]):return PREPelif any(word in question_lower for word in [情况, 遇到, 面对, 处理]):return CARelif any(word in question_lower for word in [团队合作, 沟通, 领导力, 解决问题]):return SOFT_SKILLelse:return STAR # 默认推荐STAR模板def customize_template(self, template_content: str, personal_info: Dict[str, str]) - str:根据个人信息定制模板Args:template_content: 模板内容personal_info: 个人信息Returns:定制化后的模板customized template_content# 替换个人信息占位符replacements {{name}: personal_info.get(name, 我),{major}: personal_info.get(major, 我的专业),{university}: personal_info.get(university, 我的大学),{experience}: personal_info.get(experience, 相关经验),{strength}: personal_info.get(strength, 我的优势),{career_goal}: personal_info.get(career_goal, 我的职业目标)}for placeholder, value in replacements.items():customized customized.replace(placeholder, value)return customized5. 回答评估器 (response_evaluator.py)# -*- coding: utf-8 -*-回答评估器评估面试回答的质量和相关性import refrom typing import Dict, List, Any, Tuplefrom .utils import extract_keywords, clean_textclass ResponseEvaluator:def __init__(self):初始化回答评估器self.evaluation_criteria {content_quality: 0.3, # 内容质量structure: 0.25, # 结构完整性relevance: 0.25, # 相关性professionalism: 0.2 # 专业度}# 正面词汇库self.positive_words [成功, 提升, 改善, 优化, 创新, 领导, 协调, 解决,负责, 参与, 学习, 成长, 进步, 效率, 质量, 成果,优秀, 出色, 满意, 认可, 肯定, 信任, 支持, 合作]# 负面词汇库self.negative_words [失败, 错误, 问题, 困难, 挫折, 不足, 缺点, 遗憾,抱歉, 不知道, 不太了解, 可能, 也许, 大概, 差不多]def evaluate_response(self, question: str, response: str, keywords: List[str] None) - Dict[str, Any]:评估面试回答Args:question: 面试问题response: 回答内容keywords: 关键词列表可选Returns:评估结果if not response or len(response.strip()) 10:return {overall_score: 0,scores: {k: 0 for k in self.evaluation_criteria.keys()},feedback: 回答内容过短请提供更详细的回答。,suggestions: [增加回答的具体内容, 提供更多细节和例子]}# 各项评分content_score self._evaluate_content_quality(response)structure_score self._evaluate_structure(response)relevance_score self._evaluate_relevance(question, response, keywords)professionalism_score self._evaluate_professionalism(response)# 计算加权总分overall_score (content_score * self.evaluation_criteria[content_quality] structure_score * self.evaluation_criteria[structure] relevance_score * self.evaluation_criteria[relevance] professionalism_score * self.evaluation_criteria[professionalism])# 生成反馈和建议feedback, suggestions self._generate_feedback(content_score, structure_score, relevance_score, professionalism_score, response)return {overall_score: round(overall_score, 2),scores: {content_quality: round(content_score, 2),structure: round(structure_score, 2),relevance: round(relevance_score, 2),professionalism: round(professionalism_score, 2)},feedback: feedback,suggestions: suggestions,word_count: len(response),has_example: self._has_concrete_example(response)}def _evaluate_content_quality(self, response: str) - float:评估内容质量Args:response: 回答内容Returns:内容质量分数 (0-100)score 60 # 基础分# 长度评估word_count len(response)if word_count 200:score 20elif word_count 100:score 10# 具体内容评估if self._has_concrete_example(response):score 15# 数字和具体数据numbers re.findall(r\d, response)if len(numbers) 3:score 10# 积极词汇positive_count sum(1 for word in self.positive_words if word in response)score min(positive_count * 2, 15)# 避免负面词汇negative_count sum(1 for word in self.negative_words if word in response)score - negative_count * 5return max(0, min(100, score))def _evaluate_structure(self, response: str) - float:评估回答结构Args:response: 回答内容Returns:结构分数 (0-100)score 50 # 基础分# 段落结构paragraphs response.split(\n\n)if len(paragraphs) 3:score 20# 逻辑连接词connectives [首先, 其次, 然后, 接着, 最后, 因此, 所以, 然而, 但是, 而且]connective_count sum(1 for word in connectives if word in response)score min(connective_count * 5, 20)# 开头和结尾has_opening any(word in response[:50] for word in [我认为, 我觉得, 在我看来, 对于这个问题])has_closing any(word in response[-50:] for word in [总结, 总之, 综上所述, 希望, 期待])if has_opening:score 5if has_closing:score 5return max(0, min(100, score))def _evaluate_relevance(self, question: str, response: str, keywords: List[str] None) - float:评估回答相关性Args:question: 面试问题response: 回答内容keywords: 关键词列表Returns:相关性分数 (0-100)score 70 # 基础分# 提取问题关键词if not keywords:keywords extract_keywords(question, top_k5)# 检查关键词覆盖response_lower response.lower()covered_keywords [kw for kw in keywords if kw.lower() in response_lower]coverage_rate len(covered_keywords) / len(keywords) if关注我有更多实用程序等着你

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询