调用智谱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.rhkb.cn/news/436465.html

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

相关文章

Qt多线程操作sqlite数据库

问题 就是为了多线程操作sqlite数据库,为什么,因为数据库是耗时的操作,一条数据的插入,差不多200ms,如果是数据插入多了,界面会有明显的卡顿,因此必须,多线程操作数据库。 问题是这样的: 插入数据之后,接着更新界面;然而,插入数据是比较耗时的操作,尤其插入数据…

在java后端发送HTTPClient请求

简介 HttpClient遵循http协议的客户端编程工具包支持最新的http协议 部分依赖自动传递依赖了HttpClient的jar包 明明项目中没有引入 HttpClient 的Maven坐标&#xff0c;但是却可以直接使用HttpClient原因是&#xff1a;阿里云的sdk依赖中传递依赖了HttpClient的jar包 发送get请…

了解华为计算产品线,昇腾的业务都有哪些?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 随着 ChatGPT 的现象级爆红&#xff0c;它引领了 AI 大模型时代的深刻变革&#xff0c;进而造成 AI 算力资源日益紧缺。与此同时&#xff0c;中美贸易战的持续也使得 AI 算力国产化适配成为必然趋势。 …

【Vue】vue2项目打包后部署刷新404,配置publicPath ./ 不生效问题

Vue Router mode&#xff0c;为 history 无效&#xff0c;建议使用默认值 hash&#xff1b;

如何实现Mybatis自定义插件

背景 MyBatis的插件机制&#xff0c;也可称为拦截器&#xff0c;是一种强大的扩展工具。它允许开发者在不修改MyBatis框架源代码的情况下&#xff0c;通过拦截和修改MyBatis执行过程中的行为来定制和增强功能。 MyBatis插件可以拦截四大核心组件的方法调用&#xff1a;Executor…

【Pyecharts】时间线柱状图x轴坐标重复出现并重叠

问题描述 如图右侧显示多的一列坐标 解决方案 降低pyecharts版本&#xff1a;pip install pyecharts2.0.5

RabbitMQ基本原理

一、基本结构 所有中间件技术都是基于 TCP/IP 协议基础之上进行构建新的协议规范&#xff0c;RabbitMQ遵循的是AMQP协议&#xff08;Advanced Message Queuing Protocol - 高级消息队列协议&#xff09;。 生产者发送消息流程&#xff1a; 1、生产者和Broker建立TCP连接&#…

Spring之生成Bean

Bean的生命周期&#xff1a;实例化->属性填充->初始化->销毁 核心入口方法&#xff1a;finishBeanFactoryInitialization-->preInstantiateSingletons DefaultListableBeanFactory#preInstantiateSingletons用于实例化非懒加载的bean。 1.preInstantiateSinglet…

Azure Data Box 80 TB 现已在中国区正式发布

我们非常高兴地宣布&#xff0c;Azure Data Box 80 TB SKU现已在 Azure 中国区正式发布。Azure Data Box 是 Azure 的离线数据传输解决方案&#xff0c;允许您以快速、经济且可靠的方式将 PB 级数据从 Azure 存储中导入或导出。通过硬件传输设备可加速数据的安全传输&#xff0…

NVIDIA G-Assist 项目:您的游戏和应用程序AI助手

NVIDIA G-Assist 是一个革命性的人工智能助手项目&#xff0c;旨在通过先进的AI技术提升玩家的游戏体验和系统性能。这个项目在2024年Computex上首次亮相&#xff0c;展示了其在游戏和应用程序中的潜在应用。 喜好儿网 G-Assist 的核心功能是提供上下文感知的帮助。它能够接收…

用示波器测动态滞回线

大学物理&#xff08;下&#xff09;实验-中南民族大学通信工程2022级 手动逐个处理数据较为麻烦且还要绘图&#xff0c;故想到用pythonmatplotlib来计算结果并数据可视化。 代码实现 import matplotlib.pyplot as plt# 样品一磁化曲线 X [0, 0.2, 0.4, 0.6, 0.8, 1, 1.5, 2.…

云计算:MySQL

第一周第一天-MySQL的SQL语句解析 数据库的介绍 什么是数据库 数据库是存储和管理数据的系统或集合&#xff0c;通常用于支持软件系统的高效数据处理和查询。它能够以结构化的方式组织数据&#xff0c;使用户可以快速存储、更新、查询和删除数据。数据库不仅保存数据&#xff0…

【数学分析笔记】第4章第2节 导数的意义和性质(1)

4. 微分 4.2 导数的意义与性质 4.2.1 导数在物理中的背景 物体在OS方向上运动&#xff0c;位移函数为 s s ( t ) ss(t) ss(t)&#xff0c;求时刻 t t t的瞬时速度&#xff0c;找一个区间 [ t , t △ t ] [t,t\bigtriangleup t] [t,t△t]&#xff0c;从时刻 t t t变到时刻 t…

2024年9月26日--- Spring-AOP

SpringAOP 在学习编程过程中&#xff0c;我们对于公共方法的处理应该是这样的一个过程&#xff0c;初期阶段如下 f1(){Date now new Date();System.out.println("功能执行之前的各种前置工作"now)//...功能代码//...功能代码System.out.println("功能执行之前…

vue3使用Teleport 控制台报警告:Invalid Teleport target on mount: null (object)

Failed to locate Teleport target with selector “.demon”. Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree main.…

OpenStack Yoga版安装笔记(十五)Horizon安装

1、官方文档 OpenStack Installation Guidehttps://docs.openstack.org/install-guide/ 本次安装是在Ubuntu 22.04上进行&#xff0c;基本按照OpenStack Installation Guide顺序执行&#xff0c;主要内容包括&#xff1a; 环境安装 &#xff08;已完成&#xff09;OpenStack…

ndb9300public-ndb2excel简介

1 引言 ndb9300是一个自己定义的机载导航数据库劳作&#xff08;不敢称为项目&#xff09;代号&#xff0c;其中3表示是第3种数据库。 多年前&#xff0c;对在役民航客机中的某型机载导航数据库的二进制文件进行分析&#xff0c;弄明白它的数据结构后做了几个工具&#xff0c…

仿真设计|基于51单片机的土壤温湿度监测及自动浇花系统仿真

目录 具体实现功能 设计介绍 51单片机简介 资料内容 仿真实现&#xff08;protues8.7&#xff09; 程序&#xff08;Keil5&#xff09; 全部内容 资料获取 具体实现功能 &#xff08;1&#xff09;DS18B20实时检测环境温度&#xff0c;LCD1602实时显示土壤温湿度&…

<使用生成式AI对四种冒泡排序实现形式分析解释的探讨整理>

<使用生成式AI对四种冒泡排序实现形式分析解释的探讨整理> 文章目录 <使用生成式AI对四种冒泡排序实现形式分析解释的探讨整理>1.冒泡排序实现形式总结1.1关于冒泡排序实现形式1的来源&#xff1a;1.2对四种排序实现形式使用AI进行无引导分析&#xff1a;1.3AI&…

正交阵的概念、性质与应用

正交阵是线性代数中一种重要的特殊矩阵&#xff0c;它在很多领域都有广泛的应用。 1. 概念 一个实数方阵 Q 被称为正交阵&#xff0c;如果它的转置等于它的逆矩阵&#xff1a; 这意味着&#xff1a; 其中&#xff0c;Q T 表示矩阵 Q 的转置&#xff0c;I 表示单位矩阵。 2…