ความจำ LLM
แอปพลิเคชันที่ใช้ LLM โดยทั่วไปมักมีอินเตอร์เฟซแชทที่คล้ายกับ WeChat คุณลักษณะสำคัญของกระบวนการสนทนา AI คือความสามารถในการอ้างถึงข้อมูลที่กล่าวถึงในการสนทนาก่อนหน้านี้ มีความสามารถในการจดจำคำพูดก่อนหน้าโดยไม่จำเป็นต้องทำซ้ำอีกครั้ง เหมือนกระบวนการสนทนาของมนุษย์ มนุษย์จะนำข้อมูลย้อนหลังมาอ้างอิงโดยอัตโนมัติ
ความสามารถในการจัดเก็บข้อมูลการสนทนาย้อนหลังในฟิลด์ LLM 通常ถูกเรียกว่า "ความจำ" คล้ายกับว่ามนุษย์มีความสามารถในการจดจำ LangChain ห่อหุ้มคอมโพเนนต์ฟังก์ชันความจำที่แตกต่างเอาไว้ สามารถใช้แยกออกหรือนำมารวมเข้าในเชนได้โดยไม่มีตุ๊บเท่าเชื่อม
คอมโพเนนต์ความจำจำเป็นต้องดำเนินการสองอย่างขั้นพื้นฐานได้แก่ การอ่านและการเขียน
สำหรับตอขของคอมโพเนนต์เชนของ LangChain หากคุณเปิดใช้คล้ายกับความจำ มันจะดําเนินการตามตรรกะโลจิกที่คล้ายกันดังนี้
- เมื่อรับข้อมูลข้อมูลผู้ใช้เริ่มต้น งานในเชนจะพยายามสอบถามข้อมูลที่เกี่ยวข้องจากความจำ หลังจากนั้นต่อโยงข้อมูลข้อความย้อนหลังและขอบผู้ใช้เข้าไปยัง prompts เพื่อส่งให้กับ LLM
- เมื่อรับเนื้อหาที่ส่งกลับจาก LLM มันจะจัดเก็บผลลัพธ์โดยอัตโนมัติในคอมโพเนนต์ความจำเพื่อที่จะสอบถามอีกคร้งได้อย่างง่าย
กระบวนการดำเนินการความจำใน LangChain ถูกแสดงในไดอะแกรมด้านล่าง:
การรวมคอมโพเนนต์ความจำเข้าสู่ระบบ
ก่อนที่จะใช้คอมโพเนนต์ความจำ คุณจำเป็นต้องพิจารณาคำถามสองข้อต่อไปนี้:
- วิธีการจัดเก็บข้อมูลข้อความย้อนหลัง
- วิธีการสอบถามข้อมูลข้อความย้อนหลัง
การจัดเก็บ: รายชื่อข้อความแชท
หากใช้โมเดลแชท ข้อมูลการสนทนาจะเป็นรายชื่อข้อความแชท LangChain ระบบการจัดเก็บข้อมูลข้อความย้อนหลังรองรับหลายเอ็นจินสำหรับการจัดเก็บข้อมูลข้อความย้อนหลัง โดยง่ายที่สุดคือการจัดเก็บข้อมูลในหน่วยความจำ ในการปฏิบัติจริง วิธีที่ใช้กันทีี่สุดคือการจัดเก็บในฐานข้อมูล
การสอบถาม: วิธีการสอบถามข้อมูลการสนทนาย้อนหลังที่เกี่ยวข้อง
เพื่อที่จะดำเนินการความจำของ LLM นี้ เกมาตรฐานคือการรวมเนื้อหาข้อความย้อนหลังเป็นข้อมูลพื้นหลังใน prompts ในทางนี้ LLM สามารถอ้างอิงเนื้อหาพื้นหลังขณะตอบคำถามได้
การจัดเก็บข้อมูลข้อความย้อนหลังมีความง่ายอยู่แล้ว และส่วนที่ท้าทายมีอยู่ที่วิธีการสอบถามข้อความย้อนหลังที่เกี่ยวข้องกับเนื้อหาสนทนาปัจจุบัน ความสาเหตุหลักสำหรับคำถามข้อความย้อนหลังที่เกี่ยวข้องกับเนื้อหาสนทนาปัจจุบันเพราะถึงจำกัดของโทเคนสูงสุดของ LLM เราไม่สามารถแทรกเนื้อหาข้อความสนทนาย้อนหลังทั้งหมดเข้าไปใน prompts เพื่อให้กับ AI
กลยุทธ์การสอบถามข้อความย้อนหลังทั่วไป ประกอบด้วย:
- การสอบถามเพียงแค่ข้อความ N ข้อความล่าสุดเป็นข้อมูลพื้นหลังสำหรับ prompts
- การใช้ AI ในการสรุปข้อความย้อนหลัง และการสรุปนั้นจะใช้เป็นข้อมูลพื้นหลังสำหรับ prompts
- การใช้เวกเตอร์ฐานข้อมูลเพื่อสอบถามข้อความย้อนหลังที่คล้ายกับเนื้อหาสนทนาปัจจบันเผื่อเป็นข้อมูลพื้นหลังสำหรับ prompts
ตัวอย่างการใช้ส่วนปรโมทของ LangChain Component
ซึ่งซะการดูที่คอมโพเนนต์ความจำใน LangChain ดูเหมือนอย่างไรให้ดูที่นี้ ที่นี้เราจะแนะนำความรู้พื้นฐานในการโต้ตอกับคอมโพเนนต์ความจำ
เริ่มต้นดูว่าจะใช้ ConversationBufferMemory ในเชนอย่างไร ConversationBufferMemory คือคอมโพเนนต์ความจำที่ง่ายมาก สามารถจัดเก็บรายชื่อข้อความแชทในหน่วยความจำและส่งให้กับแม่แบบโต้ตอแชทใหม่
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
memory.chat_memory.add_user_message("hi!")
memory.chat_memory.add_ai_message("what's up?")
- หมายเหตุ: LangChain ให้บริการคอมโพเนนต์ความจำต่างๆ ใช้งานได้โดยคล้ายกัน
ต่อมา จะดูว่าในการใช้คอมโพเนนต์ความจำในเชนเช่นไร ด้านล่างนี้เราจะแนะนำว่า LLM และ ChatModel จะทำอย่างไรในการใช้คอมโพเนนต์ความจำ
ตัวอย่างการใช้ LLM ใช้งานส่วนปรโมทของ LangChain Component
from langchain_openai import OpenAI
from langchain_core.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.memory import ConversationBufferMemory
llm = OpenAI(temperature=0)
template = """You are a great chatbot having a conversation with a human.
Previous conversation:
{chat_history}
New question: {question}
AI's answer:"""
prompt = PromptTemplate.from_template(template)
memory = ConversationBufferMemory(memory_key="chat_history")
conversation = LLMChain(
llm=llm,
prompt=prompt,
verbose=True,
memory=memory
)
conversation({"question": "hi"})
from langchain_openai import ChatOpenAI
from langchain.prompts import (
ChatPromptTemplate,
MessagesPlaceholder,
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
)
from langchain.chains import LLMChain
from langchain.memory import ConversationBufferMemory
llm = ChatOpenAI()
prompt = ChatPromptTemplate(
messages=[
SystemMessagePromptTemplate.from_template(
"คุณคือแชทบอทที่น่ารักที่กำลังสนทนากับมนุษย์"
),
MessagesPlaceholder(variable_name="chat_history"),
HumanMessagePromptTemplate.from_template("{question}")
]
)
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
conversation = LLMChain(
llm=llm,
prompt=prompt,
verbose=True,
memory=memory
)
conversation({"question": "สวัสดี"})