.NET と Azure OpenAI Service を使ったインテリジェントアプリケーションを構築してみよう

9.2K Views

June 24, 23

スライド概要

.NETラボ 勉強会 2023年6月
https://dotnetlab.connpass.com/event/285454/
.NET と Azure OpenAI Service を使ったインテリジェントアプリケーションを構築してみよう

Azure OpenAI Service, Cosmos DB, Azure Cognitive Search, Blazor, MAUI 等で構成された各種サンプルを参考に、ソリューションを構築をするヒントを探ります。

profile-image

ヴイエムウェア株式会社 ソリューションアーキテクト本部 プリンシパルエンタープライズアーキテクト。 Microsoft で13年間、テクニカルエバンジェリストとして .NET、Visual Studio、Windows、iOS、Android、Microsoft Azure 等の開発者向け最新技術啓発活動を実施。その後、Dell、Accenture、Elastic で開発者向け技術啓発活動等を経て現職。 モダンアプリケーション開発、マルチクラウド対応、アーキテクチャ策定等を中心に、技術者向けに最新技術の啓発活動を実施中。 2019年4月〜2021年8月迄、内閣官房 IT 総合戦略室 政府 CIO 補佐官を兼務、2021年9月〜2024年3月迄、デジタル庁 PjM ユニット ソリューションアーキテクトを兼務。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

.NET と Azure OpenAI Service を使った インテリジェントアプリケーションを構築してみよう 鈴⽊ 章太郎 主席エンタープライズアーキテクト ヴイエムウェア株式会社 戦略ビジネス推進本部 © 2023 VMware, Inc.

2.

鈴⽊ 章太郎 Twitter : @shosuz ヴイエムウェア株式会社 戦略ビジネス推進本部 主席エンタープライズアーキテクト Microsoft で13年間、テクニカルエバンジェリストと して .NET、Visual Studio、Windows、iOS、 Android、Microsoft Azure 等の開発者向け 技術啓発活動を実施。 その後 Dell、Accenture、Elastic での開発者 向け技術啓発活動等を経て現職。 2019年4⽉より内閣官房 IT 総合戦略室 政府 CIO 補佐官、2021年9⽉よりデジタル庁 省庁業 務サービスグループソリューションアーキテクトを兼務。 ©2023 VMware, Inc.

3.

