Slide 1

Slide 1 text

Azureで社内文書から回答可 能な生成AIチャットサービ スを作った話 パーソルキャリア株式会社(PCA) データエンジニア 梅本 誠也 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved.

Slide 2

Slide 2 text

会社説明 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 2 社名:パーソルキャリア株式会社 設立:1989年6月15日(創業) 従業員数 グループ売上高(億円) はたらきがいのある 会社ランキング

Slide 3

Slide 3 text

ミッション Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 3

Slide 4

Slide 4 text

主力サービス Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 4

Slide 5

Slide 5 text

自己紹介 • 名前:梅本 誠也 • X(旧Twitter): @seiyasm18 • 業務: – データエンジニア • 法人データ基盤構築 – アプリ(LLM)エンジニア • 社内向けの生成AIチャットサービスの開発 • 経歴 – 韓国5年間留学、フィリピン&アメリカ短期留学経験有り – 学生時代の研究テーマ:自動トレード • 趣味: – 登山、ランニング、キングダム、技術関連のオフ会 • 好きなプログラミング言語: – Go, TypeScript, Python • 好きなサービス: – EKS, Google Cloud Run, Azure AI Search Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 5

Slide 6

Slide 6 text

目次 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 6 はじめに 結論 概要の説明 取り組んだこ と 今後の課題 まとめ Appendix Q&A

Slide 7

Slide 7 text

はじめに • 社内向けチャットサービスChatPCA とは • 課題と解決策 • 今回の話の前提 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved.

Slide 8

Slide 8 text

社内向けチャットサービスChatPCAとは • 社内イントラ用のボットサービス:きゃりーちゃん – ルールベースのため、読み込ませた定型の資料内容以外のこ とは回答ができない Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 8 • 課題点 • 日々蓄積する社内データに対して柔軟に対応すること は現実的に不可能、、 • ChatPCA • Chat + PCA(パーソルキャリア) • パーソルキャリア内で利用される生成AIチャットサー ビスのこと • 標準チャットとして一般的な質問に対する回答は可能 社内文書を参照して回答を可能にする 生成AIを活用して上手く対応をしたい

Slide 9

Slide 9 text

課題と解決策 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 9 社内文書は基本的にMicrosoft Sharepointで管理 • どういった文書をどこからどのように探したら良いかが不透明 • 社内文書を検索して見つけても文書の中から該当箇所を探すの は大変、、 4月から新卒や中途のメンバーが大勢ジョイン 文書の特定と回答の生成を同 時に行える機能の開発

Slide 10

Slide 10 text

今回の話の前提 • 社内向けチャットサービス(ChatPCA)の対象ユーザー – 社内の6000人ほどのフロント・バックオフィスのメンバー Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 10 • 社内文書検索はまだβ版であり継続した改善が必要 • ユーザーからのFBをもとに機能・非機能面の改善が必要 • 対象の文書はtxt, PDF, Word, Excel, PowerPoint • 埋め込みフォントが組み込まれたPDFファイル等は対象 外 • 今後OCR等を導入して対応予定

Slide 11

Slide 11 text

結論 ・社内文書検索機能をリリースしてみ て Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved.

Slide 12

Slide 12 text

社内文書検索機能をリリースしてみて • 機能としての効果 – 既存の標準チャットではできなかった社内用語を元にした回答が可能に – 社内の勤怠や申請フロー等々、業務上の基本的な情報に関する質問に回答が可能に • 大変だった/苦労したこと – GPT-4を使うと運用コストとして負担が大きいためGPT-3.5でパフォーマンスを担保す る必要があった • ハイブリッド検索でパフォーマンスを補完(後のスライドで説明します) – LangChainのバージョンアップによる周辺パッケージのデグレ • 初めはVercel AI SDKを使っていたが、GPT-4でchat_historyが反映されなくなる バグがあってピュアなLangChainにリプレイスする必要があった – etc. Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 12

Slide 13

Slide 13 text

概要の説明 • 生成AIの概要 • ChatPCAのアーキテクチャ • 選定技術 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved.

Slide 14

Slide 14 text

生成AIの概要 • 生成(系)AI Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 14 引用:https://www.brainpad.co.jp/doors/contents/about_generative_ai/

Slide 15

Slide 15 text

生成AIの概要 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 15 引用:https://www.brainpad.co.jp/doors/contents/about_generative_ai/

Slide 16

Slide 16 text

生成AIの概要-プロンプトエンジニアリング Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 16 引用:https://aismiley.co.jp/ai_news/what-is-prompt-engineering/

Slide 17

Slide 17 text

生成AIの概要-プロンプトエンジニアリング Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 17 引用:https://aismiley.co.jp/ai_news/what-is-prompt-engineering/

Slide 18

Slide 18 text

生成AIの概要-RAG Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 18 引用:https://www.ariseanalytics.com/activities/report/20230818-2/ RAG – Retrieval Augmented Generation(検索拡張生成)

Slide 19

Slide 19 text

LangChainとは • 大規模言語モデル(LLM)を活用してアプリケーションやサービスを開発す るためのOSSライブラリ。 – LLMを使った処理のフローを抽象化して実装ができる Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 19 引用:https://www.projectpro.io/article/langchain/894

