LoginSignup
2
0

MicrosoftのOpenAI ChatGPTサンプルを、個人のAzureアカウントで動かす&Javaとの比較をしてみる

Last updated at Posted at 2023-07-01

概要

  • 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くらいの時代感のエコシステムが判っていれば、読み解き、修正、デプロイは可能だなと思いました。
まったく知らない技術に触れると、やっぱり楽しいですねえ。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0