🐬

Azure Open AI を用いて新機能を開発した話

2024/05/29に公開

はじめに

直近で「Azure OpenAI Service」を利用して製品の新機能開発をしました。

Thinkings株式会社で「Azure OpenAI Service」を利用するのは初めてだったので、エンジニア観点でのレポートをまとめたいと思います。

リリースした新機能の概要などは PR TIMESでプレスリリースの記事を上げていますので、そちらも合わせてご覧ください。(採用管理システムsonar ATS、「AI求人作成アシスタント(β)」をリリース

用いられている技術に関する話

プロンプト設計

開発初期はプロンプトの設計に関してベスプラが無い中で苦労しましたが、いくつかのコツをつかみつつ進めていきました。

私たちなりのコツは下記3点

  1. 必要な事だけ書く
  2. 文章構造を分かりやすくする
  3. 末尾に出力のリード部分を書く

コツ①:必要な事だけ書く

補足とか書きたい気持ちはわかるんだけれども、プロンプトは必要な事だけ書いておけばいい。

与えられた採用職種の、人材要件を作成してください。
下記の表現は使わないでください。
・性差別表現
 →男性または女性など、性別を理由に求人や採用の対象から排除する禁止表現
・年齢差別表現
 →年齢の表記は禁止
・特定の人を差別・優遇する表現
与えられた採用職種の、人材要件を作成してください。
下記の表現は使用しないでください。
・性差別表現
・年齢差別表現
・特定の人を差別・優遇する表現

コツ②:文章構造を分かりやすくする

「人間にとって」ではなく「GPTにとって」分かりやすい文章構造にすることです。
「#指示」のようにラベル付けするとGPT君は理解しやすいようです。

# 指示  
修正内容を求人に反映してください。  
求人のセクションは下記の7つだけにしてください。  
・求人名  
・訴求メッセージ  
・業務内容  
・必要資格・経験  
・望ましいスキル・経験  
・望ましい人物像  
・待遇  
  
下記の表現は使用しないでください。  
・性差別表現  
・年齢差別表現  
・特定の人を差別・優遇する表現  
  
# 修正前の求人  
※ここに修正前の求人名~待遇が入る※  
  
# 修正内容  
※ここにエンドユーザーからの入力内容が入る(例:望ましいスキル・経験に「Typescriptでの開発経験」を足してください) ※

コツ③:末尾に出力のリード部分を書く

GPTは文章を繋げるように結果を生成してくれます。プロンプトの末尾に得たい出力のリード部分を付けておくことで、「以下が求人要件になります」のような不要な一文が入らなくなります。

コツ③:末尾に出力のリード部分を書く.png

GPTモデルとコストの話

今回の開発ではGPT-3.5とGPT-4の両モデルを利用しました。

開発初期はGPT-3のみを利用して開発を進めていたのですが、ペルソナや求人票の生成といった複雑なものになるとGPT-3.5ではクオリティ不足だったため、GPT-4の導入を検討しました。

GPT-4は上記の複雑なものでもクオリティ担保できる性能だったため、GPT-4の導入を決定しました。

その分、かかるコスト(価格)も10~40倍と無視できない倍率だったため、「単純な処理はGPT-3.5を利用する」でコストを抑える工夫をしました。

【参考】
Azure OpenAI Service モデル(公式)
Azure OpenAI Service の価格(公式)

ロギングの法的観点

AIを利用するため、顧客へ安定した価値を届けられるかの未来は不確実でした。
そのため、今後に向けた施策として、下記2点を実装しました。

  1. 出力結果に対するGood/Bad👍を付けられる機能(下図)
  2. エンドユーザー・自サービス・GPTのやり取りのロギング

20240515_求人AI作成②.png

この2点目のロギングがsonar ATSの利用規約(利用データの取扱い)に引っかかりそうだったため、少し苦労しました。

観点としては「ユースケース上、個人情報や企業の機密情報を入力する可能性がある」こと。(求人票を作るためのクローズド情報は企業機密に該当するため)
今回は顧客への直接的な価値提供ではなく、機能改善のためにロギングするため、別途顧客の同意が必要になるそうです。

解決策として、個人情報や企業の機密情報を入力しない事を利用前に同意いただくような仕様を追加するようにしました。

20240515_求人AI作成③.png

本開発における究極の二択

企画/開発を行っていると、複数の仕様案から1案を選ぶことが多々あります。
「究極の二択」というと大げさですが、本開発で一番頭を悩ませた選択をご紹介します。

選択「GPTのストリーミングを実装するか否か」

「ストリーミング」とは、リアルタイムで返答が返ってくる機能のこと。

20240515_求人AI作成④-3.gif
(fps足りなくて分かりづらい。。)

最終的には「ストリーミングを実装しない」で決定しました。

ストリーミングを実装するメリット/デメリットは下記。
【メリット】
  顧客に与える印象(インパクト)が大きい(かっこいい!)

【デメリット】
 出力フォーマットの保証ができない。
 最終的に求人票のデータ構造へ変換する都合上、出力されたデータが決めたフォーマットになるよう制御する必要がある。ストリーミングを実装するとリアルタイムでエンドユーザーの手元まで届いてしまうため、表示データの正確性を担保できない

おわりに(開発者の製品に対する感想)

本開発ではプロダクトマネージャーの方と密接にコミュニケーションを取りつつ進めました。
開発スプリントを回して、出来上がった製品を検査&議論しながら進めた甲斐あって、今回開発した機能はユーザーに喜ばれると自信をもって言えます。

今回開発した機能は、ベテランの採用担当者というよりかは、若手の採用担当者さんとか複数の業務を兼任している忙しい採用担当者の方に喜ばれるんじゃないかと思っています。

割と採用担当も他のことをしながらやっていると聞くことも多いので、最初にざっくりと作ってくれる機能として喜ばれるんじゃないかなと思います。

Thinkingsテックブログ

Discussion