System Prompt Engineering ใน LM Studio สำหรับการเขียนโค้ด: อธิบาย `temperature`, `context_length` และ `stop` tokens

คุณปรับ top_p, top_k และ repeat_penalty มาแล้ว output หยุดวนซ้ำและไม่สุ่มสี่สุ่มห้าอีกต่อไป แต่โมเดลยังวอกแวกออกนอกเรื่อง ลืมโค้ดที่เขียนไปก่อนหน้า หรือไม่หยุดตรงที่ต้องการ

นั่นคือ parameter ชุดอื่นที่สำคัญไม่แพ้กัน

บทความนี้ครอบคลุมสามพารามิเตอร์ที่ควบคุม วิธีที่โมเดลเข้าใจบทบาทของตัวเอง, ปริมาณที่จำได้, และ จุดที่หยุดเขียน: temperature, context_length และ stop tokens


🌡️ temperature คืออะไร?

ถ้า top_p และ top_k คือการกรองว่า token ไหนเป็นตัวเลือก temperature คือการควบคุมว่าโมเดล มั่นใจแค่ไหน ในการเลือกจากตัวเลือกเหล่านั้น

คิดว่าเป็นปุ่มหมุนระหว่าง โฟกัส และ สร้างสรรค์:

  • temperature = 0.0 → กำหนดผลลัพธ์ตายตัว โมเดลเลือก token ที่น่าจะเป็นไปได้มากที่สุดเสมอ prompt เดิม = output เดิมทุกครั้ง
  • temperature = 0.2 → ผ่อนคลายเล็กน้อย บางครั้งพิจารณาตัวเลือกที่สองหรือสาม
  • temperature = 1.0 → ความน่าจะเป็นเต็มที่ token ทุกตัวในรายการมีน้ำหนักเท่ากัน — output คาดเดาไม่ได้
  • temperature > 1.0 → ไม่เป็นระเบียบสุดขีด อย่าใช้กับโค้ด

👉 ค่าที่แนะนำสำหรับการเขียนโค้ด: 0.1–0.3

การเขียนโค้ดไม่ใช่การเขียนสร้างสรรค์ function signature, loop, SQL query — มีคำตอบที่ถูกต้องและคุณต้องการให้โมเดลมุ่งมั่นกับมัน temperature สูงคือสาเหตุที่โมเดลบางครั้งคืน Python ที่ถูกต้องในครั้งหนึ่ง และคืน Python ที่ syntax ผิดในครั้งถัดไป

{
  "temperature": 0.2
}

เมื่อไหรที่ควรสูงขึ้นเล็กน้อย (0.4–0.6): การสร้าง boilerplate, comment อธิบายโค้ด หรือส่วน README ที่รับการเปลี่ยนแปลงในการใช้ถ้อยคำได้

ไม่ควรเกิน 0.7 สำหรับโค้ด คุณจะได้ชื่อ library ที่ไม่มีอยู่จริง, การจัดย่อหน้าที่ผิดพลาด และ logic ที่ดูน่าเชื่อถือแต่ทำงานไม่ได้


📏 context_length คืออะไร?

context_length (หรือ n_ctx ใน UI บางตัว) กำหนดว่าโมเดลสามารถ "มองเห็น" ได้กี่ token พร้อมกัน — เหมือนกับหน่วยความจำในการทำงาน

ซึ่งรวมถึง:

  • System prompt ของคุณ
  • ประวัติการสนทนาทั้งหมด
  • เอกสารหรือโค้ดที่วางเข้าไป
  • output ของโมเดลเองจนถึงปัจจุบัน

เมื่อ context window เต็ม โมเดลจะเริ่ม ลืมตอนต้น สำหรับ session การเขียนโค้ด หมายความว่ามันลืม function definition ก่อนหน้า ชื่อตัวแปรที่กำหนดไว้ หรือข้อจำกัดของโปรเจกต์ที่อธิบายไว้ใน system prompt

👉 ค่าที่แนะนำตามงาน:

งาน context_length
เติมโค้ด function เดียว 2,048
ตรวจสอบโค้ดระดับไฟล์ 4,096
Session การ refactor หลายไฟล์ 8,192
ถาม-ตอบเกี่ยวกับ codebase ขนาดใหญ่ 16,384–32,768
{
  "n_ctx": 8192
}

