当前位置:首页|资讯

不是哥们,真有人拿 AI 来面试啊?

作者:程序员鱼皮发布时间:2024-09-30

大家好,我是程序员鱼皮。如今 AI 已经渗透到了我们的生活、求职、工作等方方面面。就拿求职来说,今年的美团校招,已经用上了 AI 来当面试官,降本增效。

我自己也当过面试官,其实对 AI 面试官还是挺好奇的。毕竟每个候选人的情况不同,想要全方面考察一个人的水平,一定要针对其简历和具体情况定制化提问。AI 能做好这点么?能当一个合格的面试官么?

此外,对于大家来说,可能更关心的是:如何战胜 AI 面试官?

嘿嘿,当然要用魔法打败魔法!我们也可以用 AI 来准备面试呀~

具体怎么做呢?这篇文章鱼皮就带大家搞一个 AI 备战面试小助手出来!看到结尾还有福利哦~


选择 AI 模型

首先我们要选择一个优质的 AI 大模型,AI 面试官智商的高低就取决于它了。

我作为一名程序员 + 创业者,也带团队开发过很多 AI 应用,在选择 AI 大模型的时候,最关注的是 3 点:理解能力、生成速度和成本。也就是 3 个字:准、快、省。

单论理解能力,OpenAI 的 o1-preview、o1-mini 处于领先地位,但不足之处在于使用门槛较高、成本较高。大家可能不知道,其实我们国产 AI 大模型已经有了显著进步,比如今年 9 月最新发布的智谱 GLM-4-Plus,作为其最强旗舰模型,在逻辑推理、编程算法、长文本输出方面都有质的突破。

在最新的大模型评测中,GLM-4-Plus 排名第 3,打破了国外模型对前 3 名的垄断!虽然跟 OpenAI 大模型对比还有一定差距,但已经强于其他国产模型,进入世界第一梯队。

让我们来试试看,打开智谱 AI 开放平台(bigmodel.cn),进入体验中心,就可以选择模型进行测试了。我现在测试新模型效果时,都会先搜一下自己。结果 GLM-4-Plus AI 的输出让我特么直接震惊了!我 8 月底刚干的事情就被它 “和盘托出” 了,这么与时俱进么?

其背后应该是运用了网页检索工具,从网上先搜集了一波我的信息再进行整理,准确度已经很不错了,我觉得已经可以当我的日记本了。说不定 AI 再进化进化,就能当我脑袋上的摄像头了。

除了准确度之外,GLM-4-Plus 模型的生成速度也很不错,像我用 OpenAI GPT 的时候偶尔还会卡顿和生成失败,国内的明显要稳定许多。

当然,对于我们大多数开发者来说,最最最最最关注的,肯定还是成本。效果再好,用不起也白搭!

GLM-4-Plus 模型不仅更准更快,而且相比以前的版本,价格直接优惠了 50%!而且国庆月期间,智谱 bigmodel.cn 为新老用户准备了「百万用户每人赠送 1 亿 tokens」+「1 - 5 折 API 调用优惠」限时活动。

好了,我心动了,我直接跟我们团队的同学说:薅它!


体验 AI 面试

选择完 AI 模型后,我们先不写代码,用智谱 AI 提供的体验中心来模拟下 AI 面试官。

在右侧可以自主设置 AI Prompt,改变 AI 的行为,比如:你是一位面试官,现在要为公司招募 Java 程序员,我会给你候选人的情况介绍,请帮我生成 10 道面试题进行考察。

然后就可以跟 AI 对话了,还可以上传简历文件:

AI 回答时,会解析我的简历文件作为上下文。你别说,的确是围绕我的简历问的,技术、项目、实习经历、综合能力等等,考察的还真全面!

tnnd,AI 面试官你有点儿东西啊!但是公司能用 AI 来考察候选人,那我们一样可以用 AI 来面试呀!

试试看,来一道经典程序员面试题:MySQL 有哪些存储引擎?分别有什么优缺点?

先设置个系统 Prompt:你是一位求职者,现在要面试某公司的 Java 程序员岗位,我会给你一些面试题,请帮我生成专业的回答。

AI 给出的回答非常专业,如图:

