API ของไฟล์

Gemini สามารถจัดการข้อมูลอินพุตประเภทต่างๆ ได้พร้อมกัน ไม่ว่าจะเป็นข้อความ รูปภาพ และเสียง

คู่มือนี้จะแสดงวิธีทำงานกับไฟล์สื่อโดยใช้ Files API การดำเนินการพื้นฐานจะเหมือนกันสำหรับไฟล์เสียง รูปภาพ วิดีโอ เอกสาร และประเภทไฟล์อื่นๆ ที่รองรับ

ดูคำแนะนำในการเขียนพรอมต์สำหรับไฟล์ได้ที่ส่วนคู่มือการเขียนพรอมต์สำหรับไฟล์

อัปโหลดไฟล์

คุณสามารถใช้ Files API เพื่ออัปโหลดไฟล์สื่อได้ ใช้ Files API เสมอเมื่อขนาดคำขอทั้งหมด (รวมถึงไฟล์, พรอมต์ข้อความ, คำสั่งของระบบ ฯลฯ) มีขนาดใหญ่กว่า 100 MB สำหรับไฟล์ PDF จะมีขีดจำกัดอยู่ที่ 50 MB

โค้ดต่อไปนี้จะอัปโหลดไฟล์ แล้วใช้ไฟล์นั้นในการเรียกใช้ interactions.create

Python

from google import genai

client = genai.Client()

myfile = client.files.upload(file="path/to/sample.mp3")

interaction = client.interactions.create(
    model="gemini-3.8-flash",
    input=[
        {"type": "text", "text": "Describe this audio clip"},
        {"type": "audio", "uri": myfile.uri, "mime_type": myfile.mime_type}
    ]
)

print(interaction.output_text)

JavaScript

import { GoogleGenAI } from "@google/genai";

const client = new GoogleGenAI({});

async function main() {
  const myfile = await client.files.upload({
    file: "path/to/sample.mp3",
    config: { mime_type: "audio/mpeg" },
  });

  const interaction = await client.interactions.create({
    model: "gemini-3.8-flash",
    input: [
      { type: "text", text: "Describe this audio clip" },
      { type: "audio", uri: myfile.uri, mime_type: myfile.mimeType }
    ]
  });
  console.log(interaction.output_text);
}

await main();

Java

import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.AudioContent;
import com.google.genai.gaos.models.interactions.AudioContentMimeType;
import com.google.genai.gaos.models.interactions.Content;
import com.google.genai.gaos.models.interactions.CreateModelInteraction;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.interactions.Model;
import com.google.genai.gaos.models.interactions.TextContent;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import com.google.genai.types.File;
import com.google.genai.types.UploadFileConfig;
import java.util.Arrays;
import java.util.List;

Client client = new Client();

File myFile =
    client.files.upload(
        new java.io.File("path/to/sample.mp3"),
        UploadFileConfig.builder().mimeType("audio/mp3").build());

Content textContent = TextContent.builder().text("Describe this audio clip").build();
Content audioContent =
    AudioContent.builder()
        .uri(myFile.uri().orElse(""))
        .mimeType(AudioContentMimeType.of(myFile.mimeType().orElse("audio/mp3")))
        .build();

List<Content> contents = Arrays.asList(textContent, audioContent);

CreateModelInteraction params =
    CreateModelInteraction.builder()
        .model(Model.of("gemini-3.8-flash"))
        .input(InteractionsInput.ofContent(contents))
        .build();

Interaction interaction =
    client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();

System.out.println(interaction.outputText().orElse(""));

Go

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
    "google.golang.org/genai/interactions/models/interactions"
    "google.golang.org/genai/interactions/models/operations"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    myFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", &genai.UploadFileConfig{
        MIMEType: "audio/mp3",
    })
    if err != nil {
        log.Fatal(err)
    }

    res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
        Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
            Model: interactions.Model("gemini-3.8-flash"),
            Input: interactions.NewInteractionsInput([]interactions.Content{
                interactions.NewContent(interactions.TextContent{
                    Text: "Describe this audio clip",
                }),
                interactions.NewContent(interactions.AudioContent{
                    URI:      genai.Ptr(myFile.URI),
                    MimeType: interactions.AudioContentMimeType(myFile.MIMEType).ToPointer(),
                }),
            }),
        }),
    })
    if err != nil {
        log.Fatal(err)
    }
    if res.Interaction.OutputText != nil {
        fmt.Println(*res.Interaction.OutputText)
    }
}

REST

AUDIO_PATH="path/to/sample.mp3"
MIME_TYPE=$(file -b --mime-type "${AUDIO_PATH}")
NUM_BYTES=$(wc -c < "${AUDIO_PATH}")
DISPLAY_NAME=AUDIO

tmp_header_file=upload-header.tmp

# Initial resumable request defining metadata.
# The upload url is in the response headers dump them to a file.
curl "${BASE_URL}/upload/v1beta/files" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -D "${tmp_header_file}" \
  -H "X-Goog-Upload-Protocol: resumable" \
  -H "X-Goog-Upload-Command: start" \
  -H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPE}" \
  -H "Content-Type: application/json" \
  -d "{'file': {'display_name': '${DISPLAY_NAME}'}}" 2> /dev/null