Agenda ©2023 VMware, Inc. l サンプルソリューション (C# メイン) 紹介 l WhatsForDinner l cosmosdb-chatgpt l ChatGPT + Enterprise data with Azure OpenAI and Cognitive Search l まとめ 3

4.

サンプルソリューション (C# メイン) 紹介 Confidential │ © 2021 VMware, Inc. 4

5.

その前に…Add Your Data リソースを追加してデータを保存すればノーコードでナレッジベースサービスとフロントエンドまで構築可能 • • • 2023年6⽉19⽇、Azure OpenAI Service に独⾃データを追加できる 機能 Add your Data が発表 (Public Beta) GPT は⾃分が知らない情報については 答えることができないところ、この機能を 使うことで、ユーザー独⾃のデータと、 GPT モデルを簡単に連携でき、独⾃の データを参照して回答を⽣成できる 回答のソースを独⾃データのみに限定 もできるため、ChatGPT 活⽤の幅が ⼤きく広がる https://techcommunity.microsoft.com/t5/ai-cognitive-services-blog/introducing-azure-openai-service-on-yourdata-in-public-preview/ba-p/3847000 © 2023 VMware, Inc. 5

6.

Add Your Data リソースを追加してデータを保存すればノーコードでナレッジベースサービスとフロントエンドまで構築可能 • ドキュメントを Blob にアップロードしてチャットセッションを開始 ※ あらかじめ作っておく Cognitive Search は Free Tier はダメなので注意︕ ※ フロントエンド Web App は今のところ Python、すぐに C# がでそう… © 2023 VMware, Inc. 6

7.

openai-dotnet-samples https://github.com/Azure-Samples/openai-dotnet-samples • • • © 2023 VMware, Inc. Azure Open AI で実現できる様々な機能 を .NET で利⽤するソースコードサンプル 分類、キーワード抽出、Tweet 分類、⽂法訂正、 翻訳、⾃然⾔語からプログラムへの変換、C# バグ フィックスなどのコードヘルパー、Q&A チャット等50 種類近くの様々なタスク例が掲載 Azure OpenAI Service の逆引き的リソース集 7

8.

WhatsForDinner Azure OpenAI Service SDK, .NET MAUI https://github.com/jpalvarezl/WhatsForDinner Confidential │ © 2021 VMware, Inc. 8

9.

WhatsForDinner • • • Azure OpenAI Service SDK, .NET MAUI を連携させるサンプル C# による実装 MAUI によるフロントエンド実装 © 2023 VMware, Inc. ※ Visual Studio for Mac 2022 Preview では最新の MAUI アップデートが使えない可能性があります。 最新の Visual Studio for Mac 2022 をダウンロードしてください。 9

10.

© 2023 VMware, Inc. 10

11.
[beta]
WhatsForDinner - 1

.NET MAUI と Azure OpenAI C# SDK を使⽤、API のストリーミング機能を⽰す
• WhatsForDinner.sln ファイル
• クラス内で Services/OpenAIService.cs 内の次の値を Azure Portal のキー等の値に置き換え
private static string s_Azure_OpenAI_Endpoint = "<YOUR_VALUE>";
private static string s_Azure_OpenAI_Secret = "<YOUR_VALUE>";
private static string s_Completions_Deployment_Id = "text-davinci-003";
• ストリーミング応答はより⼤きなチャンクでテキストを返す
• 受信テキストを分割し、「単語ごとに」到着しているように⾒せるための「トリック」をいくつか追加
(メソッド内でローカル default 変数の値をハードコーディングすることで無効にできる)

tokenStreamDelaydefaultViewModels/MainViewModel.cs::Submit

© 2023 VMware, Inc.

11

12.
[beta]
WhatsForDinner - 2

Services/PromptService.cs

アプリはプロンプト制約を受け取るだけで、その条件に従い料理レシピを提案
ユーザーが⼊⼒したすべてのプロンプトを⽂字列のリストに保存、すべてを1つのプロンプトにコンパイルした後にリクエストを発⾏

•
•

namespace WhatsForDinner.Services;
public class PromptService
{
private List<string> _userConstraints = new List<string>();
private static string promptHeader = "提供されたユーザー定義の制約に適合する単⼀の調理レシピを提案する。";
public void addNewUserConstraint(string newUserConstraint)
{
if (!_userConstraints.Contains(newUserConstraint))
{
_userConstraints.Add(newUserConstraint);
}
}
public string compilePrompt() =>
@$"{promptHeader + Environment.NewLine}
###
{joinUserConstraints()}
###";
public string joinUserConstraints() =>
string.Join(Environment.NewLine, _userConstraints);
public void clearUserConstraints() =>
_userConstraints = new List<string>();
}
© 2023 VMware, Inc.

12

13.

cosmosdb-chatgpt Azure OpenAI Service, Cosmos DB, Blazor https://github.com/azure-samples/cosmosdb-chatgpt Confidential │ © 2021 VMware, Inc. 13

14.

cosmosdb-chatgpt • • • Cosmos DB, OpenAI Service を連携させるサンプル C# による実装 Blazor によるフロントエンド実装 © 2023 VMware, Inc. 14

15.

© 2023 VMware, Inc. 15

16.
[beta]
チャットセッション(Models.Session)
チャットセッション ID とチャットセッション名が格納
•
•
•
•
•

•
•
•

アプリケーション内では、このクラスはチャットメッセージの配列
をローカルキャッシュとして格納
但しコンテナーではセッションとメッセージは個別のドキュメント
として格納
Type プロパティは、これらの区別のため使⽤
コンテナーのパーティションキーはチャットセッション ID
各論理パーティションキー値内には、
• 1 つのチャットセッションドキュメント
• そのすべてのチャットメッセージドキュメント
チャットメッセージは常にチャットセッション ID によって取得
されるため、この設計が最適
ここでのオブジェクトモデルには、アプリケーションインスタンスの
サーバー側にキャッシュされるメッセージの配列が含まれる
セッションとメッセージは、別々のドキュメントとして格納される
ため、[JsonIgnore] 属性を追加して、配列内のデータが
シリアル化されず、セッションドキュメント内に格納されない

© 2023 VMware, Inc.

…
public record Session
{
…
public string Id { get; set; }
public string Type { get; set; }
public string SessionId { get; set; }
public int? TokensUsed { get; set; }
public string Name { get; set; }
[JsonIgnore]
public List<Message> Messages { get; set; }
…
public Session()
{
Id = Guid.NewGuid().ToString();
Type = nameof(Session);
SessionId = this.Id;
TokensUsed = 0;
Name = "New Chat";
Messages = new List<Message>();
}
public void AddMessage(Message message)
{
Messages.Add(message);
}
public void UpdateMessage(Message message)
{
var match = Messages.Single(m => m.Id == message.Id);
var index = Messages.IndexOf(match);
Messages[index] = message;
}
16

17.

チャットメッセージ(Models.Chat) 含まれる情報 • • • • チャットセッション ID と Type のプロパティ チャットメッセージのタイム スタンプ 送信者プロパティ チャットメッセージ⾃体のテキスト • 新しいチャットメッセージに常に含まれるのは︓ • チャット セッション ID • 送信者 • メッセージ⾃体 • タイムスタンプが⽣成され、Type プロパティは チャットセッションと同様にハードコーディングされて 区別 © 2023 VMware, Inc. … public record Message { … public string Id { get; set; } public string Type { get; set; } public string SessionId { get; set; } … public DateTime TimeStamp { get; set; } public string Sender { get; set; } public int? Tokens { get; set; } public string Text { get; set; } public Message(string sessionId, string sender, int? tokens, string text) { Id = Guid.NewGuid().ToString(); Type = nameof(Message); SessionId = sessionId; Sender = sender; Tokens = tokens; TimeStamp = DateTime.UtcNow; Text = text; } } 17

18.
[beta]
GetChatSessionConversation
Services/ChatServices.cs
• 現在の会話を新しいものから古いものまで、
最⼤会話トークン数まで取得し、プロンプトに
追加する
•
•
•
•

チャットセッション ID と Type のプロパティ
チャットメッセージのタイム スタンプ
送信者プロパティ
チャットメッセージ⾃体のテキスト

private string GetChatSessionConversation(string sessionId)
{
int? tokensUsed = 0;
List<string> conversationBuilder = new List<string>();
int index = _sessions.FindIndex(s => s.SessionId == sessionId);
List<Message> messages = _sessions[index].Messages;
// リストの末尾から始めて逆算する
for(int i = messages.Count - 1; i >= 0; i--)
{
tokensUsed += messages[i].Tokens is null ? 0 : messages[i].Tokens;
if(tokensUsed > _maxConversationTokens)
break;
conversationBuilder.Add(messages[i].Text);
}

• 新しいチャットメッセージに常に含まれるもの︓
• チャット セッション ID
• 送信者
• メッセージ⾃体
• タイムスタンプが⽣成され、Type プロパティは
チャットセッションと同様に、ハードコーディング
されて区別

© 2023 VMware, Inc.

//チャットメッセージを時系列に戻し、⽂字列として出⼒するために反転させる
string conversation =
string.Join(Environment.NewLine,
conversationBuilder.Reverse<string>());
return conversation;
}

19

19.
[beta]
SummarizeAsync - チャットセッションの要約
Services/OpenAIService.cs

public async Task<string> SummarizeAsync(string sessionId, string userPrompt)
{
ChatMessage systemMessage = new(ChatRole.System, _summarizePrompt);
ChatMessage userMessage = new(ChatRole.User, userPrompt);

• 既存の会話を OpenAI モデルに送信し、
2単語での要約を返す

ChatCompletionsOptions options = new()
{
Messages = {
systemMessage,
userMessage
},
User = sessionId,
MaxTokens = 200,
Temperature = 0.0f,
NucleusSamplingFactor = 1.0f,
FrequencyPenalty = 0,
PresencePenalty = 0
};

• <"sessionId">
現在の会話のチャットセッション識別⼦
• <"conversation">
デプロイメントに送信するプロンプトの会話
• OpenAI モデルデプロイメントからの要約
応答

Response<ChatCompletions> completionsResponse = await
_client.GetChatCompletionsAsync(_modelName, options);
ChatCompletions completions = completionsResponse.Value;
string summary =

completions.Choices[0].Message.Content;

return summary;
}

© 2023 VMware, Inc.

20

20.

ChatGPT + Enterprise data with Azure OpenAI and Cognitive Search Azure OpenAI Service, Cosmos DB, Blazor, Minimal Web API, Azure App Services, Azure Cognitive Search https://github.com/Azure-Samples/azure-searchopenai-demo-csharp/ Confidential │ © 2021 VMware, Inc. 21

21.

ChatGPT + Enterprise data with Azure OpenAI and Cognitive Search • • • Cosmos DB, OpenAI Service, Web App, Cognitive Search 等を連携させるサンプル C#, Semantic Kernel による実装 Blazor WebAsssembly によるフロントエンド実装 © 2023 VMware, Inc. 22

22.

© 2023 VMware, Inc. 23

23.

アプリケーションのデプロイ・実⾏⽅法について https://github.com/Azure-Samples/azure-search-openai-demo-csharp/ • ※ いずれも Docker が起動され、ログインしていることが重要 • • GitHub Codespaces VS Code Remote Containers • ローカル実⾏ •Azure Developer CLI •.NET 7 •Git •Powershell 7+ (pwsh) - Windows ユーザーのみ • •Docker • 重要︓ PowerShell コマンドから pwsh.exe を実⾏できることを確認してください。これに失敗した場合は、PowerShellをアップグレードする必要があります。 重要︓ azd のプロビジョニング/デプロイメントコマンドを実⾏する前に、Dockerが起動していることを確認してください。 © 2023 VMware, Inc. 24

24.

アプリケーションアーキテクチャー アプリケーションを構成するコアコンポーネント • ソースコード GitHub https://aka.ms/dotnet-ai-app • アプリケーションフロントエンド(ユーザーインターフェース) Blazor WebAssembly Static Web アプリケーション ユーザーのクエリを受け⼊れ、要求をアプリケーション バックエンドにルーティングし、⽣成された応答を表⽰ モバイルまたはデスクトップでクライアントアプリケーションを操作している場合は .NET MAUI が最適 • アプリケーションバックエンド ASP.NET Core Minimal API Blazor Static Web アプリケーションをホストし、さまざまなサービス間の相互作⽤を調整 使⽤されるサービス︓ Azure Cognitive Search – Azure ストレージ アカウントに保存されているデータからドキュメントのインデック スを作成。これにより、ドキュメントが検索可能になる Azure OpenAI サービス– 応答を⽣成するための ChatGPT モデルを提供 Semantic Kernel Azure OpenAI サービスと組み合わせて使⽤され、より複雑な AI ワークフローを調整 Azure Redis Cache – 応答をキャッシュ。同様の質問に対する回答を⽣成する際の待ち時間が短縮され、 Azure OpenAI Service に別の要求を⾏う必要がなくなるため、コストの管理に役⽴つ © 2023 VMware, Inc. 25

25.

ナレッジベースの構築プロセス チャットのコンテキストでサービス群がどのように連携するか • • ドキュメントを使⽤してチャットするにはクエリできるナレッジベースが必要 アプリケーションのデータディレクトリ︓ • Azure Storage アカウント • ⼀連の PDF ドキュメント配置 • Azure Cognitive Search でインデックスを作成するために、 C# コンソールアプリケーションを構築 • C# コンソールアプリケーションが⾏うこと 1. Azure Form Recognizer を使⽤して各ドキュメントから テキストを抽出 2. ドキュメントを⼩さな抜粋に分割 (チャンク化) 3. 抜粋ごとに新しい PDF ドキュメントを作成 4. 抜粋を Azure ストレージ アカウントにアップロード 5. Azure Cognitive Search にインデックスを作成 6. ドキュメントを Azure Cognitive Search インデックスに追加 ※ データに関するセマンティック情報をエンコードするための埋め込みの 使⽤も可能 → 「Azure OpenAI 埋め込みのドキュメント」 参照 © 2023 VMware, Inc. 26

26.

データを使ってチャットする - 1 ナレッジベースを設定してチャット • ユーザーが Blazor Web アプリに質問を⼊⼒ • ユーザークエリは ASP.NET Core Minimal Web API にルーティングされる • Web API 内で chat エンドポイントがリクエストを 処理 api.MapPost("chat", OnPostChatAsync); • リクエストを処理するため、以下を⾏う検索拡張⽣成 として知られるパターンを適⽤ 1. 関連ドキュメントのナレッジベースをクエリ 2. 関連ドキュメントをコンテキストとして使⽤して応答を ⽣成 © 2023 VMware, Inc. 27

27.

データを使ってチャットする - 2 チャットのコンテキストでサービス群がどのように連携するか • ナレッジベースは Azure Cognitive Search を使⽤ してクエリされる • ただし、Azure Cognitive Search は、ユーザーが 提供した⾃然⾔語を理解できない • そこで、Azure OpenAI Service の ChatGPT を 使⽤し、⾃然⾔語をクエリに変換する • Semantic Kernel を使⽤して 1. プロンプトテンプレートを定義 2. チャット履歴とユーザーの質問を追加のコンテキ ストとして追加 3. Azure Cognitive Search クエリを⽣成する メソッドを作成 © 2023 VMware, Inc. 28

28.

© 2023 VMware, Inc. 29

29.
[beta]
データを使ってチャットする - 3

チャットのコンテキストでサービス群がどのように連携するか
private ISKFunction CreateQueryPromptFunction(ChatTurn[] history)
{
// プロンプトテンプレートを定義、チャット履歴とユーザーの質問を追加のコンテキストとして追加、Azure Cognitive Search クエリを⽣成するメソッド作成
var queryPromptTemplate = """
以下は、これまでの会話の履歴と、ユーザーからの新しい質問で、従業員の医療保険制度と従業員ハンドブックに関する知識ベースを検索して回答する
必要があります。
従業員のヘルスケアプランと従業員ハンドブックに関するナレッジベースで検索します。
会話と新しい質問に基づいて、検索クエリを作成します。
検索クエリには、引⽤元のファイル名や⽂書名(info.txt や doc.pdf など)を含めないでください。
検索キーワードに[]または<<>>内のテキストを含めないでください。
質問が英語でない場合、検索クエリを⽣成する前に質問を英語に翻訳してください。
Chat History:
{{$chat_history}}
Question:
{{$question}}
Search query:
""";

}

return _kernel.CreateSemanticFunction(queryPromptTemplate,
temperature: 0,
maxTokens: 32,
stopSequences: new[] { "¥n" });
© 2023 VMware, Inc.

30

30.

データを使ってチャットする - 4 チャットのコンテキストでサービス群がどのように連携するか // そのメソッドを使⽤してクエリ⽣成プロンプトが作成される var queryFunction = CreateQueryPromptFunction(history); var context = new ContextVariables(); context["chat_history"] = history.GetChatHistoryAsText(); context["question"] = userQuestion; // Semantic Kernel 関数を実⾏する // クエリを⽣成する Azure OpenAI Service ChatGPT モデルに作成されたプロンプトが提供される var query = await kernel.RunAsync(context, cancellationToken, queryFunction); // クエリが⽣成されたら、Azure Cognitive Search クライアントを使⽤して、ドキュメントを含むインデックスをクエリする var documentContents = await _searchClient.QueryDocumentsAsync(query.Result, overrides, cancellationToken); [結果] Northwind_Health_Plus_Benefits_Details-108.pdf: プライマリ補償の EOB のコピーと、プライマリ補償に提出した請求のコピーを Northwind Health Plus に提供する必要があります。これにより、Northwind Health Plus でお客様が利⽤できる特典を判断できるようになります。Northwind Health Plus では、 ⼀次保険の責任とみなされる費⽤は補償されないことに注意することが重要です。 Benefit_Options-3.pdf: この計画には、マンモグラフィー、結腸内視鏡検査、その他のがん検診などの予防医療サービスも含まれています。Northwind Health Plus は、Northwind Standard よりも包括的な補償を提供します。このプランは、ネットワーク内とネットワーク外の両⽅での緊急サービスの補償に加え、メンタルヘ ルスと薬物乱⽤の補償も提供します。Northwind Standard では、緊急サービス、メンタルヘルスおよび薬物乱⽤の補償、ネットワーク外のサービスは提供していま せん。 © 2023 VMware, Inc. 31

31.

応答の⽣成 - 1 プロンプトとナレッジベースから応答を⽣成する • ユーザーの質問に答えるのに役⽴つ関連情報を含むドキュメント が完成したのでそれらを使⽤して回答を⽣成 © 2023 VMware, Inc. 32

32.
[beta]
応答の⽣成 - 2

Semantic Kernel 関数で、チャット履歴、ドキュメント、フォローアップ質問を含むプロンプトを構成する関数を作成
private const string AnswerPromptTemplate = """
<|im_start|>system
あなたはシステムアシスタントとして、会社の従業員の医療制度に関する質問や、従業員ハンドブックに関する質問をサポートしてい.
ます。回答は簡潔にしてください。
以下の出典リストに記載されている事実のみを回答してください。情報が不⾜している場合は、「わからない」と答えてください。以下
の出典を使⽤しない回答は作成しないでください。ユーザーに明確な質問をすることで解決する場合は、質問してください。
表形式の情報については、htmlのテーブルとして返してください。マークダウン形式は使わないでください。
各ソースには、名前に続いてコロンと実際の情報があり、回答で使⽤する各事実のソースファイルのフルパスを常に含めてください。
ソースを参照するには、四⾓いブラケットを使⽤してください。ソースを組み合わせないで、各ソースを別々にリストアップしてください。
### 例
出典
info1.txt︓控除額は、ネットワーク内かネットワーク外かによって異なる。ネットワーク内控除額は、従業員で500ドル、家族で
1000ドルです。ネットワーク外の控除額は、従業員が1000ドル、家族が2000ドルです。
info2.pdf︓ Overlakeは従業員プランではin-networkです。
との回答がありました︓ ネットワーク内控除額は、従業員が500ドル、家族が1000ドル [info1.txt][info2.pdf] 、
Overlakeは従業員プランのネットワーク内です [info2.pdf].
###
{{$follow_up_questions_prompt}}
プロンプト内の例は、モデルが答えを⽣成するためのガイドライン
{{$injected_prompt}}
として機能
Sources:
{{$sources}}
<|im_end|>
{{$chat_history}}
""";
private const string FollowUpQuestionsPrompt = """
ヘルスケアプランと従業員ハンドブックについて、ユーザーが次に尋ねそうな⾮常に簡潔なフォローアップ質問を3つ⽣成する。
質問を参照するには、⼆重の⾓括弧を使⽤します(例︓<<Are there exclusions for prescriptions?>>)。
すでに聞かれた質問を繰り返さないようにしましょう。
質問を⽣成するだけで、「次の質問」のような質問の前後にテキストを⽣成しないでください。""";
© 2023 VMware, Inc.

33

33.
[beta]
応答の⽣成 - 3
Semantic Kernel で、チャット履歴、ドキュメント、フォローアップ質問を含むプロンプトを構成する関数を作成
private ISKFunction CreateAnswerPromptFunction(string answerTemplate, RequestOverrides? overrides) =>
_kernel.CreateSemanticFunction(answerTemplate,
temperature: overrides?.Temperature ?? 0.7,
maxTokens: 1024,
stopSequences: new[] { "<|im_end|>", "<|im_start|>" });
ISKFunction answerFunction;
var answerContext = new ContextVariables();
answerContext["chat_history"] = history.GetChatHistoryAsText();
answerContext["sources"] = documentContents;
answerContext["follow_up_questions_prompt"] = ReadRetrieveReadChatService.FollowUpQuestionsPrompt;
answerFunction = CreateAnswerPromptFunction(ReadRetrieveReadChatService.AnswerPromptTemplate,
overrides);
prompt = ReadRetrieveReadChatService.AnswerPromptTemplate;
// 作成されたプロンプトが応答を⽣成する Azure OpenAI Service ChatGPT モデルに提供される
var ans = await _kernel.RunAsync(answerContext, cancellationToken, answerFunction);
© 2023 VMware, Inc.

34

34.

アプリケーションの実⾏結果 いくつかの書式設定された回答が Web アプリに返されて表⽰される • 応答の信頼性を⾼めるため、応答には、引⽤、応答の⽣成に使⽤された完全なプロンプト、検索結果からのドキュメントを 含むサポートコンテンツが含まれる © 2023 VMware, Inc. 35

35.

まとめ Confidential │ © 2021 VMware, Inc. 36

36.

Agenda まとめ l サンプルソリューション (C# メイン) 紹介 l WhatsForDinner l cosmosdb-chatgpt l ChatGPT + Enterprise data with Azure OpenAI and Cognitive Search l まとめ ©2023 VMware, Inc. 37

37.

リソース ©2023 VMware, Inc. 38

38.

リソース⼀覧 • openai-dotnet-samples https://github.com/Azure-Samples/openai-dotnet-samples • WhatsForDinner https://github.com/jpalvarezl/WhatsForDinner • cosmosdb-chatgpt https://github.com/azure-samples/cosmosdb-chatgpt • ChatGPT + Enterprise data with Azure OpenAI and Cognitive Search https://github.com/Azure-Samples/azure-search-openai-demo-csharp/ ©2023 VMware, Inc. 39

39.

VMware Japan Public Sector “Cloud Smart” Day 適切にクラウドを使い分けるマルチクラウド時代に求められる「クラウドスマート」に向けて July 13th, 2023, JAPAN オンライン開催 Agenda https://japan.zdnet.com/info/event/vmware/202307/ 開催概要 プログラム [ ⽇時 ] [基調講演] 2023年7⽉13⽇(⽊) 13:30-16:50 「クラウドファースト」戦略から オンライン開催 「クラウドスマート」戦略の時代へ。 「統制され、最適化されたマルチクラウド」への [申込サイト] 転換に必要なクラウドスマート指針の考え⽅について 事前登録制 衆議院議員 平将明⽒と、弊社公共 SE 本部本部⻑ https://japan.zdnet.com/info/event/vmware/202307/ 中島より解説します。 [参加対象 ] [⾃治体向けセッション] 官公庁団体における役員クラスの⽅、 ・⾃治体のクラウド利⽤状況と最新動向 情報システム関連部⾨のマネージャ、 ・クラウドスマートワークショップのご案内 IT 担当者、システム開発者、パートナー企業 ・クラウド活⽤の課題に対する解決策をご紹介 [ 主催 ] 主催 ︓ 朝⽇インタラクティブ 協賛 ︓ ヴイエムウェア株式会社 [官公庁向けセッション] ・中央省庁のクラウドスマート担当者やセキュリティ担当者のご登壇 ・モダンアプリ/マルチクラウドと官公庁システムのクラウド化への展望 ・防衛省向けセッションをご⽤意 ©2023 VMware, Inc. 40

40.

Thank you for your attention! © 2023 VMware, Inc.