Slide 20

Slide 20 text

アーキテクチャ Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 20 ユーザー Microsoft SharePoint Microsoft Azure App Service Cosmos DB Azure OpenAI Service Azure AI Search Blob Storage Azure Machine Learning Power BI Azure Functions 社内文書取り込み 社内文書データの ベクトル化 Azure Front Door WAF Policy チャットUI チャット履歴&分析用データ 質問と社内文書から 回答を生成 質問に関連する 社内文書を検索 LangChain Next.js 分析データ の可視化 分析データ の転送 メタデータ の加工 検索用インデ ックスの作成

Slide 21

Slide 21 text

選定技術 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 21 • 開発言語:TypeScript • フレームワーク:Next.js • 認証認可:NextAuth.js • インフラ:Azure • データベース:Azure Cosmos DB(NoSQL) • 自動テスト:Vitest, Playwright • CI/CD:Github Actions • LLM:Azure OpenAI(AOAI) • その他:LangChain.js

Slide 22

Slide 22 text

取り組んだこと ・プロンプトに関して ・検索クエリの生成 ・回答の生成 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved.

Slide 23

Slide 23 text

取り組んだことについて Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 23 プロンプトに 関して チャンク分割 インデックス のAnalyzer 検索クエリの 生成 検索スコアの 閾値 文書の取得 回答の生成

Slide 24

Slide 24 text

検索用クエリの生成から回答の生成まで-プロンプト • プロンプトチューニング – 日本語で扱うことを想定しているため基本的に日本語で指示用のプロンプトを作成 • 検索クエリと回答生成用のLLMにそれぞれプロンプトテンプレートを指定 • 検索クエリを生成するLLM用のプロンプト – チャット履歴 + ユーザーの入力プロンプトで検索クエリを生成 • 回答を生成するLLM用のプロンプト – チャット履歴 + コンテキスト(文書データ) + ユーザーの入力プロンプトで回答を生成 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 24

Slide 25

Slide 25 text

チャンク分割 • 文書を適切な粒度に分割 • 分割したチャンクをそれぞれ埋め込みベクトルに変換しAzure AI Searchに保存 • チャンク分割と埋め込みベクトルの生成にはAzure AI SearchのSkillsetを使用 • チャンクサイズ • 1000で指定 • オーバーラップ(文書同士の重なり度合い) • 200で指定 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 25 参照:https://blog.langchain.dev/tutorial-chatgpt-over-your-data/

Slide 26

Slide 26 text

インデックスのAnalyzer • Azure AI Searchのインデックスとは? • 検索可能なコンテンツ • 様々なメタデータ(ファイルのタイトル、中身、作成日時等々)で全文検索、ベク トル検索、ハイブリッド検索、フィルタリング等々が可能になる • ElasticSearch等で使うインデックスと似たような意味合い • この後のスライドで紹介する全文検索をする際に必要な設定 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 26 参照:https://blog.langchain.dev/tutorial-chatgpt-over-your-data/

Slide 27

Slide 27 text

インデックスのAnalyzer • Azure AI Searchにおける、日本語向けのAnalyzer(検索分析エンジン)の 主な種類 • Standard Lucene • Japanese Lucene • Japanese Microsoft • 「Japanse Lucene」を選択 • 「ファイル名」と「チャンク(分割した文書の内容)」の2項目に適用 • この2つの項目は基本的に日本語で記載されている • 英語の検索も考慮する場合はStandard Luceneの方が適切だが、今回はそういったユー スケースを想定していない • Japanese LuceneかJapanese Microsoftの二択の中で、Luceneの元となっている Apache LuceneはElasticSearchの検索エンジンということで、使い慣れていることも あり前者を選択した Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 27 参照:https://blog.langchain.dev/tutorial-chatgpt-over-your-data/

Slide 28

Slide 28 text

検索用クエリの生成から回答の生成まで-検索クエリの生成 • 検索クエリを生成するLLM – クエリの生成速度とコストを考慮してGPT-3.5を使用 • チャット履歴とユーザーの入力を加味して適切な文書検索用のクエリを生 成してくれる – 生成したクエリをベクトル化して関連する文書を取得する Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 28 チャット履 歴+ユーザ ーの入力 GPT3.5に より適切な 検索用のク エリに変換 変換したク エリをベク トル化 関連する文 書を検索

Slide 29

Slide 29 text

検索用クエリの生成から回答の生成まで-検索クエリの生成 • ただ、ベクトル検索単体だと、、 – ベクトル空間上で距離の遠い文書を取りに行けない、、 • ハイブリッド検索 – 全文検索とベクトル検索の組み合わせ • 全文検索を組み合わせることで – ベクトル空間上で距離の遠い文書を全文検索のスコアで補完して取りに行けるようにな る Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 29 マメールにつ いて教えてく ださい マメールとは企業担当 者へ継続的に接点を〜 ベクトル化して検索 距離が遠いので取りに行けない、、 マメール、教え る、くださる 品詞分解 全文+ベクトルで検索 関連する文書を取得して正 しい回答を得られる

Slide 30

Slide 30 text

