调用智谱AI,面试小助手Flask简单示例

文章目录

  • 1.接入AI
      • 获取API密钥
      • Python代码
  • 2.小助手的实现流程
  • 3.Flask应用示例
    • Python文件.py
    • index.html
    • 运行Flask应用
    • 地址栏输入 http://localhost:5000/

1.接入AI

获取API密钥

在智谱AI的官方网站上注册,右上角点击API密钥,新建并复制一个 API Key,不要在公开的代码中暴露你的API密钥
在这里插入图片描述

Python代码

在Jupyter Notebook中,发送HTTP请求到智谱AI的API,需要提前pip install zhipuai
运行代码,看到 AI 的回复

from zhipuai import ZhipuAI
client = ZhipuAI(api_key="") # 填写自己的APIKey
response = client.chat.completions.create(model="glm-4-0520",  # 填写需要调用的模型编码messages=[{"role": "system", "content": "你是一个乐于解答各种问题的助手,你的任务是为用户提供专业、准确、有见地的建议。"},{"role": "user", "content": "我对太阳系的行星非常感兴趣,特别是土星。请提供关于土星的基本信息,包括其大小、组成、环系统和任何独特的天文现象。"},],stream=True,
)
for chunk in response:print(chunk.choices[0].delta)

在这里插入图片描述

2.小助手的实现流程

(1)提供求职者的简历内容,输入给 AI 面试官,让其分析并生成面试问题
(2)将生成的问题逐一输入给 AI 求职者,让其给出答案
(3)对 AI 生成的结果进行组合整理

