如何利用人工智能构建简历优化器

包含示例 Python 代码的分步指南

在之前的博文中,我分享了 5 个你可以在这个周末构建的人工智能项目,其中第一个项目想法是简历优化工具。从那时起,许多人要求提供有关实施该项目的更多指导。在本文中,我将介绍使用 Python 和 OpenAI 的 API 的示例实现。

图片来自 Canva。

使你的简历适应不同的职位描述是找工作的一个有效但乏味的部分。即使您针对特定职位定制了简历,公司也可能对类似职位有不同的期望。

例如,下面是 Netflix 和 Google 的两个类似的数据科学家职位,但职位描述略有不同。幸运的是,借助当今的人工智能工具,我们可以构建一个应用程序来简化此过程。

类似数据科学家角色的比较。图片由作者提供。

听到这个想法,您可能会想,我不能使用像 ChatGPT 或 Claude 这样的无代码 AI 工具来实现这一点吗?

答案是肯定的!事实上,我建议您在任何时候想要构建这样的项目时都从无代码解决方案开始。然而,有两个限制需要考虑。

首先,在聊天 UI 中使用长提示可能会很麻烦,尤其是当您想要申请多个工作时。其次,如果您想将此过程从 5 个简历扩展到 50 个,使用 ChatGPT(或类似的)可能会变得不切实际。

从较高层面来看,该项目的目标是获取简历和职位描述 (JD),并根据 JD 返回简历的优化版本。虽然可以通过多种方式实现这样的工具,但在这里我将使用以下 4 步工作流程。

导入简历和 JD:加载您的简历并定义您想要定位的职位描述。 构建提示:创建提示来指导 AI 重写您的简历。 进行 API 调用:使用 OpenAI 的 API 提示 GPT-4o-mini 重写您的简历。 显示并保存结果:将新简历保存为 PDF。

4 步工作流程。图片由作者提供。

在基本了解了我们要构建的内容及其原因之后,让我们看看如何在 Python 中实现这个项目。示例代码可在 GitHub 上免费获取。

AI-Builders-Bootcamp-2/主课闪电课 · ShawhinT/AI-Builders-Bootcamp-2 AI Builders Bootcamp #2 的代码存储库。通过创建……为 ShawhinT/AI-Builders-Bootcamp-2 开发做出贡献

github.com

进口

我们首先导入一些手动 Python 库。关键是用于访问 GPT-4o-mini 的openai ,以及用于创建最终简历的 PDF 版本的markdown和weasyprint 。注意:此项目需要 OpenAI API 密钥,该密钥是我从单独的 Python 脚本导入的。

从 IPython.display 导入显示、Markdown从 openai 导入 OpenAI从 top_secret 导入 my_sk从降价导入降价从 weeasyprint 导入 HTML 第1步:输入简历和JD

接下来,我们将输入简历作为字符串加载到 Python 中,并使用 Python 的input()函数,以便在运行脚本时将其复制粘贴到任何职位描述中。

# 打开并读取markdown文件打开(“resumes/resume.md”,“r”,encoding =“utf-8”)作为文件:恢复字符串 = 文件.read() # 输入职位描述jd_string = 输入()

这里的一个细节是,简历以markdown格式保存。这很重要,因为它将鼓励 GPT-4o-mini 在 Markdown 中生成新的简历,我们可以轻松地将其样式转换为 PDF。注意:ChatGPT(或类似)可以将您的 PDF 简历转换为 Markdown。

第 2 步:构造提示符

导入简历和 JD 后,我们现在可以制作一个提示来指示模型优化简历。这里的专业提示是使用 ChatGPT 编写此提示的初始版本,因为 1) 它相当长,2) LLM 倾向于编写更符合其他 LLM 期望的指令。

经过一番实验,我最终得到了以下提示模板,它重写了简历,并在存在技能差距的情况下提出了额外的改进建议。

