使用 Amazon Bedrock 构建 AI 驱动的招聘助手
本文展示了如何利用 Amazon Bedrock 构建 AI 招聘助手,以提升候选人评估效率、生成个性化面试问题,并为招聘决策提供数据驱动洞察。解决方案采用无服务器架构,集成了 Amazon Bedrock Converse API、AWS Lambda、Amazon API Gateway 等组件,并通过 Amazon Bedrock Guardrails 实现负责任 AI 评估。
根据一项针对 748 名 HR 领导者的调查,招聘人员每个职位平均花费 17.7 小时处理行政工作,超过两个工作日。2024 年 SmartRecruiters 的调查进一步显示,45% 的人才招聘负责人将一半以上的工作时间花在可自动化的任务上。这种行政负担导致表面化的筛选,使合格候选人被忽略,而匹配结果往往基于格式和关键词密度而非真实能力对齐。
本文演示了如何使用 Amazon Bedrock 构建 AI 驱动的招聘助手,该助手能为候选人评估带来效率提升,生成个性化面试问题,并为人工招聘决策提供数据驱动洞察。文中提供的参考架构仅用于学习目的,并非生产就绪解决方案。Amazon Bedrock 和所用 AWS 服务是通用工具,客户可组合用于多种用例,包括招聘流程。该架构展示了一种可能的方法,客户应根据自身需求进行调整。
您将学习部署专门的 AI 能力,用于简历解析、候选人评分、技能评估和面试问题生成——通过 Amazon Bedrock Guardrails 实现 PII 匿名化、提示攻击检测和偏见相关内容过滤——所有这些通过协调的无服务器架构协同工作。解决方案使用 Amazon Bedrock Converse API 和 Amazon Nova Pro、AWS Lambda 进行数据处理、Amazon API Gateway 进行路由、Amazon DynamoDB 和 Amazon S3 进行数据存储,以及 Amazon Bedrock Guardrails 进行负责任的 AI 评估。
解决方案概述
AI 候选人筛选助手利用 Amazon Bedrock 提供的基础模型(FM)协助候选人评估、简化面试准备,并为招聘决策提供数据驱动洞察。该解决方案对简历进行全面分析,计算多维兼容性评分,并根据职位要求和候选人资料生成个性化面试问题。
认证和前端层使用 AWS Amplify 托管 Web 应用,Amazon Cognito 进行用户认证。Amazon Cognito 处理用户注册、登录,并提供 JWT 令牌,这些令牌由 Amazon API Gateway Cognito 授权器在每个 API 请求上进行验证。
后端层使用 Amazon API Gateway 将请求路由到专门的 AWS Lambda 函数,每个 Lambda 函数处理特定工作流。Lambda 函数调用 Amazon Bedrock Converse API 执行深度简历分析、计算兼容性评分并生成特定岗位的面试问题。
架构图
下图展示了 AI 招聘助手的架构。
架构包含以下关键部分:
- 前端层:AWS Amplify 托管响应式 React Web 应用,为招聘人员提供直观界面,用于管理职位发布、查看 AI 生成的候选人评估以及访问个性化面试准备材料。
- 安全层:Amazon Cognito 管理用户注册和认证,提供 JWT 令牌,由 Amazon API Gateway Cognito 授权器在每个 API 请求上进行验证。AWS Identity and Access Management(IAM)角色为 AWS Lambda 函数提供最低权限,以与存储和 AI 服务交互。客户有责任正确配置这些安全控制。
- API 层:Amazon API Gateway 通过 RESTful 端点协调客户端与服务器之间的通信,用于职位管理、AI 驱动的候选人匹配、简历上传处理和面试问题生成服务。
- 处理层:专门的 AWS Lambda 函数处理招聘工作流,每个函数配置了适当的超时和内存。
- AI 处理层:Amazon Bedrock FM 使用 Converse API 进行深度简历分析、计算多维兼容性评分、生成特定岗位的面试问题并识别可转移技能。Amazon Bedrock Guardrails 过滤每个请求,对输入中的 PII 进行匿名化,阻止简历内容中的提示注入攻击,并拒绝涉及候选人人口统计信息的响应。
以下代码片段展示了解决方案如何使用 Amazon Bedrock Guardrails(在模型处理前自动对输入中的 PII 进行匿名化)、基于证据的评分结构化提示以及偏见感知系统指令:
import json
SYSTEM_PROMPT = """You are an expert recruitment analyst. Evaluate candidates based exclusively on demonstrated skills, experience, and qualifications. Do not reference or make assumptions based on candidate names, contact details, demographics, or personal characteristics. Focus only on job-relevant qualifications. For every claim, cite the specific resume text as evidence."""
ANALYSIS_PROMPT = """Analyze the following candidate resume against the job requirements. Return a structured JSON response.
{job_description}
{resume_content}
Provide your analysis in the following JSON format:
{{"compatibilityScore": 0-100,
"scoreJustification": "Evidence-based reasoning with resume quotes",
"technicalSkills": {{"matched": [{{"skill": "X", "evidence": "resume quote"}}], "missing": ["skill3"], "transferable": [{{"skill": "Y", "evidence": "resume quote"}}]}},
"experienceAnalysis": {{"relevantYears": 0, "industryAlignment": "high|medium|low", "keyAccomplishments": ["accomplishment with evidence"]}},
"strengths": ["strength with specific resume evidence"],
"concerns": ["concern with context"],
"interviewQuestions": [{{"question": "Targeted question text", "purpose": "What this question evaluates", "lookFor": "Ideal response indicators"}}],
"overallRecommendation": "strong_match|good_match|partial_match|weak_match"}}"""
response = bedrock_client.converse(
modelId=model_id,
system=[{"text": SYSTEM_PROMPT}],
messages=[{"role": "user", "content": [{"text": ANALYSIS_PROMPT.format(job_description=job_description, resume_content=resume_content)}]}],
inferenceConfig={"maxTokens": 4096, "temperature": 0.2, "topP": 0.9},
guardrailConfig={"guardrailIdentifier": guardrail_id, "guardrailVersion": guardrail_version, "trace": "enabled"}
)
try:
analysis = json.loads(response["output"]["message"]["content"][0]["text"])
except json.JSONDecodeError:
analysis = {"error": "Model returned invalid JSON"}注意:我们使用低温度(0.2)以产生一致且可复现的候选人评估。当 Guardrails 介入时(例如,阻止嵌入简历中的提示注入),响应中包含 GUARDRAIL_INTERVENED 操作——实现错误处理以记录这些事件并向招聘人员返回安全的回退响应。
数据层:Amazon DynamoDB 存储结构化的职位发布和分析结果。Amazon S3 提供候选人简历的存储,采用服务器端加密(AES-256)、阻止公共访问和仅允许 HTTPS 的存储桶策略。
以下步骤描述了招聘人员分析候选人时的请求流程:
- 招聘人员打开 AWS Amplify 托管的 Web 应用,并通过 Amazon Cognito 进行身份验证。
- 招聘人员创建职位发布,包含角色要求、所需技能和经验水平。
- 招聘人员上传候选人简历(PDF、DOCX 或 TXT 格式)到该职位。
- 前端向 Amazon API Gateway 的 /matches 端点发送 POST 请求。
- API Gateway Cognito 授权器验证请求头中的 JWT 令牌。
- API Gateway 将经过身份验证的请求路由到 AI 招聘 Lambda 函数。
- Lambda 函数从 Amazon DynamoDB 检索职位发布,从 Amazon S3 检索候选人简历,并调用 Amazon Bedrock Converse API,传入职位要求和简历内容。
- Amazon Bedrock 分析每位候选人,计算兼容性评分,识别优势与担忧,并生成个性化面试问题。
- 结果存储在 Amazon DynamoDB 中,并返回到 Web 界面供招聘人员查看。
关键能力
智能简历分析:解决方案处理简历后,分析技能深度和经验相关性,而非仅依赖关键词匹配。它针对职位要求计算兼容性评分,并提供简历文本中的具体证据,同时识别手动筛选常遗漏的可转移技能。
高级候选人匹配:系统使用自然语言处理(NLP)将候选人资料与职位描述进行比较,提供基于百分比的匹配分数和引用的简历证据。它突出候选人的优势和担忧,并按兼容性对候选人进行排序,以便招聘人员高效审阅。
个性化面试准备:解决方案根据特定职位和候选人背景创建量身定制的面试问题,生成包含评分标准的评估框架,并提供详细的面试指南,包括开场问题和跟进建议。
工作流程自动化:系统协助完成重复性行政任务,支持批量操作,通过 RESTful API 与现有系统集成,并提供使用分析。
前提条件
开始之前,请确认您具备:
- 一个 AWS 账户,并具有 Amazon Bedrock、AWS Identity and Access Management (IAM)、AWS CloudFormation、Amazon API Gateway、Amazon Cognito、Amazon DynamoDB、Amazon S3、AWS Lambda 和 AWS Amplify 的相应权限。
- 在部署 AWS 区域中为 Amazon Nova Pro 启用的 Amazon Bedrock 模型访问权限。您也可以使用其他支持的模型。有关当前模型可用性,请参阅按 AWS 区域划分的模型支持。
- 已安装并配置了适当凭证的 AWS CLI v2.0 或更高版本。
- 已安装 Python 3.10 或更高版本。
- 终端或命令提示符访问权限。
成本估算:测试 100 名候选人的总成本约为每月 1-2 美元。Amazon Bedrock(Nova Pro 输入/输出令牌每百万分别 $0.80/$3.20)在 100 次分析下成本低于 1 美元。Amazon Bedrock Guardrails 每名候选人增加约 $0.01。其他服务在测试量下属于 AWS 免费套餐范围。详细估算请使用 AWS 定价计算器。
重要提示:确保 AWS 区域一致性
请确保以下所有配置使用相同的 AWS 区域:您的 aws configure 默认区域、已启用 Amazon Bedrock 模型访问的区域以及部署期间创建的所有资源。
部署解决方案
部署后端基础设施。您将承担本解决方案所用 AWS 资源的费用。
控制台将重定向到 AWS CloudFormation,并在堆栈参数中预填充模板 URL。
- 对于“堆栈名称”,输入部署名称(默认:AIRecruiterAssistantBlogSetup)。
- 对于“BedrockModelId”,选择要使用的 Amazon Bedrock 模型(默认:Amazon Nova Pro)。
- 查看堆栈配置。
- 选择“创建堆栈”。
成功部署后,从 CloudFormation 堆栈的“输出”选项卡中记下以下值:
- ApiGatewayUrl
- CognitoUserPoolId
- CognitoClientId
- AWSRegion
- AmplifyAppUrl
- AmplifyConsoleUrl
部署前端应用
- 下载 AIRecruitingAssistantFrontEndAmplifyDeployment.zip 文件。
- 在 CloudFormation 输出下导航到 AmplifyConsoleUrl。
- 选择 ai-recruitment-system-frontend 应用。
- 选择“部署更新”。
- 对于“方法”,选择“拖放”。
- 选择要上传的 .zip 文件。
- 选择“保存并部署”。
测试解决方案
基础设施部署并启动前端应用后,您可以通过 Web 界面创建职位、上传简历并查看 AI 生成的分析结果。测试流程包括注册用户、创建职位、上传候选人简历以及查看兼容性评分和面试问题。