Gemini API 總覽

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-pro 模型使用文字提示產生文字,並同時使用文字和圖片資料來提示 gemini-pro-vision 模型。本節將提供每個項目的簡易程式碼範例。如需涵蓋所有參數的詳細範例,請參閱 generateContent API 參考資料。

文字和圖片輸入

您可以將含有圖片的文字提示傳送至 gemini-pro-vision 模型,以便執行視覺相關工作。例如為圖片加上說明文字或識別圖片內容

以下程式碼範例針對各種支援的語言,示範如何輕鬆實作文字和圖片提示:

Python

model = genai.GenerativeModel('gemini-pro-vision')

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(
    model="gemini-pro-vision",
    content=[prompt, cookie_picture]
)
print(response.text)

請參閱 Python 教學課程,瞭解完整的程式碼片段。

Go

vmodel := client.GenerativeModel("gemini-pro-vision")

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-pro-vision" });

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 教學課程

Web

const model = genAI.getGenerativeModel({ model: "gemini-pro-vision" });

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());

如需完整範例,請參閱網路教學課程

飛鏢 (Flutter)

final model = GenerativeModel(model: 'gemini-pro-vision', 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-pro-vision", 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-pro-vision",
    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-pro-vision: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-pro-vision')

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-pro")
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-pro" });
const prompt = "Write a story about a magic backpack.";

const result = await model.generateContent(prompt);
console.log(result.response.text());

如需完整範例,請參閱 Node.js 教學課程

Web

const model = genAI.getGenerativeModel({ model: "gemini-pro" });
const prompt = "Write a story about a magic backpack.";

const result = await model.generateContent(prompt);
console.log(result.response.text());

如需完整範例,請參閱網路教學課程

飛鏢 (Flutter)

final model = GenerativeModel(model: 'gemini-pro', 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-pro", 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-pro",
    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-pro: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 的即時通訊功能,即可收集多回合的問題和回應,讓使用者逐步尋求答案或取得有關多部分問題的協助。此功能最適合需要持續通訊的應用程式,例如聊天機器人、互動式家教或客戶服務助理。

以下程式碼範例示範如何使用各種支援的語言,輕鬆實作聊天互動:

Python

  model = genai.GenerativeModel('gemini-pro')
  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-pro")
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-pro"});

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 教學課程中的即時通訊示範。

Web

const model = genAI.getGenerativeModel({ model: "gemini-pro"});

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());

如需完整範例,請參閱網路教學課程中的聊天示範。

飛鏢 (Flutter)

final model = GenerativeModel(model: 'gemini-pro', 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-pro", 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-pro",
    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-pro: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-pro",
    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-pro")

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-pro" });
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 教學課程

Web

const model = genAI.getGenerativeModel({ model: "gemini-pro" });
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);
}

如需完整範例,請參閱網路教學課程

飛鏢 (Flutter)

final model = GenerativeModel(model: 'gemini-pro', 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-pro", 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-pro",
    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-pro: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 格式的回應。

如要使用這項輸出功能,請將 response_mime_type 設定選項設為 application/json,並在要求內文中加入 JSON 格式規格。以下程式碼範例說明如何針對提示要求 JSON 回應:

cURL

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-pro-latest:generateContent?key=$API_KEY \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{ "contents":[{
            "parts":[{"text": "List 5 popular cookie recipes using this JSON schema: \{ \"type\": \"object\", \"properties\": \{ \"recipe_name\": \{ \"type\": \"string\" \},\}\}"}] }],
          "generationConfig": {
            "response_mime_type": "application/json",
          } }'

嵌入

Gemini API 中的嵌入服務會產生字詞、詞組和語句最先進的嵌入功能。產生的嵌入隨後可用於自然語言處理工作,例如語意搜尋、文字分類和分群等。請參閱嵌入指南,瞭解嵌入服務的定義,以及嵌入服務的重要用途,協助您開始使用這項服務。

後續步驟