การจัดรูปแบบพรอมต์สำหรับ Gemma 4

เราได้เปิดตัวโทเค็นควบคุมใหม่ตั้งแต่ Gemma 4 เป็นต้นไป สำหรับ Gemma 3 และเวอร์ชันที่ต่ำกว่า โปรดดูเอกสารก่อนหน้า

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

  • โทเค็นเพื่อระบุคำสั่งของระบบ: system
  • โทเค็นเพื่อระบุการเลี้ยวของผู้ใช้: user
  • โทเค็นเพื่อระบุการตอบกลับของโมเดล: model
  • โทเค็นที่ระบุจุดเริ่มต้นของรอบการสนทนา: <|turn>
  • โทเค็นเพื่อระบุจุดสิ้นสุดของรอบการสนทนา: <turn|>

ตัวอย่างบทสนทนามีดังนี้

<|turn>system
You are a helpful assistant.<turn|>
<|turn>user
Hello.<turn|>

หลายรูปแบบ

โทเค็นหลายรูปแบบ วัตถุประสงค์
<|image>
<image|>
ระบุการฝังรูปภาพ
<|audio>
<audio|>
ระบุการฝังเสียง
<|image|>
<|audio|>
โทเค็นตัวยึดตำแหน่งพิเศษ

เราใช้โทเค็นตัวยึดตำแหน่งพิเศษ 2 รายการ (<|image|> และ <|audio|>) เพื่อระบุ ตำแหน่งที่ควรแทรกโทเค็นรูปภาพและเสียง หลังจากทำการเปลี่ยนโทเค็นแล้ว ระบบจะแทนที่โทเค็นเหล่านี้ด้วยการฝังแบบอ่อนจริงภายในโมเดล

ตัวอย่างบทสนทนามีดังนี้

prompt = """<|turn>user
Describe this image: <|image|>

And translate these audio:

a. <|audio|>
b. <|audio|><turn|>
<|turn>model"""

โทเค็นควบคุมการให้เหตุผลและโทเค็นควบคุมการทำงานของเอเจนต์

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

การเรียกใช้ฟังก์ชัน

Gemma 4 ได้รับการฝึกด้วยโทเค็นพิเศษ 6 รายการเพื่อจัดการวงจร "การใช้เครื่องมือ"

คู่โทเค็น วัตถุประสงค์
<|tool>
<tool|>
กำหนดเครื่องมือ
<|tool_call>
<tool_call|>
ระบุคำขอของโมเดลเพื่อใช้เครื่องมือ
<|tool_response>
<tool_response|>
ส่งผลการดำเนินการของเครื่องมือกลับไปยังโมเดล

ตัวคั่นสำหรับค่าสตริง: <|"|>

ใช้โทเค็นเดียว <|"|> เป็นตัวคั่นสำหรับค่าสตริงทั้งหมด ภายในบล็อก Structured Data

  • วัตถุประสงค์: โทเค็นนี้ช่วยให้มั่นใจได้ว่าอักขระพิเศษ (เช่น {, }, , หรือเครื่องหมายคำพูด) ภายในสตริงจะได้รับการพิจารณาเป็นข้อความตามตัวอักษร ไม่ใช่เป็นส่วนหนึ่งของไวยากรณ์พื้นฐานของโครงสร้างข้อมูล
  • การใช้งาน: สตริงลิเทอรัลทั้งหมดในการประกาศฟังก์ชัน การเรียก และ การตอบกลับต้องอยู่ในโทเค็นนี้ (เช่น key:<|"|>string value<|"|>)

โหมดการคิด

หากต้องการเปิดใช้งานโหมดการคิด ให้ใส่โทเค็นควบคุม <|think|> ไว้ใน คำสั่งของระบบ

โทเค็นควบคุม วัตถุประสงค์
<|think|> เปิดใช้งานโหมดการคิด
<|channel>
<channel|>
ระบุกระบวนการภายในของโมเดล

ตัวอย่างบทสนทนามีดังนี้

<|turn>system
<|think|><turn|>
<|turn>user
What is the water formula?<turn|>
<|turn>model
<|channel>thought
...
<channel|>The most common interpretation of "the water formula" refers...<turn|>