検索用クエリの生成から回答の生成まで-検索クエリの生成 - ただそれでも課題が、、 - AZといった短い+他の用語と衝突しやすい単語 – AZは他にもAvailability Zone等の意味を持っていてLLMも混同する、、 - 全文検索をしても文書への距離が遠い分参照ができていない、、 – 全文とベクトルの両方で距離が遠くなり文書を特定しづらくなる - 解決策 – Azure AI Searchのアナライザーの前段に独自の形態素解析のトーカナイザー(今回は Kuromojiを使用)を配置することで検索の精度を向上させた。 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 30 AZについて 教えてくださ い AZとは「案件増加」の ことで〜 ベクトル化して検索 距離が遠いので取りに行けない、、 AZ 名詞のみを抽出 全文+ベクトルで検索 関連する文書を取得して正 しい回答を得られる

Slide 31

Slide 31 text

検索用クエリの生成から回答の生成まで-検索スコアの閾値 • 文書取得に関してのもう一つの課題点、、 • 検索して取得するドキュメントの数は現在6つ • 関連するドキュメントとそうではない文書が入り混じることで、回答に乱れが 出てしまう • 閾値となる検索スコアを設けることでノイズを弾く – 現状は0.015で、いつでも変更できるよう環境変数で指定してある Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 31 関連度が十分に高い 文書で回答を生成

Slide 32

Slide 32 text

検索用クエリの生成から回答の生成まで-文書の取得 • ドキュメント情報の取得方法(Chain) – Stuff – Map_reduce – Refine – Map_rerank Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 32 Stuff Refine Map_reduce Map_rerank

Slide 33

Slide 33 text

検索用クエリの生成から回答の生成まで-文書の取得 • Stuff – 一番シンプルな手法、チャンクをそのままLLMに投入 • Map_reduce – 個々のチャンクから並列に回答を作り、最後に回答をまとめて生成 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 33

Slide 34

Slide 34 text

検索用クエリの生成から回答の生成まで-文書の取得 • Refine – チャンクから順番に回答を生成していく • Map_rerank – 個々のチャンクからスコア付きのサマリーを作り、スコアの高いものから回答を生成 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 34

Slide 35

Slide 35 text

検索用クエリの生成から回答の生成まで-文書の取得 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 35 元の文書チャンクのプロンプト長をLLMの入力に収めたいか? Stuff 文書チャンクを並行で処理するか? Yes No: 短縮して収めたい Map_rerank スコアリングを設定するか Map_reduce Refine Yes: チャンク同士に依存関係がない Yes No No: チャンクの 処理順を担保したい 今回はプロンプト長がLLMの入力にそのまま収められるサイズであり、 元の記述をそのまま使いたかったため、Stuffを選択

Slide 36

Slide 36 text

検索用クエリの生成から回答の生成まで-回答の生成 • ユーザーの設定したLLM(GPT-3.5かGPT-4)によって回答を生成する • 参照した文書データをLangChainのChainの機能を使って取得できるので、 これを回答の末尾に加える Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 36 [社内参考文書] 1. パーソル用語集.xlsx 2. etc.. チャット履歴 関連文書 ユーザーの 入力 回答

Slide 37

Slide 37 text

今後の課題 ・プロンプト評価の仕組み作り ・社内文書の拡充 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved.

Slide 38

Slide 38 text

プロンプト評価の仕組み作り • 現状のプロンプト評価のやり方 – チームメンバーにエクセルシートに入力や結果、それに対する評価を記載いただいてい る – 現実的に運用していくのは難しい、、 • ある程度自動化したい – CI上でプロンプトの出力結果をスコアリングできるようにしたい • Langsmith, mlflow, Ragas等々候補がある Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 38 引用:https://python.langchain.com/docs/langsmith/walkthrough

Slide 39

Slide 39 text

社内文書の拡充 • 現状の社内文書検索機能の課題 – 参照している社内文書の質に大きく影響される、、 • 参照している社内文書が間違っていれば回答を間違える – ハルシーネーションが発生してしまう、、 • 社内文書が不足していればそもそも回答ができない – 欲しい情報を紹介している文書を増やしていく • フォーマットを整えていく – その文書がどういったものなのかを説明する文言を加えたり、カテゴリを明記していく • 例えば、社内用語の文書であれば、カテゴリ:社内用語といった説明を加える等 • Word, Excel, PowerPoint等々の非構造化データ – 埋め込みフォントやテキストボックスのフォーマットに対する技術的な対処方法は検討 中 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 39

Slide 40

Slide 40 text

まとめ Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved.

Slide 41

Slide 41 text

まとめ • 社内のドキュメントをもとにチャットをできるようにしたいというニーズ に応え、社内文書検索機能をリリースしました • パーソルキャリア独自の社内用語等に回答ができるように検索の仕組みに 工夫を加えました – ハイブリッド検索 • 更に形態素解析を加えることでパフォーマンスを向上 – 検索スコアの閾値 – etc. • 今後の課題点に関して以下の2点に関して話しました – プロンプト評価の仕組み作りについて – 社内文書の拡充に関して Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 41

Slide 42

Slide 42 text

Q&A Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved.