第2回 AI Challenge Dayに参加してきました!
角川アスキー総合研究所と日本マイクロソフトが共催した「第2回 AI Challenge Day」というイベントに参加してきました。
・日時: 2024年6月11日〜12日
・場所: 日本マイクロソフト 品川本社
![第2回 AI Challenge Dayに参加してきました!](https://x-tech.pasona.co.jp/media/img/10376_mv.jpg)
角川アスキー総合研究所と日本マイクロソフトが共催した「第2回 AI Challenge Day」というイベントに参加してきました。
・日時: 2024年6月11日〜12日
・場所: 日本マイクロソフト 品川本社
知識・情報
2024/07/10 UP
このイベントは、生成AIを使った開発でよく使われる「RAGアーキテクチャ」を題材としたハッカソンで、弊社含め10社が参加しました。
普段から生成AI案件に携わっている5名でチームを結成し、しっかり前回第1回の予習もし、2日間を戦い抜いてきたので、この記事では私たちの学びや工夫について紹介したいと思います。
お題について
今回のテーマは、「世界遺産トラベルアシスタント」の開発でした。
…あれ、見たことあるぞ?
そうなのです、このお題自体は前回第1回と全く同じだったのです!
お題についての詳細な説明はイベントの場で行われ、評価に使う画像データの量が前回と比較して増えた点が大きな変更点でした。
2日間の戦略
ぜひ使おうと事前に決めていたのが以下のツールやサービスです。
- AI Search
- Prompt Flow
- Blob Storage
- Azure OpenAI (AOAI)
また、念の為、すでに業務で経験のあったContainer Appsでの構築も並行して進めることにしました。
(これがのちに大きな働きをします…!)
具体的な開発ステップは以下の通りです。
- テキストのみの質問に応答し、評価スクリプトでスコアを取得(Prompt Flow上で実施)
- 画像とテキストの質問に基づき応答し、再度評価スクリプトでスコアを取得(Prompt Flow上で実施)
- 前処理やプロンプトを工夫してスコアを改善(Prompt Flow上で実施)
- 動くものをデプロイする(WebアプリケーションをPrompt FlowからWebアプリとして公開)
promptflowを活用してとにかく動くものを作り、徐々に精度を上げていく方針です。
実際に使用したpromptflowの画面はこのような感じでした。
構築したもの
最終的に出来上がったのは以下の構成です。
App Serviceの部分に×がついていますね…
残念ながら、時間内にPromptFlowからWebアプリをデプロイすることが叶わず、UIを用意することができませんでした。
しかし、ここで救世主が登場します。
並行開発していたContainer Appsでの構築です。
マルチモーダルや凝ったUI/UXに対応することはできませんでしたが、なんとか画面から回答が返ってくるところまで実現できました。
評価スクリプトの結果
評価スクリプトを流した点数は以下のように変遷し、最終的には 19.775点(25点満点)となりました。
1回目:17.375(文書 生データのみ)
2回目:15.125(文書 Document Intelligence)※対象ファイルを少なく設定してしまい点数が落ちた
3回目:18.27(文書 Document Intelligence + 画像)
4回目:19.775(文書 Document Intelligence + 画像 + プロンプト調整)
工夫した点
AI Searchの構成
提供されたデータのうちjpg・pngは画像、その他は文書という扱いとし、文書用インデックスと画像用インデックスを別々に作成したことが第一の工夫点です。
文書用インデックスについては、①生データ ②Document Intelligenceを噛ませたデータ の2種類のインデックスを作成し、後者のほうが精度が上がることを確認しました。
Document Inteligenceは、txtファイル以外(docx, pptx, pdfなど)の元データをOCR処理をし、markdown形式にするという使い方をしています。
画像用インデックスについては、まずGPT-4oに画像を説明させて結果をJSON形式で出力、その後ファイル名をJSONに追加するという処理を行いました。
画像に写っている場所の名前(お寺の名前など)がそのままファイル名になっており、情報として有用と考えたため、このような手順をとっています。
Container Appsの準備
そもそも不測の事態に備えてContainer Appsの開発を進めていたのは良い戦略でした。
さらに、GitHub Actionsを整備してデプロイをスムーズにする構成をとるなど、本業であるSIとしての品質担保を意識した構築を行いました。
プロンプトの工夫
精度向上を狙って英語でプロンプトを作成しました。
また、評価に使う回答例のデータを確認したところ、建立年や文化財としての重要性といった情報が盛り込まれていたため、それらを含めて答えてくれるように調整をかけています。
You are an AI assistant that explains Japan's World Heritage sites.
Please answer in the language asked by the user.
Please answer the user's question based on the content of the contexts.
When answering, please include information such as the year the World Heritage site was built and its importance as a cultural asset, and write an appealing answer.
苦労した点
Prompt Flowのデプロイ
Prompt Flowで構築したものをボタン1つでそのままアプリケーションとしてデプロイするつもりだったのですが、うまくデプロイできない状況が続きました。
どうやら、VMのリソースが足りないなど色々な問題が発生していたようです…
MSの方にもサポートいただき、さまざまな角度から解決を試みましたが、残念ながら時間切れとなってしまいました。
画像側の精度向上
画像がリクエストされたときのフローとしては、
① GPT-4oでユーザーが投げた画像の解析をする
② ①の結果を使ってAI Searchの画像インデックスを検索する
③ ②の結果を使ってAI Searchの文書インデックスを検索する
④ ③の結果をcontextとし、GPT-4oにユーザーの質問を投げる
という、画像用インデックスと文書用インデックスを組み合わせたフローを検討していました。
ところが、PromptFlowで構築してみたところ、単純に画像インデックスだけを使った時よりも精度が落ちてしまったのです。
これについては、GPT-4oの精度がとても良いということの証明ですね…
そこで、ステップ②で検索した結果から画像のファイル名(=世界遺産名)のみを抽出すれば、ステップ③でより正しい情報が取得できると考えたのですが、残念ながらこの方針は構築しきれずに時間切れとなってしまいました。
Pythonコード
私たちは普段PythonとLangChainを利用してAOAI関連のサービスを開発しています。
奥の手 Container Appsの構築でも同様の構成を取ろうとしたのですが、Azureポータルから設定したAI Searchに対してLangChainを使ってアクセスしようとするとうまくいきませんでした。
調査したところ、LangChainが想定しているフィールド名と実際のフィールド名が一致しない問題があり、急遽Azure SDKを使う方針に切り替えて実装を行いました。
結果、締め切りの1時間くらい前に動かすことができたのですが、なかなかスリリングな開発となりました…
反省点・改善できそうな点
チームメンバーからはこのような声が上がりました。
- 元データをそのままDocument Inteligenceに投げた結果の一部ファイルに不要な空白がたくさん入っているものがあったので、元データに前処理を加えるとより精度を上げることができたかもしれない
- 画像のファイル名を検索に使えていればより点数が上がったのではないか
- Prompt FlowをWebアプリとしてデプロイする経験をしておけば動くものを用意して精度改善に注力できたかもしれない
- PythonからAI Searchへ接続するまでは当日までにやっておきたかった
- 点数の伸ばし方やデータの前処理の知識がもっとあると良かった
- アプリケーション周りは早急に作成し終え、閉域網によるセキュアなアプリ構築まで持って行きたかった
当日は初めて使う機能に手間取ってしまう部分もありましたが、普段の業務では触ったことのなかったサービスを使って実際に動くものを構築できたのは本当に貴重な経験でした。
また、ほかの参加企業さんの発表からは、丁寧な前処理がスコア向上の大きな鍵であると再確認することができました。 Document Inteligenceにtxt以外のファイルをそのまま投げ込まず、拡張子別に1,2段階の前処理を加えることで点数が伸びていた印象です。
2日間で得た知見を引き出しとしてしっかり持っておいて、今後の開発に活かしていきたいと思います。
おまけ
評価スクリプトの点数、SIとしてのコスト意識やセキュリティ意識を評価していただき、なんとASCII賞を受賞することができました!
当日はこのようなお部屋をお借りして開発していました。
とてもお洒落なオフィスだったのですが、開発のことで頭がいっぱいで楽しみきれなかったのが悔やまれます…笑
広報
生成AI導入支援サービスについて
弊社では、最新の生成AI導入支援サービスを提供しております。
Azure OpenAI Service等を活用し、企業のDX(デジタルトランスフォーメーション)をサポートいたします。
生成AI技術の導入を検討されている企業様は、ぜひ以下サービスをご確認ください。
Azure OpenAI Service導入支援サービス
https://www.pasona.co.jp/clients/service/xtech/technology/azure-openai-service/
求人について
また、弊社では次世代の技術を牽引する人材を募集しています。
あなたのスキルと情熱を活かし、私たちと一緒に未来のビジネスを築き上げましょう。