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 和提示支援的檔案格式,請參閱使用媒體檔案提示

提示設計和文字輸入

構思有效的提示 (或提示工程),是藝術與科學的組合。請參閱「提示簡介」以取得提示提示的指南,並參閱「提示指南」指南,瞭解不同的提示方法。

生成內容

視您使用的模型變化版本而定,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(
    model="gemini-1.5-flash",
    content=[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());

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

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

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

飛鏢 (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 的即時通訊功能收集各輪的問題和回應,讓使用者逐步回答問題,或針對多部分問題尋求協助。此功能非常適合需要持續通訊的應用程式,例如聊天機器人、互動式家教或客戶服務助理。

以下程式碼範例示範了每種支援語言的即時通訊互動基本實作:

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

如需完整範例,請參閱網路教學課程中的即時通訊示範。

飛鏢 (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);
}

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

飛鏢 (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 格式回覆。

只要將 response_mime_type 設定選項設為 application/json,即可在提示中說明所需的 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 中的嵌入服務可產生最先進的嵌入服務,用於字詞、詞組和語句。產生的嵌入隨後可用於自然語言處理工作,例如語意搜尋、文字分類和分群法等。請參閱嵌入指南,瞭解嵌入的定義和嵌入服務的一些重要用途,以協助您快速上手。

後續步驟