こんにちは。ゼンアーキテクツ代表の miyake です。2025年もよろしくお願いします!
2024 年 11 月に開催された AI Challenge Day において、ゼンアーキテクツは生成 AI を活用したエージェントベースの RAG 構築に挑戦しました。
このブログ記事では、ZEN のアーキテクチャ設計に焦点を当て、その技術的な側面を解説します。なお、Azure を利用した実装の詳細や生成 AI の具体的な活用方法については、次回以降の記事で ZEN の Geek 達が詳細に解説する予定です。
AI Challenge Day は、Microsoft のパートナーが参加するコンテストで、生成 AI の革新的な利用方法を競うイベントです。今回のテーマは、AI エージェントを活用した RAG(Retrieval-Augmented Generation)の構築で、参加者は EC サイトを想定したシステムの構築を行いました。我々 ZEN Architects もこのコンテストに参加しており、イベントの様子は主催である ASCII のレポートや YouTube チャンネルでご覧いただけます。
ZEN のアーキテクチャは、今回のテーマが EC サイトをターゲットにしていることから、Well Architected Framework における特に「信頼性」と「パフォーマンス効率」を重視して設計しました。この点については生成 AI を使ったシステムであっても設計アプローチに変わりはありません。
そして、このアーキテクチャを設計する過程で、Durable Functions と Cosmos DB という重要な2つの技術選定を行った背景について以下に説明していきたいと思います。
ZEN のアーキテクチャにおいて、AI エージェントの実装には Durable Functions を採用しています。主な選定理由としては、AI エージェント部分に求められたシナリオが、入力の内容に応じて処理が分岐したり統合したりといったワークフロー的な実装が最適と判断したためです。Durable Functions は、複数のエージェントが並列でタスクを実行した後、それらを集約するといったようなシナリオを容易に実装することができる Azure Functions の拡張機能です。
Durable Functions を AI エージェントに適用する理由やメリットについては、Durable Functions の作者である Chris がブログを書いているので、興味のある方は参考にしてください。
このブログで Chris も強調しているように、AI エージェントの実装において、ここ最近登場してきたような AI エージェント専用を謳ったライブラリやフレームワークを前提とした設計にするより、まず従来からある安定した実装技術(今回の Durable Functions のように)やシンプルなコードで実現できることから出発し、その上で必要に応じて最適なライブラリを組み込む方が、開発体験も良く扱いやすいアーキテクチャになると考えています。ちなみに、LangChain のような生成 AI に特化したライブラリは Durable Functions と組み合わせて使うことが可能です(今回のアーキテクチャでは必要がなかったため採用していません)。
また、膨大かつ多岐に渡るデータセットからの情報検索には Cosmos DB の NoSQL にて提供されているベクトル検索機能を活用しました。Cosmos DB の柔軟なスケーラビリティと低遅延のデータアクセスは、生成 AI におけるリアルタイム検索のニーズに応えるものであり、今回のアーキテクチャ全体における信頼性とパフォーマンス効率を高めるための重要なファクターになります。
このデータベース技術により、RAG に必須となる効率的な情報検索と取り出しが実現され、ユーザーに対して常に最新かつ関連性の高い情報を提供することが可能になりました。Cosmos DB のベクトル検索機能については、既に GA された安定している技術なので、興味のある方は公式ドキュメントを参照してください。
Cosmos DB のベクトル検索の最も優れている点の一つは、既存のデータベースにベクターインデックスを柔軟に追加・変更できることです。今回のシナリオのように試行錯誤を繰り返しながら AI エージェントの機能を徐々に拡充していくようないわゆるアジャイルな開発スタイルでは、この柔軟性が非常に役に立ちました。
ゼンアーキテクツでは、AI Challenge Day で実装したアーキテクチャをさらに進化させる活動を続けています。AI Challenge Day開催後にアップデートされた Azure の新機能や AOAI の最新モデルを積極的に取り入れて検証を続けています。次回以降の記事ではそのあたりにも触れられると思いますのでお楽しみに!