0Pricing
AI Prompt Engineering · บทเรียน

ทำความเข้าใจส่วนติดต่อการสนทนา

ส่วนติดต่อการสนทนาของ LLM ทำงานอย่างไร: บทบาท รอบการสนทนา และบริบทเซสชัน

ทำความเข้าใจส่วนติดต่อการสนทนา เป็นบทเรียน AI Prompt Engineering ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Prompt Engineering และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Prompt Engineering มีบทเรียนทั้งหมด 4 บทเรียน

บทบาทสามประการ

การสนทนาทุกครั้งกับ LLM สร้างขึ้นจากสามบทบาท ได้แก่ ระบบ ผู้ใช้ และ ผู้ช่วย

บทบาท system กำหนดกฎและบุคลิกก่อนเริ่มการสนทนา บทบาท user คือคุณในฐานะผู้ส่งข้อความ ส่วนบทบาท assistant คือโมเดลที่ตอบกลับ

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

message = client.messages.create(
    model='claude-opus-4-5',
    max_tokens=256,
    system='You are a helpful cooking assistant.',
    messages=[
        {'role': 'user', 'content': 'What is mise en place?'}
    ]
)
print(message.content[0].text)

ข้อความระบบ

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

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

import openai

client = openai.OpenAI(api_key='sk-your-key-here')

response = client.chat.completions.create(
    model='gpt-4o',
    messages=[
        {
            'role': 'system',
            'content': 'You are a senior Python engineer. '
                       'Always include type hints and docstrings in your examples.'
        },
        {
            'role': 'user',
            'content': 'Show me a function that parses JSON safely.'
        }
    ]
)
print(response.choices[0].message.content)

ช่วงการสนทนาและลำดับการสนทนา

การสนทนาคือลำดับของช่วงการสนทนา แต่ละช่วงสลับกันไป โดยผู้ใช้พูด ผู้ช่วยตอบ แล้วผู้ใช้จึงพูดอีกครั้ง

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

import openai

client = openai.OpenAI(api_key='sk-your-key-here')

# Each call sends the FULL conversation history
history = [
    {'role': 'system', 'content': 'You are a geography tutor.'},
    {'role': 'user', 'content': 'What is the capital of France?'},
    {'role': 'assistant', 'content': 'The capital of France is Paris.'},
    {'role': 'user', 'content': 'And its population?'}   # follow-up turn
]

response = client.chat.completions.create(
    model='gpt-4o',
    messages=history
)
print(response.choices[0].message.content)

บริบทเซสชัน

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

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

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

# Simulating 3-turn session context
conversation = [
    {'role': 'user', 'content': 'My name is Alex.'},
    {'role': 'assistant', 'content': 'Nice to meet you, Alex!'},
    {'role': 'user', 'content': 'What is 5 times 7?'},
    {'role': 'assistant', 'content': '5 times 7 is 35.'},
    {'role': 'user', 'content': 'Can you repeat my name?'}   # uses session context
]

response = client.messages.create(
    model='claude-opus-4-5',
    max_tokens=128,
    messages=conversation
)
print(response.content[0].text)  # expects: Your name is Alex.

โครงสร้างประวัติข้อความ

ประวัติข้อความเป็นเพียงรายการพจนานุกรม โดยแต่ละรายการมีคีย์ role และ content

คุณจัดการรายการนี้เองในโค้ด หลังจากผู้ช่วยตอบกลับแต่ละครั้ง คุณ append การตอบกลับนั้น จากนั้น append ข้อความถัดไปของผู้ใช้ แล้วส่งรายการทั้งหมดอีกครั้งในการเรียกใช้ครั้งถัดไป

import openai

client = openai.OpenAI(api_key='sk-your-key-here')

def chat(history, user_message):
    history.append({'role': 'user', 'content': user_message})
    response = client.chat.completions.create(
        model='gpt-4o',
        messages=history
    )
    reply = response.choices[0].message.content
    history.append({'role': 'assistant', 'content': reply})
    return reply, history

history = [{'role': 'system', 'content': 'You are a math tutor.'}]
reply, history = chat(history, 'What is a prime number?')
print(reply)
print('History length:', len(history))

อธิบายขีดจำกัดโทเค็น

โมเดลทุกตัวมี หน้าต่างบริบท ซึ่งวัดเป็นโทเค็น โทเค็นหนึ่งโทเค็นมีขนาดประมาณ 4 อักขระ หรือ 0.75 คำในภาษาอังกฤษ

ทั้งข้อมูลเข้าของคุณ (ระบบ + ประวัติทั้งหมด) และผลลัพธ์ของโมเดลจะนับรวมในขีดจำกัดนี้ GPT-4o รองรับ 128k โทเค็น ส่วนโคลด โอปุส 4.5 รองรับ 200k โทเค็น เมื่อถึงขีดจำกัด จะต้องนำข้อความเก่าออกหรือสรุปข้อความเหล่านั้น

import tiktoken

# Count tokens before sending to avoid exceeding the limit
encoding = tiktoken.encoding_for_model('gpt-4o')

messages = [
    {'role': 'system', 'content': 'You are a helpful assistant.'},
    {'role': 'user', 'content': 'Explain quantum entanglement in simple terms.'}
]

