AI News HubLIVE
サイト内リライト7 分で読了

Amazon Bedrock を使用した AI 採用アシスタントの構築

この投稿では、Amazon Bedrock を使用して AI 駆動の採用アシスタントを構築し、候補者評価の効率化、パーソナライズされた面接質問の生成、およびデータに基づく採用判断の実現方法を紹介します。ソリューションはサーバーレスアーキテクチャを採用し、Amazon Bedrock Converse API、AWS Lambda、Amazon API Gateway などの AWS サービスを統合し、Amazon Bedrock Guardrails で責任ある AI を実現します。

ソースAWS Machine Learning Blog著者: Puneeth Komaragiri

748 名の人事リーダーを対象とした調査によると、採用担当者は1件の求人あたり平均 17.7 時間を管理業務に費やしており、これは採用1件あたり 2 営業日以上に相当します。別の 2024 年 SmartRecruiters 調査では、タレントアクquisition リーダーの 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 で利用可能な基盤モデルを使用して、候補者評価の支援、面接準備の効率化、採用判断のためのデータ駆動型インサイトを提供します。このソリューションは履歴書を総合的に分析し、多次元の互換性スコアを計算し、職務要件と候補者プロファイルに基づいてパーソナライズされた面接質問を生成します。

認証およびフロントエンド層は、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 の基盤モデルが 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 のみのバケットポリシーを適用します。

以下の手順は、採用担当者が候補者を分析する際のリクエストフローを示しています:

  1. 採用担当者は AWS Amplify がホストする Web アプリケーションを開き、Amazon Cognito で認証します。
  2. 採用担当者は、役割要件、必要なスキル、経験レベルを含む求人情報を作成します。
  3. 採用担当者はその求人に対して候補者の履歴書(PDF、DOCX、または TXT 形式)をアップロードします。
  4. フロントエンドは Amazon API Gateway の /matches エンドポイントに POST リクエストを送信します。
  5. API Gateway Cognito オーソライザーはリクエストヘッダーの JWT トークンを検証します。
  6. API Gateway は認証済みリクエストを AI 採用 Lambda 関数にルーティングします。
  7. Lambda 関数は Amazon DynamoDB から求人情報を取得し、Amazon S3 から候補者の履歴書を取得します。関数は Amazon Bedrock Converse API を呼び出し、職務要件と履歴書コンテンツを渡します。
  8. Amazon Bedrock は各候補者を分析し、互換性スコアを計算し、強みと懸念事項を特定し、パーソナライズされた面接質問を生成します。
  9. 結果は Amazon DynamoDB に保存され、Web インターフェースで採用担当者に返されます。

主要機能

インテリジェントな履歴書分析: ソリューションは履歴書を処理した後、キーワードマッチングだけに依存せず、スキルの深さと経験の関連性を分析します。職務要件に対する互換性スコアを算出し、履歴書テキストから具体的な証拠を提示します。また、手動スクリーニングでは見落とされがちな転用可能スキルを特定します。

高度な候補者マッチング: システムは自然言語処理(NLP)を使用して候補者プロファイルを職務記述書と比較し、パーセンテージベースのマッチスコアと引用付きの履歴書証拠を提供します。候補者の強みと懸念事項を強調し、互換性に基づいて候補者をランク付けし、採用担当者の効率的なレビューを支援します。

パーソナライズされた面接準備: ソリューションは特定の職務と候補者の背景に基づいて調整された面接質問を作成し、評価ルーブリックを含む評価フレームワークを生成します。詳細な面接ガイドを作成し、会話のきっかけやフォローアップの提案を提供します。

ワークフロー自動化: システムは反復的な管理タスクを支援し、一括操作をサポートし、RESTful API を通じて既存システムと統合し、使用状況分析を提供します。

前提条件

始める前に、以下を確認してください:

  • Amazon Bedrock、AWS Identity and Access Management(IAM)、AWS CloudFormation、Amazon API Gateway、Amazon Cognito、Amazon DynamoDB、Amazon S3、AWS Lambda、AWS Amplify に対する適切なアクセス許可を持つ AWS アカウント。
  • デプロイする AWS リージョンで Amazon Nova Pro の Amazon Bedrock モデルアクセスが有効になっていること。必要に応じて他のサポート対象モデルを使用できます。最新のモデル可用性については、AWS リージョン別のモデルサポートを参照してください。
  • AWS CLI v2.0 以降がインストールされ、適切な認証情報で設定されていること。
  • Python 3.10 以降がインストールされていること。
  • ターミナルまたはコマンドプロンプトへのアクセス。

コスト見積もり: 100 名の候補者でテストした場合、総コストは月額約 1~2 ドルです。Amazon Bedrock(Nova Pro の入力/出力トークンはそれぞれ 100 万トークンあたり $0.80/$3.20)は、100 回の分析で 1 ドル未満です。Amazon Bedrock Guardrails は候補者 1 人あたり約 $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

フロントエンドアプリケーションのデプロイ

  1. AIRecruitingAssistantFrontEndAmplifyDeployment.zip ファイルをダウンロードします。
  2. CloudFormation 出力の AmplifyConsoleUrl に移動します。
  3. ai-recruitment-system-frontend アプリを選択します。
  4. 「Deploy updates」を選択します。
  5. 方法として「Drag and drop」を選択します。
  6. アップロードする .zip ファイルを選択します。
  7. 「Save and deploy」を選択します。

ソリューションのテスト

インフラストラクチャがデプロイされ、フロントエンドアプリケーションが起動したら、Web インターフェースを通じて求人を作成し、履歴書をアップロードし、AI 生成の分析結果を表示できます。テストフローには、ユーザー登録、求人作成、候補者履歴書のアップロード、互換性スコアと面接質問の表示が含まれます。