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 특정 필드를 추가해야 하므로 복사해야 합니다.

성공한 경우 응답 본문은 다음과 같은 구조의 데이터를 포함합니다.

필드
name string

서버에 할당된 이름으로, 해당 이름을 최초로 반환한 서비스 내에서만 고유합니다. 기본 HTTP 매핑을 사용하는 경우 nameoperations/{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이면 errorresponse가 모두 설정되지 않습니다. done == true이면 error 또는 response 중 정확히 하나를 설정할 수 있습니다. 일부 서비스는 결과를 제공하지 않을 수 있습니다. 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토큰)로 설정합니다. 이는 컨텍스트 윈도우 오버플로를 방지하기 위한 보수적인 추정치입니다.

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

후속 files.list 호출에 pageToken으로 전송할 수 있는 토큰입니다.

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 리소스: 파일

리소스: 파일

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이 생성된 시점의 타임스탬프입니다.

생성된 출력은 항상 Z-정규화되고 소수점 이하 0, 3, 6 또는 9자리인 RFC 3339를 사용합니다. 'Z' 이외의 오프셋도 허용됩니다. 예를 들면 "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" 또는 "2014-10-02T15:01:23+05:30"입니다.

updateTime string (Timestamp format)

출력 전용입니다. File가 마지막으로 업데이트된 시간의 타임스탬프입니다.

생성된 출력은 항상 Z-정규화되고 소수점 이하 0, 3, 6 또는 9자리인 RFC 3339를 사용합니다. '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가 만료될 예정인 경우에만 설정됩니다.

생성된 출력은 항상 Z-정규화되고 소수점 이하 0, 3, 6 또는 9자리인 RFC 3339를 사용합니다. '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 메시지에는 오류 코드, 오류 메시지, 오류 세부정보라는 3가지 데이터가 포함됩니다.

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: ...,
      ...
    }
  ]
}