total_tokens = 0
for msg in messages:
    total_tokens += len(encoding.encode(msg['content']))
    total_tokens += 4  # overhead per message

print(f'Estimated input tokens: {total_tokens}')
print(f'GPT-4o limit: 128,000 tokens')
print(f'Budget remaining: {128000 - total_tokens:,} tokens')

จะเกิดอะไรขึ้นเมื่อถึงขีดจำกัดโทเค็น

เมื่อประวัติการสนทนาเติบโตเกินหน้าต่างบริบท คุณมีสามทางเลือก:

  • ตัดทอน — ลบข้อความที่เก่าที่สุดออก
  • สรุป — ขอให้โมเดลย่อรอบการสนทนาก่อนหน้าให้เป็นบทสรุปสั้น ๆ
  • หน้าต่างเลื่อน — เก็บไว้เฉพาะข้อความ N รายการล่าสุด

การเลือกกลยุทธ์ที่ไม่เหมาะสมอาจทำให้โมเดลสูญเสียบริบทสำคัญและตอบกลับอย่างไม่สอดคล้องกัน

def trim_history(history, max_messages=10, keep_system=True):
    '''Keep the system message and the last N non-system messages.'''
    system_msgs = [m for m in history if m['role'] == 'system']
    non_system  = [m for m in history if m['role'] != 'system']

    if len(non_system) > max_messages:
        non_system = non_system[-max_messages:]
        print(f'Trimmed to last {max_messages} messages.')

    return system_msgs + non_system if keep_system else non_system

history = [{'role': 'system', 'content': 'You are a tutor.'}]
for i in range(15):
    history.append({'role': 'user',      'content': f'Question {i}'})
    history.append({'role': 'assistant', 'content': f'Answer {i}'})

trimmed = trim_history(history, max_messages=6)
print('Trimmed history length:', len(trimmed))

บริบทแบบหลายรอบในการใช้งานจริง

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

นี่เป็นเหตุผลที่คุณสามารถพูดว่า 'อธิบายเรื่องนั้นให้เข้าใจง่ายกว่านี้' โดยไม่ต้องพูดซ้ำว่า 'เรื่องนั้น' คืออะไร — โมเดลมองเห็นประวัติทั้งหมดและรู้ว่าคุณกำลังอ้างถึงอะไร

import openai

client = openai.OpenAI(api_key='sk-your-key-here')

history = [{'role': 'system', 'content': 'You are a science teacher.'}]

# Turn 1
history.append({'role': 'user', 'content': 'What is photosynthesis?'})
r1 = client.chat.completions.create(model='gpt-4o', messages=history)
reply1 = r1.choices[0].message.content
history.append({'role': 'assistant', 'content': reply1})

# Turn 2 — refers to prior answer without repeating it
history.append({'role': 'user', 'content': 'Can you explain that using only 3 bullet points?'})
r2 = client.chat.completions.create(model='gpt-4o', messages=history)
print(r2.choices[0].message.content)

เอพีไอไร้สถานะ ประสบการณ์ผู้ใช้แบบมีสถานะ

นี่คือข้อสังเกตสำคัญ: เอพีไอไม่มี สถานะ โดยสิ้นเชิง เซิร์ฟเวอร์จะไม่จดจำสิ่งใดระหว่างการเรียกใช้แต่ละครั้ง

ผลิตภัณฑ์สนทนาอย่าง ChatGPT สร้างภาพลวงตาว่ามีความจำด้วยการจัดเก็บประวัติการสนทนาไว้ในฐานข้อมูลของตนเอง แล้วแทรกประวัตินั้นกลับเข้าไปในการเรียกเอพีไอทุกครั้ง คุณสามารถสร้างกลไกแบบเดียวกันนี้ได้ด้วยตนเอง

# Illustration: two isolated API calls vs one with history
import openai

client = openai.OpenAI(api_key='sk-your-key-here')

# ❌ WITHOUT history — model has no memory
r1 = client.chat.completions.create(
    model='gpt-4o',
    messages=[{'role': 'user', 'content': 'My dog is named Biscuit.'}]
)
r2 = client.chat.completions.create(
    model='gpt-4o',
    messages=[{'role': 'user', 'content': "What's my dog's name?"}]
)
print('Without history:', r2.choices[0].message.content)  # will not know

# ✅ WITH history injected
r3 = client.chat.completions.create(
    model='gpt-4o',
    messages=[
        {'role': 'user',      'content': 'My dog is named Biscuit.'},
        {'role': 'assistant', 'content': 'Got it, your dog is named Biscuit!'},
        {'role': 'user',      'content': "What's my dog's name?"}
    ]
)
print('With history:', r3.choices[0].message.content)

เคล็ดลับการใช้งานส่วนติดต่อการสนทนา

