今回はECサイト用のバーチャルアシスタント パワーアップしたお題に8社が挑む!
RAG、マルチモーダル、AIエージェント AI Challenge Dayで生成AIの高みを目指せ
Copilot Studioでマルチチャネルに対応したJBCC
3社目はJBCCの山﨑拓己氏。チャレンジに前向きな6人がJBCCグループ内から集結した。評価スクリプトは21.400点と、20点越えをマークしたという。
基本的なRAGアーキテクチャを採用しており、多種多様なデータセットをAI Searchから検索できるように構成。検索結果をベースにLLMで生成された回答は、AIエージェントからApp ServiceとAPIを介して、さまざまなチャンネルに対応する顧客向けヘルプアシスタント、フィードバック分析アシスタントに渡されるという仕組みだ。ヘルプアシスタントはCopilot Studioを用いることで、マルチチャネルに対応しているという。
続いてカスタマーストーリーの紹介。注文した商品の到着時間を知りたい顧客は、注文履歴や配送状態を調べなくとも、LINEからヘルプアシスタントに問い合わせれば、すぐに確認できる。社内向けのアシスタントは、社内のマーケティングや営業が顧客からのフィードバックを収集するのに使える。「さまざまなデータを扱えるAIエージェントに対して、Teamsから質問を投げるだけで、分析し、回答を返してくれれば、お客さまに対して有効なものになると感じています」と山﨑氏は語る。
続いてRAGの構築で苦労した点の紹介。まずマルチモーダルに関しては、シンプルにデータをベクトル化し、AI Searchに入れてみたが、マルチベクトルの検索がうまくいかず、四苦八苦した。そのため、最初に画像を検索し、続いてテキストを検索させるようにエージェントを設定した。
また、LangChainで実装したエージェントも、個々のタスクで呼び出せるツールを定義。ツールの説明やプロンプトにおいて、実行順序を明記したり、質問によってどの検索を、どういった順序で実行するかを判断できるように構成した。その他、検索精度を向上させるべく、ゲーム名の名寄せや感情分析をLLMで実施したり、OData形式のフィルタ文字列をLLMで生成。日付のフィルタリングだけでも、うまく生成できるようにプロンプトを調整した。「フィルタリングできるだけでも、ユーザーのリクエストに基づいた回答は返せるのですが、生成AIがなかなか言うことを聞いてくれず、日付だけでもうまくようにした」と山﨑氏は振り返る。
また、ユーザーの要求を理解し、回答を生成するために必要なタスクをリストアップし、動的に処理を行えるように処理を実装。構造化出力を用いて、タスク感が連携しやすくしたり、構造化出力の際に出力定義クラスの情報のみならず、クラスの実装や意図をプロンプトに記述するなどの工夫も実施した。タスクの概要やリストアップした理由も生成させ、各タスクを共有することで、一貫性のある処理が行なえるようにしたという。
審査員の日本マイクロソフトの花ケ﨑氏は、「Copilot Studioを使っていただき、ありがたかった。さまざまなチャネルの入力をそこで対応すれば、いろんなデータ形式いけると思いました。また、エージェントもLangChainを実装し、OpenAIのStructured Outputを使っているところもすごいなと思いました。僕自身もXのデータはStructured Outputを使って生成したけど、一件もエラー出なかった。この機能はまじで使った方がいいと思っていたので、こちらを使ったことで、エラーの出ない安全なシステムができていると思いました」とコメントした。
カスタマーストーリーからのRAG構築でチャレンジ満載の大塚商会
4番手は大塚商会の廣木開氏。今回のメンバー4人はAzure OpenAIを用いたNLP案件の上流工程をサポートしつつ、協力会社と連携したAI技術全般の研究開発を行なっている。とはいえ、4人中3人はAI開発に携わってまだ半年とのこと。「不安でいっぱいでしたが、挑戦ということで、がんばりました。チャレンジ精神だけは誰にも負けません」と廣木氏はアピールした。
評価スクリプトの結果は20.075点。こちらは提出期限の15分前に出た数字だが、直前まではGPTのgroundlessの点数が低かったため、19.000だった。改善前はコンテキストの生成ロジックとして、関連ドキュメントをすべて投げて、その中から回答に生成したドキュメント内容を提示するように指示していたが、参照ドキュメントを提示する過程で、情報が簡素化されていた。これを改善することで20点台に乗せることができたという。
カスタマーストーリーは、かなり具体的なペルソナAさんを想定した。AさんはノートPCを検討しているが、PC関連の知識がないため、必要な情報を得るための検索スキルを持ち合わせていない。事前になにを調べればよいかもわからないが、口コミサイトの情報は参照している。あとはマイクロソフトの製品が好きというのが人物像だ。
Aさんの課題をブレイクダウンし、RAGでの解決法に落とし込むと、まず「購入前にやるべきことがわからない」という課題に関しては 購入前の支援サポート、購入時の流れ、注意点の説明を提供すること。続いて「予算がわからない」という課題に関しては、PCの相場情報とユースケースごとの料金プランの提案を考えた。また、口コミ好きのAさんの「評価のよいものだけ見たい」というニーズに関しても、SNSの情報から評価のよいオススメのリスト一覧を用意することにした。
こうしたカスタマーストーリーから構想したアーキテクチャでは、アプリケーションはPromptFlowを用いたアプリをApp Serviceにデプロイする。ユーザーからの質問は、質問解析アシスタントで処理することとし、まずは探索データベースの解析を実施。その後、該当の探索データベースに対して別のアシスタントがクエリを生成し、その検索結果を基に回答アシスタントが回答を生成するという流れだ。ただし、こちらは構想。実際はPromptFlowでのデプロイがうまく行かず、ML Notebooksでの実装になった。データソースの連携に関しては、Cart and Order APIでの実装を見送った。
成果物のイメージも披露された。たとえば、Aさんが「マイクロソフト製品で、TeamsとZoomが利用できて、この写真のゲーム(Minecraft)ができるパソコンを欲しい」と質問すると、ユーザーの質問の目的を予測して、その目的を達成するための「お節介な回答」まで生成する。具体的には、モデルを提案するだけではなく、料金一覧やSNSの口コミ、Minecraftを快適にプレイするための周辺機器などを提案してくれる。
続いてRAGの構築で工夫した点・感想。「今回はデータの前処理を作るというより、アーキテクチャを工夫して回答精度を上げようと思いました」(廣木氏)とのことで、前述の通り、データソースに対するクエリを自動化して、各データベースから質問に関連する情報を抽出する仕組みを構築した。
ユーザープロンプトに関しても、どのデータベースを探索すべきかを解析する仕組みを実装し、コストやレスポンス、回答精度の向上を図った。クエリを生成する際にデータベースの構造や持っている情報を学習させるという工夫も行なった。また、 Azure Cosmos DB for MongoDBのデータをベクトル化することで、自然文での検索に対応できるようにしたり、ベクトル検索において関連度のしきい値を決める際、平均値に標準偏差を加えることで、動的に検索対象を抽出できるようにした。
一方で苦労したのは、UI開発の経験がなかったこと。GitHubのサンプルやPromptFlowの記事を用いて実装を試みたが、うまくいかなかったため、今後勉強しなければならないポイントになった。また、データベースの接続が社内ネットワーク環境でうまくいかず、原因究明に時間がかかったのも苦労したという。
とはいえ、得たモノも大きい。「当イベントに参加したことで、初めて知った知識や初めて触れる機能も多く、大変貴重な経験ができました。今回はアプリケーションの実装までに至らず、悔しい部分も多かったのですが、今後の成長に向けた1つの目標ができました。悔しい思いをバネに、引き続きAI開発スキルの向上を目指していきたい」と廣木氏は締めた。
日本マイクロソフトの内藤氏は、「若手と言っていましたが、素晴らしい技術の実装でしたし、時間内という制約事項があった中で、きちんと判断させて、ゴールに結びつけていくところも、ご苦労されたのではないかと思います。PromptFlowをあきらめたのは、もっと時間があればという話だと思いますが、ML notebookでのリカバリ策もよかったし、なによりスコアをきちんと載せてきたのは素晴らしい。次はUIができるメンバーを連れてきてもらって、チャレンジしてほしい」とエールを送った。
週刊アスキーの最新情報を購読しよう