Skip to content

Context Window และ System Role

ปกติแล้วปกติแล้ว LLM จะเป็น Stateless (ไม่มีความจำในตัวเอง) แต่ทำไมเราคุยกับ ai เราจะสังเกตุว่าเมื่อคุยไปเรื่อยๆ มันจะจำ บริบทก่อนหน้าได้ เช่น

me: สวัสดีผมครับผมชื่อ shiro นะ ทำงานเป็น Software engineer อายุ 25

ai: ยินดีที่ได้รู้จักครับ

me: ผมคือใคร?

ai: คุณชื่อ shiro คุณเป็น Software engineer ที่อายุ 25

โดยเบื้องหลังจากทำการของมันคือ เราส่งข้อความก่อนหน้า ไปให้ LLM เสมอ เพื่อให้มันเข้าใจบริบท (Context) ในปัจจุบันว่าเรากำลังคุยเรื่องอะไรกันอยู่ ดังเช่นตัวอย่างนี้

เบื้องหลังการส่งข้อมูลในแต่ละ Turn

Section titled “เบื้องหลังการส่งข้อมูลในแต่ละ Turn”

Turn 1: เริ่มต้นบทสนทนา

Section titled “Turn 1: เริ่มต้นบทสนทนา”

เมื่อคุณทักทายไปครั้งแรก ระบบจะส่งข้อความแรกไปตรงๆ

  • สิ่งที่คุณพิมพ์: “สวัสดีครับผมชื่อ shiro นะ ทำงานเป็น Software engineer อายุ 25”

  • สิ่งที่ระบบส่งไปให้ LLM ประมวลผล:

    [
    { "role": "user", "content": "สวัสดีครับผมชื่อ shiro นะ ทำงานเป็น Software engineer อายุ 25" }
    ]
  • ผลลัพธ์ที่ AI ตอบกลับมา: “ยินดีที่ได้รู้จักครับ”

Turn 2: AI เริ่มจำได้ (เพราะได้ประวัติจาก Turn 1)

Section titled “Turn 2: AI เริ่มจำได้ (เพราะได้ประวัติจาก Turn 1)”

เมื่อคุณถามคำถามถัดไป ระบบหลังบ้านจะมัดรวมเอาคำถาม-คำตอบใน Turn 1 แนบเป็น Context ส่งไปด้วยเสมอ

  • สิ่งที่คุณพิมพ์: “ผมคือใคร?”

  • สิ่งที่ระบบส่งไปให้ LLM ประมวลผล (Context + คำถามใหม่):(เพราะ LLM ได้เห็นอดีตทั้งหมดในกล่องนี้ มันจึงรู้ว่าคุณคือ Shiro)

    [
    { "role": "user", "content": "สวัสดีครับผมชื่อ shiro นะ ทำงานเป็น Software engineer อายุ 25" },
    { "role": "assistant", "content": "ยินดีที่ได้รู้จักครับ" },
    { "role": "user", "content": "ผมคือใคร?" }
    ]
  • ผลลัพธ์ที่ AI ตอบกลับมา: “คุณชื่อ shiro คุณเป็น Software engineer ที่อายุ 25”

Turn 3: คุยต่อยอดไปอีก (Context ยาวขึ้นเรื่อยๆ)

Section titled “Turn 3: คุยต่อยอดไปอีก (Context ยาวขึ้นเรื่อยๆ)”

สมมติว่าคุณคุยต่อเพื่อขยายความ ระบบก็จะร้อยเรียงประวัติยาวเป็นลูกโซ่แบบนี้

  • สิ่งที่คุณพิมพ์: “ช่วยแนะนำเทคโนโลยีที่ผมควรศึกษาเพิ่มในปีนี้หน่อย”
  • สิ่งที่ระบบส่งไปให้ LLM ประมวลผล (Context ทั้งหมด + คำถามใหม่):
[
{ "role": "user", "content": "สวัสดีครับผมชื่อ shiro นะ ทำงานเป็น Software engineer อายุ 25" },
{ "role": "assistant", "content": "ยินดีที่ได้รู้จักครับ" },
{ "role": "user", "content": "ผมคือใคร?" },
{ "role": "assistant", "content": "คุณชื่อ shiro คุณเป็น Software engineer ที่อายุ 25" },
{ "role": "user", "content": "ช่วยแนะนำเทคโนโลยีที่ผมควรศึกษาเพิ่มในปีนี้หน่อย" }
]
  • ผลลัพธ์ที่ AI ตอบกลับมา: ในฐานะที่คุณเป็น Software engineer ในวัย 25 ปี ผมแนะนำให้คุณลองศึกษาเรื่อง System Architecture ลึกขึ้น หรือเทรนด์ AI Integration ครับ…”*

กฎที่กำหนด personality ของ AI, รูปแบบการตอบ และเงื่อนไขการตอบ

โครงสร้างตัวอย่าง:

[
{ "role": "system", "content": "You are Zen, a senior coding teacher..." },
{ "role": "user", "content": "Hello, I'm shiro..." },
{ "role": "assistant", "content": "Nice to meet you shiro!" }
]

อธิบาย 3 Roles:

  • System: ตั้งกฎ/personality (อ่านก่อน, user ไม่เห็น)
  • User: ข้อความจาก user
  • Assistant: คำตอบจาก AI

สำคัญ: { "role": "system" } จะถูกล็อคไว้ที่ด้านบนเสมอและไม่ถูกลบ แม้ในขณะที่ Compact หรือ Drop Context

หมายเหตุ: ควรทำให้ system prompt กระชับเพื่อรักษาพื้นที่ memory ไว้สำหรับเนื้อหาอื่น

Avatar blackCat
ระวัง context ที่มากเกินไปจะทำให้ AI หลุดโฟกัสและทำงานไม่แม่นยำ ระวังด้วยหล่ะ!

ทดสอบความเข้าใจเกี่ยวกับ Context Window และ System Role

ข้อ 1 / 40%

ทำไม LLM จึงสามารถจำบริบทการสนทนาก่อนหน้าได้?