ハウテレビジョン技術ブログ

『外資就活ドットコム』『外資就活ネクスト』『mond』を開発している株式会社ハウテレビジョンの技術ブログです。

履歴書のテキストから「相性のいい転職エージェント」を提案する:LLM × Embeddingレコメンドエンジンの設計と運用

外資就活ネクストの開発チームです。今回は、候補者のプロフィールをもとに相性のよい転職エージェント(以下 AGT)を提案する新機能「トップエージェント厳選レコメンド」をリリースしました。AIを活用して候補者と相性のよいAGTを数名に絞り込み、「なぜこのAGTがあなたに合うのか」という推薦理由まで自動生成する仕組みです。 この記事では、機能全体の設計の考え方と、開発を通じて得られた学びを紹介します。

背景: 「たくさんのAGTから自分に合う人を選ぶ」のは難しい

弊社サービスには多数の転職エージェントが登録しています。しかし候補者からすると、得意領域・過去の実績・利用者のクチコミといった情報を一人ずつ見比べて「自分に合うAGT」を探すのは大きな負担です。

そこで、候補者のプロフィール(経験・職歴・希望など)を入力として、相性のよいAGTを自動で数名提案する機能を作ることにしました。重視したのは2点です。

  • マッチ精度: 単なるキーワード一致ではなく、経歴やクチコミの意味的な近さで測りたい
  • 納得感: 「なぜこのAGTなのか」を候補者ごとの文脈で説明し、次の行動につなげたい

この2つを、AIによる意味的なマッチングと、文章生成の組み合わせで実現しました。

やったこと

全体の流れ

処理は大きく「候補の絞り込み → 個別評価 → 表示の最適化」という段階で構成しています。

  1. 意味的なマッチングによる絞り込み: 候補者とAGTのプロフィールを意味ベースで比較し、相性の高そうなAGTを絞り込む
  2. 個別評価と理由生成: 絞り込んだAGTそれぞれについて、推薦理由・要約・強みを生成する
  3. 表示の最適化: 一定の品質を満たすものを選び、候補者の希望が偏りなくカバーされるようにラインナップを整える

応答速度とコストを両立させるため、事前に計算できる部分はバッチで先回りして用意し、リクエスト時の処理を軽くする構成にしています。生成処理自体は時間がかかるため非同期に切り出し、フロントエンドは生成状況を確認しながら結果を表示します。

意味的なマッチング

候補者とAGTのそれぞれを「提供できるもの」と「求めているもの」という複数の観点でとらえ、意味的な近さを評価しています。さらに、実績や条件面のマッチも加味して総合的な相性を判断します。特定の領域に提案が偏らないよう、候補者の希望が幅広くカバーされるような調整も入れています。

推薦理由の生成

絞り込んだAGTについて、AIが候補者ごとの文脈に沿った推薦理由を生成します。「自分ごと」として読めて、次の行動につながる文章になるよう、構成や書き出しに工夫を凝らしました。ここはリリース後も継続的に改善を重ねている部分です。

また、生成される文章の品質を一定に保つために、AI任せにせず「絶対に守らせたいルールはアプリケーション側で担保する」設計にしています。これにより、表現のばらつきや好ましくない言い回しを抑えています。

周辺機能の整備

レコメンド本体に加えて、運用に必要な機能もあわせて整えました。

  • エージェント詳細の表示: 結果画面からAGTの詳細やアワード受賞歴を確認できるようにした
  • ブロック機能: 候補者が特定のAGTを表示対象から外せるようにした
  • メール導線の追加: 各種完了メールから本機能へ誘導し、流入を計測できるようにした
  • 不正利用対策: ボットによる不正な操作を防ぐ仕組みを追加した

ハマったこと

リクエストごとに重い計算をしていて遅かった

当初はリクエストのたびに重い計算を走らせていたため、候補者を待たせる時間が長くなってしまいました。事前に計算できる部分を定期的なバッチで先に用意しておく構成に変えることで、リクエスト時の処理を大幅に軽くしました。

「プロンプトに書けば守ってくれる」とは限らない

AIに対して「こう書いてほしい/これは書かないでほしい」と指示しても、完全には守られないことがありました。そこで前述のとおり、絶対に守らせたいルールは指示文ではなくアプリケーション側で強制する方針に切り替え、出力の品質を安定させました。AIの出力は「お願い」ではなく「後段で検査・調整する」前提で設計するのが堅実だと再確認しました。

作ったものを畳む判断

開発の途中で実装した機能の一部は、体験を検討し直した結果より良い形が見えたため、思い切って取りやめました。一度作った機能でも、より良い設計が見えたら素直に畳むほうが、長期的には負債を残しません。

外部サービスの制約と付き合う

AIの処理は外部サービスに依存するため、利用制限や一時的な障害とどう付き合うかが重要でした。処理を適切な単位に分割したり、障害時のふるまいを丁寧に設計したりすることで、安定した運用ができるようにしています。

まとめ

意味的なマッチングで候補を絞り、AIで一人ずつ評価して納得感のある理由を添える——この組み合わせによって、候補者が自分に合うエージェントに出会いやすい体験を実現できました。「守るべきルールはアプリケーション側で担保する」「重い処理は先回りして軽くする」といった、AIを実プロダクトに載せるうえでの勘所も多く得られました。精度・コスト・速度のバランスを取りながら、今後も改善を続けていきます。