Thuta Learning
ရှာဖွေရန်
ProjectsAIadvanced

Mini Project: Document Chatbot – Part 2 (Memory ထည့်သွင်းခြင်း)

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Mini Project: Document Chatbot – Part 2 (Memory ထည့်သွင်းခြင်း) ကို လက်တွေ့ project ထဲမှာ အသုံးချတတ်မယ်
  • ကိုယ်တိုင် code ရေးပြီး run ကြည့်တတ်မယ်
  • Project တစ်ခုလုံးကို အဆင့်လိုက် ဆောက်တတ်မယ်

ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်

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 နမူနာ

python
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"])
You should see
Chatbot ဟာ ဒုတိယမေးခွန်းမှာ 'အဲဒါ' ဆိုတာ ဘာကို ရည်ညွှန်းလဲဆိုတာကို memory ထဲက ပထမမေးခွန်း/အဖြေကို ကိုးကားပြီး နားလည်စွာ ဖြေနိုင်မည်။

၅ မိနစ် စမ်းကြည့်

5 မိနစ်အတွင်း Part 1 ရဲ့ document ထဲက အကြောင်းအရာတစ်ခုနှင့် ပတ်သက်ပြီး follow-up မေးခွန်း 2 ခု ဆက်တိုက်မေးကြည့်ပြီး memory အလုပ်လုပ်ပုံကို confirm လုပ်ပါ။

သတိလေးတစ်ချက်

ConversationBufferMemory ဟာ history ကို အကုန်သိမ်းထားသောကြောင့် conversation ရှည်လာလေ token cost မြင့်လာနိုင်သည် - production မှာ ConversationSummaryMemory ကဲ့သို့ alternative များကို စဉ်းစားသင့်သည်။

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • memory_key နာမည် (chat_history) ကို chain ရဲ့ prompt template မှာ သုံးထားတဲ့ variable name နှင့် မကိုက်ညီဘဲ KeyError တက်တတ်သည်
  • Session သစ်တိုင်းအတွက် memory object ကို reset မလုပ်ဘဲ ပြန်သုံးမိသဖြင့် user အဟောင်းရဲ့ context ကို user အသစ်နှင့် ရောထွေးမိတတ်သည်

အခု ကိုယ်တိုင် စမ်းကြည့်

5 မိနစ်အတွင်း Part 1 ရဲ့ document ထဲက အကြောင်းအရာတစ်ခုနှင့် ပတ်သက်ပြီး follow-up မေးခွန်း 2 ခု ဆက်တိုက်မေးကြည့်ပြီး memory အလုပ်လုပ်ပုံကို confirm လုပ်ပါ။

You'll know it worked when: Chatbot ဟာ ဒုတိယမေးခွန်းမှာ 'အဲဒါ' ဆိုတာ ဘာကို ရည်ညွှန်းလဲဆိုတာကို memory ထဲက ပထမမေးခွန်း/အဖြေကို ကိုးကားပြီး နားလည်စွာ ဖြေနိုင်မည်။

Mini Project: Document Chatbot – Part 2 (Memory ထည့်သွင်းခြင်း) | Thuta Learning