upload_url=$(grep -i "x-goog-upload-url: " "${tmp_header_file}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file}"

# Upload the actual bytes.
curl "${upload_url}" \
  -H "Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Offset: 0" \
  -H "X-Goog-Upload-Command: upload, finalize" \
  --data-binary "@${AUDIO_PATH}" 2> /dev/null > file_info.json

file_uri=$(jq ".file.uri" file_info.json)
echo file_uri=$file_uri

# Now create an interaction using the Interactions API
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
      "model": "gemini-3.8-flash",
      "input": [
        {"type": "text", "text": "Describe this audio clip"},
        {"type": "audio", "uri": '$file_uri', "mime_type": "'${MIME_TYPE}'"}
      ]
    }' 2> /dev/null > response.json

cat response.json
echo

jq ".outputs[] | select(.type == \"text\") | .text" response.json

รับข้อมูลเมตาของไฟล์

คุณสามารถยืนยันว่า API จัดเก็บไฟล์ที่อัปโหลดเรียบร้อยแล้ว และรับข้อมูลเมตาของไฟล์ได้โดยเรียกใช้ files.get

Python

from google import genai

client = genai.Client()

myfile = client.files.upload(file='path/to/sample.mp3')
file_name = myfile.name
myfile = client.files.get(name=file_name)
print(myfile)

JavaScript

import {
  GoogleGenAI,
} from "@google/genai";

const client = new GoogleGenAI({});

async function main() {
  const myfile = await client.files.upload({
    file: "path/to/sample.mp3",
    config: { mime_type: "audio/mpeg" },
  });

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

await main();

Java

import com.google.genai.Client;
import com.google.genai.types.File;
import com.google.genai.types.UploadFileConfig;

Client client = new Client();

File myFile =
    client.files.upload(
        new java.io.File("path/to/sample.mp3"),
        UploadFileConfig.builder().mimeType("audio/mp3").build());

String fileName = myFile.name().orElse("");
File fileMetadata = client.files.get(fileName, null);
System.out.println(fileMetadata);

Go

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    myFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", &genai.UploadFileConfig{
        MIMEType: "audio/mp3",
    })
    if err != nil {
        log.Fatal(err)
    }

    fileMetadata, err := client.Files.Get(ctx, myFile.Name, nil)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(fileMetadata)
}

REST

# file_info.json was created in the upload example
name=$(jq -r ".file.name" file_info.json)
# Get the file of interest to check state
curl https://generativelanguage.googleapis.com/v1beta/$name \
-H "x-goog-api-key: $GEMINI_API_KEY" > file_info.json
# Print some information about the file you got
name=$(jq -r ".name" file_info.json)
echo name=$name
file_uri=$(jq -r ".uri" file_info.json)
echo file_uri=$file_uri

แสดงรายการไฟล์ที่อัปโหลด

โค้ดต่อไปนี้จะรับรายการไฟล์ทั้งหมดที่อัปโหลด

Python

from google import genai

client = genai.Client()

print('My files:')
for f in client.files.list():
    print(' ', f.name)

JavaScript

import {
  GoogleGenAI,
} from "@google/genai";

const client = new GoogleGenAI({});

async function main() {
  const listResponse = await client.files.list({ config: { pageSize: 10 } });
  for await (const file of listResponse) {
    console.log(file.name);
  }
}

await main();

Java

import com.google.genai.Client;
import com.google.genai.types.File;

Client client = new Client();

System.out.println("My files:");
for (File f : client.files.list(null)) {
  System.out.println("  " + f.name().orElse(""));
}

Go

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("My files:")
    for f, err := range client.Files.All(ctx) {
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println(" ", f.Name)
    }
}

REST

echo "My files: "

curl "https://generativelanguage.googleapis.com/v1beta/files" \
  -H "x-goog-api-key: $GEMINI_API_KEY"

ลบไฟล์ที่อัปโหลด

ระบบจะลบไฟล์โดยอัตโนมัติหลังจากผ่านไป 48 ชั่วโมง นอกจากนี้ คุณยังลบไฟล์ที่อัปโหลดด้วยตนเองได้โดยทำดังนี้

Python

from google import genai

client = genai.Client()

myfile = client.files.upload(file='path/to/sample.mp3')
client.files.delete(name=myfile.name)

JavaScript

import {
  GoogleGenAI,
} from "@google/genai";

const client = new GoogleGenAI({});

async function main() {
  const myfile = await client.files.upload({
    file: "path/to/sample.mp3",
    config: { mime_type: "audio/mpeg" },
  });

  const fileName = myfile.name;
  await client.files.delete({ name: fileName });
}

await main();

Java

import com.google.genai.Client;
import com.google.genai.types.File;
import com.google.genai.types.UploadFileConfig;

Client client = new Client();

File myFile =
    client.files.upload(
        new java.io.File("path/to/sample.mp3"),
        UploadFileConfig.builder().mimeType("audio/mp3").build());

client.files.delete(myFile.name().orElse(""), null);

Go

package main

import (
    "context"
    "log"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    myFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", &genai.UploadFileConfig{
        MIMEType: "audio/mp3",
    })
    if err != nil {
        log.Fatal(err)
    }

    if _, err := client.Files.Delete(ctx, myFile.Name, nil); err != nil {
        log.Fatal(err)
    }
}

REST

curl --request "DELETE" https://generativelanguage.googleapis.com/v1beta/$name \
  -H "x-goog-api-key: $GEMINI_API_KEY"

