你可以透過 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 中的嵌入服務可產生最先進的嵌入服務,用於字詞、詞組和語句。產生的嵌入隨後可用於自然語言處理工作,例如語意搜尋、文字分類和分群法等。請參閱嵌入指南,瞭解嵌入的定義和嵌入服務的一些重要用途,以協助您快速上手。
後續步驟
- 透過 Google AI Studio 快速入門導覽課程開始使用 Google AI Studio UI。
- 透過 Python、Go 或 Node.js 的教學課程,嘗試在伺服器端存取 Gemini API。
- 透過網路教學課程開始建構網路。
- 透過 Swift 教學課程或 Android 教學課程開始建構行動應用程式。
- 如果您目前已是 Google Cloud 使用者 (或想使用 Gemini 版 Vertex,發揮強大的 Google Cloud 生態系統),請參閱 Vertex AI 的生成式 AI 瞭解詳情。