ต้นทุน RAM: Context length กำหนดโดยตรงว่าโมเดลใช้ RAM เท่าไหร่ บนเครื่อง 8GB การรัน model ขนาด 7B ที่ n_ctx = 32768 มีแนวโน้มทำให้เกิด OOM error หรือทำงานช้ามาก สูตรประมาณการ:

RAM สำหรับ context ≈ n_ctx × 2 bytes สำหรับ model ที่ quantise แบบ Q4

ดังนั้น n_ctx = 8192 ใช้ RAM ประมาณ 16MB สำหรับ context storage — จัดการได้ n_ctx = 32768 ใช้ ~64MB น้ำหนักของ model เองใช้ส่วนใหญ่ context เพิ่มเติมขึ้นไป

จุดตกของคุณภาพ: ที่ปลายสุดของ context window โมเดลส่วนใหญ่เริ่มสูญเสียความสอดคล้อง — "ลืม" สิ่งที่พูดตอนต้นแม้ว่าจะยังอยู่ใน window สำหรับความช่วยเหลือในการเขียนโค้ดที่เชื่อถือได้ ให้เก็บเนื้อหาจริงไว้ที่ 70–80% ของ context_length ที่ตั้งไว้ ถ้าตั้ง n_ctx = 8192 ให้ถือว่า 6,000 tokens เป็นเพดานในทางปฏิบัติ


🛑 stop tokens คืออะไร?

stop tokens บอกโมเดลว่า: "เมื่อเห็น string นี้ใน output ให้หยุดเขียนทันที"

หากไม่มี โมเดลจะสร้าง text ต่อเนื่องเกินจุดสิ้นสุดตามตรรกะ — เพิ่มคำอธิบายเพิ่มเติม, สร้างโค้ดติดตาม หรือพูดซ้ำตัวเอง

{
  "stop": ["```", "# END", "\n\n\n"]
}

ทำไมถึงสำคัญสำหรับโค้ดโดยเฉพาะ

เมื่อขอให้โมเดลเขียน function ภายใน code block คุณต้องการให้หยุดที่ triple backtick ปิด หากไม่มี stop token มักจะดำเนินต่อ:

ไม่มี stop token:

```python
def calculate_tax(amount):
    return amount * 0.07

คุณยังสามารถขยายสิ่งนี้เพื่อจัดการอัตราภาษีที่แตกต่างกัน:

def calculate_tax(amount, rate=0.07):
    ...

จริงๆ นี่คือเวอร์ชั่นที่ดีกว่า…


**ด้วย "stop": ["`"]:**
def calculate_tax(amount):
    return amount * 0.07

สะอาด เสร็จสิ้น

### stop tokens ที่มีประโยชน์สำหรับงานเขียนโค้ด:

| Use case | ค่า stop |
|---|---|
| Output code block | ` "`" ` |
| Function เดียว ไม่มี prose | "\ndef " (หยุดก่อน function def ถัดไป) |
| Structured JSON output | "}" + นับด้วยตนเอง หรือ schema validation |
| Diff / patch output | "---" |
| ป้องกันคำอธิบายยืดยาด | "\n\n\n" (สามบรรทัดว่าง) |

---

## ⚙️ Config ที่แนะนำทั้งหมดสำหรับการเขียนโค้ดใน LM Studio

รวม parameter ของบทความนี้กับการตั้งค่า top_p/top_k/repeat_penalty ก่อนหน้า:

```json
{
  "temperature": 0.2,
  "top_k": 40,
  "top_p": 0.9,
  "repeat_penalty": 1.05,
  "n_ctx": 8192,
  "max_tokens": 2048,
  "stop": ["```", "\n\n\n"],
  "seed": -1
}

🧠 การเขียน System Prompt ที่ใช้งานได้จริงสำหรับโค้ด

สาม parameter นี้จะมีพลังมากขึ้นอย่างมีนัยสำคัญเมื่อรวมกับ system prompt ที่เขียนดี System prompt กำหนดบทบาทและข้อจำกัดของโมเดล ก่อน การสนทนาโค้ดใดๆ เริ่มต้น — มันใช้ส่วนหนึ่งของ context_length ดังนั้นให้กระชับ

