👩‍✈️

Microsoft の Copilot stack とは何か

2023/06/30に公開

はじめに

Microsoft Build 2023 で発表された Copilot stack という概念はどことなくふわっと理解をされている場面が多いため、明確な理解を目指して言語化をしてみました。直訳すると「副操縦士の山積み」ですが、決してこういうことではありません。

Copilot stack の間違ったイメージ

なお、本記事の内容は Microsoft CTO Kevin Scott による基調演説をベースに自分なりに解釈を行い日本語でまとめたものです。
https://build.microsoft.com/en-US/sessions/bb8f9d99-0c47-404f-8212-a85fffd3a59d?wt.mc_ID=Build2023_comms_corp_OT_oo_bon_bon

1. Copilot とは

Copilot stack を理解するためには、まず Copilot という概念について正確に理解をしておく必要があります。

Copilot とは「マルチターンでの会話ができるエージェント機能を持ち、複雑な認知機能を要するタスクの手助けをするソフトウェアの総称」です。

数年前に GitHub Copilot から始まった Copilot という概念は、人々のソフトウェア開発を手助けすることだけにとどまらず、より広い範囲に適用することができます。GitHub Copilot 以外では、例えば以下のようなサービスは全て Copilot と呼ぶことができます。

また、昨今話題に上がることの多い Azure OpenAI Service を使って独自開発をした RAG アプリケーションも、チャットインターフェースを持ち人間の情報検索を手助けしているため Copilot と呼ぶことができるでしょう。

なお、Microsoft における AI 製品の位置づけは人間のタスクを置き換える Autopilot (自動操縦) ではなく、人間のタスクを手助けする Copilot (副操縦士) とされており、あくまでも主体 (操縦士) は人間です。

2. Copilot stack とは

Copilot stack は Copilot "technology" stack (Copilot の技術スタック) のことです。つまり、Copilot を開発する際に共通化することができる開発パターンのことです。

Microsoft は優れた UX の Cipilot を設計する方法と、それらを安全に、コスト効率良く、責任を持って、さらに大規模に提供するための技術スタックとは何かを理解するために、全ての Copilot に共通する部分に目を向ける必要がありました。Microsoft が各種 Copilot の電撃発表やユーザーへの提供をこれほど迅速に行えたのは、立ち止まって時間とエネルギーを費やし、この Copilot stack を構築してきたためです。

Copilot stack はエンジニアにとってどこか馴染みのある 3 層構造からなります。

  • Copilot frontend (Copilot フロントエンド)
  • Orchestration (オーケストレーション)
  • Foundation models (基盤モデル)

Copilot stack の正しいイメージ

2.1. Copilot frontend (フロントエンド)

Copilot フロントエンドは UI のレイヤーです。従来のソフトウェアの UI と大きく異なるのは、人間にとって最も自然なコミュニケーション方法である自然言語によって指示を出せるようにするという点です。

エイダ・ラブレスが世界で初めてプログラムを書いて以降 180 年以上にわたり変わらなかったのが、人間はコンピューターが実行可能な処理を細かく理解しておく必要があるということでした。そして明示的な指示を必要とするコンピューターと人間をどのようにしてつなぐか、UI やソフトウェア設計の試行錯誤が繰り返されてきました。Copilot フロントエンドでは、これまでの方法とは異なり、人間側が Copilot が持つ能力 (e.g. コーディング、情報検索、等) をある程度理解しておく必要があること以外はあまり多くのことを意識せずに指示を出すことができます。

具体的な実装としては、多くの Copilot でチャットウィンドウ、パラメータ設定、プラグイン設定のみといったシンプルな UI になることが多いと思います。

ChatGPT (+プラグイン) の UI

New Bing の UI

2.2. Orchestration (オーケストレーション)

