はじめに
今回は.NET用のSDKを用いてGCPのVertex AI APIでChatをする方法を紹介したいと思います。

前提
Google Cloudプロジェクトが既に作成済である前提で進めていきます。またVertex AI API
を有効化しておいてください。

ちなみにterraformで有効化するなら以下のようなコードを書きます。
resource "google_project_service" "vertex_ai" { // 対象プロジェクト。指定しない場合はデフォルトのプロジェクトが利用される project = "your-project-id" // Vertex AI API service = "aiplatform.googleapis.com" // リソースが削除されても API は無効化しない disable_on_destroy = false }
ローカルでGoogle Cloud SDKを用いて操作する場合は以下コマンドを実行し、アプリケーションデフォルトの認証情報を設定する必要があります。
$ gcloud auth application-default login
このコマンドを実行するとブラウザが開き、Googleアカウントにログインが求められます。成功すると認証情報がローカルに保存されてGoogle CloudのAPIを呼び出す際に利用されるようになります。
ローカル開発環境に ADC を設定する | Authentication | Google Cloud
インストール方法
NuGet
で配布されているので、SDKはNuGet経由で入れることができます。
www.nuget.org
適当にコンソールアプリを作成して、以下コマンドによりインストールができます。
# コンソールアプリを作成 $ dotnet new console -o VertexAISandbox $ cd VertexAISandbox # NugetからSDKをインストール $ dotnet add package Google.Cloud.AIPlatform.V1
AIと対話する
対話をコンソール上で行えるコードをサンプルコードを参考にしながら記述しました。
システム指示を使用する | Generative AI on Vertex AI | Google Cloud
using Google.Cloud.AIPlatform.V1; public class MultiTurnChatSample { public static async Task Main(string[] args) { // プロジェクトID、ロケーション、パブリッシャー、モデルを指定する const string projectId = "user-project-id"; const string location = "us-central1"; const string publisher = "google"; const string model = "gemini-1.5-flash-001"; var chatSession = new ChatSession($"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}", location); while (true) { Console.Write("User: "); var prompt = Console.ReadLine(); if (prompt == "exit" || prompt == "quit") { break; } if (string.IsNullOrEmpty(prompt)) { continue; } var response = await chatSession.SendMessageAsync(prompt); Console.WriteLine($"Response: {response}"); } } private class ChatSession { private readonly string _modelPath; private readonly PredictionServiceClient _predictionServiceClient; // ユーザーとAIの会話内容を格納する private readonly List<Content> _contents; public ChatSession(string modelPath, string location) { _modelPath = modelPath; _predictionServiceClient = new PredictionServiceClientBuilder { Endpoint = $"{location}-aiplatform.googleapis.com" }.Build(); _contents = []; } public async Task<string> SendMessageAsync(string prompt) { // ユーザーの発言を格納する var content = new Content { Role = "USER", Parts = { new Part { Text = prompt } } }; _contents.Add(content); // リクエストをする際のパラメーター設定 var generateContentRequest = new GenerateContentRequest { Model = _modelPath, GenerationConfig = new GenerationConfig { Temperature = 0.9f, TopP = 1, TopK = 32, CandidateCount = 1, MaxOutputTokens = 2048 } }; generateContentRequest.Contents.AddRange(_contents); // AIにリクエストを送信 GenerateContentResponse response = await _predictionServiceClient.GenerateContentAsync(generateContentRequest); // AIの返答内容も格納しておく(会話の内容を覚えさせるため) _contents.Add(response.Candidates[0].Content); return response.Candidates[0].Content.Parts[0].Text; } } }

さいごに
単にAPIリクエスト送るだけなので、想像以上に簡単に実装できちゃいました。
PDFとTXTの内容を理解とかもできるみたいで、ここら辺を使ってみても結構面白いんじゃないかなとか思いました。もっとVertex AI APIで面白いことできないか調べてみたいですね。
ドキュメントの理解 | Generative AI on Vertex AI | Google Cloud