進口
我們首先需要進口一些 Python 函式庫。主要的有 openai,用來存取 GPT-4o-mini,還有 markdown 和 weasyprint,這樣可以創建最終履歷的 PDF 版本。注意:這個專案需要一個 OpenAI API 金鑰,我是從另一個 Python 腳本中進口的。
from IPython.display import display, Markdownfrom openai import OpenAIfrom top_secret import my_sk
from markdown import markdownfrom weasyprint import HTML
第一步:輸入履歷和職位描述
接下來,我們將把履歷載入 Python,作為一個字串,並使用 Python 的 input() 函數,讓我們在執行腳本時可以複製並粘貼任何職位描述。
# 開啟並讀取 markdown 檔案with open(“resumes/resume.md”, “r”, encoding=”utf-8″) as file:resume_string = file.read()
# 輸入職位描述jd_string = input()
這裡要注意的是,履歷是以 markdown 格式保存的。這很重要,因為這樣可以促使 GPT-4o-mini 生成一份新的 markdown 格式履歷,我們可以輕鬆地將其樣式化為 PDF。注意:ChatGPT(或類似工具)可以將你的 PDF 履歷轉換為 markdown。
第二步:構建提示
有了我們的履歷和職位描述後,我們現在可以構建一個提示,指示模型優化履歷。這裡的一個專業提示是使用 ChatGPT 來撰寫這個提示的初始版本,因為 1) 它相當長,2) 大型語言模型(LLMs)通常會寫出更符合其他 LLMs 期望的指示。
經過一些實驗,我最終得到了以下提示模板,這個模板會重寫履歷,並在技能缺口存在的情況下提出額外的改進建議。
prompt_template = lambda resume_string, jd_string : f”””你是一位專業的履歷優化專家,專門針對特定職位描述調整履歷。你的目標是優化我的履歷並提供可行的改進建議,以便與目標角色對齊。
### 指導方針:1. **相關性**: – 優先考慮與 **職位描述** 最相關的經驗、技能和成就。 – 刪除或淡化不相關的細節,以確保履歷 **簡潔** 和 **針對性**。- 工作經驗部分限制在 2-3 個最相關的角色- 每個角色下的要點限制在 2-3 個最相關的影響
2. **行動驅動的結果**: – 使用 **強有力的動詞** 和 **可量化的結果**(例如,百分比、收入、效率提升)來突出影響。
3. **關鍵字優化**: – 自然地整合職位描述中的 **關鍵字** 和短語,以便優化 ATS(申請者追蹤系統)。
4. **額外建議** *(如果存在缺口)*: – 如果履歷與職位描述不完全對齊,建議: 1. **額外的技術或軟技能**,我可以添加以強化我的個人資料。 2. **證書或課程**,我可以參加以彌補缺口。 3. **項目想法或經驗**,更好地與角色對齊。
5. **格式**: – 以 **乾淨的 Markdown 格式** 輸出調整後的履歷。 – 在最後包含一個 **”額外建議”** 部分,附上可行的改進建議。
—
### 輸入:- **我的履歷**: {resume_string}
– **職位描述**: {jd_string}
—
### 輸出: 1. **調整後的履歷**: – 一份 **Markdown 格式** 的履歷,強調相關的經驗、技能和成就。 – 整合職位描述中的 **關鍵字** 以優化 ATS。 – 使用強有力的語言,且不超過 **一頁**。
2. **額外建議** *(如果適用)*: – 列出 **技能**,可以加強與角色的對齊。 – 建議 **證書或課程** 以參加。 – 建議 **具體的項目或經驗** 以發展。”””
第三步:發送 API 請求
使用上述提示模板,我們可以動態構建一個提示,並將其發送到 OpenAI 的 API。
# 創建提示prompt = prompt_template(resume_string, jd_string)
# 設置 API 客戶端client = OpenAI(api_key=my_sk)
# 發送 API 請求response = client.chat.completions.create(model=”gpt-4o-mini”,messages=[{“role”: “system”, “content”: “專業履歷撰寫者”},{“role”: “user”, “content”: prompt}], temperature = 0.7)
# 提取回應response_string = response.choices[0].message.content
第四步:保存新履歷
最後,我們可以提取優化後的履歷和改進建議。
# 將新履歷與改進建議分開response_list = response_string.split(“## Additional Suggestions”)
對於履歷,我們可以使用 markdown 函式庫將 markdown 輸出轉換為 HTML。然後,使用 weasyprint 將 HTML 轉換為 PDF。
# 保存為 PDFoutput_pdf_file = “resumes/resume_new.pdf”
# 將 Markdown 轉換為 HTMLhtml_content = markdown(response_list[0])
# 將 HTML 轉換為 PDF 並保存HTML(string=html_content).write_pdf(output_pdf_file, stylesheets=[‘resumes/style.css’])
這是最終結果的樣子。
對於改進建議,我們可以直接打印出來。
display(Markdown(response_list[1]))
附加:建立 GUI
雖然上述代碼在某種程度上簡化了這個過程,但我們可以做得更好。為了提高這個工具的可用性,我們可以使用 Gradio 創建一個簡單的網頁介面。
最終產品如下所示。用戶可以更簡單地上傳他們的履歷 markdown 檔案,並將其粘貼到任何職位描述中。我還添加了一個區域,讓用戶在導出為 PDF 之前可以編輯新的履歷。
範例代碼可以在這裡的 GitHub 倉庫中找到。查看 YouTube 影片,看看我如何講解這段代碼。
雖然將履歷針對特定職位描述進行調整是一種有效的方式來讓申請脫穎而出,但這可能相當繁瑣。在這裡,我們將介紹如何使用 Python 和 OpenAI 的 API 實現一個 AI 驅動的履歷優化工具。
如果你有任何問題或想深入了解任何主題,請在評論中告訴我 :)— y2b.io 幫助我撰寫這篇文章。
本文由 AI 台灣 運用 AI 技術編撰,內容僅供參考,請自行核實相關資訊。
歡迎加入我們的 AI TAIWAN 台灣人工智慧中心 FB 社團,
隨時掌握最新 AI 動態與實用資訊!