Using files

Gemini API hỗ trợ việc tải tệp đa phương tiện lên riêng biệt với dữ liệu đầu vào của câu lệnh, cho phép bạn sử dụng lại nội dung nghe nhìn của mình trên nhiều yêu cầu và nhiều câu lệnh. Để biết thêm thông tin chi tiết, hãy xem hướng dẫn Tạo câu lệnh bằng nội dung nghe nhìn.

Phương thức: media.upload

Tải dữ liệu lên ragStore, tiền xử lý và chia thành các đoạn trước khi lưu trữ trong RagStore Document.

Điểm cuối

  • URI tải lên, cho các yêu cầu tải nội dung đa phương tiện lên:
post https://generativelanguage.googleapis.com/upload/v1beta/{ragStoreName=ragStores/*}:uploadToRagStore
  • URI siêu dữ liệu, cho các yêu cầu chỉ có siêu dữ liệu:
post https://generativelanguage.googleapis.com/v1beta/{ragStoreName=ragStores/*}:uploadToRagStore

Tham số đường dẫn

ragStoreName string

Bắt buộc. Không thể thay đổi. Tên của RagStore để tải tệp lên. Ví dụ: ragStores/my-rag-store-123 Tên này có dạng ragStores/{ragstore}.

Nội dung yêu cầu

Nội dung yêu cầu chứa dữ liệu với cấu trúc sau:

Trường
displayName string

Không bắt buộc. Tên hiển thị của tài liệu đã tạo.

customMetadata[] object (CustomMetadata)

Siêu dữ liệu tuỳ chỉnh sẽ được liên kết với dữ liệu.

chunkingConfig object (ChunkingConfig)

Không bắt buộc. Cấu hình để cho dịch vụ biết cách phân chia dữ liệu thành các khối. Nếu bạn không cung cấp, dịch vụ sẽ sử dụng các thông số mặc định.

mimeType string

Không bắt buộc. Loại MIME của dữ liệu. Nếu bạn không cung cấp, hệ thống sẽ suy luận từ nội dung được tải lên.

Nội dung phản hồi

Đây là bản sao của google.longrunning.Operation. Chúng ta cần sao chép nó vì để tương tác với Scotty, chúng ta cần thêm một trường cụ thể của Scotty mà không thể thêm vào proto Operation cấp cao nhất.

Nếu thành công, phần nội dung phản hồi sẽ chứa dữ liệu có cấu trúc sau:

Trường
name string

Tên do máy chủ chỉ định, chỉ mang tính duy nhất trong cùng một dịch vụ ban đầu trả về tên đó. Nếu bạn sử dụng ánh xạ HTTP mặc định, name phải là tên tài nguyên kết thúc bằng operations/{unique_id}.

metadata object

Siêu dữ liệu dành riêng cho dịch vụ liên kết với thao tác. Thường thì siêu dữ liệu này chứa thông tin về tiến trình và siêu dữ liệu chung, chẳng hạn như thời gian tạo. Có thể một số dịch vụ sẽ không cung cấp siêu dữ liệu như vậy. Mọi phương thức có trả về một thao tác diễn ra trong thời gian dài đều phải ghi lại loại siêu dữ liệu (nếu có).

Một đối tượng chứa các trường thuộc một loại tuỳ ý. Một trường bổ sung "@type" chứa một URI xác định loại. Ví dụ: { "id": 1234, "@type": "types.example.com/standard/id" }.

done boolean

Nếu giá trị là false, tức là thao tác vẫn đang diễn ra. Nếu true, thao tác đã hoàn tất và có thể dùng error hoặc response.

result Union type
Kết quả của thao tác, có thể là error hoặc response hợp lệ. Nếu done == false, thì errorresponse đều không được thiết lập. Nếu done == true, bạn chỉ có thể thiết lập một trong hai tham số error hoặc response. Có thể một số dịch vụ sẽ không cung cấp kết quả. result chỉ có thể là một trong những trạng thái sau:
error object (Status)

Kết quả chỉ thao tác bị lỗi trong trường hợp không thành công hoặc huỷ.

response object

Phản hồi bình thường, thao tác thành công. Nếu phương thức ban đầu không trả về dữ liệu khi thành công, chẳng hạn như Delete, thì phản hồi sẽ là google.protobuf.Empty. Nếu phương thức ban đầu là Get/Create/Update tiêu chuẩn, thì phản hồi phải là tài nguyên. Đối với các phương thức khác, phản hồi phải là loại XxxResponse, trong đó Xxx là tên phương thức ban đầu. Ví dụ: nếu tên phương thức ban đầu là TakeSnapshot(), thì suy ra loại phản hồi là TakeSnapshotResponse.

Một đối tượng chứa các trường thuộc một loại tuỳ ý. Một trường bổ sung "@type" chứa một URI xác định loại. Ví dụ: { "id": 1234, "@type": "types.example.com/standard/id" }.

Biểu diễn dưới dạng JSON
{
  "name": string,
  "metadata": {
    "@type": string,
    field1: ...,
    ...
  },
  "done": boolean,

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

ChunkingConfig

Các tham số cho biết cách dịch vụ phân chia tệp thành các khối. Lấy cảm hứng từ google3/cloud/ai/platform/extension/lib/retrieval/config/chunker_config.proto

Trường
config Union type
Cấu hình phân đoạn sẽ sử dụng. config chỉ có thể là một trong những trạng thái sau:
whiteSpaceConfig object (WhiteSpaceConfig)

Cấu hình phân đoạn khoảng trắng.

Biểu diễn dưới dạng JSON
{

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

WhiteSpaceConfig

Cấu hình cho thuật toán phân đoạn khoảng trắng [phân tách bằng khoảng trắng].

Trường
maxTokensPerChunk integer

Số lượng mã thông báo tối đa cho mỗi đoạn. Mã thông báo được xác định là các từ cho thuật toán phân đoạn này. Lưu ý: chúng tôi định nghĩa mã thông báo là các từ được phân tách bằng khoảng trắng, chứ không phải đầu ra của một trình mã hoá từ. Tính đến ngày 17/4/2025, cửa sổ ngữ cảnh của mô hình nhúng Gemini mới nhất hiện là 8192 token. Chúng tôi giả định rằng mỗi từ có trung bình 5 ký tự. Do đó, chúng tôi đặt giới hạn trên là 2**9, tức là 512 từ hoặc 2560 mã thông báo, giả sử trường hợp xấu nhất là một ký tự cho mỗi mã thông báo. Đây là một ước tính thận trọng nhằm ngăn chặn tình trạng tràn cửa sổ ngữ cảnh.

maxOverlapTokens integer

Số lượng mã thông báo tối đa trùng lặp giữa hai đoạn liền kề.

Biểu diễn dưới dạng JSON
{
  "maxTokensPerChunk": integer,
  "maxOverlapTokens": integer
}

Phương thức: files.get

Lấy siêu dữ liệu cho File đã cho.

Điểm cuối

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

Tham số đường dẫn

name string

Bắt buộc. Tên của File cần lấy. Ví dụ: files/abc-123 Tên này có dạng files/{file}.

Nội dung yêu cầu

Nội dung yêu cầu phải trống.

Ví dụ về yêu cầu

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)

Vỏ

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

Nội dung phản hồi

Nếu thành công, nội dung phản hồi sẽ chứa một phiên bản của File.

Phương thức: files.list

Liệt kê siêu dữ liệu cho các File do dự án yêu cầu sở hữu.

Điểm cuối

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

Tham số truy vấn

pageSize integer

Không bắt buộc. Số lượng File tối đa cần trả về trên mỗi trang. Nếu không được chỉ định, giá trị mặc định là 10. Tối đa pageSize là 100.

pageToken string

Không bắt buộc. Mã thông báo trang từ một lệnh gọi files.list trước đó.

Nội dung yêu cầu

Nội dung yêu cầu phải trống.

Ví dụ về yêu cầu

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

Vỏ

echo "My files: "

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

Nội dung phản hồi

Phản hồi đối với files.list.

Nếu thành công, phần nội dung phản hồi sẽ chứa dữ liệu có cấu trúc sau:

Trường
files[] object (File)

Danh sách các File.

nextPageToken string

Một mã thông báo có thể được gửi dưới dạng pageToken vào lệnh gọi files.list tiếp theo.

Biểu diễn dưới dạng JSON
{
  "files": [
    {
      object (File)
    }
  ],
  "nextPageToken": string
}

Phương thức: files.delete

Xoá File.

Điểm cuối

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

Tham số đường dẫn

name string

Bắt buộc. Tên của File cần xoá. Ví dụ: files/abc-123 Tên này có dạng files/{file}.

Nội dung yêu cầu

Nội dung yêu cầu phải trống.

Ví dụ về yêu cầu

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

Vỏ

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

Nội dung phản hồi

Nếu thành công, phần nội dung phản hồi sẽ là một đối tượng JSON trống.

Tài nguyên REST: files

Tài nguyên: Tệp

Một tệp được tải lên API. Mã nhận dạng tiếp theo: 15

Trường
name string

Không thể thay đổi. Giá trị nhận dạng. Tên tài nguyên File. Mã nhận dạng (tên không bao gồm tiền tố "files/") có thể chứa tối đa 40 ký tự là chữ và số viết thường hoặc dấu gạch ngang (-). Mã nhận dạng không được bắt đầu hoặc kết thúc bằng dấu gạch ngang. Nếu tên trống khi tạo, một tên riêng biệt sẽ được tạo. Ví dụ: files/123-456

displayName string

Không bắt buộc. Tên hiển thị dễ đọc cho File. Tên hiển thị không được dài quá 512 ký tự, bao gồm cả dấu cách. Ví dụ: "Hình ảnh chào mừng"

mimeType string

Chỉ có đầu ra. Loại MIME của tệp.

sizeBytes string (int64 format)

Chỉ có đầu ra. Kích thước của tệp tính bằng byte.

createTime string (Timestamp format)

Chỉ có đầu ra. Dấu thời gian cho biết thời điểm tạo File.

Hãy dùng RFC 3339, trong đó dữ liệu đầu ra được tạo sẽ luôn được chuẩn hoá theo múi giờ và sử dụng 0, 3, 6 hoặc 9 chữ số thập phân. Các khoảng lệch khác ngoài "Z" cũng được chấp nhận. Ví dụ: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" hoặc "2014-10-02T15:01:23+05:30".

updateTime string (Timestamp format)

Chỉ có đầu ra. Dấu thời gian cho biết lần cập nhật gần đây nhất của File.

Hãy dùng RFC 3339, trong đó dữ liệu đầu ra được tạo sẽ luôn được chuẩn hoá theo múi giờ và sử dụng 0, 3, 6 hoặc 9 chữ số thập phân. Các khoảng lệch khác ngoài "Z" cũng được chấp nhận. Ví dụ: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" hoặc "2014-10-02T15:01:23+05:30".

expirationTime string (Timestamp format)

Chỉ có đầu ra. Dấu thời gian cho biết thời điểm File sẽ bị xoá. Chỉ đặt nếu File được lên lịch hết hạn.

Hãy dùng RFC 3339, trong đó dữ liệu đầu ra được tạo sẽ luôn được chuẩn hoá theo múi giờ và sử dụng 0, 3, 6 hoặc 9 chữ số thập phân. Các khoảng lệch khác ngoài "Z" cũng được chấp nhận. Ví dụ: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" hoặc "2014-10-02T15:01:23+05:30".

sha256Hash string (bytes format)

Chỉ có đầu ra. Hàm băm SHA-256 của các byte đã tải lên.

Một chuỗi được mã hoá base64.

uri string

Chỉ có đầu ra. URI của File.

downloadUri string

Chỉ có đầu ra. URI tải xuống của File.

state enum (State)

Chỉ có đầu ra. Trạng thái xử lý của tệp.

source enum (Source)

Nguồn của tệp.

error object (Status)

Chỉ có đầu ra. Trạng thái lỗi nếu quá trình Xử lý tệp không thành công.

metadata Union type
Siêu dữ liệu cho Tệp. metadata chỉ có thể là một trong những trạng thái sau:
videoMetadata object (VideoFileMetadata)

Chỉ có đầu ra. Siêu dữ liệu của một video.

Biểu diễn dưới dạng 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

Siêu dữ liệu của video File.

Trường
videoDuration string (Duration format)

Thời lượng của video.

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân, kết thúc bằng "s". Ví dụ: "3.5s".

Biểu diễn dưới dạng JSON
{
  "videoDuration": string
}

Tiểu bang

Các trạng thái cho vòng đời của một tệp.

Enum
STATE_UNSPECIFIED Giá trị mặc định. Giá trị này được dùng nếu bạn bỏ qua trạng thái.
PROCESSING Tệp đang được xử lý và chưa thể dùng để suy luận.
ACTIVE Tệp được xử lý và có thể dùng để suy luận.
FAILED Không xử lý được tệp.

Nguồn

Enum
SOURCE_UNSPECIFIED Được dùng nếu bạn không chỉ định nguồn.
UPLOADED Cho biết người dùng đã tải tệp lên.
GENERATED Cho biết tệp này do Google tạo.
REGISTERED Cho biết tệp này là một tệp đã đăng ký, tức là tệp Google Cloud Storage.

Trạng thái

Loại Status xác định một mô hình lỗi logic phù hợp với nhiều môi trường lập trình, trong đó có API REST và API RPC. gRPC sử dụng loại này. Mỗi thông báo Status chứa 3 phần dữ liệu: mã lỗi, thông báo lỗi và thông tin cụ thể về lỗi.

Bạn có thể tìm hiểu thêm về mô hình lỗi này và cách xử lý mô hình này trong Hướng dẫn thiết kế API.

Trường
code integer

Mã trạng thái, phải là giá trị enum của google.rpc.Code.

message string

Thông báo lỗi dành cho nhà phát triển, phải bằng tiếng Anh. Mọi thông báo lỗi mà người dùng thấy đều phải được bản địa hoá và gửi trong trường google.rpc.Status.details hoặc được ứng dụng khách bản địa hoá.

details[] object

Danh sách các thông báo chứa thông tin cụ thể về lỗi. Có một nhóm gồm nhiều loại thông báo chung để API sử dụng.

Một đối tượng chứa các trường thuộc một loại tuỳ ý. Một trường bổ sung "@type" chứa một URI xác định loại. Ví dụ: { "id": 1234, "@type": "types.example.com/standard/id" }.

Biểu diễn dưới dạng JSON
{
  "code": integer,
  "message": string,
  "details": [
    {
      "@type": string,
      field1: ...,
      ...
    }
  ]
}