開発者向けの生成 AI ソリューションの構築の概要
大規模言語モデル (LLM) によって実現される生成 AI により、ソフトウェア開発者や組織にとって刺激的で新しい可能性が開いています。 Azure OpenAI などのサービスは、使いやすい API を提供することにより AI 開発を民主化しています。その結果、任意のスキル レベルの開発者が、専門知識を必要としたり、組織にハードウェアへの投資を要求したりすることなく、高度な AI 機能をアプリケーションに統合できるようになります。
アプリケーション開発者は、どのような役割を果たすことができるか、どのような立ち位置に収まるかを理解するのに苦労することがあります。 たとえば、学習に集中する必要がある "AI スタック" のレベルについて疑問を持つかもしれません。 または、既存のテクノロジを使用って何を構築できるか、疑問に思うかもしれません。
これらの質問に答えるには、まず、すべての新しい用語とテクノロジーが、既に理解している内容にどのように当てはまるかをマッピングするメンタル モデルを開発することが重要です。 メンタル モデルを開発すると、生成 AI 機能を設計し、アプリケーションに組み込むことができます。 そのため、この一連の記事の目的は、現在のソフトウェア開発エクスペリエンスが生成 AI にどのように適用されるかを示することです。 さらに、これらの記事では、最初の生成 AI ソリューションの開発を開始するときに必要なキーワードと概念のレベル セットも提供します。
企業は生成型 AI で何を達成したいと考えていますか?
現在のソフトウェア開発エクスペリエンスが生成 AI にどのように適用されるかを理解するには、まず、企業がどのように恩恵を受けるかを理解することが重要です。
企業は、生成 AI を、カスタマー エンゲージメントを強化して、運用効率を向上させ、問題解決能力と創造性を高める手段として考えています。 生成 AI を既存のシステムに統合することで、企業はソフトウェア エコシステムを強化する機会を得ることができます。 ユーザー向けのパーソナライズされたレコメンデーションや、組織や製品固有の質問に回答できるインテリジェント エージェントなど、高度な AI 機能を使用して従来のソフトウェア機能を補完することができます。
生成 AI がビジネスに役立つ一般的なシナリオをいくつか以下に示します。
- コンテンツ生成
- テキスト、コード、画像、サウンドを生成します。 これは、マーケティング、営業、IT、社内コミュニケーションなどに役立ちます。
- 自然言語処理
- 提案やメッセージの完全な生成を通じて、ビジネス コミュニケーションを作成または改善します。
- "データとチャット"。言い換えると、ユーザーは、データベースまたはドキュメントに格納されているデータを回答の基礎として使用し、チャット エクスペリエンスで質問することができます。
- コンテンツのアクセシビリティを高めることを目的とした、コンテンツの大規模な本文の要約、編成、簡略化。
- "セマンティック検索"。つまり、正確なキーワード一致を使用せずにドキュメントやデータを検索できます。
- 言語を翻訳して、コンテンツのリーチとアクセシビリティを高める。
- データ分析
- 市場を分析し、データの傾向を特定します。
- 企業がビジネスのあらゆる領域で起こりうる変更や課題を計画するのに役立つ、"What-If" シナリオをモデル化します。
- コードを分析して改善点を提案し、バグを修正して、ドキュメントを生成します。
ご覧のように、ソフトウェア開発者は、生成 AI アプリケーションと機能を、組織が依存しているソフトウェアに統合することにより、影響を大幅に高める機会を得ることができます。
これらの種類のアプリケーションを構築する方法
負荷の高い作業は大規模言語モデル (LLM) が行う一方で、結果を統合、調整、監視するシステムは自分で構築します。 学習することはたくさんありますが、既に知っているスキルを適用できます。
- REST、JSON、または言語固有のソフトウェア開発キット (SDK) を使用して API を呼び出す
- API への呼び出しの調整とビジネス ロジックの実行
- データ ストアへの格納とデータ ストアからの取得
- 入力と結果をユーザー エクスペリエンスに統合する
- LLM から呼び出すことができる API の作成
このように、生成 AI ソリューションの開発は、既存のスキルに基づいています。
どのようなツールやサービスを利用できますか?
Microsoft は、生成 AI 開発の取り組みを開始する際に役立つツール、サービス、API、サンプル、学習リソースの開発に投資しています。 それぞれが、生成 AI ソリューションを構築するのに必要となる主要な懸念事項または責任を強調しています。 特定のサービス、API、またはリソースを効果的に利用するには、以下のことを確認することが課題となります。
- 特定の種類の生成 AI 機能における一般的な機能、役割、責任を理解していますか? たとえば、検索拡張生成 (RAG) ベースのチャット システムについて説明する概念的な記事で詳しく説明したように、システムには多くのアーキテクチャ上の責任があります。 問題に対処するシステムを設計する前に、問題のドメインと制約を理解しておくことが重要です。
- 特定の機能、ロール、または責任に対して存在する API、サービス、およびツールについて理解していますか? 問題のドメインと制約について理解したら、カスタム コードを使用してシステムのその側面を自分で構築するか、既存のロー コード/ノー コード ツールを使用するか、既存のサービスの API を呼び出すかを選択できます。
- コード中心のソリューションや、ノー コード/ロー コードのソリューションなどのオプションについて理解します。 すべて自分で構築することができますが、それは時間とスキルを効率的に使っていることになるでしょうか? 要件に応じて、通常、テクノロジとアプローチ (コード、ノー コード、ロー コード、ツール) の組み合わせを結合できます。
ここでのポイントは、生成 AI 機能をアプリケーションに組み込む正しい方法は 1 つだけではないという点です。 多くのツールとアプローチが存在します。 トレードオフを評価することが重要です。
まずアプリケーション レイヤーに焦点を当てる
開始して生産性を高めるため、生成 AI の動作に関してすべて理解する必要はありません。 前述のように、API を使用して既存のスキルを適用できるため、既に十分に把握している可能性があります。
たとえば、独自の LLM を最初からトレーニングする必要はありません。 LLM をトレーニングするには、ほとんどの企業が使うことを望まない時間とリソースが必要です。 代わりに、AZURE OpenAI API などの既存のホストされるサービスに API 呼び出しを行うことで、GPT-4 などの既存の事前トレーニング済みの基本モデルに基づいて構築します。 このように、既存のアプリケーションに生成 AI 機能を追加することは、API 呼び出しに基づいて他の機能を追加するのと同じことです。
LLM がどのようにトレーニングされているか、どのように動作するかを調査することは、知的好奇心を満たす可能性がありますが、LLM のしくみを本当に理解するには、それをサポートするため、データ サイエンスと数学の背景を深く理解する必要があります。 これには、統計、確率、情報理論に関する大学院レベルのコースが含まれる場合があります。
コンピューター サイエンスのバックグラウンドを持っている場合、ほとんどのアプリケーション開発は、研究とテクノロジの "スタックの上位レイヤー" で行われることを理解できます。 各レイヤーについて理解しているかもしれませんが、特定のプログラミング言語とプラットフォーム (使用可能な API、ツール、パターンなど) に重点を置き、アプリケーション開発レイヤーを専門にしているかもしれません。
AI の分野についても同様です。 LLM をベースに構築される理論を理解し、評価することはできますが、おそらくアプリケーション レイヤーに注意を集中するか、パターンやプロセスの実装を支援して企業内で生成 AI の取り組みを可能にするでしょう。
以下に、新規または既存のアプリケーションで生成 AI 機能を実装するのに必要な知識のレイヤーを示します。
最も低いレベルには、統計学や確率論などの深い数学的理解に基づいて AI の問題を解決または改善するためのデータ サイエンス研究を行っているデータ サイエンティストがいます。 最も低い基礎レイヤーに基づいて、データ サイエンティストは、理論上の概念を LLM に実装し、ニューラル ネットワークを構築し、重みとバイアスをトレーニングして、入力 (prompts) を受け入れ、結果 (補完) を生成できる実用的なソフトウェアを提供します。 プロンプトに基づいて完了を作成する計算プロセスは、推論と呼ばれます。 ニューラル ネットワークのニューロンが生成される次の単語またはピクセルを予測する方法を実装する役割を担う人がいます。
モデルをトレーニングし、入力に基づいて結果を生成するために必要な処理能力を考えます。 多くの場合、モデルはトレーニングされ、大規模なデータ センターでホストされます。 ローカル コンピューターでモデルをトレーニングまたはホストすることはできますが、結果が遅くなることがよくあります (結果の生成に必要なコンピューティングの処理に役立つ専用の GPU ビデオ カードはありません)。
大規模なデータ センターでホストされている場合、これらのモデルへのプログラムによるアクセスは REST API を通じて提供され、SDK によって "ラップ" されることがあます。これによって、アプリケーション開発者が使いやすくなります。 その他のツールは、開発者エクスペリエンスを向上させ、監視やその他のユーティリティを提供するのに役立ちます。 アプリケーション開発者は、これらの API を呼び出してビジネス機能を実装することができます。
プログラムによってモデルを実行するだけでなく、企業が生成 AI に基づいて信頼性の高いビジネス機能を構築するのに役立つパターンやプロセスも登場しています。 たとえば、生成されたテキスト、コード、画像、サウンドが倫理基準や安全基準、顧客データのプライバシーへの取り組みに準拠していることを企業が確認するのに役立つパターンが登場しています。
この懸念事項またはレイヤーのスタックにおいては、ビジネス機能の構築を担当するアプリケーション開発者であれば、アプリケーション レイヤーを超えて独自の LLM の開発とトレーニングを進めることができます。 しかし、このレベルの理解には、多くの場合、学術的にのみ利用可能な新しいスキルのセットが必要です。 "スタック内の次の層" を構築するのに役立つデータ サイエンスの能力を学術的に開発することにコミットできない場合は (言えば)、次のようなアプリケーション層のトピックに焦点を当てます。
- 使用可能な API と SDK、使用できる内容、さまざまなエンドポイントで生成される内容などを理解する。
- 運用環境に対応する生成 AI ソリューションに必要なすべての機能を構築するのに役立つ関連ツールおよびサービスについて理解する。
- 質問や言い換えによって最適な結果を得る方法など、プロンプト エンジニアリングについて理解する。
- ボトルネックが発生する場所とソリューションをスケーリングする方法について理解する。 顧客のプライバシーに関する問題に違反することなく、テレメトリのログ記録または取得に関係するものについて理解する。
- 会社のニーズに適したモデルを選択するため、さまざまな LLM の特性 (強み、ユース ケース、ベンチマークと測定内容、ベンダーと各ベンダーによって生成されたモデル間の主要な差別化など) について理解する。
- アプリケーションで効果的かつ回復力のある生成 AI 機能を構築するために使用される、最新のパターン、ワークフロー、プロセスについて理解する。
Microsoft の利用可能なサービスとツール
ソリューションの一部または全体を構築するのに役立つ、ロー コードおよびノー コードの生成 AI ツールとサービスが Microsoft から提供されています。 さまざまな Azure サービスが重要な役割を果たし、それぞれがソリューションの効率性、スケーラビリティ、堅牢性に貢献します。
コード中心のアプローチのための API と SDK
すべての生成 AI ソリューションの中核となるのは LLM モデルであり、Azure OpenAI は、GPT-4 などのモデルで使用できるすべての機能へのアクセスを提供します。
Product | 説明 |
---|---|
Azure OpenAI | GPT-4 などの強力な言語モデルへのアクセスを提供するホストされるサービス。 埋め込みの作成、チャット エクスペリエンスの作成など、LLM の一般的な機能をすべて実行できるさまざまな API があり、設定や調整にフル アクセスし、必要に応じて結果をカスタマイズできます。 |
実行環境
組織のアプリケーションに生成 AI を統合するためにビジネス ロジック、プレゼンテーション ロジック、または API を構築するので、そのロジックをホストして実行する場所が必要です。
Product | 説明 |
---|---|
Azure アプリ サービス (または複数のコンテナー ベースのクラウド サービスのいずれか) | このプラットフォームでは、ユーザーが RAG チャット システムと対話する Web インターフェイスまたは API をホストできます。 Web アプリケーションのすばやい開発、デプロイ、スケーリングがサポートされ、システムのフロントエンド コンポーネントの管理が容易になります。 |
Azure Functions | サーバーレス コンピューティングを使って、RAG チャット システム内のイベント ドリブン タスクを処理します。 たとえば、データ取得プロセスのトリガー、ユーザー クエリの処理、データ同期やクリーンアップなどのバックグラウンド タスクの処理に使用します。 これにより、システムのバックエンドを構築するための、よりモジュール化されたスケーラブルなアプローチが可能になります。 |
ロー コード/ノー コード
または、ソリューションに必要なロジックの一部を、ロー コードまたはノー コードのソリューションによってすばやく構築し、確実にホストできます。
Product | 説明 |
---|---|
Azure AI Studio | Azure AI Studio は、RAG チャット システムを強化できるカスタム機械学習モデルのトレーニング、テスト、デプロイに使用できます。 たとえば、Azure AI Studio を使って応答の生成をカスタマイズしたり、取得した情報の関連性を向上させたりします。 |
ベクトル データベース
特定の生成 AI ソリューションでは、生成を強化するために使用されるデータの格納と取得が必要になることがあります (たとえば、ユーザーが組織のデータとチャットできるようにする RAG ベースのチャット システム)。 このユース ケースでは、ベクトル データ ストアが必要です。
Product | 説明 |
---|---|
Azure AI Search | このサービスは、大規模なデータセットを効率的に検索して、言語モデルによって生成された応答を通知するために使用できる関連情報を見つけるために利用できます。 RAG システムの取得コンポーネントに役立ち、生成された応答が可能な限り有益で、コンテキストとの関連性が高いことを確認します。 |
Cosmos DB | このグローバルに分散されたマルチモデル データベース サービスは、RAG チャット システムがアクセスする必要がある膨大な量の構造化データと非構造化データを格納できます。 高速な読み書き機能により、言語モデルにリアルタイム データを提供したり、ユーザー操作を保存してさらに分析したりするのに最適です。 |
Azure Cache for Redis | このフル マネージド型のインメモリ データ ストアは、頻繁にアクセスされる情報をキャッシュして、待ち時間を削減し、RAG チャット システムのパフォーマンスを向上させるために使用できます。 セッション データ、ユーザー設定、一般的なクエリを格納する場合に特に役立ちます。 |
Azure Database for PostgreSQL フレキシブル サーバー | このマネージド データベース サービスは、ログ、ユーザー プロファイル、チャット履歴データなどのアプリケーション データを格納できます。 その柔軟性とスケーラビリティは、RAG チャット システムの動的なニーズをサポートし、データが一貫して利用可能でセキュアであることを保証します。 |
これらの各 Azure サービスは、生成 AI ソリューションの包括的かつスケーラブルで効率的なアーキテクチャの作成に貢献し、開発者が Azure のクラウド機能と AI テクノロジを最大限に活用できるようになります。
Azure OpenAI API を使用したコード中心の生成 AI 開発
このセクションでは、Azure OpenAI API について説明します。 前述のように、RESTful Web API を使用してプログラムで LLM 機能にアクセスします。 これらの API を呼び出すには、文字どおり任意の最新のプログラミング言語を使用できます。 多くの場合、言語またはプラットフォーム固有の SDK は、REST API 呼び出しの "ラッパー" として動作し、エクスペリエンスをより慣用的にします。
- .NET 用 Azure OpenAI クライアント ライブラリ
- Java 用 Azure OpenAI クライアント ライブラリ
- JavaScript 用 Azure OpenAI クライアント ライブラリ
- Go 用 Azure OpenAI クライアント モジュール
- Python には、Azure 固有のクライアント ライブラリはありません。 OpenAI Python パッケージを使用し、いくつかのオプションを変更します。
言語またはプラットフォーム SDK が使用できない場合、Web API に対して REST 呼び出しを直接行う必要があるというのが最悪のシナリオです。 ただし、ほとんどの開発者は Web API の呼び出し方法をよく知っています。
Azure OpenAI には、さまざまな種類の AI を利用したタスクを容易にするよう設計されたさまざまな API が用意されており、開発者は高度な AI 機能をアプリケーションに統合することができます。 OpenAI から使用できる主要な API の概要を以下に示します。
- Chat Completions API: この API は、会話機能を含むテキスト生成シナリオに重点を置いており、自然で人間のような会話に関与できるチャットボットと仮想アシスタントの作成を可能にします。 カスタマー サポート、パーソナル アシスタント、対話型の学習環境など、対話型のユース ケース向けに最適化されています。 ただし、要約、オートコンプリート、ドキュメントの記述、テキストの分析、翻訳など、すべてのテキスト生成シナリオにも使用されます。 これは、現在プレビュー段階にあるビジョン機能のエントリ ポイントです (つまり、画像をアップロードして、それに関する質問をします)。
- Moderation API: この API は、開発者がテキスト内の有害な可能性のあるコンテンツを特定してフィルター処理できるよう設計されており、攻撃的な素材、安全でない素材、またはその他の不適切な素材を自動的に検出することにより、ユーザーの操作の安全性を高めるためのツールを提供します。
- Embeddings API: Embeddings API は、テキスト入力のベクトル表現を生成し、単語、文、または段落を高次元ベクトルに変換します。 これらの埋め込みは、セマンティック検索、クラスタリング、コンテンツ類似性分析などに使用できます。 テキスト内の基になる意味とセマンティック リレーションシップをキャプチャします。
- 画像生成 API: この API を使用すると、テキストの説明から元の高品質の画像とアートを生成することができます。 これは、OpenAI の DALL E に基づいています。受け取ったプロンプトに基づいて、さまざまなスタイルとテーマに一致する画像を作成できます。
- オーディオ API: この API は、自動音声認識用に設計された OpenAI のオーディオ モデルへのアクセスを提供します。 音声言語をテキストに変換するか、テキストを音声に文字起こしし、さまざまな言語や方言をサポートすることができます。 これは、音声コマンド、オーディオ コンテンツの文字起こしなどを必要とするアプリケーションに役立ちます。
生成 AI を使用してさまざまなメディアのモダリティを操作できますが、この記事の残りの部分ではテキストベースの生成 AI ソリューションに焦点を当てます。 ここでは、チャット、要約などのシナリオについて説明します。
生成 AI を使用してアプリケーションの開発を開始する方法
慣れない言語、API、またはテクノロジを初めて使用するソフトウェア開発者は通常、小さなアプリケーションを構築するためのチュートリアルまたはトレーニング モジュールに従って学習を開始します。 一部のソフトウェア開発者は、セルフガイド型のアプローチを採用しており、小規模で試験的なアプリケーションを構築することを好みます。 どちらのアプローチも有効かつ便利です。
生成 AI を使用した開発には特有の課題があるため、始める際には、小さく始めて、期待を小さくし、反復して、理解とスキルを構築するのが最善です。 たとえば、従来のソフトウェア開発では、決定論的な出力に依存することができます。つまり、どのような入力セットに対しても、毎回まったく同じ出力が期待できます。 ただし、Generative は非決定的です。特定のプロンプトに対してまったく同じ回答を 2 回取得することは決してありません。これは、多くの新しい課題の根底にあります。 作業を始める前に、次のヒントを検討してください。
ヒント 1: 達成しようとしていることを明確にします。
- 解決しようとしている問題について具体的に説明します。生成 AI はさまざまな問題を解決できますが、成功は解決を目指している特定の問題を明確に定義することで得られます。 テキスト、画像、コード、またはその他のものを生成しようとしていますか? より具体的であるほど、ニーズに合わせて AI を調整することができます。
- オーディエンスを理解する: オーディエンスを知ることは、カジュアル ユーザーでも特定の分野の専門家でも、期待に合わせて AI の出力を調整するのに役立ちます。
ヒント 2: LLM の長所に合わせてプレイします。
- LLM の制限事項とバイアスを理解する: LLM は強力ですが、制限事項と固有のバイアスがあります。 制限事項とバイアスを知ることは、制限事項を設計したり、軽減策を組み込んだりするのに役立ちます。
- LLM が優れている場所を理解する: LLM は、コンテンツの作成、要約、言語翻訳などのタスクに優れています。 バージョンが新しくなるたびに意思決定機能と判別機能が強化されていますが、シナリオやユース ケースに適した他の種類の AI が存在する可能性があります。 ジョブに適したツールを選択します。
ヒント 3: 最適な結果は、適切なプロンプトから始まります。
- プロンプト エンジニアリングのベスト プラクティスについて学習する: 効果的なプロンプトの作成はアートです。 さまざまなプロンプトを試して、それらが出力にどのように影響するかを確認します。 簡潔でありながらわかりやすいものにします。
- 反復的な改良にコミットする: 多くの場合、最初のプロンプトで目的の結果が得られない場合があります。 これは試行錯誤のプロセスです。 出力を使用してプロンプトをさらに改良します。
初めての生成 AI ソリューションの構築
すぐに生成 AI ソリューションの構築の実験を開始する場合は、python 用の独自のデータ サンプルを使用してチャットを開始する を確認することをお勧めします。 このチュートリアルには、.NET、Java、JavaScript でも使用できるバージョンがあります。
アプリケーション設計の決定に影響を与える可能性がある最終的な考慮事項
アプリケーションの設計上の決定に影響を与える、この記事で考慮すべき事項とその他のポイントの簡単な一覧を以下に示します。
- AI の機能をユーザーの期待に合わせ、目的のユース ケースに対するソリューションの有効性を最適化するため、問題領域とオーディエンスを明確に定義します。
- プロジェクトの要件を満たしている場合、ロー コード/ノー コード プラットフォームを使用して迅速なプロトタイプ作成と開発を行い、開発速度とカスタマイズ性のトレードオフについて評価します。 開発を高速化し、非技術チーム メンバーがプロジェクトに貢献できるように、アプリケーションの一部に対するロー コードソリューションとノーコード ソリューションの可能性について説明します。