เราได้เปิดตัวโทเค็นควบคุมใหม่ตั้งแต่ 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|>
โหมดการคิดออกแบบมาให้เปิดใช้ได้ในระดับการสนทนา ควร รวมไว้ในระบบเดียวพร้อมกับคำสั่งอื่นๆ ของระบบ เช่น คำจำกัดความของเครื่องมือ
ตัวอย่างการให้เหตุผลและการเรียกใช้ฟังก์ชัน
ในเทิร์นของเอเจนต์ โมเดลอาจ "คิด" แบบส่วนตัวก่อนตัดสินใจเรียกใช้ฟังก์ชัน วงจรมีลำดับดังนี้
- คำถามของผู้ใช้: ผู้ใช้ถามคำถาม
- การให้เหตุผลภายใน: โมเดลจะคิดเป็นการส่วนตัวในช่องความคิด
- คำขอเครื่องมือ: โมเดลจะหยุดการสร้างเพื่อขอการเรียกใช้เครื่องมือ
- การดำเนินการและการแทรก: แอปพลิเคชันจะเรียกใช้เครื่องมือและต่อท้ายการตอบกลับ
- คำตอบสุดท้าย: โมเดลจะอ่านคำตอบและสร้างคำตอบสุดท้าย
ตัวอย่างต่อไปนี้แสดงโมเดลที่ใช้เครื่องมือสภาพอากาศ
<|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" เป็นการพิสูจน์แนวคิด
- การปรับแต่ง: เราขอแนะนำให้นักพัฒนาแอปทดลองใช้ คำสั่งของระบบที่กำหนดเอง คุณสามารถปรับแต่งความลึก ความยาว และรูปแบบของกระบวนการคิดของโมเดลเพื่อปรับสมดุลเวลาในการตอบสนอง ต้นทุน และคุณภาพเอาต์พุตให้เหมาะกับกรณีการใช้งานเฉพาะของคุณ