Using files

Gemini API 支持单独上传媒体文件,与提示输入分开,从而允许您在多个请求和多个提示中重复使用媒体。如需了解详情,请参阅使用媒体内容生成提示指南。

方法:media.upload

将数据上传到 ragStore,在存储到 RagStore 文档之前进行预处理和分块。

端点

  • 上传 URI,用于媒体上传请求:
帖子 https://generativelanguage.googleapis.com/upload/v1beta/{ragStoreName=ragStores/*}:uploadToRagStore
  • 元数据 URI,用于仅涉及元数据的请求:
帖子 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 互动,我们需要添加一个无法在顶级 Operation proto 中添加的 scotty 特定字段。

如果成功,响应正文将包含结构如下的数据:

字段
name string

由服务器分配的名称,该名称仅在最初返回它的那项服务中是唯一的。如果您使用默认 HTTP 映射,则 name 应是以 operations/{unique_id} 结尾的资源名称。

metadata object

与操作关联的服务专属元数据。它通常包含进度信息和常见元数据(如创建时间)。一些服务可能不会提供此类元数据。任何返回长时间运行操作的方法都应记录元数据类型(如果有的话)。

此对象可以包含任意类型的字段。附加字段 "@type" 包含用于标示相应类型的 URI。示例:{ "id": 1234, "@type": "types.example.com/standard/id" }

done boolean

如果值为 false,则表示操作仍在进行中。如果为 true,则表示操作已完成,其结果不是 error 就是 response

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 嵌入模型的上下文窗口目前为 8,192 个词元。我们假设平均每个字词包含 5 个字符。因此,我们将上限设置为 2**9,即 512 个字或 2560 个 token(假设最坏情况下每个 token 包含一个字符)。这是一个保守的估计值,旨在防止上下文窗口溢出。

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)

Shell

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)
}

Shell

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")

Shell

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

响应正文

如果成功,则响应正文为空的 JSON 对象。

REST 资源:文件

资源:File

上传到 API 的文件。下一个 ID:15

字段
name string

不可变。标识符。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 规范化(即转换为 UTC 零时区格式并在末尾附加 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 规范化(即转换为 UTC 零时区格式并在末尾附加 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 规范化(即转换为 UTC 零时区格式并在末尾附加 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)

视频时长。

该时长以秒为单位,最多包含九个小数位,以“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: ...,
      ...
    }
  ]
}