สิ่งที่ทำให้ system prompt สำหรับโค้ดดี:

ระบุภาษาและ style อย่างชัดเจน:

You are a Python 3.11 backend developer. Use type hints on all functions.
Follow PEP 8. Prefer standard library over third-party packages unless necessary.

กำหนดความคาดหวังรูปแบบ output:

When writing code, output only the code block with no explanation before or after,
unless explicitly asked. Use triple backtick fences.

กำหนดข้อจำกัดของโปรเจกต์:

This project uses FastAPI 0.111, PostgreSQL 16, and Python 3.11.
No Django. No SQLAlchemy — use raw asyncpg for database queries.

System prompt เต็มรูปแบบที่เราใช้สำหรับงาน backend ที่ Simplico:

You are a senior backend engineer. Stack: FastAPI, Python 3.11, PostgreSQL with asyncpg, pgvector.
Always use async/await. Use type hints. Follow PEP 8.
Output code only — no explanations unless asked. Use triple backticks.
If the task is ambiguous, ask one clarifying question before writing code.
Do not hallucinate library names. If unsure about an API, say so.

Prompt นี้ใช้ประมาณ 80–100 tokens — เป็นสัดส่วนเล็กน้อยของ context 8,192-token ผลตอบแทนของ token เหล่านั้นนั้นมหาศาล: คำตอบที่ผิด stack น้อยลง รูปแบบ output ที่สะอาดขึ้น และโมเดลที่ถามก่อนจะสมมติ


🧮 สรุปการทำงานร่วมกันของ Parameter

Parameter ควบคุม ค่าที่เหมาะสมสำหรับโค้ด
temperature ความมั่นใจของโมเดลในการเลือก 0.1–0.3
top_k จำนวน token candidate ที่พิจารณา 20–50
top_p probability mass ของ candidate ที่รวม 0.85–0.9
repeat_penalty การยับยั้ง token ที่เพิ่งใช้ซ้ำ 1.05–1.1
n_ctx ปริมาณที่โมเดล "มองเห็น" พร้อมกัน 8,192 สำหรับงานส่วนใหญ่
stop จุดที่โมเดลหยุดสร้าง "" + "\n\n\n"`

คิดว่าเป็นชั้นๆ:

  1. n_ctx กำหนด ขนาดห้อง — ปริมาณที่โมเดลเก็บในหน่วยความจำได้
  2. System prompt กำหนด กฎของห้อง — บทบาท, stack, รูปแบบ output
  3. temperature + top_k + top_p ควบคุม วิธีที่โมเดลเลือกแต่ละคำ
  4. repeat_penalty ป้องกัน การวนซ้ำ
  5. stop tokens กำหนด ทางออก

✅ สรุปสาระสำคัญ

  • temperature = ความมั่นใจ → ให้ต่ำ (0.1–0.3) สำหรับโค้ดที่กำหนดผลลัพธ์ได้และถูกต้อง
  • context_length = หน่วยความจำในการทำงาน → กำหนดขนาดตามงาน อย่า max ออกโดยไม่คิด
  • stop tokens = จุดสิ้นสุดที่สะอาด → ตั้ง "" ` เสมอเมื่อสร้าง code block
  • System prompt = ตัวคูณ → system prompt 100 token จ่ายผลตอบแทนในทุก query ของ session

ด้วยการตั้งค่า parameter ทั้งหกพร้อมกัน LM Studio จะหยุดเป็นแค่ "autocomplete อัจฉริยะ" และกลายเป็น coding collaborator ที่เชื่อถือได้ ที่อยู่ถูก stack, หยุดตรงที่ต้องการ และไม่ลืม context กลางเซสชัน


🔗 บทความที่เกี่ยวข้อง

ต้องการความช่วยเหลือในการตั้งค่า local AI coding environment สำหรับทีม? ติดต่อ Simplico — เราสร้างและปรับแต่ง AI-assisted development workflows สำหรับทีมวิศวกรทั่วไทยและญี่ปุ่น


Get in Touch with us

Chat with Us on LINE

iiitum1984

Speak to Us or Whatsapp

(+66) 83001 0222

Related Posts

Our Products