概要
- MicrosoftのAzure Cosmos DB + OpenAI ChatGPTサンプルを、Azure OpenAIではなく、OpenAI社のサービスを利用するように変更しました。
- Azure OpenAIは、エンラープライズ契約がないと利用できないため、個人のAzureサブスクリプションで同サンプルを動かすために作成しました。
- ソースコードとしては、Azure OpenAIへのアクセスを責務とするサービス
OpenAiService.cs
のみ修正しており、他の箇所の修正はありません(プロパティ等変更はあり)。 - Javaのエンジニアが、個人のAzureサブスクリプションで、ASP.NETのAzure OpenAIのサンプルを動かしたい、という極めてニッチなアレです。
成果物
成果物は【こちら】から。
L&L
作業中に判ったこと:もともとJavaの世界しか知らなかったので、Javaでいうところの何、というのの理解をまとめました。
アーキテクチャの概要
# | サンプルの方式 | Java系のスタックで相当するもの |
---|---|---|
言語 | C# | Java |
フレームワーク | ASP.NET Core Blazor Server | JSF |
DI | Microsoft.Extensions.DependencyInjection | CDI |
実行環境 | Azure App Service | AWS Elastic Beanstalk |
DB | Azure Cosmos DB | AWS DocumentDB(MongoDB) |
- Blazor Serverは、UIを構築するためのフレームワークで、サーバサイドで動作します。
- 同じBlazorでも、Blazor WebAssemblyを使うと、ブラウザのWebAssemblyランタイムで実行されるコードになります。
(WebAssemblyはブラウザに内蔵されているバイトコード実行環境で、JavaScriptインタプリタの横にあります)
プロジェクト自体を構成するファイル
# | サンプルのファイル | Java系のスタックで相当するもの |
---|---|---|
プロジェクト定義 | cosmoschatgpt.sln | .project |
ビルド定義 | cosmoschatgpt.csproj | pom |
規定のエントリポイント (FW初期化、DI実行……を実行) |
Program.cs | public static void main(String[] args) |
プロパティファイル | appsettings.json | *.properties |
IaC (Azure CLI用のDSL) |
azuredeploy.bicep | AWS CloudFormationテンプレート |
IaC (Azure Resource Manager テンプレート) |
azuredeploy.json | AWS CloudFormationテンプレート |
コマンドラインで遊ぶ
- コマンドラインからビルドする場合は、以下のいずれか。mavenがpomを読むように、MSBuildは(sln経由で)csprojを読みます。dotnet buildは内部的にMSBuildを使うようです。MSBuildの詳細はこちら。
"C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe" cosmoschatgpt.sln
dotnet build cosmoschatgpt.sln
- コマンドラインから実行する場合は、以下のいずれか。画面に表示されるとおり、localhost:8100からアクセスできます。
dotnet run --project cosmoschatgpt.csproj
dotnet run cosmoschatgpt.sln
- azuredeploy.jsonはDeploy to Azureボタンのためだけに利用します。azuredeploy.bicepをコンパイルして作ります。コマンドは以下。Bicepの詳細はこちら。
az bicep build --file azuredeploy.bicep
- azuredeploy.bicepをAzureにデプロイするコマンドは以下。
resource_group_1
はbicepに書かれたリージョンに作成しておく必要があります。
az deployment group create --resource-group resource_group_1 --template-file ./azuredeploy.bicep
ソースコードの種類
# | サンプルのファイル | Java系のスタックで相当するもの |
---|---|---|
画面定義+ロジック | Pages/*.razor | xhtml + ViewScoped bean |
サービス(DDDでいう) | Services/*.cs | Singleton bean |
ドメインモデル | Models/*.cs | Entity bean |
設定値 | Options/*.cs | Singleton bean -> ConfigProperty field |
- まあここは感覚で。
Blazorまわりのあれこれ
参考:
https://learn.microsoft.com/ja-jp/aspnet/core/blazor/project-structure
https://learn.microsoft.com/ja-jp/aspnet/core/blazor/components/layouts?view=aspnetcore-7.0
# | サンプルのファイル | 補足 |
---|---|---|
ルートページ | Pages/_Host.cshtml | |
規定レイアウト | Pages/_Layout.cshtml | _Host.cshtmlから参照 |
ルータ | App.razor | web.xml, faces-config.xml的なやつ |
using自動読込 | _imports.razor |
感想
概ね、JavaEE6+AWSくらいの時代感のエコシステムが判っていれば、読み解き、修正、デプロイは可能だなと思いました。
まったく知らない技術に触れると、やっぱり楽しいですねえ。