ความจำ LLM

แอปพลิเคชันที่ใช้ LLM โดยทั่วไปมักมีอินเตอร์เฟซแชทที่คล้ายกับ WeChat คุณลักษณะสำคัญของกระบวนการสนทนา AI คือความสามารถในการอ้างถึงข้อมูลที่กล่าวถึงในการสนทนาก่อนหน้านี้ มีความสามารถในการจดจำคำพูดก่อนหน้าโดยไม่จำเป็นต้องทำซ้ำอีกครั้ง เหมือนกระบวนการสนทนาของมนุษย์ มนุษย์จะนำข้อมูลย้อนหลังมาอ้างอิงโดยอัตโนมัติ

ความสามารถในการจัดเก็บข้อมูลการสนทนาย้อนหลังในฟิลด์ LLM 通常ถูกเรียกว่า "ความจำ" คล้ายกับว่ามนุษย์มีความสามารถในการจดจำ LangChain ห่อหุ้มคอมโพเนนต์ฟังก์ชันความจำที่แตกต่างเอาไว้ สามารถใช้แยกออกหรือนำมารวมเข้าในเชนได้โดยไม่มีตุ๊บเท่าเชื่อม

คอมโพเนนต์ความจำจำเป็นต้องดำเนินการสองอย่างขั้นพื้นฐานได้แก่ การอ่านและการเขียน

สำหรับตอขของคอมโพเนนต์เชนของ LangChain หากคุณเปิดใช้คล้ายกับความจำ มันจะดําเนินการตามตรรกะโลจิกที่คล้ายกันดังนี้

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

กระบวนการดำเนินการความจำใน LangChain ถูกแสดงในไดอะแกรมด้านล่าง: Memory Process

การรวมคอมโพเนนต์ความจำเข้าสู่ระบบ

ก่อนที่จะใช้คอมโพเนนต์ความจำ คุณจำเป็นต้องพิจารณาคำถามสองข้อต่อไปนี้:

  • วิธีการจัดเก็บข้อมูลข้อความย้อนหลัง
  • วิธีการสอบถามข้อมูลข้อความย้อนหลัง

การจัดเก็บ: รายชื่อข้อความแชท

หากใช้โมเดลแชท ข้อมูลการสนทนาจะเป็นรายชื่อข้อความแชท 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": "สวัสดี"})