但一般面试的时候,我们不会按照这种方式进行回答,有些 “过于专业” 了。所以可以换一种系统 Prompt。比如:你是一位求职者,现在要面试某公司的 Java 程序员岗位,我会给你一些面试题,请使用第一人称进行回答,一段话就足够,不用过于详细。

嘿,回答的也很不错,关键是这次 AI 的回答就更像人类了:

但是在面试时使用 AI 的风险还是很大的,鱼皮也不建议大家真的这么做,即使靠作弊通过了面试,进了公司估计就原形毕露了。

但是我有一个大胆的想法,能不能把 AI 面试官 + AI 求职者结合,先让 AI 面试官帮我分析简历并出题,再让 AI 求职者帮我给出标准答案呢?这样我不就知道面试官可能会考我什么、而且知道怎么回答了么?相当于参与了一场有指导的模拟面试,感觉也是个准备面试的好方法。

为了实现这个 “备战面试小助手”,我们只使用智谱 AI 开放平台的体验中心是无法满足要求的。开放平台还提供了 API 调用能力,我们可以自主编写程序来实现。


开发备战面试小助手

1、接入 AI

要在项目中使用 AI 能力其实很简单,可以直接使用官方提供的 SDK(支持 Java 和 Python),其他编程语言可以通过 Http 请求发起调用。

对于 Maven 管理的 Java 项目,需要引入下列依赖:

<dependency>

  <groupId>cn.bigmodel.openapi</groupId>

  <artifactId>oapi-java-sdk</artifactId>

  <version>release-V4-2.3.0</version>

</dependency>

我们可以先写一个简单的 Demo,测试 AI 调用。

进入智谱 AI 开放平台的 API 密钥管理页面,新建并复制一个 API Key,注意不要泄露:


有了密钥后,在代码中初始化客户端,用于调用 AI 能力:

public static final String API_SECRET_KEY = "{你的 ApiSecretKey}";
public static ClientV4 client = new ClientV4.Builder(API_SECRET_KEY)
.build();

编写一个方法,向 AI 发送 “你好”,并输出 AI 的返回结果:

private static void testInvoke() {
   // 发送给 AI 的消息
   List<ChatMessage> messages = new ArrayList<>();
   ChatMessage chatMessage = new ChatMessage(ChatMessageRole.USER.value(), "你好");
   messages.add(chatMessage);
   // 构造请求
   ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder()
          .model("glm-4-plus") // 使用最新的大模型
          .stream(Boolean.FALSE)
          .invokeMethod(Constants.invokeMethod)
          .messages(messages)
          .build();
   // 发送请求,获取响应
   ModelApiResponse invokeModelApiResp = client.invokeModelApi(chatCompletionRequest);
   System.out.println("model output:" + invokeModelApiResp);
}

组合上述代码并执行,能成功看到 AI 的回复:

为了更方便地在项目中使用 AI,我们可以编写一个更通用的方法,实现调用 AI 并获取结果。代码如下:

public static String invoke(String systemMessage, String userMessage) {

    // 发送给 AI 的消息

    List<ChatMessage> messages = new ArrayList<>();

    ChatMessage systemChatMessage = new ChatMessage(ChatMessageRole.SYSTEM.value(), systemMessage);

    messages.add(systemChatMessage);

    ChatMessage userChatMessage = new ChatMessage(ChatMessageRole.USER.value(), userMessage);

    messages.add(userChatMessage);

    // 构造请求

    ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder()

        .model("glm-4-plus") // 使用最新的大模型

        .stream(Boolean.FALSE)

        .invokeMethod(Constants.invokeMethod)

        .messages(messages)

        .build();

    // 发送请求,获取响应

    try {

        ModelApiResponse invokeModelApiResp = client.invokeModelApi(chatCompletionRequest);

        // 从响应对象中获取 AI 输出的文本

        return invokeModelApiResp.getData().getChoices().get(0).getMessage().getContent().toString();

    } catch (Exception e) {

        e.printStackTrace();

        return "";

    }

}

2、实现流程

让我们先来梳理一下实现流程:

  1. 提供求职者的简历内容,输入给 AI 面试官,让其分析并生成面试问题

  2. 将生成的问题逐一输入给 AI 求职者,让其给出标准答案

  3. 对 AI 生成的结果进行组合整理

下面依次编码实现上述流程。


3、助手开发

1)开发 AI 面试官

