Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Azureで社内文書から回答可能な生成AIチャットサービスを作った話

Seiya Umemoto
September 27, 2024

 Azureで社内文書から回答可能な生成AIチャットサービスを作った話

イベントページ:
・TECH PLAY:https://www.tech-street.jp/entry/2024/09/12/153251
・connpass:https://tech-street.connpass.com/event/313803/
イベントレポート:
・TECH Street:https://www.tech-street.jp/entry/2024/09/12/153251
関連テックブログ:
・Azureで社内文書から回答可能な生成AIチャットサービスを作った話
 ・URL:https://techtekt.persol-career.co.jp/entry/tech/240520_01
・Azure AI Searchのセマンティックハイブリッド検索によるRAGの性能向上について
 ・URL:https://techtekt.persol-career.co.jp/entry/tech/240521_01

Seiya Umemoto

September 27, 2024
Tweet

More Decks by Seiya Umemoto

Other Decks in Technology

Transcript

  1. 会社説明 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved.

    2 社名:パーソルキャリア株式会社 設立:1989年6月15日(創業) 従業員数 グループ売上高(億円) はたらきがいのある 会社ランキング
  2. 自己紹介 • 名前:梅本 誠也 • 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
  3. 目次 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved.

    6 はじめに 結論 概要の説明 取り組んだこ と 今後の課題 まとめ Appendix Q&A
  4. 社内向けチャットサービスChatPCAとは • 社内イントラ用のボットサービス:きゃりーちゃん – ルールベースのため、読み込ませた定型の資料内容以外のこ とは回答ができない Copyright © PERSOL HOLDINGS

    CO., LTD. All Rights Reserved. 8 • 課題点 • 日々蓄積する社内データに対して柔軟に対応すること は現実的に不可能、、 • ChatPCA • Chat + PCA(パーソルキャリア) • パーソルキャリア内で利用される生成AIチャットサー ビスのこと • 標準チャットとして一般的な質問に対する回答は可能 社内文書を参照して回答を可能にする 生成AIを活用して上手く対応をしたい
  5. 課題と解決策 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved.

    9 社内文書は基本的にMicrosoft Sharepointで管理 • どういった文書をどこからどのように探したら良いかが不透明 • 社内文書を検索して見つけても文書の中から該当箇所を探すの は大変、、 4月から新卒や中途のメンバーが大勢ジョイン 文書の特定と回答の生成を同 時に行える機能の開発
  6. 今回の話の前提 • 社内向けチャットサービス(ChatPCA)の対象ユーザー – 社内の6000人ほどのフロント・バックオフィスのメンバー Copyright © PERSOL HOLDINGS CO.,

    LTD. All Rights Reserved. 10 • 社内文書検索はまだβ版であり継続した改善が必要 • ユーザーからのFBをもとに機能・非機能面の改善が必要 • 対象の文書はtxt, PDF, Word, Excel, PowerPoint • 埋め込みフォントが組み込まれたPDFファイル等は対象 外 • 今後OCR等を導入して対応予定
  7. 社内文書検索機能をリリースしてみて • 機能としての効果 – 既存の標準チャットではできなかった社内用語を元にした回答が可能に – 社内の勤怠や申請フロー等々、業務上の基本的な情報に関する質問に回答が可能に • 大変だった/苦労したこと –

    GPT-4を使うと運用コストとして負担が大きいためGPT-3.5でパフォーマンスを担保す る必要があった • ハイブリッド検索でパフォーマンスを補完(後のスライドで説明します) – LangChainのバージョンアップによる周辺パッケージのデグレ • 初めはVercel AI SDKを使っていたが、GPT-4でchat_historyが反映されなくなる バグがあってピュアなLangChainにリプレイスする必要があった – etc. Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 12
  8. 生成AIの概要 • 生成(系)AI Copyright © PERSOL HOLDINGS CO., LTD. All

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

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

    18 引用:https://www.ariseanalytics.com/activities/report/20230818-2/ RAG – Retrieval Augmented Generation(検索拡張生成)
  11. アーキテクチャ 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 分析データ の可視化 分析データ の転送 メタデータ の加工 検索用インデ ックスの作成
  12. 選定技術 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
  13. 取り組んだことについて Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved.

    23 プロンプトに 関して チャンク分割 インデックス のAnalyzer 検索クエリの 生成 検索スコアの 閾値 文書の取得 回答の生成
  14. 検索用クエリの生成から回答の生成まで-プロンプト • プロンプトチューニング – 日本語で扱うことを想定しているため基本的に日本語で指示用のプロンプトを作成 • 検索クエリと回答生成用のLLMにそれぞれプロンプトテンプレートを指定 • 検索クエリを生成するLLM用のプロンプト –

    チャット履歴 + ユーザーの入力プロンプトで検索クエリを生成 • 回答を生成するLLM用のプロンプト – チャット履歴 + コンテキスト(文書データ) + ユーザーの入力プロンプトで回答を生成 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 24
  15. チャンク分割 • 文書を適切な粒度に分割 • 分割したチャンクをそれぞれ埋め込みベクトルに変換し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/
  16. インデックスのAnalyzer • Azure AI Searchのインデックスとは? • 検索可能なコンテンツ • 様々なメタデータ(ファイルのタイトル、中身、作成日時等々)で全文検索、ベク トル検索、ハイブリッド検索、フィルタリング等々が可能になる

    • ElasticSearch等で使うインデックスと似たような意味合い • この後のスライドで紹介する全文検索をする際に必要な設定 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 26 参照:https://blog.langchain.dev/tutorial-chatgpt-over-your-data/
  17. インデックスの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/
  18. 検索用クエリの生成から回答の生成まで-検索クエリの生成 • ただ、ベクトル検索単体だと、、 – ベクトル空間上で距離の遠い文書を取りに行けない、、 • ハイブリッド検索 – 全文検索とベクトル検索の組み合わせ •

    全文検索を組み合わせることで – ベクトル空間上で距離の遠い文書を全文検索のスコアで補完して取りに行けるようにな る Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 29 マメールにつ いて教えてく ださい マメールとは企業担当 者へ継続的に接点を〜 ベクトル化して検索 距離が遠いので取りに行けない、、 マメール、教え る、くださる 品詞分解 全文+ベクトルで検索 関連する文書を取得して正 しい回答を得られる
  19. 検索用クエリの生成から回答の生成まで-検索クエリの生成 - ただそれでも課題が、、 - AZといった短い+他の用語と衝突しやすい単語 – AZは他にもAvailability Zone等の意味を持っていてLLMも混同する、、 - 全文検索をしても文書への距離が遠い分参照ができていない、、

    – 全文とベクトルの両方で距離が遠くなり文書を特定しづらくなる - 解決策 – Azure AI Searchのアナライザーの前段に独自の形態素解析のトーカナイザー(今回は Kuromojiを使用)を配置することで検索の精度を向上させた。 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 30 AZについて 教えてくださ い AZとは「案件増加」の ことで〜 ベクトル化して検索 距離が遠いので取りに行けない、、 AZ 名詞のみを抽出 全文+ベクトルで検索 関連する文書を取得して正 しい回答を得られる
  20. 検索用クエリの生成から回答の生成まで-文書の取得 • ドキュメント情報の取得方法(Chain) – Stuff – Map_reduce – Refine –

    Map_rerank Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 32 Stuff Refine Map_reduce Map_rerank
  21. 検索用クエリの生成から回答の生成まで-文書の取得 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved.

    35 元の文書チャンクのプロンプト長をLLMの入力に収めたいか? Stuff 文書チャンクを並行で処理するか? Yes No: 短縮して収めたい Map_rerank スコアリングを設定するか Map_reduce Refine Yes: チャンク同士に依存関係がない Yes No No: チャンクの 処理順を担保したい 今回はプロンプト長がLLMの入力にそのまま収められるサイズであり、 元の記述をそのまま使いたかったため、Stuffを選択
  22. プロンプト評価の仕組み作り • 現状のプロンプト評価のやり方 – チームメンバーにエクセルシートに入力や結果、それに対する評価を記載いただいてい る – 現実的に運用していくのは難しい、、 • ある程度自動化したい

    – CI上でプロンプトの出力結果をスコアリングできるようにしたい • Langsmith, mlflow, Ragas等々候補がある Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 38 引用:https://python.langchain.com/docs/langsmith/walkthrough
  23. 社内文書の拡充 • 現状の社内文書検索機能の課題 – 参照している社内文書の質に大きく影響される、、 • 参照している社内文書が間違っていれば回答を間違える – ハルシーネーションが発生してしまう、、 •

    社内文書が不足していればそもそも回答ができない – 欲しい情報を紹介している文書を増やしていく • フォーマットを整えていく – その文書がどういったものなのかを説明する文言を加えたり、カテゴリを明記していく • 例えば、社内用語の文書であれば、カテゴリ:社内用語といった説明を加える等 • Word, Excel, PowerPoint等々の非構造化データ – 埋め込みフォントやテキストボックスのフォーマットに対する技術的な対処方法は検討 中 Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 39
  24. まとめ • 社内のドキュメントをもとにチャットをできるようにしたいというニーズ に応え、社内文書検索機能をリリースしました • パーソルキャリア独自の社内用語等に回答ができるように検索の仕組みに 工夫を加えました – ハイブリッド検索 •

    更に形態素解析を加えることでパフォーマンスを向上 – 検索スコアの閾値 – etc. • 今後の課題点に関して以下の2点に関して話しました – プロンプト評価の仕組み作りについて – 社内文書の拡充に関して Copyright © PERSOL HOLDINGS CO., LTD. All Rights Reserved. 41