オーケストレーションは Copilot の一連の処理フローなどのビジネスロジックを定義するレイヤーです。このレイヤーで Copilot に必要な以下のような処理を制御します。

  • メタプロンプトの付加
    • e.g. OpenAI の言語モデルのシステムメッセージによるモデルのふるまいの設定
  • ユーザーから受け取ったプロンプトの処理
    • e.g. ReAct における Reasoning (ユーザーの意図理解や処理実行計画の作成)
  • ユーザーへのレスポンスの生成とフィルタリング
  • グラウンディング (外部ナレッジベースによる情報引用)
  • プラグイン実行制御
    • e.g. 実行計画に沿った処理実行 (ReAct における Actioning)

オーケストレーションレイヤーは開発者が任意の技術を選択して開発しますが、OSS のフレームワークを活用することもできます。最も有名なものとしては LangChain、Microsoft 製のものとしては Semantic Kernel が存在しています。また、現在プレビュー中の Azure Machine Learning prompt flow では、LangChain や Semantic Kernel によるオーケストレーションを GUI により開発することができます。

プラグインによる拡張性に関しては、Microsoft は各種 Copilot 製品において既に OpenAI 社の ChatGPT と同じオープンなプラグイン規格を採用しており、ChatGPT や様々な Copilot の間での相互運用が可能になることで、プラグインエコシステムのより一層の拡大が想像されます。また、Azure OpenAI Service においても今後プラグイン機能が追加されることが発表されています。

2.3. Foundation models (基盤モデル)

基盤モデルレイヤーにはオーケストレーションレイヤーから呼ばれるモデルを配置します。考えられる選択肢は大きく分けて 3 種類存在します。

Hosted foundation models (ホスト型基盤モデル)

大規模なモデルがベンダーによりホストされ API として利用できるサービスにて、ベースモデルをそのまま使う選択肢です。具体的には、Azure OpenAI Serivce のベースモデルを使うことがこの選択肢に相当します。

この場合、AI インフラは Microsoft と OpenAI が共同開発している Microsoft Azure ベースのスーパーコンピューティング環境になります。(PaaS であるため開発者側は特に意識する必要はありません)

Hosted fine-tuned foundation models (ホスト型ファインチューニング済み基盤モデル)

大規模なモデルがベンダーによりホストされ API として利用できるサービスにて、ファインチューニングモデルをファインチューニングして使う選択肢です。具体的には、Azure OpenAI Serivce のファインチューニング対応モデルをユーザーのデータによりファインチューンして使うことがこの選択肢に相当します。

この場合も、AI インフラは Microsoft と OpenAI が共同開発している Microsoft Azure ベースのスーパーコンピューティング環境になります。

BYO models (任意のモデル)

任意の OSS モデルを独自に学習する、もしくは公開されている学習済みモデルを任意の環境で実行して使う選択肢です。

AI インフラに関しては、独自にモデルの学習を行う場合、Azure Machine Learning のコンピューティングクラスター のようなスケーラブルなマネージドコンピューティング環境で学習を行い、同じく Azure Machine Learning のオンラインエンドポイントのようなモデル公開機能を使って学習が済んだモデルを Web サービスとして公開して、オーケストレーターから利用可能な状態にするような構成が考えられます。

公開されている学習済みモデルを使いたい場合も、AI インフラとしてはほぼ同じ構成が考えられます。Hugging Face などで公開されている学習済みモデルを Azure Machine Learning のコンピューティングクラスターのような環境にプルして必要に応じてファインチューニングを実施し、チューニングが済んだモデルを同じく Azure Machine Learning のオンラインエンドポイントのようなモデル公開機能を使って Web サービスとして公開して、オーケストレーターから利用可能な状態にするような構成が考えられます。

おわりに

以上が Copilot stack の概念と主要な構成要素です。Copilot stack はあくまでも Microsoft が考える技術スタックであるため、開発時に必ずしもこのパターンに従う必要はありません。しかし、執筆時点でこれほど大規模に Copilot 製品を展開できている例は他に存在していませんので、最も実績がある参考にすべき開発パターンではないかと思います。

以上です。🍵

Microsoft (有志)

Discussion