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