Using files

Gemini API 支援將媒體檔案與提示輸入內容分開上傳,因此媒體可重複用於多個要求和提示。詳情請參閱使用媒體提示指南。

方法:media.upload

將資料上傳至 ragStore、預先處理並分塊,然後儲存在 RagStore 文件中。

端點

  • 上傳 URI,適用於媒體上傳要求:
post https://generativelanguage.googleapis.com/upload/v1beta/{ragStoreName=ragStores/*}:uploadToRagStore
  • 中繼資料 URI,適用於僅限中繼資料的要求:
post https://generativelanguage.googleapis.com/v1beta/{ragStoreName=ragStores/*}:uploadToRagStore

路徑參數

ragStoreName string

必要欄位。不可變更。要上傳檔案的 RagStore 名稱。範例:ragStores/my-rag-store-123 採用 ragStores/{ragstore} 形式。

要求主體

要求主體會包含結構如下的資料:

欄位
displayName string

(選用步驟) 所建立文件的顯示名稱。

customMetadata[] object (CustomMetadata)

要與資料建立關聯的自訂中繼資料。

chunkingConfig object (ChunkingConfig)

(選用步驟) 設定,用於告知服務如何將資料分塊。如未提供,服務會使用預設參數。

mimeType string

(選用步驟) 資料的 MIME 類型。如未提供,系統會從上傳的內容推斷。

回應主體

這是 google.longrunning.Operation 的副本。我們需要複製這個欄位,因為與 Scotty 互動時,必須新增 Scotty 專屬欄位,但無法在頂層的 Operation proto 中新增。

如果成功,回應主體會含有以下結構的資料:

欄位
name string

伺服器指派的名稱,而且只在當初傳回這個名稱的服務中是唯一的。如果您使用預設的 HTTP 對應,則 name 應該是以 operations/{unique_id} 結尾的資源名稱。

metadata object

服務專屬,且與該作業相關聯的中繼資料,通常包含進度資訊和常用中繼資料 (例如建立時間)。部分服務可能不會提供這類中繼資料。凡是會傳回長時間執行作業的方法,都應記錄中繼資料類型 (如果有的話)。

包含任意類型欄位的物件。額外的 "@type" 欄位則包含能辨識類型的 URI。例如:{ "id": 1234, "@type": "types.example.com/standard/id" }

done boolean

如果值為 false,代表作業仍在執行中。如果值為 true,代表作業已執行完畢,系統會顯示 errorresponse 的執行結果。

result Union type
這是作業的執行結果,可能為 error,或是有效的 response。如果 done == false,系統不會將結果設定為 error,也不會設定為 response。如果 done == true,系統只能將結果設定為 errorresponse 其中之一。部分服務可能不會提供結果。result 只能是下列其中一項:
error object (Status)

作業執行失敗或遭到取消時,所顯示的錯誤結果。

response object

作業執行成功時的一般回應。如果原始方法在執行成功時沒有傳回資料 (例如 Delete),則回應為 google.protobuf.Empty。如果原始方法是標準的 Get/Create/Update,回應則應該為資源。如果是其他方法,回應必須包含類型 XxxResponse,其中 Xxx 是原始方法的名稱。舉例來說,如果原始方法的名稱為 TakeSnapshot(),您就能推測出回應類型應該是 TakeSnapshotResponse

包含任意類型欄位的物件。額外的 "@type" 欄位則包含能辨識類型的 URI。範例:{ "id": 1234, "@type": "types.example.com/standard/id" }

JSON 表示法
{
  "name": string,
  "metadata": {
    "@type": string,
    field1: ...,
    ...
  },
  "done": boolean,

  // result
  "error": {
    object (Status)
  },
  "response": {
    "@type": string,
    field1: ...,
    ...
  }
  // Union type
}

ChunkingConfig

參數,用於告知服務如何將檔案分塊。靈感來自 google3/cloud/ai/platform/extension/lib/retrieval/config/chunker_config.proto

欄位
config Union type
要使用的分塊設定。config 只能是下列其中一項:
whiteSpaceConfig object (WhiteSpaceConfig)

空白字元分塊設定。

JSON 表示法
{

  // config
  "whiteSpaceConfig": {
    object (WhiteSpaceConfig)
  }
  // Union type
}

WhiteSpaceConfig

空白字元區塊演算法的設定 (以空白字元分隔)。

欄位
maxTokensPerChunk integer

每個區塊的權杖數量上限。對這個分塊演算法而言,權杖就是字詞。注意:我們將符記定義為以空格分隔的字詞,而非分詞器的輸出內容。截至 2025 年 4 月 17 日,最新 Gemini 嵌入模型脈絡窗口為 8192 個權杖。我們假設每個單字平均有 5 個字元。因此,我們將上限設為 2**9,也就是 512 個字或 2560 個權杖 (假設每個權杖都是一個字元)。這是保守估計,目的是避免脈絡窗口溢位。

maxOverlapTokens integer

兩個相鄰區塊之間重疊的權杖數量上限。