เพื่อใช้ส่วนติดต่อการสนทนาให้เกิดประโยชน์สูงสุด:

  • ใส่คำสั่งที่ต้องคงอยู่ไว้ใน ข้อความระบบ แทนการใส่ซ้ำในทุกรอบของผู้ใช้
  • ทำให้รอบการสนทนาก่อนหน้า กระชับ — ประวัติที่ยืดเยื้อใช้โทเค็นอย่างรวดเร็ว
  • เริ่ม เซสชันใหม่ เมื่อเปลี่ยนหัวข้อ เพื่อหลีกเลี่ยงการปนเปื้อนของบริบท
  • เมื่อกลับมาทำโครงการระยะยาว ให้แทรกเฉพาะ ส่วนย่อยที่เกี่ยวข้อง ของบริบทที่ผ่านมา
# Good practice: compact system message + focused history
import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

system = (
    'You are a concise Python code reviewer. '
    'Reply with: 1) one-line verdict, 2) top 3 issues, 3) fixed snippet.'
)

response = client.messages.create(
    model='claude-opus-4-5',
    max_tokens=512,
    system=system,
    messages=[
        {'role': 'user', 'content': 'def add(a,b): return a+b\nprint(add(1,2))'}
    ]
)
print(response.content[0].text)

ทบทวน: ส่วนติดต่อการสนทนา

มาทบทวนแนวคิดสำคัญเกี่ยวกับการทำงานของส่วนติดต่อการสนทนากัน:

  • สามบทบาท: ระบบกำหนดกฎ ผู้ใช้ส่งคำสั่ง และผู้ช่วยตอบกลับ
  • ประวัติทั้งหมด จะถูกส่งไปกับการเรียกเอพีไอทุกครั้ง — เซิร์ฟเวอร์ไม่มีสถานะ
  • ขีดจำกัดโทเค็น จำกัดบริบททั้งหมด ให้ตัดทอนหรือสรุปเมื่อใกล้ถึงขีดจำกัด
  • บริบทของเซสชัน เป็นเพียงรายการที่คุณจัดการในโค้ดของคุณเอง
  • เริ่มเซสชันใหม่เมื่อเปลี่ยนหัวข้อ เพื่อให้บริบทสะอาดอยู่เสมอ
# Summary: minimal chat loop skeleton
import openai

client = openai.OpenAI(api_key='sk-your-key-here')
history = [{'role': 'system', 'content': 'You are a helpful assistant.'}]

def ask(question):
    history.append({'role': 'user', 'content': question})
    res = client.chat.completions.create(model='gpt-4o', messages=history)
    answer = res.choices[0].message.content
    history.append({'role': 'assistant', 'content': answer})
    return answer

print(ask('Hello! What can you help me with?'))

ตรวจสอบความรู้

ทดสอบความเข้าใจของคุณเกี่ยวกับกลไกของส่วนติดต่อการสนทนา

ผู้ใช้เริ่มเซสชันใหม่เอี่ยมและถามปัญญาประดิษฐ์ว่า 'เมื่อวานเราคุยอะไรกัน' ปัญญาประดิษฐ์ไม่มีความจำเกี่ยวกับเซสชันของเมื่อวาน เพราะเหตุใด

สิ่งที่คุณได้เรียนรู้

ตอนนี้คุณเข้าใจพื้นฐานของการโต้ตอบกับปัญญาประดิษฐ์ผ่านการสนทนาทุกครั้งแล้ว:

  • โครงสร้างบทบาท ระบบ/ผู้ใช้/ผู้ช่วย ที่กำหนดรูปแบบของการสนทนาทุกครั้ง
  • วิธีส่ง ประวัติข้อความทั้งหมด ในการเรียกใช้ทุกครั้งเพื่อจำลองความจำ
  • เหตุผลที่เอพีไอ ไม่มีสถานะ และวิธีที่ผลิตภัณฑ์สนทนาสร้างความจำต่อยอดจากเอพีไอ
  • วิธีที่ ขีดจำกัดโทเค็น จำกัดบริบท และวิธีจัดการกับขีดจำกัดเหล่านั้น

แบบจำลองทางความคิดนี้จะช่วยให้คุณเขียนคำสั่งที่ดีขึ้นและสร้างแอปพลิเคชันอัจฉริยะที่ขับเคลื่อนด้วยปัญญาประดิษฐ์ได้

คำถามที่พบบ่อย

บทเรียน “ทำความเข้าใจส่วนติดต่อการสนทนา” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ทำความเข้าใจส่วนติดต่อการสนทนา” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Prompt Engineering ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Prompt Engineering มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ทำความเข้าใจส่วนติดต่อการสนทนา”

ส่วนติดต่อการสนทนาของ LLM ทำงานอย่างไร: บทบาท รอบการสนทนา และบริบทเซสชัน คุณปฏิบัติ AI Prompt Engineering ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Prompt Engineering หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Prompt Engineering บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “ทำความเข้าใจส่วนติดต่อการสนทนา” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน AI Prompt Engineering นี้ได้ไหม

ได้ บทเรียน AI Prompt Engineering ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ทำความเข้าใจส่วนติดต่อการสนทนา
  2. ประเภทคำขอที่ปัญญาประดิษฐ์รองรับ
  3. ปัญญาประดิษฐ์สร้างคำตอบอย่างไร
  4. สิ่งที่ปัญญาประดิษฐ์ทำไม่ได้
← กลับไปที่ AI Prompt Engineering