ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်
Part 1 မှာ ဆောက်ခဲ့တဲ့ RetrievalQA chain ဟာ မေးခွန်းတစ်ခုချင်းစီကို သီးခြားစီပဲ ကိုင်တွယ်တဲ့အတွက် "အဲဒါနဲ့ ပတ်သက်ပြီး ထပ်ရှင်းပြပါ" လို့ follow-up မေးလိုက်ရင် context မရှိတော့ပါ။ ဒီ Part 2 မှာတော့ Intermediate chapter မှာ သင်ခဲ့တဲ့ Memory concept ကို အသုံးပြုပြီး chatbot ကို conversational RAG chain အဖြစ် အဆင့်မြှင့်ပါမယ်။ ConversationBufferMemory ကို chat_history အဖြစ် သုံးပြီး ConversationalRetrievalChain ဆောက်ခြင်းဖြင့် user ရဲ့ ယခင်မေးခွန်း/အဖြေတွေကို memory ထဲ သိမ်းထားနိုင်ပါတယ်။ ရလဒ်အနေနဲ့ user တစ်ယောက်ဟာ document ထဲက အကြောင်းအရာတစ်ခုအကြောင်း အဆင့်ဆင့် ဆွေးနွေးသလို မေးနိုင်တော့မှာ ဖြစ်ပါတယ်။ ဒီအဆင့်ကို ပြီးရင် Part 3 မှာ agent tool ထည့်သွားမှာဖြစ်ပါတယ်။
လက်တွေ့ ဆောက်ကြည့်မယ်
Part 1 က vectorstore/retriever ကို ပြန်သုံးပါ။ ConversationBufferMemory(memory_key="chat_history", return_messages=True) တစ်ခု ဖန်တီးပါ။ RetrievalQA အစား ConversationalRetrievalChain.from_llm(llm, retriever, memory=memory) ဖြင့် chain အသစ် ဆောက်ပါ။ "LangChain ဆိုတာဘာလဲ?" ဆိုတဲ့ မေးခွန်းအရင် မေးပြီး၊ ဒုတိယအနေနဲ့ "အဲဒါနဲ့ ပတ်သက်ပြီး ဥပမာတစ်ခု ပေးပါ" ဆိုတဲ့ follow-up ကို memory ကိုးကားပြီး မှန်ကန်စွာ ဖြေနိုင်မလား စမ်းသပ်ပါ။ chain.invoke() ရဲ့ ရလဒ်ကို print လုပ်ပြီး chat_history ဘယ်လို update ဖြစ်သွားလဲ observe လုပ်ကြည့်ပါ။
Code နမူနာ
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationalRetrievalChain
# Part 1 ကနေ vectorstore/retriever ကို ပြန်အသုံးပြု
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
# Conversation memory တစ်ခု ဖန်တီး
memory = ConversationBufferMemory(
memory_key="chat_history", return_messages=True
)
# Memory ပါတဲ့ conversational RAG chain ဆောက်
conv_chain = ConversationalRetrievalChain.from_llm(
llm=llm,
retriever=retriever,
memory=memory,
)
# ပထမ မေးခွန်း
r1 = conv_chain.invoke({"question": "LangChain ဆိုတာဘာလဲ?"})
print("Answer 1:", r1["answer"])
# Follow-up မေးခွန်း (context ကို memory ကနေ ယူသုံးမည်)
r2 = conv_chain.invoke({"question": "အဲဒါနဲ့ ပတ်သက်ပြီး ဥပမာတစ်ခု ပေးပါ"})
print("Answer 2:", r2["answer"])
Chatbot ဟာ ဒုတိယမေးခွန်းမှာ 'အဲဒါ' ဆိုတာ ဘာကို ရည်ညွှန်းလဲဆိုတာကို memory ထဲက ပထမမေးခွန်း/အဖြေကို ကိုးကားပြီး နားလည်စွာ ဖြေနိုင်မည်။၅ မိနစ် စမ်းကြည့်
5 မိနစ်အတွင်း Part 1 ရဲ့ document ထဲက အကြောင်းအရာတစ်ခုနှင့် ပတ်သက်ပြီး follow-up မေးခွန်း 2 ခု ဆက်တိုက်မေးကြည့်ပြီး memory အလုပ်လုပ်ပုံကို confirm လုပ်ပါ။
သတိလေးတစ်ချက်
ConversationBufferMemory ဟာ history ကို အကုန်သိမ်းထားသောကြောင့် conversation ရှည်လာလေ token cost မြင့်လာနိုင်သည် - production မှာ ConversationSummaryMemory ကဲ့သို့ alternative များကို စဉ်းစားသင့်သည်။