提示模板 = lambda 恢复字符串,jd_字符串:f"""您是专业的简历优化专家,专门为您量身定制简历到具体的职位描述。您的目标是优化我的简历并提供可行的改进建议,以与目标角色保持一致。 ### 指南: 1. **相关性**: - 优先考虑与最相关的经验、技能和成就**职位描述**。 - 删除或不再强调不相关的细节,以确保**简洁**和 **有针对性的**简历。 - 将工作经验部分限制为 2-3 个最相关的角色- 将每个角色下的要点限制为 2-3 个最相关的影响2. **行动驱动的结果**: - 使用**强动作动词**和**可量化的结果**(例如,百分比、收入、效率改进)以突出影响。 3. **关键词优化**: - 将职位描述中的**关键词**和短语自然地整合到针对 ATS(申请人跟踪系统)进行优化。 4. **其他建议** *(如果存在差距)*: - 如果简历与职位描述不完全相符,建议: 1. **额外的技术或软技能**,我可以添加这些技能来使我的轮廓更强。 2. **我可以寻求认证或课程**来弥补差距。 3. **更符合职位的项目想法或经验**。 5. **格式化**: - 以 **干净的 Markdown 格式** 输出定制的简历。 - 在末尾添加 **“其他建议”** 部分,并带有 可行的改进建议。 --- ### 输入: - **我的简历**: {简历字符串} - **工作描述**: {jd_字符串} --- ### 输出: 1. **定制简历**: - **Markdown 格式**的简历,强调相关经验,技能和成就。 - 纳入职位描述**关键字**以针对 ATS 进行优化。 - 使用粗俗语言,长度不超过**一页**。 2. **其他建议** *(如果适用)*: - 列出可以加强与角色的一致性的**技能**。 - 推荐要攻读的**认证或课程**。 - 建议开发**具体项目或经验**。 ”“” 第3步:进行API调用

使用上面的提示模板,我们可以使用输入的简历和 JD 动态构建提示,然后通过 OpenAI 的 API 将其发送到 OpenAI

# 创建提示提示=提示模板(简历字符串,jd_字符串) # 设置 API 客户端客户端 = OpenAI(api_key=my_sk) # 进行 API 调用响应 = client.chat.completions.create(型号=“gpt-4o-mini”,消息=[ {"role": "system", "content": "专家简历撰写者"}, {“角色”:“用户”,“内容”:提示} ],温度=0.7 ) # 提取响应response_string = response.choices[0].message.content 第 4 步:保存新简历

最后,我们可以提取出优化后的简历和改进建议。

# 将新简历与改进建议分开response_list = response_string.split("## 其他建议")

对于简历,我们可以使用 markdown 库将 markdown 输出转换为 HTML。然后,使用 weasyprint 将 HTML 转换为 PDF。

#另存为PDF output_pdf_file =“简历/resume_new.pdf” # 将 Markdown 转换为 HTML html_content = markdown(response_list[0]) # 将 HTML 转换为 PDF 并保存HTML(字符串=html_content).write_pdf(output_pdf_file, stylesheets=['resumes/style.css'])

最终结果如下所示。

简历的最终 PDF 版本。图片由作者提供。

对于改进建议,我们可以直接打印出来。

显示(Markdown(response_list[1]))

改进建议。图片由作者提供。 奖励:构建一个 GUI

虽然上面的代码在一定程度上简化了这个过程,但我们可以做得更好。为了提高该工具的可用性,我们可以使用 Gradio 创建一个简单的 Web 界面。

最终产品如下所示。用户可以上传简历的 Markdown 文件,并将其更直接地粘贴到任何职位描述中。我还添加了一个区域,用户可以在将新简历导出为 PDF 之前对其进行编辑。

最终 GUI 的演示。作者的 GIF。

示例代码可在此处的 GitHub 存储库中获取。请观看 YouTube 视频,了解我对代码的讲解。

虽然根据具体职位描述定制简历是使申请脱颖而出的有效方法,但它可能相当乏味。在这里,我们将介绍如何使用 Python 和 OpenAI 的 API 实现基于 AI 的简历优化工具。

如果您有任何疑问或想深入了解所涵盖的任何主题,请在评论中告诉我:)