ข้อมูลการใช้งาน

คุณสามารถใช้ Files API เพื่ออัปโหลดและโต้ตอบกับไฟล์สื่อได้ Files API ช่วยให้คุณจัดเก็บไฟล์ได้สูงสุด 20 GB ต่อโปรเจ็กต์ โดยแต่ละไฟล์มีขนาดสูงสุด 2 GB ระบบจะจัดเก็บไฟล์ไว้เป็นเวลา 48 ชั่วโมง

ในระหว่างนั้น คุณสามารถใช้ API เพื่อรับข้อมูลเมตาเกี่ยวกับไฟล์ได้ แต่คุณจะดาวน์โหลดไฟล์ที่ผู้ใช้อัปโหลดไม่ได้ คุณสามารถดาวน์โหลดไฟล์ที่โมเดลสร้างขึ้น เช่น วิดีโอ โดยใช้เมธอด files.download Files API พร้อมให้บริการโดยไม่มีค่าใช้จ่ายในทุกภูมิภาคที่ Gemini API พร้อมให้บริการ

กลยุทธ์การใช้พรอมต์กับไฟล์

ส่วนนี้จะให้คำแนะนำและแนวทางปฏิบัติแนะนำสำหรับการใช้ไฟล์สื่อกับพรอมต์สำหรับ Gemini API

การใช้ข้อมูลประเภทต่างๆ ในพรอมต์ช่วยให้คุณมีความยืดหยุ่นมากขึ้นในแง่ของงานที่สามารถจัดการได้ด้วย Gemini API เช่น คุณสามารถส่งรูปภาพอาหารมื้ออร่อยให้โมเดลและขอให้เขียนบล็อกสั้นๆ เกี่ยวกับอาหารมื้อนั้นได้

Prompt คำตอบ

เขียนบล็อกโพสต์สั้นๆ ที่น่าสนใจโดยอิงจากรูปภาพนี้ โดยควรมีคำอธิบายอาหารในรูปภาพและพูดถึงเส้นทางการเตรียมอาหารของฉัน


คุกกี้

การเตรียมอาหารเป็นวิธีที่ยอดเยี่ยมในการประหยัดเวลาและเงิน ทั้งยังช่วยให้คุณรับประทานอาหารที่ดีต่อสุขภาพมากขึ้นด้วย อาหารมื้อนี้เป็นตัวอย่างที่ดีของอาหารเพื่อสุขภาพและแสนอร่อยที่สามารถเตรียมไว้ล่วงหน้าได้

อาหารมื้อนี้ประกอบด้วยข้าวกล้อง ผักย่าง และไก่เทอริยากิ ข้าวกล้องเป็นคาร์โบไฮเดรตเชิงซ้อนที่ดีต่อสุขภาพซึ่งจะให้พลังงานอย่างต่อเนื่อง ผักย่างเป็นวิธีที่ยอดเยี่ยมในการรับวิตามินและแร่ธาตุในแต่ละวัน ส่วนไก่เทอริยากิก็เป็นตัวเลือกที่อร่อยและอุดมไปด้วยโปรตีน

อาหารมื้อนี้ยังเตรียมได้ง่ายๆ ด้วย เพียงหุงข้าวกล้อง ย่างผัก และปรุงไก่เทอริยากิ เมื่อปรุงอาหารทุกอย่างเสร็จแล้ว ให้แบ่งใส่กล่องเตรียมอาหารและเก็บไว้ในตู้เย็น จากนั้นคุณก็สามารถหยิบกล่องอาหารและออกไปทำงานในเช้าที่วุ่นวายได้เลย

หากคุณกำลังมองหาอาหารที่ดีต่อสุขภาพและอร่อยที่สามารถเตรียมไว้ล่วงหน้าได้ อาหารมื้อนี้เป็นตัวเลือกที่ยอดเยี่ยม เมนูนี้อุดมไปด้วยสารอาหารและรสชาติที่รับรองว่าจะทำให้คุณอิ่มและพึงพอใจ

ขอให้คุณเตรียมอาหารที่ดีต่อสุขภาพและอร่อยได้สำเร็จ

หากพบปัญหาในการรับเอาต์พุตที่ต้องการจากพรอมต์ที่ใช้ไฟล์สื่อ คุณสามารถใช้กลยุทธ์บางอย่างเพื่อช่วยให้ได้ผลลัพธ์ที่ต้องการได้ ส่วนต่อไปนี้จะอธิบายแนวทางการออกแบบและเคล็ดลับการแก้ปัญหาเพื่อปรับปรุงพรอมต์ที่ใช้อินพุตแบบหลายโมดัล