JSON 表示法
{
  "maxTokensPerChunk": integer,
  "maxOverlapTokens": integer
}

方法:files.get

取得指定 File 的中繼資料。

端點

get https://generativelanguage.googleapis.com/v1beta/{name=files/*}

路徑參數

name string

必要欄位。要取得的 File 名稱。範例:files/abc-123 採用 files/{file} 形式。

要求主體

要求主體必須為空白。

要求範例

Python

from google import genai

client = genai.Client()
myfile = client.files.upload(file=media / "poem.txt")
file_name = myfile.name
print(file_name)  # "files/*"

myfile = client.files.get(name=file_name)
print(myfile)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
const myfile = await ai.files.upload({
  file: path.join(media, "poem.txt"),
});
const fileName = myfile.name;
console.log(fileName);

const fetchedFile = await ai.files.get({ name: fileName });
console.log(fetchedFile);

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}
myfile, err := client.Files.UploadFromPath(
	ctx,
	filepath.Join(getMedia(), "poem.txt"), 
	&genai.UploadFileConfig{
		MIMEType: "text/plain",
	},
)
if err != nil {
	log.Fatal(err)
}
fileName := myfile.Name
fmt.Println(fileName)
file, err := client.Files.Get(ctx, fileName, nil)
if err != nil {
	log.Fatal(err)
}
fmt.Println(file)

貝殼

name=$(jq ".file.name" file_info.json)
# Get the file of interest to check state
curl https://generativelanguage.googleapis.com/v1beta/files/$name > file_info.json
# Print some information about the file you got
name=$(jq ".file.name" file_info.json)
echo name=$name
file_uri=$(jq ".file.uri" file_info.json)
echo file_uri=$file_uri

回應主體

如果成功,回應主體會包含 File 的執行例項。

方法:files.list

列出要求專案擁有的 File 中繼資料。

端點

get https://generativelanguage.googleapis.com/v1beta/files

查詢參數

pageSize integer

(選用步驟) 每頁傳回的 File 數量上限。如未指定,則預設值為 10。pageSize 上限為 100。

pageToken string

(選用步驟) 先前 files.list 呼叫傳回的頁面權杖。

要求主體

要求主體必須為空白。

要求範例

Python

from google import genai

client = genai.Client()
print("My files:")
for f in client.files.list():
    print("  ", f.name)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
console.log("My files:");
// Using the pager style to list files
const pager = await ai.files.list({ config: { pageSize: 10 } });
let page = pager.page;
const names = [];
while (true) {
  for (const f of page) {
    console.log("  ", f.name);
    names.push(f.name);
  }
  if (!pager.hasNextPage()) break;
  page = await pager.nextPage();
}

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}
fmt.Println("My files:")
page, err := client.Files.List(ctx, nil)
if err != nil {
	log.Fatal(err)
}
for _, f := range page.Items {
	fmt.Println("  ", f.Name)
}

貝殼

echo "My files: "

curl "https://generativelanguage.googleapis.com/v1beta/files?key=$GEMINI_API_KEY"

回應主體

files.list 的回應。

如果成功,回應主體會含有以下結構的資料:

欄位
files[] object (File)

File 清單。

nextPageToken string

可做為 pageToken 傳送的權杖,用於後續的 files.list 呼叫。

JSON 表示法
{
  "files": [
    {
      object (File)
    }
  ],
  "nextPageToken": string
}

方法:files.delete

刪除 File

端點

delete https://generativelanguage.googleapis.com/v1beta/{name=files/*}

路徑參數

name string

必要欄位。要刪除的 File 名稱。範例:files/abc-123 採用 files/{file} 形式。

要求主體

要求主體必須為空白。

要求範例

Python

from google import genai

client = genai.Client()
myfile = client.files.upload(file=media / "poem.txt")

client.files.delete(name=myfile.name)

try:
    result = client.models.generate_content(
        model="gemini-2.0-flash", contents=[myfile, "Describe this file."]
    )
    print(result)
except genai.errors.ClientError:
    pass

Node.js

// The Gen AI SDK for TypeScript and JavaScript is in preview.
// Some features have not been implemented.

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}
myfile, err := client.Files.UploadFromPath(
	ctx, 
	filepath.Join(getMedia(), "poem.txt"), 
	&genai.UploadFileConfig{
		MIMEType: "text/plain",
	},
)
if err != nil {
	log.Fatal(err)
}
// Delete the file.
_, err = client.Files.Delete(ctx, myfile.Name, nil)
if err != nil {
	log.Fatal(err)
}
// Attempt to use the deleted file.
parts := []*genai.Part{
	genai.NewPartFromURI(myfile.URI, myfile.MIMEType,),
	genai.NewPartFromText("Describe this file."),
}

contents := []*genai.Content{
	genai.NewContentFromParts(parts, genai.RoleUser),
}

_, err = client.Models.GenerateContent(ctx, "gemini-2.0-flash", contents, nil)
// Expect an error when using a deleted file.
if err != nil {
	return nil
}
return fmt.Errorf("expected an error when using deleted file")

貝殼