โหมดการคิดออกแบบมาให้เปิดใช้ได้ในระดับการสนทนา ควร รวมไว้ในระบบเดียวพร้อมกับคำสั่งอื่นๆ ของระบบ เช่น คำจำกัดความของเครื่องมือ

ตัวอย่างการให้เหตุผลและการเรียกใช้ฟังก์ชัน

ในเทิร์นของเอเจนต์ โมเดลอาจ "คิด" แบบส่วนตัวก่อนตัดสินใจเรียกใช้ฟังก์ชัน วงจรมีลำดับดังนี้

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

ตัวอย่างต่อไปนี้แสดงโมเดลที่ใช้เครื่องมือสภาพอากาศ

<|turn>system
<|think|>You are a helpful assistant.<|tool>declaration:get_current_temperature{...}<tool|><turn|>
<|turn>user
What's the temperature in London?<turn|>
<|turn>model
<|channel>thought
...
<channel|><|tool_call>call:get_current_temperature{location:<|"|>London<|"|>}<tool_call|><|tool_response>

แอปพลิเคชันของคุณควรแยกวิเคราะห์การตอบกลับของโมเดลเพื่อดึงชื่อฟังก์ชัน และอาร์กิวเมนต์ เรียกใช้ฟังก์ชัน แล้วต่อท้าย tool_calls และ tool_responses ในประวัติการแชทภายใต้บทบาท assistant

<|turn>model
<|tool_call>call:get_current_weather{location:<|"|>London<|"|>}<tool_call|><|tool_response>response:get_current_weather{temperature:15,weather:<|"|>sunny<|"|>}<tool_response|>

สุดท้าย Gemma จะอ่านคำตอบของเครื่องมือและตอบกลับผู้ใช้

The temperature in London is 15 degrees and it is sunny.<turn|>

ประวัติการแชทแบบ JSON ที่สมบูรณ์สำหรับตัวอย่างนี้มีดังนี้

[
  {
    "role": "system",
    "content": "You are a helpful assistant."
  },
  {
    "role": "user",
    "content": "What's the temperature in London?"
  },
  {
    "role": "assistant",
    "tool_calls": [
      {
        "function": {
          "name": "get_current_weather",
          "arguments": {
            "location": "London"
          }
        }
      }
    ],
    "tool_responses": [
      {
        "name": "get_current_weather",
        "response": {
          "temperature": 15,
          "weather": "sunny"
        }
      }
    ],
    "content": "The temperature in London is 15 degrees and it is sunny."
  }
]

การจัดการบริบทความคิดระหว่างการสนทนา

การจัดการความคิดที่โมเดลสร้างขึ้นอย่างเหมาะสมมีความสําคัญอย่างยิ่งต่อการรักษา ประสิทธิภาพในการสนทนาแบบหลายรอบ

  • การสนทนาแบบหลายรอบมาตรฐาน: คุณต้องนำ (ลบ) ความคิดที่โมเดล สร้างขึ้นจากรอบก่อนหน้าออกก่อนที่จะส่งประวัติการสนทนา กลับไปยังโมเดลสำหรับรอบถัดไป หากต้องการปิดใช้โหมดการคิด กลางการสนทนา คุณสามารถนำโทเค็น <|think|> ออกเมื่อลบ ความคิดก่อนหน้า
  • การเรียกใช้ฟังก์ชัน (ข้อยกเว้น): หากการโต้ตอบของโมเดลครั้งเดียวเกี่ยวข้องกับการเรียกใช้ฟังก์ชันหรือเครื่องมือ คุณต้องไม่นำความคิดออกระหว่างการเรียกใช้ฟังก์ชัน