คุณปรับปรุงพรอมต์แบบหลายรูปแบบได้โดยทำตามแนวทางปฏิบัติแนะนำต่อไปนี้

  • พื้นฐานการออกแบบพรอมต์

    • ระบุคำสั่งให้เจาะจง: สร้างคำสั่งที่ชัดเจนและกระชับเพื่อให้มีโอกาสตีความผิดน้อยที่สุด
    • เพิ่มตัวอย่าง 2-3 รายการลงในพรอมต์: ใช้ตัวอย่างแบบ Few-Shot ที่สมจริงเพื่อแสดงสิ่งที่คุณต้องการบรรลุผล
    • แบ่งงานออกเป็นขั้นตอน: แบ่งงานที่ซับซ้อนออกเป็นเป้าหมายย่อยที่จัดการได้ เพื่อแนะนำโมเดลตลอดกระบวนการ
    • ระบุรูปแบบเอาต์พุต: ในพรอมต์ ให้ขอเอาต์พุตในรูปแบบที่ต้องการ เช่น Markdown, JSON, HTML และอื่นๆ
    • ใส่รูปภาพก่อนสำหรับพรอมต์ที่มีรูปภาพเดียว: แม้ว่า Gemini จะจัดการอินพุตรูปภาพและข้อความได้ไม่ว่าจะอยู่ในลำดับใด แต่สำหรับพรอมต์ที่มีรูปภาพเดียว Gemini อาจทำงานได้ดีกว่าหากวางรูปภาพ (หรือวิดีโอ) นั้นไว้ก่อนพรอมต์ข้อความ อย่างไรก็ตาม สำหรับพรอมต์ที่ต้องใช้รูปภาพสลับกับข้อความอย่างมากเพื่อให้เข้าใจได้ ให้ใช้ลำดับที่เป็นธรรมชาติที่สุด
  • การแก้ปัญหาการเขียนพรอมต์แบบหลายรูปแบบ

    • หากโมเดลไม่ได้ดึงข้อมูลจากส่วนที่เกี่ยวข้องของรูปภาพ: ให้บอกใบ้ว่าคุณต้องการให้พรอมต์ดึงข้อมูลจากแง่มุมใดของรูปภาพ
    • หากเอาต์พุตโมเดลทั่วไปเกินไป (ไม่ปรับให้เหมาะกับอินพุตรูปภาพ/วิดีโอมากพอ): ที่จุดเริ่มต้นของพรอมต์ ให้ลองขอให้โมเดลอธิบายรูปภาพหรือวิดีโอก่อนที่จะให้คำสั่งงาน หรือลองขอให้โมเดลอ้างอิงถึงสิ่งที่อยู่ในรูปภาพ
    • หากต้องการแก้ปัญหาว่าส่วนใดไม่สำเร็จ: ขอให้โมเดลอธิบายรูปภาพ หรือขอให้โมเดลอธิบายเหตุผลเพื่อประเมินความเข้าใจเบื้องต้นของโมเดล
    • หากพรอมต์ของคุณทำให้เกิดเนื้อหาที่เกิดภาพหลอน: ให้ลองลดการตั้งค่าอุณหภูมิหรือขอให้โมเดลเขียนคำอธิบายที่สั้นลง เพื่อลดโอกาสที่โมเดลจะคาดคะเนรายละเอียดเพิ่มเติม
    • การปรับพารามิเตอร์การสุ่มตัวอย่าง: ทดลองใช้การตั้งค่าอุณหภูมิและการเลือก Top-K แบบต่างๆ เพื่อปรับความคิดสร้างสรรค์ของโมเดล

ระบุคำสั่งให้ชัดเจน

พรอมต์จะประสบความสำเร็จมากที่สุดเมื่อมีความชัดเจนและละเอียด หากคุณมีผลลัพธ์ที่เฉพาะเจาะจงอยู่ในใจ คุณควรระบุข้อกำหนดนั้นไว้ในพรอมต์เพื่อให้ได้ผลลัพธ์ที่ต้องการ

สำหรับรูปภาพกระดานข้อมูลในสนามบินนี้ การขอให้โมเดล "อธิบายรูปภาพนี้" อาจสร้างคำอธิบายทั่วไป หากต้องการให้โมเดลแยกวิเคราะห์เวลาและเมืองจากรูปภาพ คุณสามารถระบุคำขอดังกล่าวในพรอมต์ได้โดยตรง

พรอมต์ คำตอบของโมเดล

อธิบายรูปภาพนี้

รูปภาพแสดงตารางเที่ยวบินขาเข้าและขาออกของสนามบิน

พรอมต์ที่อัปเดต การตอบสนองที่ดีขึ้น
ตารางเวลาการเดินทาง

