ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်
ဒီ 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 နမူနာ
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 ကြည့်ပါ
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 ကို အစားထိုးသုံးသင့်သည်။