from zhipuai import ZhipuAI# 初始化ZhipuAI客户端
client = ZhipuAI(api_key="")  # “”填写自己的APIKeydef generate_interview_questions(resume):# 构建系统消息,描述面试官的角色和任务system_message = {"role": "system","content": "你是一位经验丰富的 AI 面试官,下面我会给你一份求职者的简历,请分析简历并提出相关的面试问题。要求输出格式如下,每个问题一行,此外不要有任何多余的内容:{序号}. {面试问题}"}# 构建用户消息,包含简历内容user_message = {"role": "user", "content": resume}# 调用API生成面试问题response = client.chat.completions.create(model="glm-4-0520",  # 填写需要调用的模型编码messages=[system_message, user_message],stream=True,)# 处理API响应,生成面试问题列表questions = []current_question = ""for chunk in response:delta = chunk.choices[0].deltaif delta.content:current_question += delta.contentif current_question.endswith('.'):questions.append(current_question.strip())current_question = ""if len(questions) == 10:  # 生成10个问题后停止breakreturn questions# 示例简历
user_resume = "Java程序员,工作经验3年,熟悉MySQL、Redis,有过电商项目经历"# 生成面试问题
interview_questions = generate_interview_questions(user_resume)# 打印面试问题
for i, question in enumerate(interview_questions, start=1):print(f"{i}. {question}")# 假设我们有一个函数来调用AI求职者系统,并使用生成的面试问题来获取回答
def invoke(prompt, user_prompt):response = client.chat.completions.create(model="glm-4-0520",messages=[{"role": "system", "content": prompt}, {"role": "user", "content": user_prompt}],max_tokens=150,  # 增加最大token数以获取更完整的回答stop=None,temperature=0.7)return response.choices[0].message.content.strip()# 遍历面试问题列表,每个问题都要调用一次 AI 求职者
question_answer_map = {}
for question in interview_questions:user_prompt = f"---个人简历---\n{user_resume}\n---面试问题---\n{question}"ai_applicant_reply = invoke(AI_APPLICANT_SYSTEM_PROMPT, user_prompt)question_answer_map[question] = ai_applicant_reply.strip()# 打印问题和答案
for question, answer in question_answer_map.items():print(f"{question}\n{answer}\n")# 输出问题答案映射
print(question_answer_map)

在这里插入图片描述在这里插入图片描述

3.Flask应用示例

助手集成到一个Python Flask应用中
开发环境中已安装Flask、zhipuai
目录结构
在这里插入图片描述
在这里插入图片描述

Python文件.py

在你的项目目录下创建一个新的Python文件,app.py,代码:

from flask import Flask, render_template, request
from zhipuai import ZhipuAIapp = Flask(__name__)
client = ZhipuAI(api_key="")  # 请填写自己的APIKeydef generate_interview_questions(resume):system_message = {"role": "system","content": "你是一位经验丰富的 AI 面试官,下面我会给你一份求职者的简历,请分析简历并提出相关的面试问题。要求输出格式如下,每个问题一行,此外不要有任何多余的内容:{序号}. {面试问题}"}user_message = {"role": "user", "content": resume}response = client.chat.completions.create(model="glm-4-0520",messages=[system_message, user_message],stream=True,)questions = []current_question = ""for chunk in response:delta = chunk.choices[0].deltaif delta.content:current_question += delta.contentif current_question.endswith('.'):questions.append(current_question.strip())current_question = ""if len(questions) == 11:breakreturn questionsdef invoke(prompt, user_prompt):response = client.chat.completions.create(model="glm-4-0520",messages=[{"role": "system", "content": prompt}, {"role": "user", "content": user_prompt}],max_tokens=500,stop=None,temperature=0.7)return response.choices[0].message.content.strip()@app.route('/', methods=['GET', 'POST'])
def index():questions_answers = {}if request.method == 'POST':resume = request.form['resume']interview_questions = generate_interview_questions(resume)for question in interview_questions:ai_response = invoke("你的系统提示", f"---个人简历---\n{resume}\n---面试问题---\n{question}")questions_answers[question] = ai_response.strip()return render_template('index.html', questions_answers=questions_answers)if __name__ == '__main__':app.run(debug=True)

index.html

<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>面试助手</title>
</head>
<body><h1>AI 面试助手</h1><form method="POST"><label for="resume">输入简历:</label><br><textarea id="resume" name="resume" rows="5" cols="40" required></textarea><br><input type="submit" value="生成面试问题"></form><h2>生成的面试问题和答案</h2><ul>{% for question, answer in questions_answers.items() %}<li><strong>{{ question }}</strong>: {{ answer }}</li>{% endfor %}</ul>
</body>
</html>

运行Flask应用

在终端中,导航到项目目录并运行以下命令:
python app.py
在这里插入图片描述
此时,Flask应用现在应该在 http://localhost:5000/ 运行

地址栏输入 http://localhost:5000/

显示如下,简历输入“Java程序员,工作经验3年,熟悉MySQL、Redis,有过电商项目经历”
在这里插入图片描述

点击按钮,过一会儿会出现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/54329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI不可尽信

看到某项目有类似这样的一段代码 leaves : make([]int, 10) leaves leaves[:0]没理解这样的连续两行,有何作用? 初始化一个长度和容量都为10的切片,接着把切片长度设置为0 即如下demo: (在线地址) package mainimport "fmt"func main() {leaves : make([]int, 1…

MongoDB-aggregate流式计算:带条件的关联查询使用案例分析

在数据库的查询中&#xff0c;是一定会遇到表关联查询的。当两张大表关联时&#xff0c;时常会遇到性能和资源问题。这篇文章就是用一个例子来分享MongoDB带条件的关联查询发挥的作用。 假设工作环境中有两张MongoDB集合&#xff1a;SC_DATA&#xff08;学生基本信息集合&…

Flask-2

文章目录 请求全局钩子[hook]异常抛出和捕获异常abort 主动抛出HTTP异常errorhandler 捕获错误 context请求上下文(request context)应用上下文(application context)current_appg变量 两者区别&#xff1a; 终端脚本命令flask1.0的终端命令使用自定义终端命令 flask2.0的终端命…

⌈ 传知代码 ⌋ 将一致性正则化用于弱监督学习

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

2款.NET开源且免费的Git可视化管理工具

Git是什么&#xff1f; Git是一种分布式版本控制系统&#xff0c;它可以记录文件的修改历史和版本变化&#xff0c;并可以支持多人协同开发。Git最初是由Linux开发者Linus Torvalds创建的&#xff0c;它具有高效、灵活、稳定等优点&#xff0c;如今已成为软件开发领域中最流行…

如何使用EventChannel

文章目录 1 知识回顾2 示例代码3 经验总结我们在上一章回中介绍了MethodChannel的使用方法,本章回中将介绍EventChannel的使用方法.闲话休提,让我们一起Talk Flutter吧。 1 知识回顾 我们在前面章回中介绍了通道的概念和作用,并且提到了通道有不同的类型,本章回将其中一种…

使用Apifox创建接口文档,部署第一个简单的基于Vue+Axios的前端项目

前言 在当今软件开发的过程中&#xff0c;接口文档的创建至关重要&#xff0c;它不仅能够帮助开发人员更好地理解系统架构&#xff0c;还能确保前后端开发的有效协同。Apifox作为一款集API文档管理、接口调试、Mock数据模拟为一体的工具&#xff0c;能够大幅度提高开发效率。在…

我为什么决定关闭ChatGPT的记忆功能?

你好&#xff0c;我是三桥君 几个月前&#xff0c;ChatGPT宣布即将推出一项名为“记忆功能”的新特性&#xff0c;英文名叫memory。 这个功能听起来相当吸引人&#xff0c;宣传口号是让GPT更加了解用户&#xff0c;仿佛是要为我们每个人量身打造一个专属的AI助手。 在记忆功…

用Arduino单片机读取PCF8591模数转换器的模拟量并转化为数字输出

PCF8591是一款单芯片&#xff0c;单电源和低功耗8位CMOS数据采集设备。博文[1]对该产品已有介绍&#xff0c;此处不再赘述。但该博文是使用NVIDIA Jetson nano运行python读取输入PCF8591的模拟量的&#xff0c;读取的结果显示在屏幕上&#xff0c;或输出模拟量点亮灯。NVIDIA J…

Ubuntu下Kafka安装及使用

Kafka是由Apache软件基金会开发的一个开源流处理平台&#xff0c;同时也是一个高吞吐量的分布式发布订阅消息系统。它由Scala和Java编写&#xff0c;具有多种特性和广泛的应用场景。 Kafka是一个分布式消息系统&#xff0c;它允许生产者&#xff08;Producer&#xff09;发布消…

docker 部署nacos

目录 一、拉取镜像 二、部署 三、访问&#xff08;默认是用内嵌数据库&#xff09; 四、配置 五、重启容器 一、拉取镜像 docker pull nacos/nacos-server 二、部署 docker run --name nacos -d -p 8848:8848 -p 9848:9848 -p 9849:9849 --restartalways --privilegedt…

软考鸭微信小程序:助力软考备考的便捷工具

一、软考鸭微信小程序的功能 “软考鸭”微信小程序是一款针对软考考生的备考辅助工具&#xff0c;提供了丰富的备考资源和功能&#xff0c;帮助考生提高备考效率&#xff0c;顺利通过考试。其主要功能包括&#xff1a; 历年试题库&#xff1a;小程序内集成了历年软考试题&…

加油站智能视频监控预警系统(AI识别烟火打电话抽烟) Python 和 OpenCV 库

加油站作为存储和销售易燃易爆油品的场所&#xff0c;是重大危险源之一&#xff0c;随着科技的不断发展&#xff0c;智能视频监控预警系统在加油站的安全保障方面发挥着日益关键的作用&#xff0c;尤其是其中基于AI的烟火识别、抽烟识别和打电话识别功能&#xff0c;以及其独特…

云服务架构与华为云架构

目录 1.云服务架构是什么&#xff1f; 1.1 云服务模型 1.2 云部署模型 1.3 云服务架构的组件 1.4 云服务架构模式 1.5 关键设计考虑 1.6 优势 1.7 常见的云服务架构实践 2.华为云架构 2.1 华为云服务模型 2.2 华为云部署模型 2.3 华为云服务架构的核心组件 2.4 华…

实时语音交互,打造更加智能便捷的应用

随着人工智能和自然语言处理技术的进步&#xff0c;用户对智能化和便捷化应用的需求不断增加。语音交互技术以其直观的语音指令&#xff0c;革新了传统的手动输入方式&#xff0c;简化了用户操作&#xff0c;让应用变得更加易用和高效。 通过语音交互&#xff0c;用户可以在不…

Label-Studio ML利用yolov8模型实现自动标注

引言 Label Studio ML 后端是一个 SDK&#xff0c;用于包装您的机器学习代码并将其转换为 Web 服务器。Web 服务器可以连接到正在运行的 Label Studio 实例&#xff0c;以自动执行标记任务。我们提供了一个示例模型库&#xff0c;您可以在自己的工作流程中使用这些模型&#x…

基于SpringCloud的微服务架构下安全开发运维准则

为什么要进行安全设计 微服务架构进行安全设计的原因主要包括以下几点&#xff1a; 提高数据保护&#xff1a;微服务架构中&#xff0c;服务间通信频繁&#xff0c;涉及到大量敏感数据的交换。安全设计可以确保数据在传输和存储过程中的安全性&#xff0c;防止数据泄露和篡改。…

手机改IP地址怎么弄?全面解析与操作指南

在当今数字化时代&#xff0c;IP地址作为设备在网络中的唯一标识&#xff0c;其重要性不言而喻。有时候&#xff0c;出于隐私保护、网络访问需求或其他特定原因&#xff0c;我们可能需要更改手机的IP地址。然而&#xff0c;对于大多数普通用户来说&#xff0c;如何操作可能还是…

电梯,建模的常见话题

以下是最近一则"女婿开电梯门导致岳父惨死"的新闻&#xff0c;可惜生命的同时&#xff0c;也引发了一系列联想。 不少人不了解或者了解但经常下意识忽略&#xff1a;电梯的门和轿厢是分离的部件。部件之间的协作如果有失误&#xff0c;系统就会出问题。电梯可以看作是…

【Android 14源码分析】WMS-窗口显示-第二步:relayoutWindow -1

忽然有一天&#xff0c;我想要做一件事&#xff1a;去代码中去验证那些曾经被“灌输”的理论。                                                                                  – 服装…