แยกวิเคราะห์เวลาและเมืองจากกระดานข้อมูลของสนามบินที่แสดงในรูปภาพนี้เป็นรายการ

  • 10:50 มอสโก
  • 11:05 เอดินบะระ
  • 11:05 ลอนดอน
  • 11:10 บูคาเรสต์
  • 11:30 น. เคียฟ
  • 11:35 ดับลิน
  • 11:45 ภาคมิดแลนด์สตะวันออกของอังกฤษ
  • 12:15 โซเฟีย
  • 12:30 ลอนดอน
  • 12:30 นิวคาสเซิล
  • 12:40 เซนต์ปีเตอร์สเบิร์ก
  • 12:40 ลอนดอน
  • 12:45 แมนเชสเตอร์
  • เพิ่มตัวอย่าง

    โมเดล Gemini สามารถรับอินพุตได้หลายรายการ ซึ่งสามารถใช้เป็นตัวอย่างเพื่อทำความเข้าใจเอาต์พุตที่คุณต้องการ การเพิ่มตัวอย่างเหล่านี้จะช่วยให้โมเดลระบุรูปแบบและใช้ความสัมพันธ์ระหว่างรูปภาพที่ระบุและคำตอบกับตัวอย่างใหม่ได้ ซึ่งเรียกอีกอย่างว่าการเรียนรู้แบบ "Few-Shot"

    ในตัวอย่างต่อไปนี้ ผลลัพธ์เริ่มต้นเขียนในรูปแบบประโยคและมีชื่อประเทศ (บราซิล) ด้วย สมมติว่าคุณต้องการเอาต์พุตในรูปแบบหรือสไตล์ที่ต่างออกไป และต้องการเฉพาะชื่อเมือง ไม่ใช่ชื่อประเทศ การเพิ่มตัวอย่างแบบ Few-Shot ลงในพรอมต์จะช่วยบังคับให้โมเดลตอบสนองในแบบที่คุณต้องการได้

    Prompt คำตอบของโมเดล
    ตารางเวลาการเดินทาง

    ระบุเมืองพร้อมกับจุดสังเกต

    สถานที่สำคัญคือรูปปั้นพระคริสต์ผู้ไถ่ในรีโอเดจาเนโร ประเทศบราซิล

    พรอมต์ที่อัปเดต การตอบสนองที่ดีขึ้น

    ระบุเมืองพร้อมกับจุดสังเกต

    โคลอสเซียม

    เมือง: โรม สถานที่สำคัญ: โคลอสเซียม

    นครต้องห้าม

    เมือง: ปักกิ่ง, จุดสังเกต: พระราชวังต้องห้าม

    forbidden-city

    เมือง: รีโอเดจาเนโร, จุดสังเกต: รูปปั้นพระคริสต์ผู้ไถ่

    แจกแจงรายละเอียดทีละขั้นตอน

    สำหรับงานที่ซับซ้อน เช่น งานที่ต้องใช้ทั้งความเข้าใจภาพและการให้เหตุผล การแบ่งงานออกเป็นขั้นตอนเล็กๆ ที่ตรงไปตรงมามากขึ้นอาจเป็นประโยชน์ หรืออาจมีประสิทธิภาพเช่นกันหากคุณขอให้โมเดล "คิดทีละขั้นตอน" ในพรอมต์โดยตรง

    พรอมต์ คำตอบของโมเดล

    กระดาษชำระจะหมดเมื่อไร

    ในไม่ช้า คุณจะเหลือเพียง 3 ม้วน

    พรอมต์ที่อัปเดต การตอบสนองที่ดีขึ้น
    1. ก่อนอื่น ให้นับจำนวนม้วนกระดาษชำระในภาพนี้
    2. จากนั้นให้พิจารณาว่าคนทั่วไปใช้กระดาษชำระวันละเท่าใด
    3. คำนวณระยะเวลาที่กระดาษชำระเหล่านี้จะใช้ได้
    1. มีกระดาษชำระ 3 ม้วนในภาพนี้
    2. โดยทั่วไปคนเราใช้กระดาษชำระประมาณ 20 แผ่นต่อวัน
    3. หากกระดาษแต่ละม้วนมี 200 แผ่น กระดาษแต่ละม้วนจะใช้ได้ประมาณ 10 วัน ดังนั้น กระดาษ 3 ม้วนจะใช้ได้ประมาณ 1 เดือน

    โจทย์คณิตศาสตร์หรือโจทย์ปัญหาประเภทอื่นๆ เป็นตัวอย่างที่ดีในการขอให้โมเดลคิดทีละขั้นตอน

    Prompt คำตอบ

    พจน์ที่ 4 ในลำดับคืออะไร

    -135

    คำตอบจากโมเดลไม่ถูกต้อง วิธีหนึ่งในการปรับปรุงเรื่องนี้คือการขอให้โมเดลแยกวิเคราะห์ปัญหาก่อนที่จะตอบพรอมต์

    Prompt คำตอบ

    แยกวิเคราะห์สูตรในรูปภาพก่อน

    จากนั้นตอบคำถาม "พจน์ที่ 4 ในลำดับคืออะไร" โดยอิงตามสูตร

    คลิกเพื่อขยายผลลัพธ์

    $$ b(n) = b(n-1) * (-3) $$

    $$ b(1) = 15 $$

    1. แทนที่ n = 4 ลงในสูตร:

      $$ b(4) = b(4-1) * (-3) $$

      $$ b(4) = b(3) * (-3) $$

    2. เราไม่ทราบค่าของ b(3) ดังนั้นให้แทน n = 3 ลงในสูตร

      $$ b(3) = b(3-1) * (-3) $$

      $$ b(3) = b(2) * (-3) $$

    3. เราไม่ทราบค่าของ b(2) ดังนั้นให้แทนค่า n = 2 ลงในสูตร

      $$ b(2) = b(2-1) * (-3) $$

      $$ b(2) = b(1) * (-3) $$

    4. เรารู้ว่าค่าของ b(1) คือ 15 ดังนั้นให้แทนค่าลงในสูตร

      $$ b(2) = 15 * (-3) $$

      $$ b(2) = -45 $$

    5. เมื่อเราทราบค่าของ b(2) แล้ว ให้แทนค่าลงในสูตรสำหรับ b(3) ดังนี้

      $$ b(3) = b(2) * (-3) $$

      $$ b(3) = -45 * (-3) $$

      $$ b(3) = 135 $$

    6. เมื่อเราทราบค่าของ b(3) แล้ว ให้แทนค่าลงในสูตรสำหรับ b(4) ดังนี้

      $$ b(4) = b(3) * (-3) $$

      $$ b(4) = 135 * (-3) $$

      $$ b(4) = -405 $$

    ดังนั้น พจน์ที่ 4 ในลำดับคือ -405

    คำตอบของโมเดลนี้ถูกต้องแล้ว แต่หากต้องการให้คำตอบมีประสิทธิภาพมากขึ้น คุณสามารถขอให้โมเดลคิดทีละขั้นตอนได้

    พรอมต์ที่อัปเดต การตอบสนองที่ดีขึ้น

    พจน์ที่ 4 ในลำดับคืออะไร คิดทีละขั้นตอน

    เทอมแรกคือ 15

    พจน์ที่ 2 คือ b(1) * (-3) = 15 * (-3) = -45

    พจน์ที่ 3 คือ b(2) * (-3) = -45 * (-3) = 135

    พจน์ที่ 4 คือ b(3) * (-3) = 135 * (-3) = -405

    ระบุรูปแบบเอาต์พุต

    ปัญหาที่พบบ่อยคือความจำเป็นที่เอาต์พุตโมเดลต้องอยู่ในรูปแบบที่เฉพาะเจาะจง (เช่น Markdown, JSON, HTML) โดยเฉพาะอย่างยิ่งหากเอาต์พุตโมเดลต้องได้รับการนำเข้าโดยงานปลายทาง คุณสามารถลองสร้างเอาต์พุตในรูปแบบนั้นได้โดยการสั่งให้โมเดลทำเช่นนั้นภายในพรอมต์ ตัวอย่าง 2 รายการมีดังนี้

    พรอมต์ คำตอบของโมเดล

    แยกวิเคราะห์ตารางในรูปภาพนี้เป็นรูปแบบมาร์กดาวน์

    ```none | วิชา | สถานะ | เวลา | วันที่เริ่มต้น | ครบกำหนดวันที่ | | ------- | ------ | ---- | ---------- | ------ | | คณิตศาสตร์ | เสร็จแล้ว | 1.5 ชม. | 29/11/2023 | 1/12/2023 | | ภูมิศาสตร์ | เสร็จแล้ว | 30 นาที | 2/12/2023 | 4/12/2023 | | ฟิสิกส์ | กำลังดำเนินการ | 2 ชม. | 3/12/2023 | 5/12/2023 | | ชีววิทยา | ยังไม่เริ่ม | 6 ชม. | 2/11/2016 | 6/12/2023 | ```
    Prompt คำตอบของโมเดล

    ระบุรายการแอตทริบิวต์ต่อไปนี้ทั้งหมด

    ส่วนผสม ประเภทอาหาร มังสวิรัติหรือไม่ ในรูปแบบ JSON

    ```json { "ingredients": [ "rice", "shrimp", "clams", "mussels", "peas", "tomatoes", "onions", "garlic", "olive oil", "paprika", "salt", "pepper" ], "type of cuisine": "Spanish", "vegetarian": false } ```

    ใส่รูปภาพก่อนสำหรับพรอมต์ที่มีรูปภาพเดียว

    แม้ว่า Gemini จะตีความรูปภาพและข้อความในลำดับใดก็ได้ภายในพรอมต์ แต่การวางรูปภาพเดียวก่อนพรอมต์ข้อความอาจให้ผลลัพธ์ที่ดีกว่า ในตัวอย่างต่อไปนี้ คุณจะเห็นว่ารูปภาพมาก่อนข้อความในพรอมต์แต่ละรายการ

    การแก้ปัญหาเกี่ยวกับพรอมต์แบบหลายรูปแบบ

    คุณอาจต้องแก้ปัญหาพรอมต์หากไม่ได้รับคำตอบที่เป็นประโยชน์ กลยุทธ์บางอย่างที่คุณลองใช้ได้มีดังนี้

    หากโมเดลไม่ได้ดึงข้อมูลจากส่วนที่เกี่ยวข้องของรูปภาพ

    หากต้องการคำตอบที่เจาะจงมากขึ้น คุณสามารถระบุแง่มุมของรูปภาพที่ต้องการให้พรอมต์ดึงข้อมูลมาใช้ในการตอบได้

    พรอมต์ คำตอบของโมเดล

    ผ้าอ้อมเหล่านี้จะใช้ได้กี่วันสำหรับทารก

    ผ้าอ้อมจะใช้ได้ 198 วันก่อนที่จะหมด

    พรอมต์ที่อัปเดต การตอบสนองที่ดีขึ้น

    ผ้าอ้อมพวกนี้จะใช้ได้นานแค่ไหนก่อนจะหมด

    ใช้น้ำหนักที่แสดงบนกล่องเพื่อระบุอายุของเด็ก และใช้จำนวนผ้าอ้อมทั้งหมดในกล่อง

    หารจำนวนทั้งหมดด้วยจำนวนผ้าอ้อมที่เด็กใช้ต่อวัน

    กล่องมีผ้าอ้อม 198 ชิ้น กล่องระบุว่าผ้าอ้อมเหมาะสำหรับเด็กที่มีน้ำหนัก 22-37 ปอนด์

    เด็กที่มีน้ำหนักอยู่ในช่วงนี้มักจะมีอายุระหว่าง 1-2 ปี

    โดยปกติแล้วเด็กอายุ 2 ปีจะใช้ผ้าอ้อม 6 ผืนต่อวัน ดังนั้นผ้าอ้อมจะใช้ได้ประมาณ 33 วัน (198/6)

    หากเอาต์พุตโมเดลเป็นแบบทั่วไปเกินไปและไม่ได้รับการปรับแต่งให้เหมาะกับอินพุตรูปภาพมากพอ

    หากต้องการช่วยให้โมเดลปรับแต่งคำตอบให้เหมาะกับรูปภาพ ให้ลองขอให้โมเดลอธิบายรูปภาพก่อนที่จะทำงานด้านการให้เหตุผล

    พรอมต์ คำตอบของโมเดล

    รูปภาพเหล่านี้มีอะไรที่เหมือนกัน

    รูปภาพทั้ง 4 รูปเป็นตัวอย่างของการถ่ายภาพทิวทัศน์

    พรอมต์ที่อัปเดต การตอบสนองที่ดีขึ้น

    ก่อนอื่น ให้อธิบายสิ่งที่อยู่ในแต่ละรูปภาพโดยละเอียด รูปภาพเหล่านี้มีอะไรที่เหมือนกัน

    รูปภาพแรกแสดงภาพคนกำลังจัดกระเป๋าเดินทาง รูปภาพที่ 2 แสดงโถงทางเดินที่ว่างเปล่าในห้างสรรพสินค้า รูปภาพที่ 3 แสดงกระดาษชำระ 1 ม้วน รูปภาพที่ 4 แสดงทะเลที่มืดและมีพายุ

    สิ่งที่รูปภาพเหล่านี้มีเหมือนกันคือทั้งหมดเป็นตัวอย่างของพื้นที่เปลี่ยนผ่าน Liminal Space คือสถานที่หรือสถานการณ์ที่อยู่กึ่งกลางระหว่างสถานที่หรือสถานการณ์อื่นๆ 2 แห่ง ซึ่งมักมีลักษณะเป็นความรู้สึกไม่แน่นอนหรือคลุมเครือ

    รูปภาพแรกแสดงบุคคลที่อยู่ระหว่างการอยู่บ้านและการเดินทาง รูปภาพที่ 2 แสดงโถงทางเดินระหว่างร้านค้า 2 ร้าน รูปภาพที่ 3 คือกระดาษชำระ ซึ่งสื่อถึงห้องน้ำได้ ห้องน้ำเป็นพื้นที่เปลี่ยนผ่านระหว่างพื้นที่ส่วนตัวและพื้นที่สาธารณะ เป็นสถานที่ที่เราเตรียมตัวเพื่อเข้าหรือออกจากโลกภายนอก

    รูปภาพที่ 4 แสดงภาพทะเลที่อยู่ระหว่างความสงบและพายุ

    พื้นที่เปลี่ยนผ่านอาจเป็นได้ทั้งสิ่งที่น่าตื่นเต้นและน่ากังวล ซึ่งอาจเป็นจุดเริ่มต้นใหม่หรือจุดสิ้นสุดก็ได้ ซึ่งอาจเป็นสถานที่สำหรับการไตร่ตรองหรือสถานที่สำหรับการลงมือทำ

    นอกจากนี้ คุณยังลองขอให้โมเดลอ้างอิงสิ่งที่อยู่ในรูปภาพอย่างชัดเจนได้ด้วย

    พรอมต์ที่อัปเดต การตอบสนองที่ดีขึ้น

    รูปภาพเหล่านี้มีอะไรที่เหมือนกัน อ้างอิงถึงสิ่งที่อยู่ในรูปภาพในคำตอบของคุณ

    รูปภาพทั้งหมดเกี่ยวข้องกับการท่องเที่ยว รูปภาพแรกแสดงคนกำลังจัดกระเป๋าเดินทาง รูปภาพที่ 2 แสดงโถงทางเดินที่ว่างเปล่าในห้างสรรพสินค้า รูปภาพที่ 3 แสดงกระดาษชำระที่วางซ้อนกัน และรูปภาพที่ 4 แสดงทะเลที่มืดและมีพายุ

    รูปภาพเหล่านี้เกี่ยวข้องกับการเดินทางทั้งหมด เนื่องจากเป็นสิ่งที่ผู้คนต้องการหรือใช้เมื่อเดินทาง รูปภาพแรกแสดงภาพคนกำลังจัดกระเป๋าเดินทาง ซึ่งเป็นสิ่งที่ผู้คนทำเมื่อจะเดินทาง รูปภาพที่ 2 แสดงโถงทางเดินที่ว่างเปล่าในห้างสรรพสินค้า ซึ่งเป็นสถานที่ที่ผู้คนมักจะไปซื้อของสำหรับการเดินทาง รูปภาพที่ 3 แสดงกระดาษชำระซ้อนกัน ซึ่งเป็นสิ่งที่ผู้คนมักใช้เมื่อเดินทาง รูปภาพที่ 4 แสดงภาพทะเลที่มืดและมีพายุ ซึ่งเป็นสิ่งที่ผู้คนมักพบเจอเมื่อเดินทาง

    เคล็ดลับเดียวกันนี้ใช้ได้กับเอาต์พุตครีเอทีฟโฆษณาจากรูปภาพ ในตัวอย่างต่อไปนี้ซึ่งมีกระต่าย การขอให้โมเดลรวมแง่มุมต่างๆ จากรูปภาพอย่างชัดเจนจะช่วยปรับปรุงเอาต์พุตได้

    พรอมต์ คำตอบของโมเดล

    คุณช่วยแต่งกลอนเกี่ยวกับรูปภาพนี้ให้ฉันได้ไหม

    กระต่ายน้อยขนสีน้ำตาลนุ่มนิ่ม
    กระโดดโลดเต้นไปทั่วทุ่งหญ้า
    หูยาวๆ หางเล็กๆ
    เธอน่ารักที่สุดเลย

    เจ้าแทะเล็มหญ้าสีเขียวหวานฉ่ำ
    แล้วกระโดดหนีเมื่อเห็นฉัน
    แต่ฉันจะเป็นเพื่อนเธอเสมอ
    เจ้ากระต่ายน้อย จนถึงวันสุดท้าย

    พรอมต์ที่อัปเดต การตอบสนองที่ดีขึ้น

    ช่วยแต่งกลอนที่บรรยายภาพนี้อย่างละเอียดและน่าตื่นเต้น พร้อมระบุสถานที่ให้หน่อยได้ไหม

    กระต่ายน้อยบนสนามหญ้า
    หูยาวๆ ช่างน่ารัก
    คุณเห็นอะไรที่นั่น
    ในระยะไกลที่คุณจ้องมอง

    เป็นสีฟ้าของมหาสมุทร
    ที่ส่องประกายในแสงอาทิตย์หรือเปล่า
    หรือเสียงคลื่นซัดสาด
    ที่ฟังแล้วเพลินใจ

    กระต่ายน้อย บอกฉันที
    อะไรทำให้เธอสนใจได้ขนาดนี้
    ลมทะเลเค็มๆ
    หรือเสียงนกนางนวลที่ทำให้คุณพอใจ

    อาจเป็นเพราะความกว้างใหญ่ของทุกสิ่ง
    โลกที่ทั้งกว้างใหญ่และเล็กจิ๋ว
    สถานที่ที่ความฝันโลดแล่นได้
    และการผจญภัยเริ่มต้นขึ้น

    เจ้ากระต่ายน้อย ฉันสงสัยว่าเธอฝันถึงอะไร
    ขณะที่เธอนั่งอยู่บนหญ้าอย่างสงบ
    คุณอยากสำรวจใต้ทะเลลึก
    หรืออยู่บนบกที่กระโดดได้

    ไม่ว่าจะเป็นอะไรก็ตาม เจ้ากระต่ายน้อย
    จงรักษาประกายแห่งความสงสัยนั้นให้คงอยู่ต่อไป
    เพราะในความฝันและความปรารถนา
    มีโลกที่รอให้คุณสร้างสรรค์อยู่

    การแก้ปัญหาว่าพรอมต์ส่วนใดไม่สำเร็จ

    การระบุว่าพรอมต์ล้มเหลวเนื่องจากโมเดลไม่เข้าใจรูปภาพตั้งแต่แรก หรือเข้าใจรูปภาพแต่ไม่ได้ทำตามขั้นตอนการให้เหตุผลที่ถูกต้องหลังจากนั้นอาจเป็นเรื่องยาก หากต้องการแยกแยะสาเหตุเหล่านั้น ให้ขอให้โมเดลอธิบายสิ่งที่อยู่ในรูปภาพ

    ในตัวอย่างต่อไปนี้ หากโมเดลตอบกลับด้วยของว่างที่ดูน่าประหลาดใจเมื่อจับคู่กับชา (เช่น ป๊อปคอร์น) คุณสามารถแก้ปัญหาเบื้องต้นเพื่อระบุว่าโมเดลจดจำได้อย่างถูกต้องหรือไม่ว่ารูปภาพมีชาอยู่

    พรอมต์ พรอมต์สำหรับการแก้ปัญหา

    ฉันจะทำของว่างอะไรได้บ้างใน 1 นาทีที่เข้ากันได้ดีกับเครื่องดื่มนี้

    อธิบายสิ่งที่อยู่ในรูปภาพนี้

    อีกกลยุทธ์หนึ่งคือการขอให้โมเดลอธิบายการให้เหตุผล ซึ่งจะช่วยให้คุณจำกัดขอบเขตได้ว่าการให้เหตุผลส่วนใดที่ผิดพลาด (หากมี)

    พรอมต์ พรอมต์สำหรับการแก้ปัญหา

    ฉันจะทำของว่างอะไรได้บ้างใน 1 นาทีที่เข้ากันได้ดีกับเครื่องดื่มนี้

    ฉันจะทำของว่างอะไรได้บ้างใน 1 นาทีที่เข้ากันได้ดีกับเครื่องดื่มนี้ โปรดให้เหตุผล

    ขั้นตอนถัดไป

    • ลองเขียนพรอมต์แบบหลายรูปแบบของคุณเองโดยใช้ Google AI Studio
    • ดูข้อมูลเกี่ยวกับการใช้ Gemini Files API เพื่ออัปโหลดไฟล์สื่อและรวมไว้ในพรอมต์ได้ที่คู่มือVision เสียง และการประมวลผลเอกสาร
    • ดูคำแนะนำเพิ่มเติมเกี่ยวกับการออกแบบพรอมต์ เช่น การปรับพารามิเตอร์การสุ่มตัวอย่าง ได้ที่หน้ากลยุทธ์พรอมต์