เวิร์กโฟลว์ของ AI ในการดำเนินการได้เองและงานที่ใช้เวลานาน

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

  • สรุปความคิด: เทคนิคการอนุมานที่แนะนำเป็นอย่างยิ่งคือการ ดึงข้อมูล สรุป และป้อนความคิดก่อนหน้าของโมเดลกลับเข้าไปใน หน้าต่างบริบทเป็นข้อความมาตรฐาน
  • ข้อจำกัดในการจัดรูปแบบ: เนื่องจาก Gemma 4 ไม่ได้รับการฝึกอย่างชัดเจนโดยมี ความคิดดิบรวมอยู่ในพรอมต์ (นอกเหนือจากสถานการณ์การเรียกใช้เครื่องมือที่เฉพาะเจาะจงที่กล่าวถึงข้างต้น) โมเดลจึงไม่ได้คาดหวังรูปแบบที่เข้มงวดหรือเฉพาะเจาะจงสำหรับความคิดที่แทรกเหล่านี้ คุณสามารถจัดรูปแบบ การให้เหตุผลแบบสรุปได้ตามต้องการเพื่อให้เหมาะกับสถาปัตยกรรม แบบเอเจนต์ของคุณมากที่สุด

หมายเหตุเกี่ยวกับการผสานรวม

  • สถานะภายใน: โดยปกติแล้วจะใช้โทเค็น <|channel> และ <channel|> ในการประมวลผลแบบ Chain-of-Thought (CoT) ในแอปพลิเคชันมาตรฐานที่หันหน้าเข้าหาผู้ใช้ เนื้อหานี้มักจะซ่อนจากผู้ใช้ปลายทาง
  • Tool Loop: โทเค็น tool_call และ tool_response ช่วยให้เกิด "การแฮนด์เชค" ระหว่างโมเดลกับสภาพแวดล้อมของแอปพลิเคชัน แอปพลิเคชัน จะสกัดกั้น tool_call เรียกใช้โค้ดพื้นฐาน และส่งผลลัพธ์ กลับไปยังโมเดลภายในโทเค็น tool_response
  • ลักษณะการทำงานของโมเดล: โมเดลขนาดใหญ่ (เช่น gemma-4-26B-A4B-it, gemma-4-31B-it) อาจสร้างช่องความคิดเป็นครั้งคราวแม้ว่าจะปิดโหมดความคิด อย่างชัดเจนแล้วก็ตาม หากต้องการให้ลักษณะการทำงานของโมเดลในกรณีสุดขั้วเหล่านี้มีความเสถียร ให้ลองเพิ่มโทเค็นความคิดที่ว่างเปล่าลงในพรอมต์

เคล็ดลับ: การปรับแต่งโมเดลขนาดใหญ่ด้วยชุดข้อมูลแบบไม่ต้องคิด

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

<|turn>model
<|channel>thought
<channel|>

เคล็ดลับ: ประสิทธิภาพการคิดแบบปรับเปลี่ยนได้โดยใช้คำสั่งของระบบ

แม้ว่า "การคิด" ใน Gemma 4 จะได้รับการรองรับอย่างเป็นทางการในฐานะฟีเจอร์บูลีนเปิดหรือปิด แต่โมเดลก็มีความสามารถในการปฏิบัติตามคำสั่งที่แข็งแกร่งเป็นพิเศษ ซึ่งช่วยให้คุณปรับเปลี่ยนลักษณะการคิดของโมเดลแบบไดนามิกได้

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

  • ลดต้นทุน: การทดสอบแสดงให้เห็นว่าการใช้คำสั่งของระบบที่คิดแบบ "ต่ำ" จะช่วยลดจำนวนโทเค็นการคิดที่สร้างขึ้นได้ประมาณ 20%
  • หลักฐานแนวคิด: เนื่องจากลักษณะการทำงานนี้เป็นผลพลอยได้จากความสามารถในการปฏิบัติตามคำสั่งของโมเดล มากกว่าการฝึกอบรมโดยเฉพาะ จึงไม่มีพรอมต์ "สมบูรณ์แบบ" เพียงหนึ่งเดียว คำสั่ง "LOW" เป็นการพิสูจน์แนวคิด
  • การปรับแต่ง: เราขอแนะนำให้นักพัฒนาแอปทดลองใช้ คำสั่งของระบบที่กำหนดเอง คุณสามารถปรับแต่งความลึก ความยาว และรูปแบบของกระบวนการคิดของโมเดลเพื่อปรับสมดุลเวลาในการตอบสนอง ต้นทุน และคุณภาพเอาต์พุตให้เหมาะกับกรณีการใช้งานเฉพาะของคุณ