このサンプルでは、Gemini モデルを使用して画像からテキストを生成する方法を示します。このモデルは、一貫性のある有益なテキストを生成できる Transformer ベースの大規模な言語モデルです。
さらに詳しい情報
このコードサンプルを含む詳細なドキュメントについては、以下をご覧ください。
コードサンプル
C#
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある C# の設定手順を完了してください。詳細については、Vertex AI C# API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
using Google.Api.Gax.Grpc;
using Google.Cloud.AIPlatform.V1;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using static Google.Cloud.AIPlatform.V1.SafetySetting.Types;
public class WithSafetySettings
{
public async Task<string> GenerateContent(
string projectId = "your-project-id",
string location = "us-central1",
string publisher = "google",
string model = "gemini-1.0-pro-vision"
)
{
// Create client
var predictionServiceClient = new PredictionServiceClientBuilder
{
Endpoint = $"{location}-aiplatform.googleapis.com"
}.Build();
// Prompt
string prompt = "Hello!";
// Initialize request argument(s)
var content = new Content
{
Role = "USER"
};
content.Parts.AddRange(new List<Part>()
{
new()
{
Text = prompt
}
});
var safetySettings = new List<SafetySetting>()
{
new()
{
Category = HarmCategory.HateSpeech,
Threshold = HarmBlockThreshold.BlockLowAndAbove
},
new()
{
Category = HarmCategory.DangerousContent,
Threshold = HarmBlockThreshold.BlockMediumAndAbove
}
};
var generateContentRequest = new GenerateContentRequest
{
Model = $"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}",
GenerationConfig = new GenerationConfig
{
Temperature = 0.4f,
TopP = 1,
TopK = 32,
MaxOutputTokens = 2048
},
};
generateContentRequest.Contents.Add(content);
generateContentRequest.SafetySettings.AddRange(safetySettings);
// Make the request, returning a streaming response
using PredictionServiceClient.StreamGenerateContentStream response = predictionServiceClient.StreamGenerateContent(generateContentRequest);
StringBuilder fullText = new();
// Read streaming responses from server until complete
AsyncResponseStream<GenerateContentResponse> responseStream = response.GetResponseStream();
await foreach (GenerateContentResponse responseItem in responseStream)
{
// Check if the content has been blocked for safety reasons.
bool blockForSafetyReason = responseItem.Candidates[0].FinishReason == Candidate.Types.FinishReason.Safety;
if (blockForSafetyReason)
{
fullText.Append("Blocked for safety reasons");
}
else
{
fullText.Append(responseItem.Candidates[0].Content.Parts[0].Text);
}
}
return fullText.ToString();
}
}
Go
このサンプルを試す前に、Vertex AI クライアント ライブラリをインストールするにある Go の設定手順を完了してください。詳細については、Vertex AI Go API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
import (
"context"
"fmt"
"io"
"mime"
"path/filepath"
"cloud.google.com/go/vertexai/genai"
)
// generateMultimodalContent generates a response into w, based upon the prompt
// and image provided.
func generateMultimodalContent(w io.Writer, prompt, image, projectID, location, modelName string) error {
// prompt := "describe this image."
// location := "us-central1"
// model := "gemini-1.0-pro-vision"
// image := "gs://cloud-samples-data/generative-ai/image/320px-Felis_catus-cat_on_snow.jpg"
ctx := context.Background()
client, err := genai.NewClient(ctx, projectID, location)
if err != nil {
return fmt.Errorf("unable to create client: %v", err)
}
defer client.Close()
model := client.GenerativeModel(modelName)
model.SetTemperature(0.4)
// configure the safety settings thresholds
model.SafetySettings = []*genai.SafetySetting{
{
Category: genai.HarmCategoryHarassment,
Threshold: genai.HarmBlockLowAndAbove,
},
{
Category: genai.HarmCategoryDangerousContent,
Threshold: genai.HarmBlockLowAndAbove,
},
}
// Given an image file URL, prepare image file as genai.Part
img := genai.FileData{
MIMEType: mime.TypeByExtension(filepath.Ext(image)),
FileURI: image,
}
res, err := model.GenerateContent(ctx, img, genai.Text(prompt))
if err != nil {
return fmt.Errorf("unable to generate contents: %w", err)
}
fmt.Fprintf(w, "generated response: %s\n", res.Candidates[0].Content.Parts[0])
return nil
}
Java
このサンプルを試す前に、Vertex AI クライアント ライブラリをインストールするにある Java の設定手順を完了してください。詳細については、Vertex AI Java API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
import com.google.cloud.vertexai.VertexAI;
import com.google.cloud.vertexai.api.Candidate;
import com.google.cloud.vertexai.api.GenerateContentResponse;
import com.google.cloud.vertexai.api.GenerationConfig;
import com.google.cloud.vertexai.api.HarmCategory;
import com.google.cloud.vertexai.api.SafetySetting;
import com.google.cloud.vertexai.generativeai.GenerativeModel;
import java.util.Arrays;
import java.util.List;
public class WithSafetySettings {
public static void main(String[] args) throws Exception {
// TODO(developer): Replace these variables before running the sample.
String projectId = "your-google-cloud-project-id";
String location = "us-central1";
String modelName = "gemini-1.0-pro-vision";
String textPrompt = "your-text-here";
String output = safetyCheck(projectId, location, modelName, textPrompt);
System.out.println(output);
}
// Use safety settings to avoid harmful questions and content generation.
public static String safetyCheck(String projectId, String location, String modelName,
String textPrompt) throws Exception {
// Initialize client that will be used to send requests. This client only needs
// to be created once, and can be reused for multiple requests.
try (VertexAI vertexAI = new VertexAI(projectId, location)) {
StringBuilder output = new StringBuilder();
GenerationConfig generationConfig =
GenerationConfig.newBuilder()
.setMaxOutputTokens(2048)
.setTemperature(0.4F)
.setTopK(32)
.setTopP(1)
.build();
GenerativeModel model = new GenerativeModel(modelName, generationConfig, vertexAI);
List<SafetySetting> safetySettings = Arrays.asList(
SafetySetting.newBuilder()
.setCategory(HarmCategory.HARM_CATEGORY_HATE_SPEECH)
.setThreshold(SafetySetting.HarmBlockThreshold.BLOCK_LOW_AND_ABOVE)
.build(),
SafetySetting.newBuilder()
.setCategory(HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT)
.setThreshold(SafetySetting.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE)
.build()
);
GenerateContentResponse response = model.generateContent(
textPrompt,
safetySettings
);
output.append(response).append("\n");
// Verifies if the above content has been blocked for safety reasons.
boolean blockedForSafetyReason = response.getCandidatesList()
.stream()
.anyMatch(candidate -> candidate.getFinishReason() == Candidate.FinishReason.SAFETY);
output.append("Blocked for safety reasons?: ").append(blockedForSafetyReason);
return output.toString();
}
}
}
Node.js
このサンプルを試す前に、Vertex AI クライアント ライブラリをインストールするにある Node.js の設定手順を完了してください。詳細については、Vertex AI Node.js API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
const {
VertexAI,
HarmCategory,
HarmBlockThreshold,
} = require('@google-cloud/vertexai');
/**
* TODO(developer): Update these variables before running the sample.
*/
async function setSafetySettings(
projectId = 'PROJECT_ID',
location = 'us-central1',
model = 'gemini-1.0-pro-001'
) {
// Initialize Vertex with your Cloud project and location
const vertexAI = new VertexAI({project: projectId, location: location});
// Instantiate the model
const generativeModel = vertexAI.getGenerativeModel({
model: model,
// The following parameters are optional
// They can also be passed to individual content generation requests
safety_settings: [
{
category: HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
},
],
generation_config: {max_output_tokens: 256},
});
const request = {
contents: [{role: 'user', parts: [{text: 'Tell me something dangerous.'}]}],
};
console.log('Prompt:');
console.log(request.contents[0].parts[0].text);
console.log('Streaming Response Text:');
// Create the response stream
const responseStream = await generativeModel.generateContentStream(request);
// Log the text response as it streams
for await (const item of responseStream.stream) {
if (item.candidates[0].finishReason === 'SAFETY') {
console.log('This response stream terminated due to safety concerns.');
break;
} else {
process.stdout.write(item.candidates[0].content.parts[0].text);
}
}
}
次のステップ
他の Google Cloud プロダクトに関連するコードサンプルの検索およびフィルタ検索を行うには、Google Cloud のサンプルをご覧ください。