หน่วยความจำระยะสั้นในหน้าต่างบริบท
เก็บประวัติการสนทนาไว้ในอาร์เรย์ messages ซึ่งเป็นหน่วยความจำที่เรียบง่ายที่สุด พร้อมทำความเข้าใจข้อจำกัดที่เข้มงวดของวิธีนี้
หน่วยความจำระยะสั้นในหน้าต่างบริบท เป็นบทเรียน AI Agents ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Agents และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
หน่วยความจำเป็นเพียงรายการหนึ่ง
"หน่วยความจำ" ของ LLM แบบแชตคือรายการ messages ที่คุณส่งไปกับการเรียกใช้ทุกครั้ง โมเดลไม่มีสถานะ — ไม่รู้อะไรเลยระหว่างคำขอ
"หน่วยความจำระยะสั้น" = สิ่งที่อยู่ในรายการนั้นในขณะนี้
เหตุใดจึงทำงานได้
คุณผนวกข้อความผู้ใช้แต่ละข้อความและการตอบกลับของผู้ช่วยแต่ละครั้ง เมื่อถึงเวลาที่คุณถามคำถามที่สาม โมเดลจะเห็นสิ่งต่อไปนี้:
messages = [
{'role': 'system', 'content': 'You are helpful.'},
{'role': 'user', 'content': 'My name is Alice.'},
{'role': 'assistant', 'content': 'Nice to meet you, Alice.'},
{'role': 'user', 'content': 'What is my name?'}
]
# Model replies: 'Alice'
for m in messages:
print(f"{m['role']}: {m['content']}")
print("Model replies: Alice")
ขีดจำกัดหน้าต่างบริบท
โมเดลทุกตัวมี หน้าต่างบริบท ที่มีขีดจำกัดตายตัว — จำนวนโทเคนสูงสุดรวมระหว่างอินพุตกับเอาต์พุต
- gpt-4o-mini: 128k โทเคน
- claude-sonnet-4-5: 200k โทเคน
- gemini-1.5-pro: 2M โทเคน
หากเกินขีดจำกัด API จะแจ้งข้อผิดพลาด
ต้นทุนโทเคนเพิ่มขึ้นเป็นเส้นตรง
คุณจ่ายเงินสำหรับทุกโทเคนในทุกหนึ่งรอบ แชต 30 รอบที่แต่ละรอบมี 500 โทเคนจะทำให้คุณเสียค่าอินพุต 15,000 โทเคนในการเรียกใช้ครั้ง LAST เพียงครั้งเดียว — ประวัติทั้งหมดจะถูกส่งซ้ำ
เซสชันที่ยาวนานจะมีต้นทุนเพิ่มขึ้นอย่างรวดเร็ว
ข้อมูลที่หายไปตรงกลาง
แม้บริบทจะมีขนาด 200k โมเดลก็ยังให้ความสนใจกับเนื้อหาตรงกลางของพรอมต์ยาว ๆ น้อยลง ข้อมูลสำคัญควรอยู่ตอนต้น (ระบบ) หรือตอนท้าย (ข้อความผู้ใช้ล่าสุด)
การตัดทอนด้วยหน้าต่างเลื่อน
การจัดการหน่วยความจำที่ง่ายที่สุด — เก็บข้อความระบบและ N รอบล่าสุดไว้:
MAX_TURNS = 20 # 10 user + 10 assistant
def trim(messages):
system = messages[0]
rest = messages[1:]
return [system] + rest[-MAX_TURNS:]
demo_messages = [{'role': 'system', 'content': 'sys'}] + [
{'role': 'user' if i % 2 == 0 else 'assistant', 'content': f'msg {i}'} for i in range(30)
]
trimmed = trim(demo_messages)
print(f"Original messages: {len(demo_messages)}")
print(f"Trimmed messages: {len(trimmed)}")
การตัดแต่งตามจำนวนโทเคน
แม่นยำกว่า: ตัดแต่งตามจำนวนโทเคน ไม่ใช่จำนวนรอบ:
import tiktoken
enc = tiktoken.encoding_for_model('gpt-4o-mini')
def trim_by_tokens(messages, max_tokens=8000):
out = [messages[0]] # keep system
tokens_left = max_tokens - len(enc.encode(messages[0]['content']))
# walk backwards from newest
for m in reversed(messages[1:]):
cost = len(enc.encode(m['content'])) + 4
if cost > tokens_left:
break
out.insert(1, m)
tokens_left -= cost
return outรักษาคู่ไว้ด้วยกัน
การตัดทอนตรงกลางคู่ทำให้เกิดการเรียกใช้เครื่องมือที่ไม่มีคู่ โปรดตัดรอบสนทนาของผู้ใช้และผู้ช่วยออกพร้อมกันเสมอ:
# Bad: cuts after assistant call but before tool result
# Good: trim whole turns (user + all responses)
print("Bad: cuts after assistant call but before tool result")
print("Good: trim whole turns (user + all responses)")
เมื่อหน่วยความจำระยะสั้นไม่เพียงพอ
หน่วยความจำระยะสั้นจะมีปัญหาเมื่อ:
- การสนทนาเกิน 20 รอบสนทนา
- ผู้ใช้กลับมาในวันถัดไปและคาดหวังให้ระบบ recall ได้
- ผู้ใช้หลายคนใช้ตัวแทนเดียวกันร่วมกัน
คุณต้องใช้กลยุทธ์อื่น โปรดดูบทเรียนถัดไป
พรอมป์ต์ระบบต้องตรึงไว้
ข้อความระบบต้องเป็นรายการแรกเสมอ ห้ามตัดทอนข้อความนี้ เพราะมีข้อมูลเกี่ยวกับอัตลักษณ์ กฎ และคำอธิบายเครื่องมือ
การตรึงการอัปเดตระบบล่าสุด
หากคุณเพิ่ม "จดจำว่าผู้ใช้ชอบหน่วยเซลเซียส" เป็นบันทึกระบบ ให้ตรึงไว้ด้านหน้าเช่นเดียวกับพรอมป์ต์ระบบเดิม:
SYSTEM_PROMPT = 'You are a helpful assistant.'
messages = [
{'role': 'system', 'content': SYSTEM_PROMPT},
{'role': 'system', 'content': 'USER PREFERENCE: Celsius units'},
{'role': 'user', 'content': 'What is the weather in Paris?'},
{'role': 'assistant', 'content': 'It is 21C and sunny.'},
]
print('Pinned system messages:')
for m in messages:
if m['role'] == 'system':
print(' -', m['content'])
print('Total messages:', len(messages))
ขีดจำกัดบริบท
จะเกิดอะไรขึ้นเมื่อคุณใช้บริบทเกินหน้าต่างบริบทของโมเดล
ทบทวน
หน่วยความจำระยะสั้น = รายการข้อความ จัดการด้วยการตัดทอนตามหน้าต่างเลื่อนหรือจำนวนโทเค็น ตรึงข้อความระบบไว้ และยอมรับว่าต้นทุนจะเพิ่มขึ้นตามจำนวนรอบสนทนา
คำถามที่พบบ่อย
บทเรียน “หน่วยความจำระยะสั้นในหน้าต่างบริบท” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “หน่วยความจำระยะสั้นในหน้าต่างบริบท” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Agents ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “หน่วยความจำระยะสั้นในหน้าต่างบริบท”
เก็บประวัติการสนทนาไว้ในอาร์เรย์ messages ซึ่งเป็นหน่วยความจำที่เรียบง่ายที่สุด พร้อมทำความเข้าใจข้อจำกัดที่เข้มงวดของวิธีนี้ คุณปฏิบัติ AI Agents ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Agents หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Agents บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “หน่วยความจำระยะสั้นในหน้าต่างบริบท” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AI Agents นี้ได้ไหม
ได้ บทเรียน AI Agents ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- หน่วยความจำระยะสั้นในหน้าต่างบริบท
- เหตุใดบริบทยาวจึงขยายขนาดไม่ได้
- การสรุปเนื้อหาในฐานะการบีบอัด
- คลังหน่วยความจำอย่างง่าย (คีย์-ค่า)