- AI基盤
AIVolutionXの中身の話

はじめに
2017年度入社の田﨑です。
先日社内向けに生成AIとチャット可能なWebサイト「AIVolutionX(以下、あいちゃん)」がリリースされました。
今回この開発・構築に携わったので構成要素や使っている技術についての説明や触れてみた感想について記していきたいと思います。
構成概要
あいちゃんは、Microsoft Azureの独自テナント上に構築されています。
構成要素は下記のものがあります。
他にも利用サービスがいくつかありますが、主要なものだけ取り上げます。
- ユーザ認証機能
- Entra ID(旧Azure AD)
- Webインターフェース機能
- Azure WebApps
- チャット履歴/テンプレート保管機能
- Azure CosmosDB
- 生成AIとマルチモーダル機能
- 基本チャット(質問に対する回答生成やファイル解析等、いわゆる生成AI)機能
- Azure OpenAI(gpt4o)
- ファイル検索
- Azure AI Search
- Azure OpenAI(embedding)
- 画像生成
- Azure OpenAI(dall-e)
- 画像認識
- Azure OpenAI(gpt4o)
- インターネット検索
- Bing Search API
- 基本チャット(質問に対する回答生成やファイル解析等、いわゆる生成AI)機能

Entra ID
担当より払い出されたメアドと設定したパスワードでログインする機能を担っています。
おなじみのMicrosoftのログインですね
Azure WebApps
あいちゃんは、typescript言語で記述を行うNext.jsというフレームワークで開発しています。
ランタイムとしてNode.jsが必要になりますが、WebAppsだと、豊富なランタイムと複数のバージョンが用意されているので、プルダウンで選ぶだけで環境構築が可能になるので、とても便利です。
また、デプロイについてもGithubやAzure DevOps等のGitサービスを用いた自動デプロイの構成も設定できるので、リリースも簡単にできます(まだできてないので早めにやりたい)。
この構成がまだできない場合でも、VSCodeの拡張機能を使ったお手軽デプロイの方法やWebAppsにSFTPで接続し直接アップロードできる機能もあるので柔軟に対応できます。
まだ未検証ですがスケールアップの設定も容易にできそうなので、今後利用者増加が見込めるようであれば触っていきたいところです。

Azure CosmosDB
CosmosDBは、Key-Value型のNoSQLデータベースです。
RDBMS(mysqlやpostgresql等)と比較して、高い可用性が特徴です。
なお、Key-Value型でデータを格納するので、RDBMSで使えるSQLのJOIN句などが使えなかったりするので少し引っ掛かるポイントでした。
ただ、純粋なKey-Value型なのでデータの扱いが容易で、Azure portal上でも簡単に編集・閲覧が可能です。
Azure OpenAI
あいちゃんの中心機能であるOpenAIです。
といっても設定項目はほぼなく、払い出されるAPIエンドポイントにトークン載せてリクエストするだけでGPTとお話しすることが可能です。
Azure OpenAIでは、定期的に新しいGPTモデルが選択可能になり、現在あいちゃんでは、gpt-4oを利用しています。 切り替えも簡単なので簡単に新しいGPTを試すことができます。なお、モデルが変わると各々作成したプロンプトの調整も必要になってしまうのでそういう時は逆にモデルを固定にすることも可能です。
そのあたり柔軟にできるのも特徴のひとつです。
OpenAIの画面でデプロイしたモデルを使ってチャットしてみたり、画像生成(DALL-E)ができたり、一時的にデータを食わせて(簡易RAG)みたりと開発者にとって簡単に試せる機能が備わっているのでとっつきやすい印象でした。
また、このページからなんと簡易的にAIチャットが可能なサイトのデプロイをワンぽちで行ってくれる機能もあるのも驚きポイントでした。

Azure AI Search
Azure AI Search(旧Azure Cognitive Search)は、あいちゃんではAIエンリッチメントの機能を活用しています。 AIエンリッチメントとは、ドキュメントのキーフレーズやエンティティ抽出、感情分などAIを利用してデータの加工・強化を行うことです。
あいちゃんでは、サイト上でファイルアップロードの操作が行われると、AI Searchによってファイルの分析(Indexing、ベクトル化)がされます。これによりファイルの内容を理解したうえであいちゃんと会話できるようになります。
実はAI Searchは設定項目が細かく、またアップデートが早いためやってみたMSLearn(公式サイト)やブログを参考にしてもUIが変わっており参考にならず、全然学習してくれずで非常に躓きました。。
徐々に使いやすくなっているため現在機能提供できていますが、さらに潜在的な機能(私が見つけられてないだけですが、)を活用し、あいちゃんに取り込めるかもしれないポイントと思っています。
Bing Search API
Bing Search APIはAzureのサービスではなくグローバルなサービスですが、あいちゃんではLLM内に情報がない(今日の天気など最新情報等)と判断されたときにインターネット検索するために利用しています。
これはLLMのFunction Callingという機能を使って実現しています。
Function Callingは、LLMへのリクエスト時に「○○の情報を取得する関数を用意している、引数はこんな種類だよ」というjson定義の情報を渡す必要があります。
回答すべき内容がLLMが保持していない情報の時は、LLMから「この関数をこの引数で実行して」と返答があるので、LLMの代理でクライアント(ここではLLMを呼び出した端末/ホスト)から関数を実行し、実行結果をLLMに渡して情報を付加することで回答することが可能な機能です。
こうすることで、LLMが持っていない情報でもLLMが知っている内容かのように返答させることが可能になります。
例えば社内に文書検索APIや資産管理APIなどがあれば、AIがあたかも社内の情報を知っているような振る舞いができるのでとても応用範囲が広いですよね。
まとめ
生成AI技術についてAzure側の機能やUIアップデートが速く吸収するのが難しい分野だと感じましたが、注目されていたり業務改善に直結する可能性を秘めているので追従していく必要があると思っています。
最近だとマルチエージェント化等の話題が流行ってますが、進化の速いAI技術をキャッチアップしつつ日常業務の効率化に最適な技術を検証しながら見極め、あいちゃんの改善・機能追加を行っていきたいと思います!