Gemini API を使用すると、Google の最新の生成モデルにアクセスできます。API で利用できる一般的な機能について理解したら、使用する言語のチュートリアルを試して開発を開始します。
モデル
Gemini は、Google が開発した一連のマルチモーダル生成 AI モデルです。Gemini モデルは、選択したモデル バリエーションに応じて、プロンプトでテキストと画像を受け入れ、テキスト レスポンスを出力できます。
詳細なモデル情報については、Gemini モデルのページをご覧ください。また、list_models
メソッドを使用して使用可能なすべてのモデルを一覧表示してから、get_model
メソッドを使用して特定のモデルのメタデータを取得することもできます。
プロンプトのデータと設計
特定の Gemini モデルは、テキストデータとメディア ファイルの両方を入力として受け入れます。この機能により、コンテンツの生成、データの分析、問題の解決に向けてさらに多くの可能性が生まれます。使用しているモデルの一般的な入力トークンの上限など、考慮すべき制限と要件がいくつかあ��ます。特定のモデルのトークンの上限については、Gemini モデルをご覧ください。
Gemini API を使用するプロンプトのサイズは 20 MB 以下にする必要があります。Gemini API には、プロンプトに使用するメディア ファイルを一時的に保存するための File API が用意されています。これにより、20 MB の上限を超えるプロンプト データを提供できます。Files API の使用方法と、プロンプトでサポートされているファイル形式については、メディア ファイルを使用したプロンプトをご覧ください。
プロンプト設計とテキスト入力
効果的なプロンプトの作成(プロンプト エンジニアリング)は、アートと科学の組み合わせです。プロンプトを作成する方法のガイダンスについては、プロンプトの概要をご覧ください。プロンプトへのさまざまなアプローチについては、プロンプト 101 ガイドをご覧ください。
コンテンツの生成
Gemini API では、使用するモデルのバリエーションに応じて、プロンプトにテキストデータと画像データの両方を使用できます。たとえば、Gemini 1.5 モデルを使用して、テキストのみのプロンプトまたはマルチモーダル プロンプトからテキストを生成できます。このセクションでは、それぞれの基本的なコードサンプルを示します。すべてのパラメータを網羅した詳細な例については、generateContent
API リファレンスをご覧ください。
テキストと画像の入力
画像を含むテキスト プロンプトを Gemini 1.5 モデルに送信して、視覚関連のタスクを実行できます。たとえば、画像にキャプションを追加したり、画像に写っているものを識別したりできます。
次のコードサンプルは、サポートされている言語ごとにテキストと画像のプロンプトの基本的な実装を示しています。
Python
model = genai.GenerativeModel('gemini-1.5-flash')
cookie_picture = {
'mime_type': 'image/png',
'data': pathlib.Path('cookie.png').read_bytes()
}
prompt = "Do these look store-bought or homemade?"
response = model.generate_content(
contents=[prompt, cookie_picture]
)
print(response.text)
コード スニペットの全文については、Python チュートリアルをご覧ください。
Go
vmodel := client.GenerativeModel("gemini-1.5-flash")
data, err := os.ReadFile(filepath.Join("path-to-image", imageFile))
if err != nil {
log.Fatal(err)
}
resp, err := vmodel.GenerateContent(ctx, genai.Text("Do these look store-bought or homemade?"), genai.ImageData("jpeg", data))
if err != nil {
log.Fatal(err)
}
詳細な例については、Go のチュートリアルをご覧ください。
Node.js
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
const prompt = "Do these look store-bought or homemade?";
const image = {
inlineData: {
data: Buffer.from(fs.readFileSync("cookie.png")).toString("base64"),
mimeType: "image/png",
},
};
const result = await model.generateContent([prompt, image]);
console.log(result.response.text());
詳細な例については、Node.js チュートリアルをご覧ください。
ウェブ
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
const prompt = "Do these look store-bought or homemade?";
const image = {
inlineData: {
data: base64EncodedImage /* see JavaScript quickstart for details */,
mimeType: "image/png",
},
};
const result = await model.generateContent([prompt, image]);
console.log(result.response.text());
詳細な例については、ウェブ チュートリアルをご覧ください。
Dart(Flutter)
final model = GenerativeModel(model: 'gemini-1.5-flash', apiKey: apiKey);
final prompt = 'Do these look store-bought or homemade?';
final imageBytes = await File('cookie.png').readAsBytes();
final content = [
Content.multi([
TextPart(prompt),
DataPart('image/png', imageBytes),
])
];
final response = await model.generateContent(content);
print(response.text);
詳細な例については、Dart(Flutter)チュートリアルをご覧ください。
Swift
let model = GenerativeModel(name: "gemini-1.5-flash", apiKey: "API_KEY")
let cookieImage = UIImage(...)
let prompt = "Do these look store-bought or homemade?"
let response = try await model.generateContent(prompt, cookieImage)
詳細な例については、Swift チュートリアルをご覧ください。
Android
val generativeModel = GenerativeModel(
modelName = "gemini-1.5-flash",
apiKey = BuildConfig.apiKey
)
val cookieImage: Bitmap = // ...
val inputContent = content() {
image(cookieImage)
text("Do these look store-bought or homemade?")
}
val response = generativeModel.generateContent(inputContent)
print(response.text)
詳細な例については、Android チュートリアルをご覧ください。
cURL
curl https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent?key=${API_KEY} \
-H 'Content-Type: application/json' \
-X POST \
-d @<(echo'{
"contents":[
{ "parts":[
{"text": "Do these look store-bought or homemade?"},
{ "inlineData": {
"mimeType": "image/png",
"data": "'$(base64 -w0 cookie.png)'"
}
}
]
}
]
}')
詳しくは、REST API のチュートリアルをご覧ください。
テキストのみの入力
Gemini API は、テキストのみの入力を処理することもできます。この機能を使用すると、テキスト補完や要約などの自然言語処理(NLP)タスクを実行できます。
次のコードサンプルは、サポートされている言語ごとにテキストのみのプロンプトの基本的な実装を示しています。
Python
model = genai.GenerativeModel('gemini-1.5-flash')
prompt = "Write a story about a magic backpack."
response = model.generate_content(prompt)
詳細な例については、Python チュートリアルをご覧ください。
Go
ctx := context.Background()
client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("API_KEY")))
if err != nil {
log.Fatal(err)
}
defer client.Close()
model := client.GenerativeModel("gemini-1.5-flash")
resp, err := model.GenerateContent(ctx, genai.Text("Write a story about a magic backpack."))
if err != nil {
log.Fatal(err)
}
詳細な例については、Go のチュートリアルをご覧ください。
Node.js
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
const prompt = "Write a story about a magic backpack.";
const result = await model.generateContent(prompt);
console.log(result.response.text());
詳細な例については、Node.js チュートリアルをご覧ください。
ウェブ
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
const prompt = "Write a story about a magic backpack.";
const result = await model.generateContent(prompt);
console.log(result.response.text());
詳細な例については、ウェブ チュートリアルをご覧ください。
Dart(Flutter)
final model = GenerativeModel(model: 'gemini-1.5-flash', apiKey: apiKey);
final prompt = 'Write a story about a magic backpack.';
final content = [Content.text(prompt)];
final response = await model.generateContent(content);
print(response.text);
詳細な例については、Dart(Flutter)チュートリアルをご覧ください。
Swift
let model = GenerativeModel(name: "gemini-1.5-flash", apiKey: "API_KEY")
let prompt = "Write a story about a magic backpack."
let response = try await model.generateContent(prompt)
詳細な例については、Swift チュートリアルをご覧ください。
Android
val generativeModel = GenerativeModel(
modelName = "gemini-1.5-flash",
apiKey = BuildConfig.apiKey
)
val prompt = "Write a story about a magic backpack."
val response = generativeModel.generateContent(prompt)
print(response.text)
詳細な例については、Android チュートリアルをご覧ください。
cURL
curl https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent?key=$API_KEY \
-H 'Content-Type: application/json' \
-X POST \
-d '{ "contents":[
{ "parts":[{"text": "Write a story about a magic backpack"}]}
]
}'
詳しくは、REST API のチュートリアルをご覧ください。
マルチターンの会話(チャット)
Gemini API を使用して、ユーザー向けのインタラクティブなチャット エクスペリエンスを構築できます。API のチャット機能を使用すると、複数回にわたる質問と回答を収集できます。これにより、ユーザーは段階的に回答を取得したり、複数の部分からなる問題のサポートを受けたりできます。この機能は、chatbot、インタラクティブ チューター、カスタマー サポート アシスタントなど、継続的なコミュニケーションが必要なアプリケーションに最適です。
次のコードサンプルは、サポートされている各言語のチャット インタラクションの基本的な実装を示しています。
Python
model = genai.GenerativeModel('gemini-1.5-flash')
chat = model.start_chat(history=[])
response = chat.send_message(
"Pretend you\'re a snowman and stay in character for each response.")
print(response.text)
response = chat.send_message(
"What\'s your favorite season of the year?")
print(response.text)
詳細な例については、Python チュートリアルのチャットデモをご覧ください。
Go
model := client.GenerativeModel("gemini-1.5-flash")
cs := model.StartChat()
cs.History = []*genai.Content{
&genai.Content{
Parts: []genai.Part{
genai.Text("Pretend you're a snowman and stay in character for each response."),
},
Role: "user",
},
&genai.Content{
Parts: []genai.Part{
genai.Text("Hello! It's cold! Isn't that great?"),
},
Role: "model",
},
}
resp, err := cs.SendMessage(ctx, genai.Text("What's your favorite season of the year?"))
if err != nil {
log.Fatal(err)
}
詳細な例については、Go チュートリアルのチャットデモをご覧ください。
Node.js
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash"});
const chat = model.startChat({
history: [
{
role: "user",
parts: "Pretend you're a snowman and stay in character for each response.",
},
{
role: "model",
parts: "Hello! It's cold! Isn't that great?",
},
],
generationConfig: {
maxOutputTokens: 100,
},
});
const msg = "What's your favorite season of the year?";
const result = await chat.sendMessage(msg);
console.log(result.response.text());
詳細な例については、Node.js チュートリアルのチャットデモをご覧ください。
ウェブ
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash"});
const chat = model.startChat({
history: [
{
role: "user",
parts: "Pretend you're a snowman and stay in character for each response.",
},
{
role: "model",
parts: "Hello! It's so cold! Isn't that great?",
},
],
generationConfig: {
maxOutputTokens: 100,
},
});
const msg = "What's your favorite season of the year?";
const result = await chat.sendMessage(msg);
console.log(result.response.text());
詳細な例については、ウェブ チュートリアルのチャットデモをご覧ください。
Dart(Flutter)
final model = GenerativeModel(model: 'gemini-1.5-flash', apiKey: apiKey);
final chat = model.startChat(history: [
Content.text(
"Pretend you're a snowman and stay in character for each response."),
Content.model([TextPart("Hello! It's cold! Isn't that great?")]),
]);
final content = Content.text("What's your favorite season of the year?");
final response = await chat.sendMessage(content);
print(response.text);
詳細な例については、Dart(Flutter)チュートリアルのチャットデモをご覧ください。
Swift
let model = GenerativeModel(name: "gemini-1.5-flash", apiKey: "API_KEY")
let chat = model.startChat()
var message = "Pretend you're a snowman and stay in character for each response."
var response = try await chat.sendMessage(message)
message = "What\'s your favorite season of the year?"
response = try await chat.sendMessage(message)
詳細な例については、Swift チュートリアルのチャットデモをご覧ください。
Android
val generativeModel = GenerativeModel(
modelName = "gemini-1.5-flash",
apiKey = BuildConfig.apiKey
)
val chat = generativeModel.startChat()
val response = chat.sendMessage("Pretend you're a snowman and stay in
character for each response.")
print(response.text)
詳細な例については、Android チュートリアルをご覧ください。
cURL
curl https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$API_KEY \ -H 'Content-Type: application/json' \ -X POST \ -d '{ "contents": [ {"role":"user", "parts":[{ "text": "Pretend you're a snowman and stay in character for each {"role": "model", response."}]}, "parts":[{ "text": "Hello! It's so cold! Isn't that great?"}]}, {"role": "user", "parts":[{ "text": "What\'s your favorite season of the year?"}]}, ] }' 2> /dev/null | grep "text"
# response example: "text": "Winter, of course!"
詳しくは、REST API のチュートリアルをご覧ください。
ストリーミングされた回答
Gemini API は、生成 AI モデルからレスポンスを受信するもう一つの方法(データ ストリームとして)を提供します。ストリーミングされたレスポンスは、モデルによって生成されるときに、増分データをアプリケーションに送り返します。この機能を使用すると、ユーザー リクエストにすばやく応答して進行状況を表示し、よりインタラクティブなエクスペリエンスを実現できます。
ストリーミングされたレスポンスは、自由形式のプロンプトや Gemini モデルとのチャットのオプションです。次のコードサンプルは、サポートされている言語ごとにプロンプトに対してストリーミング レスポンスをリクエストする方法を示しています。
Python
prompt = "Write a story about a magic backpack."
response = genai.stream_generate_content(
model="models/gemini-1.5-flash",
prompt=prompt
)
コード スニペットの全文については、Python チュートリアルをご覧ください。
Go
ctx := context.Background()
client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("API_KEY")))
if err != nil {
log.Fatal(err)
}
defer client.Close()
model := client.GenerativeModel("gemini-1.5-flash")
iter := model.GenerateContentStream(ctx, genai.Text("Write a story about a magic backpack."))
for {
resp, err := iter.Next()
if err == iterator.Done {
break
}
if err != nil {
log.Fatal(err)
}
// print resp
}
詳細な例については、Go のチュートリアルをご覧ください。
Node.js
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
const prompt = "Write a story about a magic backpack.";
const result = await model.generateContentStream([prompt]);
// print text as it comes in
for await (const chunk of result.stream) {
const chunkText = chunk.text();
console.log(chunkText);
}
詳細な例については、Node.js チュートリアルをご覧ください。
ウェブ
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
const prompt = "Write a story about a magic backpack.";
const result = await model.generateContentStream([prompt]);
// print text as it comes in
for await (const chunk of result.stream) {
const chunkText = chunk.text();
console.log(chunkText);
}
詳細な例については、ウェブ チュートリアルをご覧ください。
Dart(Flutter)
final model = GenerativeModel(model: 'gemini-1.5-flash', apiKey: apiKey);
final prompt = 'Write a story about a magic backpack.';
final content = [Content.text(prompt)];
final response = model.generateContentStream(content);
await for (final chunk in response) {
print(chunk.text);
}
詳細な例については、Dart(Flutter)チュートリアルをご覧ください。
Swift
let model = GenerativeModel(name: "gemini-1.5-flash", apiKey: "API_KEY")
let prompt = "Write a story about a magic backpack."
let stream = model.generateContentStream(prompt)
for try await chunk in stream {
print(chunk.text ?? "No content")
}
詳細な例については、Swift チュートリアルをご覧ください。
Android
val generativeModel = GenerativeModel(
modelName = "gemini-1.5-flash",
apiKey = BuildConfig.apiKey
)
val inputContent = content {
text("Write a story about a magic backpack.")
}
var fullResponse = ""
generativeModel.generateContentStream(inputContent).collect { chunk ->
print(chunk.text)
fullResponse += chunk.text
}
詳細な例については、Android チュートリアルをご覧ください。
cURL
curl https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:streamGenerateContent?key=${API_KEY} \
-H 'Content-Type: application/json' \
--no-buffer \
-d '{ "contents":[
{"role": "user",
"parts":[{"text": "Write a story about a magic backpack."}]
}
]
}' > response.json
詳しくは、REST API のチュートリアルをご覧ください。
JSON 形式のレスポンス
アプリケーションによっては、プロンプトに対するレスポンスを構造化データ形式で返す必要がある場合があります。特に、レスポンスを使用してプログラミング インターフェースにデータを入力する場合は、そうする必要があります。Gemini API には、JSON 形式のレスポンスをリクエストするための構成パラメータが用意されています。
モデルで JSON を出力するには、response_mime_type
構成オプションを application/json
に設定し、プロンプトでレスポンスに必要な JSON の形式を記述します。
Python
model = genai.GenerativeModel('gemini-1.5-flash',
generation_config={"response_mime_type": "application/json"})
prompt = """
List 5 popular cookie recipes.
Using this JSON schema:
Recipe = {"recipe_name": str}
Return a `list[Recipe]`
"""
response = model.generate_content(prompt)
print(response.text)
cURL
curl https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$API_KEY \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [
{
"parts": [
{
"text": "\nList 5 popular cookie recipes.\n\nUsing this JSON schema:\n\n Recipe = {\"recipe_name\": str}\n\nReturn a `list[Recipe]`\n "
}
]
}
]
"generationConfig": {
"response_mime_type": "application/json",
}
}'
Gemini 1.5 Flash モデルは、取得する JSON スキーマのテキスト記述のみを受け入れますが、Gemini 1.5 Pro モデルではスキーマ オブジェクト(または Python 型の同等のもの)を渡すことができます。モデルの出力はそのスキーマに厳密に従います。これは、制御された生成または制約のあるデコードとも呼ばれます。
たとえば、Recipe
オブジェクトのリストを取得するには、list[Recipe]
を generation_config
引数の response_schema
フィールドに渡します。
Python
import typing_extensions as typing
class Recipe(typing.TypedDict):
recipe_name: str
model = genai.GenerativeModel(model_name="models/gemini-1.5-pro")
result = model.generate_content(
"List 5 popular cookie recipes",
generation_config=genai.GenerationConfig(response_mime_type="application/json",
response_schema = list[Recipe]))
print(result.text)
cURL
curl https://generativelanguage.googleapis.com/v1beta/models/models/gemini-1.5-pro:generateContent?
-H 'Content-Type: application/json'
-X POST \
-d '{
"contents": [
{
"parts": [
{
"text": "List 5 popular cookie recipes"
}
]
}
],
"generationConfig": {
"responseMimeType": "application/json",
"responseSchema": {
"type": "ARRAY",
"items": {
"type": "OBJECT",
"properties": {
"recipe_name": {
"type": "STRING"
}
}
}
}
}
}'
```
詳細については、Gemini API クックブックの JSON モードのクイックスタートをご覧ください。
エンベディング
Gemini API のエンベディング サービスは、単語、フレーズ、文の最先端のエンベディングを生成します。生成されたエンベディングは、セマンティック検索、テキスト分類、クラスタリングなどの NLP タスクに使用できます。エンベディングの概要と、エンベディング サービスの主なユースケースについては、エンベディング ガイドをご覧ください。
次のステップ
- Google AI Studio クイックスタートを使用して Google AI Studio の UI を使ってみましょう。
- Python、Go、または Node.js のチュートリアルを使用して、Gemini API へのサーバー側のアクセスを試します。
- ウェブ チュートリアルでウェブ用の開発を始めましょう。
- Swift チュートリアルや Android チュートリアルを参考に、モバイルアプリの作成を開始しましょう。
- 既存の Google Cloud ユーザーである(または Gemini on Vertex を使用して強力な Google Cloud エコシステムを利用したい場合)は、Vertex AI での生成 AI で詳細をご確認ください。