ถ้าใช้ SillyTavern กับ endpoint แบบ OpenAI-compatible แล้วเจอ error แปลก ๆ เรื่อง role, system message, หรือ tool call — อย่าเพิ่งโทษพรีเซ็ตอย่างเดียว ลองดูช่อง Prompt Post-Processing ในแท็บ API Connections ก่อน เพราะค่านี้คือตัวแปลงรูปแบบ prompt ก่อนส่งเข้า API
เอกสารทางการอยู่ที่ SillyTavern Docs · Prompt Post-Processing
Prompt Post-Processing คืออะไร
บาง API รับ prompt ได้แบบยืดหยุ่น บางเจ้าบังคับเข้ม เช่น ต้องสลับ role เสมอ, อนุญาต system แค่ก้อนเดียว, หรือต้องเริ่มด้วย user เท่านั้น
SillyTavern จึงมีตัวแปลงในตัว เรียงจาก ผ่อนสุด → เข้มสุด เพื่อให้ prompt ที่ประกอบจาก system / character / lore / chat history / tools เข้ากับข้อจำกัดของปลายทาง
หมายเหตุสำคัญจาก docs: ถ้าเลือกตัวเลือกกลุ่ม no tools จะไม่รองรับ Tool Calling
ตัวเลือกทั้งหมด ต่างกันอย่างไร
1) None
- ไม่แปลงเพิ่ม (ยกเว้นสิ่งที่ API บังคับจริง ๆ ฝั่ง ST)
- เหมาะกับ endpoint ที่ยืดหยุ่น / รองรับ multi-system / tool calls ตามมาตรฐาน
- พรีเซ็ตซับซ้อน + เครื่องมือ (tools) มักเริ่มจาก None หรือ with tools ก่อน
2) Merge consecutive roles
- รวมข้อความ role เดียวกันที่ติดกันเป็นก้อนเดียว (เช่น user ต่อ user → รวม)
- ช่วย endpoint ที่ไม่ชอบ role ซ้ำติดกัน
- มีทั้งแบบ with tools และ no tools
3) Semi-strict (alternating roles)
- รวม role + อนุญาต system แบบ optional ได้เพียง 1 ก้อน
- บังคับแนวสลับ role ให้เป็นระเบียบขึ้น
- เหมาะกับ proxy/โมเดลที่ strict กลาง ๆ แต่ยังไม่ต้อง user-first
4) Strict (user first, alternating roles)
- เข้มกว่า semi-strict: รวม role, system อย่างมาก 1 ก้อน, และต้องมี user ก่อน assistant
- ถ้าไม่มี user ก่อน assistant แรก ST จะแทรก
promptPlaceholderจากconfig.yaml(ค่าเริ่มต้นมักเป็น[Start a new chat]) - ตัวเลือกนี้โผล่บ่อยเมื่อ endpoint ฟ้องว่า message order ไม่ถูกต้อง
5) Single user message (no tools)
- เข้มสุด: รวมทุก role เข้าเป็น user message ก้อนเดียว
- ไม่มี with tools (อยู่ในกลุ่ม no tools)
- ใช้เมื่อปลายทางรับได้แค่ single-turn / รูปแบบเก่ามาก — แลกด้วยการเสียโครงสร้าง multi-turn ละเอียด
With Tools vs No Tools
ใน UI จะแบ่ง 2 กลุ่มหลัก:
- With Tools — เก็บ tool calls ไว้ใน prompt (ถ้ามี)
- No Tools — ตัด tool calls ออก (ช่วย API ที่ไม่รองรับ tools แต่พรีเซ็ต/แชทเก่ายังมี tool residue)
Merge / Semi-strict / Strict ต่างก็มีทั้งคู่ — เลือก “with tools” เมื่อใช้ function calling / tool-enabled models จริง ๆ ถ้า endpoint ไม่รองรับ tools แล้ว error แปลก ๆ ให้ลอง no tools
| โหมด | รวม role ซ้ำ | System | User ต้องมาก่อน | Tools |
|---|---|---|---|---|
| None | ไม่บังคับ | ยืดหยุ่น | ไม่บังคับ | ขึ้นกับ endpoint |
| Merge | ใช่ | ยืดหยุ่นกว่า strict | ไม่บังคับ | with / no |
| Semi-strict | ใช่ | ≤ 1 (optional) | แนว alternating | with / no |
| Strict | ใช่ | ≤ 1 (optional) | ใช่ (user first) | with / no |
| Single user message | รวมทั้งหมด | ถูกรวมเข้า user | เหลือ user ก้อนเดียว | no tools เท่านั้น |
ตารางสรุปแนวคิดจากเอกสารทางการ — endpoint บางเจ้าอาจเข้มกว่านี้เอง
ทำไมบางพรีเซ็ตควรปรับค่านี้
พรีเซ็ตไม่ได้ “พังเอง” เสมอ — หลายเคสพังเพราะ รูปแบบ messages หลังประกอบ ไม่เข้ากับปลายทาง
พรีเซ็ตมี system / Author’s Note / lore ซ้อนหลายชั้น
- บางโมเดลรับ multi-system ได้ บางเจ้าไม่
- อาการ: ตัดทอน system, ignore instruction, หรือ 400 invalid messages
- ลอง: Semi-strict หรือ Strict (with tools ถ้ายังใช้ tools)
แชทยาวนาน / role ซ้ำติดกัน
- สรุปแชท, swipe, แทรก note อาจทำให้ user/user หรือ assistant/assistant ติดกัน
- ลอง: Merge consecutive roles
Endpoint แบบ Custom / reverse proxy
- docs ระบุว่าโหมดที่ผ่อนกว่าจะไม่ไป “บังคับ” endpoint ที่เข้มในตัว ST ยกเว้นกลุ่ม Custom OpenAI-compatible ซึ่งอาจ error ถ้า request ไม่ถูกฟอร์ม
- ถ้าเจอ error เรื่อง alternating / first message: เริ่ม Strict (user first…)
- ถ้ายังไม่ผ่าน: Single user message เป็นทางหนีสุดท้าย (เสียรายละเอียด multi-turn)
พรีเซ็ตมี tool / function calling
- อย่าใช้กลุ่ม no tools ถ้ายังต้องการ tools
- ถ้า API ไม่รองรับ tools แต่พรีเซ็ตฝัง tool schema ไว้ → เปลี่ยนเป็น no tools เพื่อตัด tool calls ออก แล้วปิดฟีเจอร์ tools ในพรีเซ็ต
Jailbreak / CoT / hidden tracker ยาว
- พรีเซ็ตแนว roleplay หนัก (world logic, tracker, multi-block) ชอบสร้าง prompt หนา
- Post-processing ไม่ได้ “ลดความยาว” เป็นหลัก แต่ช่วยจัดรูป role ให้ API ยอมรับ
- ถ้ายังพังหลังจัดรูปแล้ว ค่อยไล่ตัด prompt ซ้ำ / ลด depth แยกต่างหาก
แนวทางเลือกแบบเร็ว (เช็กลิสต์)
- เริ่ม None → ทดสอบ Connect / คุยสั้น ๆ
- error เรื่อง role ซ้ำ → Merge
- error เรื่อง system หลายก้อน / ลำดับ role → Semi-strict
- error ว่าต้อง user ก่อน / assistant นำ → Strict (user first)
- API โบราณ / รับก้อนเดียว → Single user message
- มี tools จริง → เลือกกลุ่ม with tools · ไม่มี/ไม่รองรับ → no tools
หลังเปลี่ยนค่า แนะนำ: เปิดแชทใหม่สั้น ๆ ทดสอบ 1–2 เทิร์น ก่อนย้ายพรีเซ็ตหนักเข้าไป
ตั้งค่าคีย์ / endpoint ก่อน แล้วค่อยจูน post-processing
ลำดับที่พลาดบ่อยคือไปรื้อพรีเซ็ตทั้งก้อน ทั้งที่จริง ๆ แค่รูป messages ไม่เข้า endpoint
- คู่มือใส่คีย์: วิธีใส่ API Key ใน SillyTavern
- เทียบแหล่งคีย์: แหล่ง API Key ฟรี vs เติมเงิน
- เริ่มต้นทั้งระบบ: คู่มือเริ่มต้น SillyTavern ฉบับคนไทย
ถ้าต้องการคีย์พร้อมใช้กับ ST แบบ OpenAI-compatible หลายช่อง (ซื้อ Series ไหน ใช้ endpoint นั้น) ดูแพ็กได้ที่ หน้าสินค้า RVL Connect หรือเช็คคีย์ที่ check.html — ซัพพอร์ตคอมมูนิตี้ที่ Discord RVL Connect
สรุป
- Prompt Post-Processing = ตัวจัดรูป messages ก่อนยิง API ไม่ใช่ตัวเปลี่ยนบุคลิกพรีเซ็ต
- เรียงจากผ่อน → เข้ม: None → Merge → Semi-strict → Strict → Single user message
- กลุ่ม no tools ตัด tool calls และไม่รองรับ Tool Calling
- พรีเซ็ตยาว / multi-system / chat เก่า / custom endpoint มักต้องขยับจาก None ไปโหมดเข้มขึ้น
- จูนค่านี้ก่อน แล้วค่อยโทษพรีเซ็ตหรือโมเดล