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 การดำเนินการจะเสร็จสมบูรณ์ และจะมี error หรือ response ให้ใช้งาน

result Union type
ผลลัพธ์ของการดำเนินการ ซึ่งอาจเป็น error หรือ response ที่ถูกต้อง หาก done == false จะไม่มีการตั้งค่า error หรือ response หาก 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

จำนวนโทเค็นสูงสุดต่อก้อน โทเค็นจะกำหนดเป็นคำสำหรับอัลกอริทึมการแบ่งกลุ่มนี้ หมายเหตุ: เรากำหนดโทเค็นเป็นคำที่แยกด้วยช่องว่าง ไม่ใช่เอาต์พุตของโทเค็นไนเซอร์ หน้าต่างบริบทของโมเดลการฝัง Gemini ล่าสุด ณ วันที่ 17-04-2025 มีโทเค็น 8192 โทเค็น เราถือว่าคำโดยเฉลี่ยมีความยาว 5 อักขระ ดังนั้น เราจึงกำหนดขีดจำกัดบนไว้ที่ 2**9 ซึ่งเท่ากับ 512 คำ หรือ 2560 โทเค็น โดยสมมติว่าในกรณีที่แย่ที่สุดคือมีอักขระ 1 ตัวต่อโทเค็น นี่เป็นค่าประมาณแบบระมัดระวังเพื่อป้องกันไม่ให้หน้าต่างบริบทมีข้อมูลมากเกินไป

maxOverlapTokens integer

จำนวนโทเค็นที่ทับซ้อนกันสูงสุดระหว่าง 2 ก้อนที่อยู่ติดกัน

การแสดง 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

ปลายทาง

ลบ 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

แหล่งข้อมูล: ไฟล์

ไฟล์ที่อัปโหลดไปยัง API รหัสถัดไป: 15

ฟิลด์
name string

เปลี่ยนแปลงไม่ได้ ตัวระบุ Fileชื่อทรัพยากร รหัส (ชื่อไม่รวมคำนำหน้า "files/") มีอักขระที่เป็นตัวอักษรพิมพ์เล็กและตัวเลขคละกันหรือขีดกลาง (-) ได้สูงสุด 40 ตัว โดยรหัสจะขึ้นต้นหรือลงท้ายด้วยขีดกลางไม่ได้ หากไม่ได้ตั้งชื่อเมื่อสร้าง ระบบจะสร้างชื่อที่ไม่ซ้ำกันให้ ตัวอย่าง: 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

เอาต์พุตเท่านั้น URI ของ File

downloadUri string

เอาต์พุตเท่านั้น URI ดาวน์โหลดของ File

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
}

รัฐ

สถานะสำหรับวงจรของไฟล์

Enum
STATE_UNSPECIFIED ค่าเริ่มต้น ระบบจะใช้ค่านี้หากไม่มีการระบุรัฐ
PROCESSING ระบบกำลังประมวลผลไฟล์และยังใช้สำหรับการอนุมานไม่ได้
ACTIVE ระบบประมวลผลไฟล์และพร้อมสำหรับการอนุมานแล้ว
FAILED ประมวลผลไฟล์ไม่สำเร็จ

แหล่งที่มา

Enum
SOURCE_UNSPECIFIED ใช้ในกรณีที่ไม่ได้ระบุแหล่งที่มา
UPLOADED ระบุว่าผู้ใช้อัปโหลดไฟล์
GENERATED ระบุว่า Google เป็นผู้สร้างไฟล์
REGISTERED ระบุว่าไฟล์เป็นไฟล์ที่ลงทะเบียนแล้ว เช่น ไฟล์ Google Cloud Storage

สถานะ

Status ประเภทจะกำหนดรูปแบบข้อผิดพลาดเชิงตรรกะที่เหมาะกับสภาพแวดล้อมการเขียนโปรแกรมต่างๆ รวมถึง REST API และ RPC API โดย gRPC จะใช้พอร์ตนี้ Statusแต่ละข้อความจะมีข้อมูล 3 ส่วน ได้แก่ รหัสข้อผิดพลาด ข้อความแสดงข้อผิดพลาด และรายละเอียดข้อผิดพลาด

ดูข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบข้อผิดพลาดนี้และวิธีใช้งานได้ในคู่มือการออกแบบ API

ฟิลด์
code integer

รหัสสถานะซึ่งควรเป็นค่า enum ของ 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: ...,
      ...
    }
  ]
}