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

Exercises: RAG, Memory & Agents Practice

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

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

  • Exercises: RAG, Memory & Agents Practice ကို ကိုယ်တိုင် လေ့ကျင့်ကြည့်မယ်
  • သင်ခဲ့ပြီးသား skill တွေကို practice လုပ်ပြီး ခိုင်မာအောင်လုပ်မယ်
  • အမှားရှာ၊ ပြင်တတ်၊ ကိုယ်တိုင် check လုပ်တတ်မယ်

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

ဒီ exercise set ဟာ ပထမ exercise lesson ထက် ပိုပြီး challenging ဖြစ်ပြီး, Intermediate chapter က RAG/Memory concept တွေနှင့် Advanced chapter က Agents/Tools concept တွေကို ပေါင်းစပ်ကာ practice ပေးထားပါတယ်။ Task တွေဟာ embeddings/similarity search ကနေ စတင်ပြီး, conversational memory, နောက်ဆုံး custom tool ပါဝင်တဲ့ agent တည်ဆောက်ခြင်းအထိ တဖြည်းဖြည်း အဆင့်မြှင့်သွားပါတယ်။ ဒီ task တွေကို လက်တွေ့ ကိုယ်တိုင် run ကြည့်ခြင်းအားဖြင့် RAG pipeline တစ်ခုလုံးနှင့် agent decision-making logic ကို ပိုမိုနက်ရှိုင်းစွာ နားလည်လာနိုင်ပါလိမ့်မယ်။ Teaching အသစ် မပါဝင်ဘဲ, အရင် lesson တွေမှာ ရှင်းပြထားပြီးသား concept များကိုသာ practice လုပ်ရန် ရည်ရွယ်ထားပါသည်။

လေ့ကျင့်ခန်းများ

Task 1: fact 3-4 ကြောင်းပါသော custom text တစ်ခုကို embed လုပ်ပြီး similarity_search() ဖြင့် query တစ်ခုနှင့် အနီးဆုံး chunk ကို ရှာကြည့်ပါ။ Task 2: RetrievalQA chain ကို ConversationBufferMemory နှင့် ချိတ်ဆက်ပြီး follow-up မေးခွန်း 2 ခုကို ဆက်တိုက် မေးကြည့်ပါ။ Task 3: string တစ်ခုကို reverse ပြန်ပေးတဲ့ (သို့) စာလုံးရေတွက်ပေးတဲ့ custom Tool တစ်ခုကို Tool() ဖြင့် wrap ပြီး ဖန်တီးပါ။ Task 4: document retrieval tool နှင့် Task 3 ရဲ့ custom tool ကို tool 2 ခုစလုံးထည့်ပြီး agent တစ်ခု initialize လုပ်ကာ, verbose=True ထားပြီး agent ဘယ် tool ကို ဘယ်အချိန်တွင် ရွေးချယ်သုံးမလဲဆိုတာ log ထဲက observe လုပ်ကြည့်ပါ။

Code နမူနာ

python
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationalRetrievalChain
from langchain.agents import Tool, initialize_agent, AgentType
from langchain_core.documents import Document

# Task 1: custom text ကို embed + similarity search
facts = [
    "LangChain သည် LLM application များ တည်ဆောက်ရန် framework တစ်ခုဖြစ်သည်။",
    "RAG သည် Retrieval-Augmented Generation ၏ အတိုကောက်ဖြစ်သည်။",
    "Vector store များသည် embeddings များကို သိမ်းဆည်းပြီး similarity search ပြုလုပ်သည်။",
]
docs = [Document(page_content=f) for f in facts]
vectorstore = Chroma.from_documents(docs, OpenAIEmbeddings())
# TODO: vectorstore.similarity_search("RAG ဆိုတာဘာလဲ?", k=1) ကို run ကြည့်ပါ

# Task 2: memory ပါသော conversational RAG
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
conv_chain = ConversationalRetrievalChain.from_llm(
    llm=llm, retriever=vectorstore.as_retriever(), memory=memory
)
# TODO: question 2 ခု ဆက်တိုက် invoke() လုပ်ကြည့်ပါ

# Task 3: custom tool
def reverse_text(text: str) -> str:
    return text[::-1]

reverse_tool = Tool(
    name="text_reverser",
    func=reverse_text,
    description="ပေးထားသော text ကို reverse ပြန်ပေးရန် အသုံးပြုပါ",
)

# Task 4: tool 2 ခုပါသော agent
document_tool = Tool(
    name="document_search",
    func=lambda q: conv_chain.invoke({"question": q})["answer"],
    description="Fact document ထဲက data နှင့် ပတ်သက်တဲ့ မေးခွန်းများကို ဖြေရန် အသုံးပြုပါ",
)
agent = initialize_agent(
    tools=[document_tool, reverse_tool],
    llm=llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True,
)
# TODO: agent.invoke({"input": "..."}) ကို tool နှစ်ခုစလုံး trigger ဖြစ်အောင် query 2 မျိုးနှင့် run ကြည့်ပါ
You should see
Task တစ်ခုစီပြီးတိုင်း similarity search result, memory-aware follow-up answer, နှင့် agent ၏ tool ရွေးချယ်မှု reasoning log ကို terminal ပေါ်တွင် တွေ့ရမည်။

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

5 မိနစ်အတွင်း Task 4 ရဲ့ agent ကို 'reverse the word LangChain' ဆိုတဲ့ query နှင့် 'RAG ဆိုတာဘာလဲ' ဆိုတဲ့ query နှစ်မျိုးဖြင့် run ပြီး agent က tool မှန်မှန် ရွေးချယ်သုံးမလား confirm လုပ်ပါ။

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

Agent ကို verbose=True ဖြင့် run ခြင်းသည် debug/learning အတွက်သာ အသင့်လျော်ဆုံးဖြစ်ပြီး, production မှာ log အလွန်များသွားနိုင်သဖြင့် LangSmith ကဲ့သို့ structured tracing tool ကို အစားထိုးသုံးသင့်သည်။

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

  • Similarity search အတွက် document အရေအတွက် နည်းလွန်းသောကြောင့် (fact 2-3 ကြောင်းသာ) k value ကို document အရေအတွက်ထက် ကြီးအောင် သတ်မှတ်မိပြီး error တက်တတ်သည်
  • Custom tool ရဲ့ function ကို argument တစ်ခုတည်းသာ လက်ခံအောင် ရေးထားရာမှ agent က multiple argument ဖြင့် ခေါ်မိသဖြင့် TypeError ဖြစ်တတ်သည်

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

5 မိနစ်အတွင်း Task 4 ရဲ့ agent ကို 'reverse the word LangChain' ဆိုတဲ့ query နှင့် 'RAG ဆိုတာဘာလဲ' ဆိုတဲ့ query နှစ်မျိုးဖြင့် run ပြီး agent က tool မှန်မှန် ရွေးချယ်သုံးမလား confirm လုပ်ပါ။

You'll know it worked when: Task တစ်ခုစီပြီးတိုင်း similarity search result, memory-aware follow-up answer, နှင့် agent ၏ tool ရွေးချယ်မှု reasoning log ကို terminal ပေါ်တွင် တွေ့ရမည်။

Exercises: RAG, Memory & Agents Practice | Thuta Learning