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

news2024/12/27 1:06:40

文章目录

  • 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="")  # “”填写自己的APIKey

def 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].delta
        if delta.content:
            current_question += delta.content
            if current_question.endswith('.'):
                questions.append(current_question.strip())
                current_question = ""
                if len(questions) == 10:  # 生成10个问题后停止
                    break
    return 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 ZhipuAI

app = Flask(__name__)
client = ZhipuAI(api_key="")  # 请填写自己的APIKey

def 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].delta
        if delta.content:
            current_question += delta.content
            if current_question.endswith('.'):
                questions.append(current_question.strip())
                current_question = ""
                if len(questions) == 11:
                    break
    return questions

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=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.coloradmin.cn/o/2181350.html

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

相关文章

掌握未来:产品经理学习AI大模型的重要性解析

前言 在AI大模型时代&#xff0c;技术的迅猛进步正在重塑各行各业的面貌。作为产品经理&#xff0c;我们不仅要紧跟时代步伐&#xff0c;更要深入探索与运用这一前沿技术。学习大模型等AI技术&#xff0c;不仅是为了理解其背后的工作原理和应用潜力&#xff0c;更是为了将智能…

天选思路怎能不会!小波变换+CNN完美融合,最新idea发了CV顶会!

今天给大家推荐一个涨点发顶会的好方向&#xff1a;小波变换CNN。这俩热点的结合可以轻松实现“11&#xff1e;2”的效果。 这是因为&#xff0c;一方面小波变换可以作为预处理步骤&#xff0c;提取出关键的局部特征&#xff0c;加速CNN收敛并提升性能&#xff1b;另一方面&am…

配置树莓派打开SSH服务

在树莓派终端中查看IP 在终端中输入命令来查看IP地址。最常用的命令是&#xff1a;hostname -I注意&#xff0c;这里的参数I是大写的&#xff0c;它表示查看本机上所有配置的IP地址&#xff08;包括IPv4和IPv6&#xff0c;如果有的话&#xff09;。如果你只需要查看IPv4地址&am…

Linux:磁盘管理

一、静态分区管理 静态的分区方法不可以动态的增加或减少分区的容量。 1、磁盘分区-fdisk 该命令是用于查看磁盘分区情况&#xff0c;和分区管理的命令 命令格式&#xff1a;fdisk [选项] 设备文件名常用命令&#xff1a; -h&#xff1a;查看分区信息 fdisk系统常用命令&…

19、网络安全合规复盘

数据来源&#xff1a;5.网络安全合规复盘_哔哩哔哩_bilibili

山大电力研发费用率远弱同行,先分红上亿再补流9000万?

《港湾商业观察》施子夫 8月9日&#xff0c;证监会网站披露深交所已向山东山大电力技术股份有限公司&#xff08;以下简称&#xff0c;山大电力&#xff09;发出第三轮审核问询函。据悉&#xff0c;2023年6月&#xff0c;山大电力递表深交所&#xff0c;保荐机构为兴业证券。 …

Linux中find命令详解

记录linux中find命令的详细用法。 文章目录 find命令简介基本语法常用选项-name-iname-type-size-mtime,-atime,-ctime-perm-user-group-delete-exec-printand or find --help find命令简介 find 是一个搜索目录树以查找一个文件或一组文件的程序。它遍历目录树并报告与用户规…

VMware虚拟机NAT模式配置

1、宿主机 2、宿主机网络适配器 VMnet8 ①要与虚拟机在同一网段 ②不能和宿主机同一网段 3、VMware 4、虚拟机

短视频剪辑工具有哪些?推荐4个简单好用的工具

短视频如今充斥着我们的生活&#xff0c;刷短视频已经成了很多人的生活必备。所以掌握短视频剪辑技能是一件很重要的事情&#xff0c;能够为视频创作者带来很多的流量。如果想要学习剪辑的话&#xff0c;可以先从选择一款合适的剪辑工具开始&#xff0c;这几款功能丰富的软件&a…

Google ads投广中的这些问题,看你中了没

