การจัดการสถานะและเซสชันของเอเจนต์
นำวิธีการที่มีประสิทธิภาพมาใช้เพื่อรักษาสถานะของเอเจนต์ระหว่างการโต้ตอบหลายครั้งและเซสชันผู้ใช้ในสภาพแวดล้อมระบบจริง
การจัดการสถานะและเซสชันของเอเจนต์ เป็นบทเรียน AI Agents with LangChain & Autonomous Workflows ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Agents with LangChain & Autonomous Workflows และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Agents with LangChain & Autonomous Workflows มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดสถานะเอเจนต์จึงสำคัญ
เมื่อสร้างเอเจนต์ AI สำหรับผู้ใช้จริง โดยเฉพาะในสภาพแวดล้อมใช้งานจริง เอเจนต์ของคุณจำเป็นต้อง จดจำสิ่งต่าง ๆ ลองนึกภาพแชตบอตที่ลืมทุกอย่างที่คุณพูดหลังจากแต่ละข้อความดูสิ นั่นคงน่าหงุดหงิดมาก
นี่คือจุดที่ สถานะเอเจนต์และการจัดการเซสชันเข้ามามีบทบาท ทั้งสองช่วยให้เอเจนต์รักษาบริบทและสนทนาได้อย่างต่อเนื่องและมีความหมาย
การกำหนดสถานะเอเจนต์
“สถานะ” ของเอเจนต์หมายถึงข้อมูลทั้งหมดที่เอเจนต์จำเป็นต้องจดจำเกี่ยวกับการโต้ตอบหรือเซสชันผู้ใช้รายการหนึ่ง ซึ่งอาจรวมถึง
- ข้อความก่อนหน้าในการสนทนา
- ค่ากำหนดหรือการตั้งค่าของผู้ใช้
- ผลลัพธ์ระหว่างกลางจากการใช้เครื่องมือ
- ข้อมูลใด ๆ ที่รวบรวมระหว่างการโต้ตอบ
กล่าวโดยสรุป สถานะคือความจำระยะสั้นและระยะยาวของเอเจนต์สำหรับผู้ใช้รายหนึ่ง
ความท้าทายของการไร้สถานะ
โดยค่าเริ่มต้น การโต้ตอบกับโมเดลภาษาขนาดใหญ่ (LLM) หลายรูปแบบจะเป็นแบบไร้สถานะ ซึ่งหมายความว่าการเรียก API แต่ละครั้งเป็นอิสระจากกัน และ LLM จะไม่จดจำคำถามหรือคำตอบก่อนหน้าโดยอัตโนมัติ
ในสภาพแวดล้อมใช้งานจริงที่มีผู้ใช้จำนวนมาก หากคุณไม่จัดการสถานะ การโต้ตอบทุกครั้งจะเริ่มต้นใหม่ ส่งผลให้เกิดคำถามซ้ำ ๆ และประสบการณ์ผู้ใช้ที่ไม่ดี
การระบุเซสชันผู้ใช้
เพื่อจัดการสถานะของผู้ใช้หลายคนพร้อมกัน เราจะกำหนด “รหัสเซสชัน” ที่ไม่ซ้ำกันให้กับการโต้ตอบของผู้ใช้แต่ละราย รหัสนี้ทำหน้าที่เป็นกุญแจสำหรับเรียกดูและจัดเก็บประวัติการสนทนาและข้อมูลเฉพาะของผู้ใช้รายนั้น
ต่อไปนี้คือตัวอย่างวิธีสร้างรหัสเซสชันอย่างง่าย
import uuid
def start_user_session():
# Generate a unique session ID
session_id = str(uuid.uuid4())
print(f"New session started with ID: {session_id}")
return session_id
if __name__ == "__main__":
# In a real app, this ID would be tied to a user
# and sent with each request.
current_session_id = start_user_session()
# Use current_session_id to store and retrieve state
พื้นที่จัดเก็บถาวรสำหรับสถานะ
สำหรับแอปพลิเคชันใช้งานจริง การจัดเก็บสถานะในหน่วยความจำไม่เพียงพอ หากเซิร์ฟเวอร์เริ่มต้นใหม่ สถานะทั้งหมดในหน่วยความจำจะสูญหาย คุณจึงต้องใช้พื้นที่จัดเก็บถาวร
ตัวเลือกที่ใช้กันทั่วไปมีดังนี้
- พื้นที่จัดเก็บแบบคีย์-ค่า: Redis, Memcached
- ฐานข้อมูล: PostgreSQL, MongoDB, DynamoDB
- พื้นที่จัดเก็บบนคลาวด์: S3 (สำหรับสถานะขนาดใหญ่ที่เข้าถึงไม่บ่อย)
โซลูชันเหล่านี้ช่วยให้สถานะยังคงอยู่หลังการเริ่มต้นระบบใหม่ และสามารถเข้าถึงได้จากบริการแบบกระจาย
การแยกส่วนการจัดการหน่วยความจำของ LangChain
LangChain ช่วยให้การจัดการสถานะง่ายขึ้นด้วยโมดูลหน่วยความจำ โมดูลเหล่านี้ซ่อนความซับซ้อนของการจัดเก็บและเรียกดูประวัติการสนทนา
โมดูลที่ง่ายที่สุดคือ ConversationBufferMemory ซึ่งจัดเก็บข้อความไว้ในหน่วยความจำ มาดูกันว่าโมดูลนี้ติดตามข้อความอย่างไร
from langchain.memory import ConversationBufferMemory
from langchain_core.messages import HumanMessage, AIMessage
# Initialize in-memory conversation buffer
memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True
)
# Simulate adding messages to the memory
memory.chat_memory.add_user_message("Hello, who are you?")
memory.chat_memory.add_ai_message("I am an AI assistant.")
memory.chat_memory.add_user_message("What can you do?")
memory.chat_memory.add_ai_message("I can answer questions and help with tasks.")
# Retrieve the current conversation history
history = memory.load_memory_variables({})["chat_history"]
print("Current conversation history:")
for message in history:
print(f"{message.type.capitalize()}: {message.content}")
การผสานรวมหน่วยความจำภายนอก
แม้ ConversationBufferMemory จะเหมาะสำหรับการพัฒนา แต่การใช้งานจริงจำเป็นต้องมีการจัดเก็บถาวรภายนอก LangChain มีคลาสหน่วยความจำเฉพาะสำหรับผสานรวมกับระบบจัดเก็บข้อมูลปลายทางหลากหลายรูปแบบ เช่น Redis หรือฐานข้อมูล
คุณเชื่อมต่อพื้นที่จัดเก็บภายนอกเหล่านี้ได้โดยส่งออบเจ็กต์ ChatMessageHistory ไปยัง ConversationBufferMemory (หรือประเภทหน่วยความจำอื่น)
from langchain.memory import ConversationBufferMemory
from langchain_community.chat_message_histories import RedisChatMessageHistory
import os
# In a real application, you would configure Redis URL
# os.environ["REDIS_URL"] = "redis://localhost:6379/0"
# For this runnable example, we'll simulate the external history store
class SimulatedChatMessageHistory:
def __init__(self, session_id):
self.session_id = session_id
self._messages = []
print(f"\nSimulated history for session: {session_id}")
def add_user_message(self, message):
# In a real app, this would save to Redis/DB
self._messages.append(message)
print(f"[Simulated Save] User: {message}")
def add_ai_message(self, message):
# In a real app, this would save to Redis/DB
self._messages.append(message)
print(f"[Simulated Save] AI: {message}")
@property
def messages(self):
# In a real app, this would load from Redis/DB
return self._messages
# Create a unique session ID for a user
user_session_id = "user_prod_session_123"
# Initialize a simulated external history store for this session
simulated_history = SimulatedChatMessageHistory(session_id=user_session_id)
# Now, integrate this with LangChain's memory system
memory = ConversationBufferMemory(
chat_memory=simulated_history,
memory_key="history",
return_messages=True
)
# Simulate adding messages through the LangChain memory
# LangChain handles calling add_user_message/add_ai_message on simulated_history
memory.save_context({"input": "Hi there!"}, {"output": "Hello! How can I assist you?"})
memory.save_context({"input": "Tell me about AI agents."}, {"output": "AI agents combine LLMs with tools to perform tasks."})
print("\n--- Messages retrieved from LangChain memory (via simulated external store) ---")
for msg in memory.chat_memory.messages:
print(f"-> {msg.type.capitalize()}: {msg.content}")
กลยุทธ์เซสชันสำหรับการใช้งานจริง
ในการใช้งานจริง เฟรมเวิร์กเว็บของคุณ เช่น Flask, FastAPI หรือ Node.js Express โดยทั่วไปจะจัดการการกำหนดและติดตามรหัสเซสชันของผู้ใช้ เมื่อผู้ใช้โต้ตอบกับเอเจนต์ของคุณ
- เฟรมเวิร์กจะระบุรหัสเซสชันของผู้ใช้
- รหัสนี้จะถูกส่งไปยังบริการเอเจนต์ของคุณ
- บริการเอเจนต์จะใช้รหัสเพื่อโหลดสถานะการสนทนาที่ถูกต้องจากพื้นที่จัดเก็บถาวร
- หลังจากเอเจนต์ประมวลผลคำขอแล้ว สถานะที่อัปเดตจะถูกบันทึกกลับไปยังพื้นที่จัดเก็บถาวรโดยใช้รหัสเดิม
แนวทางปฏิบัติที่ดีที่สุดในการจัดการสถานะ
เพื่อให้การจัดการสถานะมีความทนทานและรองรับการขยายในสภาพแวดล้อมใช้งานจริง:
- การหมดอายุของเซสชัน: ใช้กลไกเพื่อล้างเซสชันเก่าหรือไม่ได้ใช้งานโดยอัตโนมัติ เพื่อลดต้นทุนการจัดเก็บและปกป้องความเป็นส่วนตัว
- การทำงานพร้อมกัน: ออกแบบระบบให้รองรับคำขอหลายรายการจากผู้ใช้คนเดียวกันได้อย่างปลอดภัย และป้องกันสภาวะการแข่งขันขณะอัปเดตสถานะ
- ความปลอดภัย: ปกป้องรหัสเซสชัน (เช่น ใช้คุกกี้ที่ปลอดภัย) และเข้ารหัสข้อมูลสำคัญที่จัดเก็บไว้ในหน่วยความจำถาวร
- ความสามารถในการขยาย: เลือกแหล่งจัดเก็บถาวรที่สามารถขยายตามแนวนอนไปพร้อมกับจำนวนผู้ใช้ และให้การเข้าถึงที่มีเวลาแฝงต่ำ
ตรวจสอบความเข้าใจของคุณ
ข้อใดต่อไปนี้คือเหตุผลหลักที่ควรใช้โซลูชันจัดเก็บข้อมูลถาวร (เช่น Redis หรือฐานข้อมูล) สำหรับสถานะของตัวแทนในสภาพแวดล้อมใช้งานจริง แทนการใช้เพียงการจัดเก็บในหน่วยความจำ
ทบทวน: สถานะและเซสชัน
เราได้เรียนรู้ว่าการจัดการสถานะของตัวแทนและเซสชันของผู้ใช้มีความสำคัญอย่างยิ่งต่อการสร้างตัวแทนปัญญาประดิษฐ์แบบสนทนาที่ทนทานสำหรับใช้งานจริง ประเด็นสำคัญมีดังนี้:
- ลักษณะไร้สถานะ: โดยค่าเริ่มต้น LLMs ไม่มีสถานะ จึงต้องจัดการสถานะอย่างชัดเจน
- รหัสเซสชัน: ใช้เพื่อระบุและจัดการบริบทของผู้ใช้แต่ละรายโดยไม่ซ้ำกัน
- การจัดเก็บข้อมูลถาวร: จำเป็นสำหรับการบันทึกสถานะให้คงอยู่ข้ามการเริ่มเซิร์ฟเวอร์ใหม่และระบบแบบกระจาย (เช่น Redis และฐานข้อมูล)
- หน่วยความจำของ LangChain: มีนามธรรมที่ทรงพลังสำหรับผสานรวมระบบหน่วยความจำส่วนหลังรูปแบบต่าง ๆ เข้ากับตัวแทนของคุณ
การเชี่ยวชาญด้านการจัดการสถานะเป็นกุญแจสำคัญในการมอบประสบการณ์การใช้งานตัวแทนที่ราบรื่นและชาญฉลาด ต่อไปเราจะสำรวจสถาปัตยกรรมตัวแทนที่รองรับการขยาย!
เรียนรู้ AI Agents with LangChain & Autonomous Workflows ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 12
- บทเรียน
- 50
คำถามที่พบบ่อย
บทเรียน “การจัดการสถานะและเซสชันของเอเจนต์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การจัดการสถานะและเซสชันของเอเจนต์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Agents with LangChain & Autonomous Workflows ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Agents with LangChain & Autonomous Workflows มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การจัดการสถานะและเซสชันของเอเจนต์”
นำวิธีการที่มีประสิทธิภาพมาใช้เพื่อรักษาสถานะของเอเจนต์ระหว่างการโต้ตอบหลายครั้งและเซสชันผู้ใช้ในสภาพแวดล้อมระบบจริง คุณปฏิบัติ AI Agents with LangChain & Autonomous Workflows ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Agents with LangChain & Autonomous Workflows หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Agents with LangChain & Autonomous Workflows บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การจัดการสถานะและเซสชันของเอเจนต์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AI Agents with LangChain & Autonomous Workflows นี้ได้ไหม
ได้ บทเรียน AI Agents with LangChain & Autonomous Workflows ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การนำเอเจนต์ไปใช้งานบนแพลตฟอร์มคลาวด์
- การจัดการสถานะและเซสชันของเอเจนต์
- การปรับขนาดสถาปัตยกรรมเอเจนต์
- การจำกัดอัตราและการจัดการโควตาเอพีไอ