先编写 AI 面试官的系统 Prompt,可以先利用智谱 AI 体验中心进行调试。示例 Prompt 如下:

你是一位经验丰富的 AI 面试官,下面我会给你一份求职者的简历,请分析简历并提出相关的面试问题。

要求输出格式如下,每个问题一行,此外不要有任何多余的内容:

{序号}. {面试问题} 

编写代码,将系统 Prompt 和用户简历(用户 Prompt)作为参数调用 AI,并输出结果:

String userResume = "Java程序员,工作经验3年,熟悉MySQL、Redis,有过电商项目经历";

// AI 面试官

String AI_INTERVIEWER_SYSTEM_PROMPT = "你是一位经验丰富的 AI 面试官,下面我会给你一份求职者的简历,请分析简历并提出相关的面试问题。\n" +

        "要求输出格式如下,每个问题一行,此外不要有任何多余的内容:\n" +

        "{序号}. {面试问题} ";

String aiInterviewerReply = invoke(AI_INTERVIEWER_SYSTEM_PROMPT, userResume);

System.out.println(aiInterviewerReply);

当然,你完全可以把用户简历替换为更复杂的内容,比如解析一个 PDF 文档。

执行上述程序,可以看到 AI 生成了符合我们格式要求的数据:

可以按照换行符对字符串进行拆分,得到问题数组:

if (StrUtil.isBlank(aiInterviewerReply)) {

    return;

}

// 切分字符串为问题数组

String[] questions = aiInterviewerReply.split("\n");

通过打断点进行调试,效果如图:

经过测试,使用智谱的 GLM-4-PLus 模型,能够很稳定地生成面试问题。当然,AI 输出结果的稳定性也和具体的 Prompt 有关,所以建议做好异常处理来应对特殊情况。


2)开发 AI 求职者

先编写 AI 求职者的系统 Prompt,要求让它用第一人称简略回答,会更真实一些。示例如下:

你是一位求职者,你要结合自己的个人简历,清晰准确地回答面试官提出的问题。

要求使用第一人称进行回答,一段话就足够,不用过于详细。

需要遍历面试问题列表,每个问题都要调用一次 AI 求职者,需要将用户简历和问题作为用户 Prompt 来调用 AI。代码如下:

// AI 求职者

String AI_APPLICANT_SYSTEM_PROMPT = "你是一位求职者,你要结合自己的个人简历,清晰准确地回答面试官提出的问题。\n" +

        "要求使用第一人称进行回答,一段话就足够,不用过于详细。";

for (String question : questions) {

    String userPrompt = String.format("---个人简历---\n%s\n---面试问题---\n%s", userResume, question);

    String aiApplicantReply = invoke(AI_APPLICANT_SYSTEM_PROMPT, userPrompt);

    System.out.println(aiApplicantReply);

}

通过打断点进行调试,给出的答案还是挺不错的:


3)组合整理 AI 生成的结果

可以利用 LinkedHashMap 结构,按顺序保存每一个问题和答案。代码如下:

// 按需保存问题和答案

Map<String, String> questionAnswerMap = new LinkedHashMap<>();

for (String question : questions) {

    String userPrompt = String.format("---个人简历---\n%s\n---面试问题---\n%s", userResume, question);

    String aiApplicantReply = invoke(AI_APPLICANT_SYSTEM_PROMPT, userPrompt);

    questionAnswerMap.put(question, aiApplicantReply);

}

System.out.println(questionAnswerMap);

通过打断点进行调试,现在我们就拿到了自己的简历对应的面试题和答案啦!

以上更多的是演示业务流程,大家可以根据自己的需求编写更详细的 Prompt,输出的结果质量也会更高。

智谱 AI 开放平台的官方文档也分享了 Prompt 编写技巧,开发 AI 应用之前建议完整阅读一遍:


总结

以上就是本期分享。喜迎国庆,智谱也发了个大福利:新用户注册后即可获赠 1 亿额度 Tokens 资源包!拿来开发 AI 应用妥妥的~

大家可以直接访问智谱开放平台 bigmodel.cn 注册领取哦。

更多

💻 编程学习交流:编程导航:https://www.code-nav.cn

📃 简历快速制作:老鱼简历:https://laoyujianli.com

✏️ 面试刷题神器:面试鸭:https://mianshiya.com 


Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1