curl --request "DELETE" https://generativelanguage.googleapis.com/v1beta/files/$name?key=$GEMINI_API_KEY

回應主體

如果成功,回應主體會是空白的 JSON 物件。

REST 資源:files

資源:File

上傳至 API 的檔案。下一個 ID:15

欄位
name string

不可變更。ID。File 資源名稱。ID (不含「files/」前置字串的名稱) 最多可包含 40 個字元,且只能是小寫英數字元或破折號 (-)。ID 開頭和結尾不得為破折號。如果建立時名稱為空白,系統會產生專屬名稱。範例:files/123-456

displayName string

(選用步驟) File 的使用者可讀顯示名稱。顯示名稱長度不得超過 512 個半形字元 (包括空格)。例如:「歡迎圖片」

mimeType string

僅供輸出。檔案的 MIME 類型。

sizeBytes string (int64 format)

僅供輸出。檔案大小 (以位元組為單位)。

createTime string (Timestamp format)

僅供輸出。建立 File 的時間戳記。

使用 RFC 3339,產生的輸出內容一律會經過 Z 標準化,並使用 0、3、6 或 9 個小數點後位數。系統也接受「Z」以外的偏移量。例如:"2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z""2014-10-02T15:01:23+05:30"

updateTime string (Timestamp format)

僅供輸出。上次更新 File 的時間戳記。

使用 RFC 3339,產生的輸出內容一律會經過 Z 標準化,並使用 0、3、6 或 9 個小數點後位數。系統也接受「Z」以外的偏移量。例如:"2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z""2014-10-02T15:01:23+05:30"

expirationTime string (Timestamp format)

僅供輸出。File的刪除時間戳記。只有在 File 預計到期時才需要設定。

使用 RFC 3339,產生的輸出內容一律會經過 Z 標準化,並使用 0、3、6 或 9 個小數點後位數。系統也接受「Z」以外的偏移量。例如:"2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z""2014-10-02T15:01:23+05:30"

sha256Hash string (bytes format)

僅供輸出。上傳位元組的 SHA-256 雜湊值。

Base64 編碼字串。

uri string

僅供輸出。File 的 URI。

downloadUri string

僅供輸出。File 的下載 URI。

state enum (State)

僅供輸出。檔案的處理狀態。

source enum (Source)

檔案來源。

error object (Status)

僅供輸出。檔案處理失敗時的錯誤狀態。

metadata Union type
檔案的中繼資料。metadata 只能是下列其中一項:
videoMetadata object (VideoFileMetadata)

僅供輸出。影片的中繼資料。

JSON 表示法
{
  "name": string,
  "displayName": string,
  "mimeType": string,
  "sizeBytes": string,
  "createTime": string,
  "updateTime": string,
  "expirationTime": string,
  "sha256Hash": string,
  "uri": string,
  "downloadUri": string,
  "state": enum (State),
  "source": enum (Source),
  "error": {
    object (Status)
  },

  // metadata
  "videoMetadata": {
    object (VideoFileMetadata)
  }
  // Union type
}

VideoFileMetadata

影片的中繼資料 File

欄位
videoDuration string (Duration format)

影片長度。

時間長度以秒為單位,最多可有 9 個小數位數,並應以「s」結尾,例如:"3.5s"

JSON 表示法
{
  "videoDuration": string
}

檔案生命週期的狀態。

列舉
STATE_UNSPECIFIED 預設值。如果省略狀態,系統會使用這個值。
PROCESSING 檔案正在處理中,暫時無法用於推論。
ACTIVE 檔案已處理完畢,可供推論。
FAILED 檔案處理失敗。

來源

列舉
SOURCE_UNSPECIFIED 如未指定來源,則會使用這個值。
UPLOADED 表示檔案是由使用者上傳。
GENERATED 表示檔案是由 Google 產生。
REGISTERED 表示檔案已註冊,也就是 Google Cloud Storage 檔案。

狀態

Status 類型會定義適用於不同程式設計環境 (包含 REST API 和 RPC API) 的邏輯錯誤模型。gRPC 會使用這個模型。每個 Status 訊息包含三部分的資料:錯誤代碼、錯誤訊息和錯誤詳細資料。

如要進一步瞭解這個錯誤模型,以及如何使用這個錯誤模型,請參閱 API 設計指南

欄位
code integer

狀態碼,應為 google.rpc.Code 的列舉值。

message string

向開發人員顯示的錯誤訊息,應以英文呈現。所有向使用者顯示的錯誤訊息都應經過本地化,並透過 google.rpc.Status.details 欄位傳送,或是由用戶端加以本地化。

details[] object

包含錯誤詳細資料的訊息清單。這是供 API 使用的一組常用訊息類型。

包含任意類型欄位的物件。額外的 "@type" 欄位則包含能辨識類型的 URI。範例:{ "id": 1234, "@type": "types.example.com/standard/id" }

JSON 表示法
{
  "code": integer,
  "message": string,
  "details": [
    {
      "@type": string,
      field1: ...,
      ...
    }
  ]
}