谷歌广告是一个强大的工具&#xff0c;可以显著提升外贸独立站的流量和销售。但是&#xff0c;要想充分发挥其潜力&#xff0c;需要深入了解其工作原理&#xff0c;并掌握如何设定预算、选择关键词、创建广告文案等技巧。以下是一些在谷歌广告投放过程中网友遇到的一些问题及其…

基于ESP8266—AT指令连接阿里云+MQTT透传数据(1)

在阿里云创建MQTT产品的过程涉及几个关键步骤,主要包括注册阿里云账号、实名认证、开通MQTT服务实例、创建产品与设备等。以下是详细的步骤说明: 一、准备工作 访问阿里云官网,点击注册按钮,填写相关信息(如账号、密码、手机号等)完成注册。注册完成后,需要对账号进行实…

Solaris11.4配置远程桌面登录

Solaris11.4配置远程桌面登录 一. 版本信息 1. 内核版本信息 rootsolaris11:~# uname -a SunOS solaris11 5.11 11.4.27.82.1 sun4v sparc sun4v rootsolaris11:~# rootsolaris11:~# rootsolaris11:~# cat /etc/releaseOracle Solaris 11.4 SPARCCopyright (c) 1983, 2020, …

【EXCEL数据处理】000009 案列 EXCEL单元格数字格式。文本型数字格式和常规型数字格式的区别

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【EXCEL数据处理】000009 案列 EXCEL单元格数字格式。文本型数字格式和…

2024年国外优质API:情绪识别口碑佳

随着全球一体化进程的加速&#xff0c;跨语言沟通需求提升&#xff0c;进而催生出大量语种识别类型API服务。此类服务致力于协助使用者便捷且精确地辨识文本所属的语种&#xff0c;从而实现各类多语言文本处理、自动化翻译及文本解析等功能。 目前&#xff0c;市面上已出现多种…

麒麟服务器装完系统后删除backup以及swap分区的操作步骤

一、需求描述 将V10-SP3服务器的klas-backup、klas-swap两个lvm分区删除掉。 现场原来lvm结构如下: 二、注意事项 在缩减lvm前,必须做好数据备份。 三、操作步骤 1、执行vgs、lvs查看vg、lv [root@server-sp3 ~]# vgsVG #PV #LV #SN Attr VSize VFreeklas 1 3 …

微服务——服务保护

1.雪崩问题 级联失败或雪崩问题指的是在微服务架构中&#xff0c;由于服务间的相互依赖和调用&#xff0c;当一个服务出现故障时&#xff0c;会引起调用它的服务也出现故障&#xff0c;进而引发整个调用链路的多个服务都出现故障&#xff0c;最终导致整个系统崩溃的现象。 产生…

阿里巴巴国际站获取商品详情item_get接口技术分享

在跨境电商日益繁荣的今天&#xff0c;如何高效、准确地获取商品信息成为了商家们关注的焦点。阿里巴巴作为全球领先的B2B电商平台&#xff0c;其提供的item_get API接口成为了跨境电商获取商品信息的必备工具。本文将详细介绍item_get接口的功能、优势、应用场景以及返回数据字…

yolov5/v7/v8随机种子固定方法

参考&#xff1a;https://blog.csdn.net/qq_45062768/article/details/133852543 https://blog.csdn.net/qq_45062768/article/details/133204618 yolov7的 import pkg_resources as pkg def check_version(current0.0.0, minimum0.0.0, nameversion , pinnedFalse, hardFal…

Transformer算法7个面试常见问题

1.Transformer为何使用多头注意力机制&#xff1f;&#xff08;为什么不使用一个头&#xff09; 英文论文中是这么说的&#xff1a; Multi-head attention allows the model to jointly attend to information from different representation subspaces at different position…

AtCoder Beginner Contest 373(ABCDEF 题)视频讲解

A - September Problem Statement There are 12 12 12 strings S 1 , S 2 , … , S 12 S_1, S_2, \ldots, S_{12} S1​,S2​,…,S12​ consisting of lowercase English letters. Find how many integers i i i ( 1 ≤ i ≤ 12 ) (1 \leq i \leq 12) (1≤i≤12) satisfy …