diff --git a/.github/workflows/build_documentation.yml b/.github/workflows/build_documentation.yml index 45ebccee..2500330a 100644 --- a/.github/workflows/build_documentation.yml +++ b/.github/workflows/build_documentation.yml @@ -14,6 +14,6 @@ jobs: package_name: agents-course path_to_docs: agents-course/units/ additional_args: --not_python_module - languages: en zh-CN ru-RU vi es ko fr + languages: en zh-CN ru-RU vi es ko fr my secrets: hf_token: ${{ secrets.HF_DOC_BUILD_PUSH }} diff --git a/.github/workflows/build_pr_documentation.yml b/.github/workflows/build_pr_documentation.yml index 1c58b7ca..cc812df2 100644 --- a/.github/workflows/build_pr_documentation.yml +++ b/.github/workflows/build_pr_documentation.yml @@ -17,4 +17,4 @@ jobs: package_name: agents-course path_to_docs: agents-course/units/ additional_args: --not_python_module - languages: en zh-CN ru-RU vi es ko fr + languages: en zh-CN ru-RU vi es ko fr my diff --git a/units/my/_toctree.yml b/units/my/_toctree.yml new file mode 100644 index 00000000..a178c7fc --- /dev/null +++ b/units/my/_toctree.yml @@ -0,0 +1,172 @@ +- title: Unit 0. Welcome to the course + sections: + - local: unit0/introduction + title: သင်တန်းမှ နွေးထွေးစွာ ကြိုဆိုပါတယ်။ 🤗 + - local: unit0/onboarding + title: စတင်မိတ်ဆက်ခြင်း (Onboarding) + - local: unit0/discord101 + title: (ရွေးချယ်နိုင်သော) Discord အသုံးပြုနည်း အခြေခံ +- title: Live 1. How the course works and Q&A + sections: + - local: communication/live1 + title: Live 1. သင်တန်း ဘယ်လိုအလုပ်လုပ်သလဲ နှင့် အမေးအဖြေကဏ္ဍ +- title: Unit 1. Introduction to Agents + sections: + - local: unit1/introduction + title: မိတ်ဆက် + - local: unit1/what-are-agents + title: Agent ဆိုတာ ဘာလဲ? + - local: unit1/quiz1 + title: အမြန် စစ်ဆေးမေးခွန်း ၁ + - local: unit1/what-are-llms + title: LLM များဆိုတာ ဘာလဲ? + - local: unit1/messages-and-special-tokens + title: Message များနှင့် အထူး Token များ + - local: unit1/tools + title: Tool များဆိုတာ ဘာလဲ? + - local: unit1/quiz2 + title: အမြန် စစ်ဆေးမေးခွန်း ၂ + - local: unit1/agent-steps-and-structure + title: "စဉ်းစားခြင်း-လုပ်ဆောင်ခြင်း-လေ့လာခြင်း သံသရာ" မှတစ်ဆင့် AI Agent များကို နားလည်ခြင်း + - local: unit1/thoughts + title: Thought (စဉ်းစားတွေးခေါ်ခြင်း)၊ အတွင်းပိုင်း ဆင်ခြင်သုံးသပ်ခြင်းနှင့် Re-Act နည်းလမ်း + - local: unit1/actions + title: Actions (လုပ်ဆောင်ချက်များ) - Agent ကို ပတ်ဝန်းကျင်နှင့် ထိတွေ့ဆက်ဆံစေခြင်း + - local: unit1/observations + title: Observe (လေ့လာခြင်း) - ပြန်လည်သုံးသပ်ရန်နှင့် ပြုပြင်ပြောင်းလဲရန် တုံ့ပြန်ချက်များကို ပေါင်းစပ်ခြင်း + - local: unit1/dummy-agent-library + title: Dummy Agent Library (စမ်းသပ်သုံး Library) + - local: unit1/tutorial + title: smolagents ကိုသုံးပြီး ကျွန်တော်တို့ရဲ့ ပထမဆုံး Agent ကို ဖန်တီးကြစို့ + - local: unit1/final-quiz + title: Unit 1 နောက်ဆုံး စစ်ဆေးမေးခွန်း + - local: unit1/conclusion + title: နိဂုံးချုပ် +- title: Unit 2. Frameworks for AI Agents + sections: + - local: unit2/introduction + title: AI Agent များအတွက် Framework များ +- title: Unit 2.1 The smolagents framework + sections: + - local: unit2/smolagents/introduction + title: smolagents မိတ်ဆက် + - local: unit2/smolagents/why_use_smolagents + title: smolagents ကို ဘာကြောင့် သုံးသင့်တာလဲ? + - local: unit2/smolagents/quiz1 + title: အမြန် စစ်ဆေးမေးခွန်း ၁ + - local: unit2/smolagents/code_agents + title: Code အသုံးပြုသော Agent များကို တည်ဆောက်ခြင်း + - local: unit2/smolagents/tool_calling_agents + title: လုပ်ဆောင်ချက်များကို Code သို့မဟုတ် JSON အဖြစ် ရေးသားခြင်း + - local: unit2/smolagents/tools + title: Tool များ + - local: unit2/smolagents/retrieval_agents + title: Retrieval Agent များ (အချက်အလက် ရှာဖွေပေးသော Agent များ) + - local: unit2/smolagents/quiz2 + title: အမြန် စစ်ဆေးမေးခွန်း ၂ + - local: unit2/smolagents/multi_agent_systems + title: Multi-Agent စနစ်များ (Agent အများအပြားပါဝင်သော စနစ်များ) + - local: unit2/smolagents/vision_agents + title: Vision နှင့် Browser Agent များ + - local: unit2/smolagents/final_quiz + title: နောက်ဆုံး စစ်ဆေးမေးခွန်း + - local: unit2/smolagents/conclusion + title: နိဂုံးချုပ် +- title: Unit 2.2 The LlamaIndex framework + sections: + - local: unit2/llama-index/introduction + title: LlamaIndex မိတ်ဆက် + - local: unit2/llama-index/llama-hub + title: LlamaHub မိတ်ဆက် + - local: unit2/llama-index/components + title: LlamaIndex ထဲက Component တွေဆိုတာ ဘာလဲ? + - local: unit2/llama-index/tools + title: LlamaIndex တွင် Tool များ အသုံးပြုခြင်း + - local: unit2/llama-index/quiz1 + title: အမြန် စစ်ဆေးမေးခွန်း ၁ + - local: unit2/llama-index/agents + title: LlamaIndex တွင် Agent များ အသုံးပြုခြင်း + - local: unit2/llama-index/workflows + title: LlamaIndex တွင် Agentic Workflow များ ဖန်တီးခြင်း + - local: unit2/llama-index/quiz2 + title: အမြန် စစ်ဆေးမေးခွန်း ၂ + - local: unit2/llama-index/conclusion + title: နိဂုံးချုပ် +- title: Unit 2.3 The LangGraph framework + sections: + - local: unit2/langgraph/introduction + title: LangGraph မိတ်ဆက် + - local: unit2/langgraph/when_to_use_langgraph + title: LangGraph ဆိုတာ ဘာလဲ? + - local: unit2/langgraph/building_blocks + title: LangGraph ၏ အခြေခံ အစိတ်အပိုင်းများ + - local: unit2/langgraph/first_graph + title: သင်၏ ပထမဆုံး LangGraph ကို တည်ဆောက်ခြင်း + - local: unit2/langgraph/document_analysis_agent + title: စာရွက်စာတမ်း ခွဲခြမ်းစိတ်ဖြာမှု Graph + - local: unit2/langgraph/quiz1 + title: အမြန် စစ်ဆေးမေးခွန်း ၁ + - local: unit2/langgraph/conclusion + title: နိဂုံးချုပ် +- title: Unit 3. Use Case for Agentic RAG + sections: + - local: unit3/agentic-rag/introduction + title: Agentic RAG အသုံးပြုမှု မိတ်ဆက် + - local: unit3/agentic-rag/agentic-rag + title: Agentic RAG (Retrieval Augmented Generation) + - local: unit3/agentic-rag/invitees + title: ဧည့်သည်မှတ်တမ်းများအတွက် RAG Tool တစ်ခု ဖန်တီးခြင်း + - local: unit3/agentic-rag/tools + title: သင့် Agent အတွက် Tool များ တည်ဆောက်ခြင်းနှင့် ပေါင်းစပ်ခြင်း + - local: unit3/agentic-rag/agent + title: သင်၏ Gala Agent ကို ဖန်တီးခြင်း + - local: unit3/agentic-rag/conclusion + title: နိဂုံးချုပ် +- title: Unit 4. Final Project - Create, Test, and Certify Your Agent + sections: + - local: unit4/introduction + title: နောက်ဆုံး Unit မိတ်ဆက် + - local: unit4/what-is-gaia + title: GAIA ဆိုတာ ဘာလဲ? + - local: unit4/hands-on + title: နောက်ဆုံး လက်တွေ့စမ်းသပ်မှု + - local: unit4/get-your-certificate + title: သင်၏ Certificate of Excellence ကို ရယူပါ + - local: unit4/conclusion + title: သင်တန်း နိဂုံးချုပ် + - local: unit4/additional-readings + title: အခု ဘာဆက်လေ့လာသင့်သလဲ? +- title: Bonus Unit 1. Fine-tuning an LLM for Function-calling + sections: + - local: bonus-unit1/introduction + title: မိတ်ဆက် + - local: bonus-unit1/what-is-function-calling + title: Function Calling ဆိုတာ ဘာလဲ? + - local: bonus-unit1/fine-tuning + title: Function-calling အတွက် သင့်မော်ဒယ်ကို Fine-Tune လုပ်ကြစို့ + - local: bonus-unit1/conclusion + title: နိဂုံးချုပ် +- title: Bonus Unit 2. Agent Observability and Evaluation + sections: + - local: bonus-unit2/introduction + title: မိတ်ဆက် + - local: bonus-unit2/what-is-agent-observability-and-evaluation + title: Agent Observability နဲ့ Evaluation ဆိုတာ ဘာလဲ? + - local: bonus-unit2/monitoring-and-evaluating-agents-notebook + title: Agent များကို စောင့်ကြည့်ခြင်းနှင့် အကဲဖြတ်ခြင်း + - local: bonus-unit2/quiz + title: စစ်ဆေးမေးခွန်း +- title: Bonus Unit 3. Agents in Games with Pokemon + sections: + - local: bonus-unit3/introduction + title: မိတ်ဆက် + - local: bonus-unit3/state-of-art + title: ဂိမ်းများတွင် LLM အသုံးပြုမှု၏ နောက်ဆုံးပေါ် အခြေအနေ + - local: bonus-unit3/from-llm-to-agents + title: LLM များမှ AI Agent များဆီသို့ + - local: bonus-unit3/building_your_pokemon_agent + title: ကိုယ်ပိုင် Pokémon တိုက်ခိုက်ရေး Agent ကို တည်ဆောက်ခြင်း + - local: bonus-unit3/launching_agent_battle + title: သင်၏ Pokémon တိုက်ခိုက်ရေး Agent ကို စတင်လွှင့်တင်ခြင်း + - local: bonus-unit3/conclusion + title: နိဂုံးချုပ် \ No newline at end of file diff --git a/units/my/bonus-unit1/conclusion.mdx b/units/my/bonus-unit1/conclusion.mdx new file mode 100644 index 00000000..b82dff9f --- /dev/null +++ b/units/my/bonus-unit1/conclusion.mdx @@ -0,0 +1,13 @@ +# နိဂုံးချုပ် [[conclusion]] + +ဒီ ပထမဆုံး Bonus Unit ကို အောင်မြင်စွာ ပြီးဆုံးသွားတဲ့အတွက် ဂုဏ်ယူပါတယ် 🥳 + +သင်ဟာ **Function-calling ကို နားလည်ခြင်းနဲ့ သင့်ရဲ့ မော်ဒယ်ကို Function-calling လုပ်နိုင်အောင် ဘယ်လို Fine-tuning လုပ်ရမလဲ** ဆိုတာကို ကျွမ်းကျင်သွားပါပြီ! + +ဒီအချိန်မှာ ကျွန်တော်တို့ ပေးချင်တဲ့ အကြံဉာဏ်တစ်ခုကတော့ **မော်ဒယ်အမျိုးမျိုးကို Fine-tuning လုပ်ကြည့်ဖို့** ပါပဲ။ **လေ့လာဖို့ အကောင်းဆုံးနည်းလမ်းက လက်တွေ့ စမ်းသပ်ကြည့်ခြင်း** ပဲ ဖြစ်ပါတယ်။ (Machine Learning နယ်ပယ်မှာ လက်တွေ့လုပ်ဆောင်မှုဟာ သီအိုရီထက် ပိုအရေးကြီးပါတယ်)။ + +နောက်လာမယ့် Unit မှာတော့ **`smolagents`၊ `LlamaIndex` နဲ့ `LangGraph`** ကဲ့သို့သော ခေတ်မီဆုံး (State-of-the-art) Framework တွေကို ဘယ်လို အသုံးပြုရမလဲဆိုတာကို သင်ယူရမှာ ဖြစ်ပါတယ်။ (ဒီ Framework တွေက Agent တွေကို ပိုမိုစနစ်တကျနဲ့ လုံခြုံမှုရှိစွာ တည်ဆောက်ဖို့ ကူညီပေးပါလိမ့်မယ်။) + +နောက်ဆုံးအနေနဲ့၊ ဒီ Course နဲ့ပတ်သက်ပြီး **သင်ရဲ့ အမြင်တွေကို သိရှိလိုပြီး၊ ကျွန်တော်တို့ ဘယ်လို တိုးတက်အောင် လုပ်ဆောင်နိုင်မလဲ** ဆိုတာကို သိချင်ပါတယ်။ အကယ်၍ သင့်မှာ တုံ့ပြန်ချက် (Feedback) တွေ ရှိတယ်ဆိုရင်၊ ကျေးဇူးပြုပြီး 👉 [ဒီ Form ကို ဖြည့်ပေးပါ](https://docs.google.com/forms/d/e/1FAIpQLSe9VaONn0eglax0uTwi29rIn4tM7H2sYmmybmG5jJNlE5v0xA/viewform?usp=dialog) ။ + +### ဆက်လက်လေ့လာပါ၊ အမြဲတမ်း အကောင်းဆုံးဖြစ်ပါစေ 🤗 \ No newline at end of file diff --git a/units/my/bonus-unit1/fine-tuning.mdx b/units/my/bonus-unit1/fine-tuning.mdx new file mode 100644 index 00000000..d500974f --- /dev/null +++ b/units/my/bonus-unit1/fine-tuning.mdx @@ -0,0 +1,55 @@ +# Function-Calling အတွက် သင့် Model ကို Fine-Tune လုပ်ကြစို့ + +Function-Calling အတွက် ကျွန်တော်တို့ရဲ့ ပထမဆုံး Model ကို Fine-Tune လုပ်ဖို့ အခုဆိုရင် အသင့်ဖြစ်နေပါပြီ 🔥။ + +## Function-Calling အတွက် ကျွန်တော်တို့ရဲ့ Model ကို ဘယ်လို လေ့ကျင့်ပေးမလဲ။ + +> အဖြေ: ကျွန်တော်တို့ **ဒေတာ (Data)** လိုအပ်ပါတယ်။ + +Model တစ်ခုကို လေ့ကျင့်ပေးတဲ့ လုပ်ငန်းစဉ်ကို အဆင့် (၃) ဆင့် ခွဲခြားနိုင်ပါတယ်။ + +**၁။ ဒေတာ အမြောက်အမြားဖြင့် ကြိုတင်လေ့ကျင့်ခြင်း (Pre-training):** + +Model ကို ဒေတာ အမြောက်အမြားဖြင့် ကြိုတင်လေ့ကျင့်ပေးပါတယ်။ ဒီအဆင့်ရဲ့ ရလဒ်ကတော့ **Pre-trained Model (ကြိုတင်လေ့ကျင့်ပြီးသား မော်ဒယ်)** ပဲ ဖြစ်ပါတယ်။ ဥပမာအားဖြင့်၊ [google/gemma-2-2b](https://huggingface.co/google/gemma-2-2b) ကို ကြည့်ပါ။ ဒါဟာ အခြေခံ Model တစ်ခုဖြစ်ပြီး၊ **ခိုင်မာတဲ့ ညွှန်ကြားချက် လိုက်နာနိုင်စွမ်း မရှိဘဲ နောက်ထပ် Token ကို ခန့်မှန်းဖို့** လောက်သာ သိရှိပါသေးတယ်။ + +**၂။ ညွှန်ကြားချက် လိုက်နာရန် Fine-tuning လုပ်ခြင်း (Instruction-Tuning):** + +Chatting (စကားပြောဆိုမှု) ပတ်ဝန်းကျင်မှာ အသုံးဝင်ဖို့အတွက် Model ကို ညွှန်ကြားချက်များ လိုက်နာနိုင်အောင် **Fine-tune (အသေးစိတ် ချိန်ညှိ)** လုပ်ဖို့ လိုအပ်ပါတယ်။ ဒီအဆင့်ကို Model ဖန်တီးသူများ၊ Open-Source Community သို့မဟုတ် သင်ကိုယ်တိုင် လုပ်ဆောင်နိုင်ပါတယ်။ ဥပမာအားဖြင့်၊ [google/gemma-2-2b-it](https://huggingface.co/google/gemma-2-2b-it) ဟာ Gemma Project ကို ဖန်တီးတဲ့ Google Team က ညွှန်ကြားချက်ဖြင့် Fine-tune လုပ်ထားတဲ့ Model တစ်ခု ဖြစ်ပါတယ်။ + +**၃။ ဖန်တီးသူ၏ ဦးစားပေးမှုများနှင့် ကိုက်ညီအောင် ချိန်ညှိခြင်း (Alignment):** + +ဒီအဆင့်မှာတော့ Model ကို ဖန်တီးသူရဲ့ စိတ်ကြိုက် ဦးစားပေးမှုများနဲ့ ကိုက်ညီအောင် **Aligned (ချိန်ညှိ)** လုပ်ပါတယ်။ ဥပမာအားဖြင့်၊ Customer Service Chat Model တစ်ခုဟာ Customer တွေကို ဘယ်တော့မှ ရိုင်းရိုင်းစိုင်းစိုင်း မပြောရဘူးဆိုတဲ့ စည်းမျဉ်းမျိုးကို ထည့်သွင်း ချိန်ညှိတာမျိုး ဖြစ်ပါတယ်။ + +ပုံမှန်အားဖြင့် Gemini သို့မဟုတ် Mistral ကဲ့သို့သော ပြည့်စုံတဲ့ Product တွေဟာ **ဒီအဆင့် (၃) ဆင့်လုံးကို ဖြတ်သန်းရပါတယ်**။ Hugging Face မှာ သင်တွေ့နိုင်တဲ့ Model တွေကတော့ ဒီအဆင့်တွေထဲက တစ်ဆင့် သို့မဟုတ် တစ်ဆင့်ထက်ပိုပြီး ပြီးမြောက်ထားတဲ့ Model တွေ ဖြစ်ပါတယ်။ + +ဒီ Tutorial မှာတော့ ကျွန်တော်တို့ဟာ [google/gemma-2-2b-it](https://huggingface.co/google/gemma-2-2b-it) ကို အခြေခံပြီး Function-Calling Model တစ်ခုကို တည်ဆောက်သွားမှာပါ။ ကျွန်တော်တို့ဟာ အခြေခံ Model ဖြစ်တဲ့ [google/gemma-2-2b](https://huggingface.co/google/gemma-2-2b) အစား Fine-tune လုပ်ပြီးသား Model ဖြစ်တဲ့ [google/gemma-2-2b-it](https://huggingface.co/google/gemma-2-2b-it) ကို ရွေးချယ်ရခြင်းဟာ ဒီ Model က ကျွန်တော်တို့ရဲ့ အသုံးပြုမှုအတွက် ပိုမိုကောင်းမွန်အောင် ပြုပြင်ထားပြီးသား ဖြစ်လို့ပါ။ + +Pre-trained Model ကနေ စတင်မယ်ဆိုရင် **ညွှန်ကြားချက် လိုက်နာခြင်း၊ Chatting လုပ်ဆောင်နိုင်ခြင်းနဲ့ Function-Calling လုပ်ဆောင်နိုင်ခြင်း** တွေကို သင်ယူဖို့အတွက် **ပိုမိုများပြားတဲ့ လေ့ကျင့်မှုတွေ** လိုအပ်ပါလိမ့်မယ်။ + +Instruction-tuned Model ကနေ စတင်ခြင်းအားဖြင့် **ကျွန်တော်တို့ရဲ့ Model သင်ယူဖို့ လိုအပ်တဲ့ အချက်အလက် ပမာဏကို လျှော့ချနိုင်ပါတယ်**။ + +## LoRA (Low-Rank Adaptation of Large Language Models) + +LoRA ဟာ လူကြိုက်များပြီး အသုံးပြုရလွယ်ကူတဲ့ လေ့ကျင့်ရေး နည်းပညာတစ်ခုဖြစ်ပြီး၊ **လေ့ကျင့်ရမယ့် Parameter အရေအတွက်ကို သိသိသာသာ လျှော့ချပေးပါတယ်**။ + +ဒီနည်းလမ်းက Model ထဲကို **Adapter အဖြစ် အလေးချိန်အသစ် အနည်းငယ်ကို ထည့်သွင်းပြီး လေ့ကျင့်ပေးခြင်း** ဖြင့် အလုပ်လုပ်ပါတယ်။ ဒါကြောင့် LoRA နဲ့ လေ့ကျင့်ပေးတာဟာ ပိုမိုမြန်ဆန်ပြီး၊ Memory သုံးစွဲမှု သက်သာစေကာ၊ Model ရဲ့ အလေးချိန် (Weights) တွေဟာလည်း သေးငယ်ပါတယ် (MB အနည်းငယ်သာ)။ ဒါကြောင့် သိမ်းဆည်းဖို့နဲ့ မျှဝေဖို့ ပိုမိုလွယ်ကူပါတယ်။ + +LoRA inference + +LoRA ဟာ Transformer Layers တွေထဲကို Rank Decomposition Matrices များကို ထည့်သွင်းခြင်းဖြင့် အလုပ်လုပ်ပါတယ်။ အများအားဖြင့် Linear Layers တွေကို အာရုံစိုက်ပါတယ်။ လေ့ကျင့်နေစဉ်အတွင်းမှာ Model ရဲ့ ကျန်ရှိတဲ့ အစိတ်အပိုင်းတွေကို **"Freeze" (အေးခဲ)** ထားပြီး၊ အသစ်ထည့်သွင်းထားတဲ့ Adapter ရဲ့ အလေးချိန်တွေကိုသာ Update လုပ်သွားမှာ ဖြစ်ပါတယ်။ + +ဒီလိုလုပ်ဆောင်ခြင်းအားဖြင့် ကျွန်တော်တို့ လေ့ကျင့်ဖို့ လိုအပ်တဲ့ **Parameters အရေအတွက်** ဟာ သိသိသာသာ လျော့ကျသွားပါတယ်။ (Adapter ရဲ့ အလေးချိန်တွေကိုသာ Update လုပ်ဖို့ လိုအပ်လို့ပါ)။ + +**အချက်အလက် ထပ်မံဖြည့်စွက်ချက်:** LoRA ကို အသုံးပြုခြင်းကြောင့် GPU Memory သုံးစွဲမှုဟာ ပုံမှန် Fine-tuning လုပ်တာထက် **၁၀ ဆခန့်အထိ** သက်သာနိုင်ပါတယ်။ ဒါကြောင့် သာမန် ကွန်ပျူတာများမှာတောင် LLM များကို စမ်းသပ် Fine-tuning လုပ်နိုင်တဲ့ အခွင့်အရေးကို ရရှိစေပါတယ်။ + +Inference (ရလဒ်ထုတ်ယူခြင်း) လုပ်တဲ့အခါမှာတော့ Input ကို Adapter နဲ့ Base Model နှစ်ခုလုံးဆီ ပေးပို့ပါတယ်။ ဒါမှမဟုတ် ဒီ Adapter Weights တွေကို Base Model နဲ့ ပေါင်းစပ်လိုက်နိုင်တဲ့အတွက် နောက်ထပ် Latency (နှောင့်နှေးမှု) လုံးဝ မရှိဘဲ ရလဒ်ကို ထုတ်ပေးနိုင်ပါတယ်။ + +LoRA ဟာ **ကြီးမားတဲ့** Language Model တွေကို သီးခြား Tasks တွေ သို့မဟုတ် Domains တွေနဲ့ လိုက်လျောညီထွေဖြစ်အောင် ပြုပြင်ရာမှာ အထူးအသုံးဝင်ပြီး၊ Resource လိုအပ်ချက်တွေကို ထိန်းချုပ်နိုင်စေပါတယ်။ ဒါက Model တစ်ခုကို လေ့ကျင့်ဖို့ **လိုအပ်တဲ့ Memory** ကို လျှော့ချပေးပါတယ်။ + +LoRA ဘယ်လိုအလုပ်လုပ်လဲဆိုတာကို ပိုမိုနားလည်ချင်တယ်ဆိုရင်၊ [ဒီ Tutorial ကို လေ့လာကြည့်ရှုနိုင်ပါတယ်](https://huggingface.co/learn/nlp-course/chapter11/4?fw=pt) ။ + +## Function-Calling အတွက် Model ကို Fine-Tuning လုပ်ခြင်း + +Tutorial Notebook ကို 👉 [ဒီနေရာမှာ ဝင်ရောက်ကြည့်ရှုနိုင်ပါတယ်](https://huggingface.co/agents-course/notebooks/blob/main/bonus-unit1/bonus-unit1.ipynb) ။ + +ပြီးရင်တော့ Colab Notebook မှာ Run နိုင်ဖို့အတွက် [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/#fileId=https://huggingface.co/agents-course/notebooks/blob/main/bonus-unit1/bonus-unit1.ipynb) ကို Click နှိပ်လိုက်ပါ ။ \ No newline at end of file diff --git a/units/my/bonus-unit1/introduction.mdx b/units/my/bonus-unit1/introduction.mdx new file mode 100644 index 00000000..67cc1fbc --- /dev/null +++ b/units/my/bonus-unit1/introduction.mdx @@ -0,0 +1,63 @@ +# မိတ်ဆက် (Introduction) + +![Bonus Unit 1 Thumbnail](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/bonus-unit1/thumbnail.jpg) + +ဒီပထမဆုံး **အပိုဆောင်း အခန်း (Bonus Unit)** ကို ကြိုဆိုပါတယ်။ ဒီအခန်းမှာ သင်ဟာ **Function Calling အတွက် Large Language Model (LLM) တစ်ခုကို Fine-tune လုပ်နည်း** ကို လေ့လာရမှာ ဖြစ်ပါတယ်။ + +LLM တွေရဲ့ နည်းပညာနယ်ပယ်မှာ Function Calling ဟာ လျင်မြန်စွာနဲ့ **မဖြစ်မနေ သိထားရမယ့် နည်းလမ်း** တစ်ခု ဖြစ်လာနေပါတယ်။ + +ဒီနည်းလမ်းရဲ့ အဓိက အယူအဆကတော့ အခန်း (၁) မှာ လုပ်ခဲ့သလို Prompt ကိုသာ အားကိုးတဲ့ နည်းလမ်းတွေအပြင်၊ သင့်ရဲ့ မော်ဒယ်ကို **လေ့ကျင့်ရေး အဆင့် (Training Phase) မှာတင် လုပ်ဆောင်ချက်များ (Actions) ကို ယူဖို့နဲ့ ပတ်ဝန်းကျင်ရဲ့ တုံ့ပြန်ချက်များ (Observations) ကို နားလည်အောင်** လေ့ကျင့်ပေးခြင်းပဲ ဖြစ်ပါတယ်။ ဒီလိုလုပ်ခြင်းအားဖြင့် သင့်ရဲ့ AI ဟာ ပိုမို ခိုင်မာပြီး စွမ်းဆောင်ရည် မြင့်မားလာပါမယ်။ + +> **ဒီ Bonus Unit ကို ဘယ်အချိန်မှာ လုပ်သင့်သလဲ?** +> +> ဒီအပိုင်းဟာ **မဖြစ်မနေ လုပ်ဆောင်ရန် မလိုအပ်တဲ့ (Optional)** အပိုင်းဖြစ်ပြီး၊ အခန်း (၁) ထက် ပိုမို အဆင့်မြင့်ပါတယ်။ ဒါကြောင့် ဒီအခန်းကို အခုပဲ လုပ်ဆောင်မလား၊ ဒါမှမဟုတ် ဒီ Course ကနေ အသိပညာတွေ တိုးတက်လာတဲ့အခါမှ ပြန်လာပြီး လေ့လာမလားဆိုတာကို သင်ကိုယ်တိုင် ဆုံးဖြတ်နိုင်ပါတယ်။ +> +> ဒါပေမယ့် စိတ်မပူပါနဲ့၊ ဒီ Bonus Unit ကို သင်ဟာ Fine-tuning ရဲ့ အတွင်းပိုင်း လုပ်ဆောင်ပုံတွေကို မသိသေးရင်တောင် Function Calling အတွက် မော်ဒယ်တစ်ခုကို Fine-tuning လုပ်တဲ့ အခြေခံ သဘောတရားတွေ အားလုံးကို လိုက်နာနိုင်အောင် ရေးဆွဲထားပါတယ်။ + +ဒီ Bonus Unit ကို အကောင်းဆုံး လိုက်နာနိုင်ဖို့အတွက် သင်သိထားသင့်တဲ့ အချက်တွေကတော့- + +1. **Transformers Library** ကို အသုံးပြုပြီး LLM တစ်ခုကို Fine-Tune လုပ်နည်းကို သိထားဖို့ လိုပါတယ်။ မသိသေးဘူးဆိုရင် [ဒီနေရာမှာ စစ်ဆေးလေ့လာနိုင်ပါတယ်](https://huggingface.co/learn/nlp-course/chapter3/1?fw=pt)။ +2. ကျွန်တော်တို့ရဲ့ မော်ဒယ်ကို Fine-tune လုပ်ဖို့အတွက် **`SFTTrainer`** ကို ဘယ်လို အသုံးပြုရမယ်ဆိုတာကို သိထားဖို့ လိုပါတယ်။ ပိုမိုသိရှိလိုပါက [ဒီ Documentation ကို ကြည့်ရှုနိုင်ပါတယ်](https://huggingface.co/learn/nlp-course/en/chapter11/1)။ + +--- + +## သင်ယူရမည့် အကြောင်းအရာများ (What You’ll Learn) + +ဒီအခန်းမှာ အောက်ပါ အဓိက အကြောင်းအရာများကို လေ့လာသွားပါမယ်။ + +### ၁။ Function Calling (Function ခေါ်ဆိုခြင်း) + +ခေတ်မီ LLM များသည် ၎င်းတို့၏ စကားပြောဆိုမှုများကို စနစ်တကျ ဖွဲ့စည်းပုံချခြင်းဖြင့် **Tools များ** ကို ထိရောက်စွာ အစပျိုး (Trigger) စေနိုင်ပုံကို လေ့လာပါမယ်။ (Function Calling ဆိုတာ LLM က သူ့ရဲ့ စကားပြောဆိုမှုထဲမှာ "ငါ အခု ဒီ Tool ကို သုံးမယ်" လို့ ပြောပြီး၊ အဲဒီ Tool ကို ခေါ်သုံးလိုက်တာမျိုး ဖြစ်ပါတယ်။) + +### ၂။ LoRA (Low-Rank Adaptation) + +**ပေါ့ပါးပြီး ထိရောက်တဲ့** Fine-tuning နည်းလမ်းတစ်ခုဖြစ်တဲ့ LoRA ကို လေ့လာပါမယ်။ LoRA ဟာ တွက်ချက်မှုဆိုင်ရာ ကုန်ကျစရိတ်နဲ့ သိုလှောင်မှုဆိုင်ရာ ဝန်ပိမှုတွေကို လျှော့ချပေးပါတယ်။ LoRA ကြောင့် မော်ဒယ်ကြီးတွေကို လေ့ကျင့်ပေးတာဟာ **ပိုမိုမြန်ဆန်၊ စရိတ်သက်သာပြီး အသုံးချဖို့ ပိုမိုလွယ်ကူ** လာပါတယ်။ (LoRA ဟာ မော်ဒယ်တစ်ခုလုံးကို ပြန်လေ့ကျင့်စရာမလိုဘဲ အရေးကြီးတဲ့ အစိတ်အပိုင်းလေးတွေကိုပဲ ချိန်ညှိပေးတာကြောင့် အချိန်နဲ့ စွမ်းအင်ကို သက်သာစေပါတယ်။) + +### ၃။ Function Calling မော်ဒယ်များတွင် **Thought → Act → Observe Cycle** + +သင့်ရဲ့ မော်ဒယ်က Functions တွေကို ဘယ်အချိန်မှာ (ဘယ်လို) ခေါ်ဆိုရမယ်၊ ကြားခံအဆင့်တွေကို ဘယ်လို မှတ်တမ်းတင်ရမယ်၊ ပြင်ပ Tools သို့မဟုတ် API များမှ ရလဒ်တွေကို ဘယ်လို နားလည်ရမယ်ဆိုတာကို ပုံစံချပေးတဲ့ ရိုးရှင်းပြီး အစွမ်းထက်တဲ့ ချဉ်းကပ်မှုတစ်ခု ဖြစ်ပါတယ်။ + +* **Thought (စဉ်းစားခြင်း):** မော်ဒယ်က နောက်လုပ်ရမယ့် အဆင့်ကို စဉ်းစားတယ်။ +* **Act (လုပ်ဆောင်ခြင်း):** စဉ်းစားပြီးတဲ့အတိုင်း Tool ကို ခေါ်ဆိုပြီး လုပ်ဆောင်ချက် ယူတယ်။ +* **Observe (လေ့လာခြင်း):** Tool ကနေ ပြန်လာတဲ့ ရလဒ် (Observation) ကို လက်ခံရယူပြီး နောက်ထပ် ဆုံးဖြတ်ချက်အတွက် အသုံးပြုတယ်။ + +### ၄။ အထူး Token အသစ်များ (New Special Tokens) + +မော်ဒယ်ကို အောက်ပါ အချက်များအကြား ခွဲခြားသိမြင်နိုင်စေရန် ကူညီပေးမည့် **အထူး သင်္ကေတများ (Special Markers)** ကို မိတ်ဆက်ပေးပါမယ်။ + +* အတွင်းပိုင်း **"အတွေးဆက်တိုက် ဆင်ခြင်သုံးသပ်မှု" (Internal “chain-of-thought” reasoning)** +* ပြင်ပသို့ ထွက်သွားသော **Function ခေါ်ဆိုမှုများ (Outgoing function calls)** +* ပြင်ပ Tools များမှ ပြန်လာသော **တုံ့ပြန်ချက်များ (Responses coming back from external tools)** + +--- + +ဒီ Bonus Unit ရဲ့ အဆုံးမှာ သင်ဟာ အောက်ပါတို့ကို လုပ်ဆောင်နိုင်မှာ ဖြစ်ပါတယ်။ + +* Tools များနှင့် ပတ်သက်၍ API များ၏ အတွင်းပိုင်း လုပ်ဆောင်ပုံကို **နားလည်ခြင်း**။ +* LoRA နည်းလမ်းကို အသုံးပြုပြီး မော်ဒယ်တစ်ခုကို **Fine-tune လုပ်ခြင်း**။ +* ခိုင်မာပြီး ထိန်းသိမ်းရလွယ်ကူသော Function-calling Workflow များကို ဖန်တီးရန် **Thought → Act → Observe Cycle** ကို **အကောင်အထည်ဖော်ခြင်းနှင့် ပြုပြင်မွမ်းမံခြင်း**။ +* မော်ဒယ်၏ အတွင်းပိုင်း ဆင်ခြင်သုံးသပ်မှုနှင့် ပြင်ပ လုပ်ဆောင်ချက်များကို ချောမွေ့စွာ ခွဲခြားနိုင်ရန် အထူး Token များကို **ဒီဇိုင်းဆွဲပြီး အသုံးပြုခြင်း**။ + +ပြီးတော့ သင်ဟာ **Function Calling လုပ်နိုင်တဲ့ ကိုယ်ပိုင် မော်ဒယ်ကို Fine-tune လုပ်ပြီးသား** ဖြစ်ပါလိမ့်မယ်။ 🔥 + +Function Calling ကို စတင်လေ့လာလိုက်ရအောင်! \ No newline at end of file diff --git a/units/my/bonus-unit1/what-is-function-calling.mdx b/units/my/bonus-unit1/what-is-function-calling.mdx new file mode 100644 index 00000000..d1bdb4d9 --- /dev/null +++ b/units/my/bonus-unit1/what-is-function-calling.mdx @@ -0,0 +1,80 @@ +# Function Calling ဆိုတာ ဘာလဲ။ + +**Function-calling** ဆိုတာဟာ **LLM (Large Language Model) တစ်ခုက သူ့ရဲ့ ပတ်ဝန်းကျင်မှာ လုပ်ဆောင်ချက်တွေ လုပ်နိုင်ဖို့အတွက် အသုံးပြုတဲ့ နည်းလမ်းတစ်ခု** ဖြစ်ပါတယ်။ ဒီနည်းလမ်းကို ပထမဆုံးအနေနဲ့ [GPT-4 မှာ မိတ်ဆက်ခဲ့ပြီး](https://openai.com/index/function-calling-and-other-api-updates/)၊ နောက်ပိုင်းမှာ တခြားသော မော်ဒယ်တွေမှာပါ ထည့်သွင်းလာကြပါတယ်။ + +Agent တစ်ခုရဲ့ Tool တွေလိုပဲ၊ Function-calling ဟာလည်း မော်ဒယ်ကို **သူ့ပတ်ဝန်းကျင်မှာ လုပ်ဆောင်ချက်တစ်ခု လုပ်နိုင်တဲ့ စွမ်းရည်** ကို ပေးပါတယ်။ ဒါပေမဲ့၊ Function-calling စွမ်းရည်ကို **မော်ဒယ်ကိုယ်တိုင်က သင်ယူထားတာ** ဖြစ်ပြီး၊ တခြား Agent နည်းစနစ်တွေထက် **Prompting (ညွှန်ကြားချက်ပေးခြင်း) အပေါ် မှီခိုမှု နည်းပါးပါတယ်**။ + +Unit 1 မှာတုန်းက Agent ဟာ **Tool တွေကို ဘယ်လိုသုံးရမယ်ဆိုတာ သင်ယူခဲ့တာ မဟုတ်ပါဘူး**။ ကျွန်တော်တို့က Tool စာရင်းကို ပေးလိုက်ရုံပါပဲ။ မော်ဒယ်က ဒီ Tool တွေကို အသုံးပြုပြီး **အစီအစဉ်တစ်ခုကို ချမှတ်နိုင်တဲ့ ယေဘုယျစွမ်းရည် (Generalize)** အပေါ်မှာပဲ ကျွန်တော်တို့ မှီခိုခဲ့ရပါတယ်။ + +ဒီနေရာမှာတော့ **Function-calling နဲ့ဆိုရင် Agent ဟာ Tool တွေကို ဘယ်လိုသုံးရမယ်ဆိုတာကို Fine-tuning (လေ့ကျင့်ပေးခြင်း) လုပ်ထားတာ** ဖြစ်ပါတယ်။ + +## မော်ဒယ်က လုပ်ဆောင်ချက်ကို ဘယ်လို "သင်ယူ" သလဲ။ + +Unit 1 မှာတုန်းက Agent တစ်ခုရဲ့ အလုပ်လုပ်ပုံ အဆင့်ဆင့်ကို လေ့လာခဲ့ပြီးပါပြီ။ အသုံးပြုသူက Agent ကို Tool တွေ ပေးပြီး မေးခွန်းတစ်ခု မေးလိုက်တဲ့အခါ၊ မော်ဒယ်ဟာ အောက်ပါ အဆင့်တွေကို လည်ပတ်လုပ်ဆောင်ပါတယ်- + +1. ***စဉ်းစားခြင်း (Think)***: ရည်မှန်းချက်ကို ပြီးမြောက်ဖို့အတွက် ဘယ်လို လုပ်ဆောင်ချက် (Action) တွေ လုပ်ဖို့ လိုအပ်သလဲ။ +2. ***လုပ်ဆောင်ခြင်း (Act)***: မှန်ကန်တဲ့ Parameter တွေနဲ့ Action ကို ပုံစံချပြီး Token ထုတ်ပေးခြင်းကို ရပ်တန့်လိုက်တယ်။ +3. ***လေ့လာစောင့်ကြည့်ခြင်း (Observe)***: လုပ်ဆောင်ချက် ပြီးမြောက်ပြီးနောက် ရလဒ်ကို ပြန်လည်ရယူတယ်။ + +API မှတစ်ဆင့် မော်ဒယ်တစ်ခုနဲ့ "ပုံမှန်" စကားပြောဆိုတဲ့အခါ၊ စကားဝိုင်းဟာ အသုံးပြုသူ (User) နဲ့ လက်ထောက် (Assistant) ရဲ့ Message တွေအကြား အောက်ပါအတိုင်း အလှည့်ကျ ဖလှယ်လေ့ရှိပါတယ်- + +```python +conversation = [ + {"role": "user", "content": "ကျွန်တော့်ရဲ့ အော်ဒါနဲ့ပတ်သက်ပြီး အကူအညီလိုပါတယ်။"}, + {"role": "assistant", "content": "ကူညီပေးဖို့ ဝမ်းသာပါတယ်။ အော်ဒါနံပါတ်လေး ပေးနိုင်မလားခင်ဗျာ။"}, + {"role": "user", "content": "ORDER-123 ပါ။"}, +] +``` + +Function-calling ကတော့ **စကားဝိုင်းထဲကို Role အသစ်တွေ** ယူဆောင်လာပါတယ်။ + +1. **လုပ်ဆောင်ချက် (Action)** အတွက် Role အသစ်တစ်ခု +2. **လေ့လာစောင့်ကြည့်မှု (Observation)** အတွက် Role အသစ်တစ်ခု + +[Mistral API](https://docs.mistral.ai/capabilities/function_calling/) ကို ဥပမာအနေနဲ့ ကြည့်မယ်ဆိုရင် အောက်ပါအတိုင်း တွေ့ရပါမယ်- + +```python +conversation = [ + { + "role": "user", + "content": "ကျွန်တော့်ရဲ့ ငွေပေးချေမှု T1001 ရဲ့ အခြေအနေက ဘာလဲ။" + }, + { + "role": "assistant", + "content": "", + "function_call": { + "name": "retrieve_payment_status", # Tool ကို ခေါ်ဆိုခြင်း (Action) + "arguments": "{\"transaction_id\": \"T1001\"}" + } + }, + { + "role": "tool", # Tool မှ ပြန်လာသော ရလဒ် (Observation) + "name": "retrieve_payment_status", + "content": "{\"status\": \"Paid\"}" + }, + { + "role": "assistant", + "content": "သင့်ရဲ့ ငွေပေးချေမှု T1001 ကို အောင်မြင်စွာ ပေးချေပြီးပါပြီ။" + } +] +``` + +> ... ဒါပေမဲ့ Function Calls တွေအတွက် Role အသစ်ရှိတယ်လို့ ပြောခဲ့တာ မဟုတ်ဘူးလား? + +**ဟုတ်လည်း ဟုတ်တယ်၊ မဟုတ်လည်း မဟုတ်ပါဘူး။** ဒီဥပမာနဲ့ တခြား API အများစုမှာ၊ မော်ဒယ်က လုပ်ဆောင်ရမယ့် Action ကို "assistant" Message ပုံစံနဲ့ ပုံစံချပါတယ်။ Chat Template ကတော့ Function-calling အတွက် **အထူး Token များ** အဖြစ် ဒါကို ကိုယ်စားပြုပါတယ်။ + +* `[AVAILABLE_TOOLS]` – ရရှိနိုင်သော Tool များ စာရင်း စတင်ခြင်း +* `[/AVAILABLE_TOOLS]` – ရရှိနိုင်သော Tool များ စာရင်း ပြီးဆုံးခြင်း +* `[TOOL_CALLS]` – Tool တစ်ခုကို ခေါ်ဆိုခြင်း (ဆိုလိုသည်မှာ "Action" ယူခြင်း) +* `[TOOL_RESULTS]` – Action ၏ ရလဒ်ကို "လေ့လာစောင့်ကြည့်ခြင်း" +* `[/TOOL_RESULTS]` – လေ့လာစောင့်ကြည့်မှု ပြီးဆုံးခြင်း (ဆိုလိုသည်မှာ မော်ဒယ်က စာသားကို ပြန်လည်ထုတ်ပေးနိုင်ပြီ) + +**နောက်ထပ် သိထားသင့်တဲ့ အချက်:** Function-calling ဟာ မော်ဒယ်ကို Tool တွေရဲ့ **Schema (ဖွဲ့စည်းပုံ)** ကို ပေးလိုက်ရုံနဲ့၊ ဘယ်အချိန်မှာ ဘယ် Tool ကို သုံးရမယ်ဆိုတာကို **သူ့ဘာသာသူ ဆုံးဖြတ်နိုင်အောင်** လေ့ကျင့်ပေးထားတာ ဖြစ်ပါတယ်။ ဒါကြောင့် Prompt ထဲမှာ ရှည်လျားတဲ့ ညွှန်ကြားချက်တွေ ထည့်ပေးစရာ မလိုတော့ဘဲ ပိုမိုထိရောက်ပါတယ်။ + +ဒီ Course မှာ Function-calling အကြောင်းကို ထပ်မံ ဆွေးနွေးသွားမှာ ဖြစ်ပေမယ့်၊ ပိုမိုနက်ရှိုင်းစွာ လေ့လာချင်တယ်ဆိုရင် [ဒီအလွန်ကောင်းမွန်တဲ့ Documentation အပိုင်းကို](https://docs.mistral.ai/capabilities/function_calling/) ကြည့်ရှုနိုင်ပါတယ်။ + +--- + +Function-calling ဆိုတာ ဘာလဲ၊ ဘယ်လို အလုပ်လုပ်တယ်ဆိုတာကို သိရှိပြီးတဲ့နောက်မှာ၊ **Function-calling စွမ်းရည် မရှိသေးတဲ့ မော်ဒယ်တစ်ခုကို အဲဒီစွမ်းရည်တွေ ထည့်သွင်းပေးဖို့** လုပ်ဆောင်သွားပါမယ်။ ဥပမာအနေနဲ့ [google/gemma-2-2b-it](https://huggingface.co/google/gemma-2-2b-it) ကို အထူး Token အသစ်တွေ ထည့်သွင်းပြီး လုပ်ဆောင်ပါမယ်။ + +ဒီလိုလုပ်နိုင်ဖို့အတွက်၊ **ကျွန်တော်တို့ အရင်ဆုံး Fine-tuning နဲ့ LoRA အကြောင်းကို နားလည်ဖို့ လိုအပ်ပါတယ်**။ \ No newline at end of file diff --git a/units/my/bonus-unit2/introduction.mdx b/units/my/bonus-unit2/introduction.mdx new file mode 100644 index 00000000..00d6c434 --- /dev/null +++ b/units/my/bonus-unit2/introduction.mdx @@ -0,0 +1,37 @@ +# AI Agent စောင့်ကြည့်လေ့လာနိုင်မှုနှင့် အကဲဖြတ်ခြင်း (AI Agent Observability & Evaluation) + +![Bonus Unit 2 Thumbnail](https://langfuse.com/images/cookbook/huggingface-agent-course/agent-observability-and-evaluation.png) + +**Bonus Unit 2** မှ ကြိုဆိုပါတယ်။ ဒီအခန်းမှာတော့ သင့်ရဲ့ Agent တွေရဲ့ စွမ်းဆောင်ရည်ကို စောင့်ကြည့်လေ့လာဖို့၊ အကဲဖြတ်ဖို့နဲ့ နောက်ဆုံးမှာ တိုးတက်အောင် လုပ်ဆောင်ဖို့အတွက် အဆင့်မြင့် နည်းဗျူဟာတွေကို လေ့လာသွားပါမယ်။ + +--- + +## 📚 ဒီ Bonus Unit ကို ဘယ်အချိန်မှာ လုပ်သင့်သလဲ။ + +ဒီ Bonus Unit ဟာ အောက်ပါအခြေအနေတွေနဲ့ ကိုက်ညီသူတွေအတွက် အကောင်းဆုံး ဖြစ်ပါတယ်။ + +* **AI Agent များကို တည်ဆောက်ပြီး အသုံးချသူများ:** သင်တို့ရဲ့ Agent တွေဟာ လက်တွေ့ အသုံးပြုမှု (Production) မှာ ယုံကြည်စိတ်ချစွာ အလုပ်လုပ်နေကြောင်း သေချာစေလိုသူများ။ +* **အသေးစိတ် ထိုးထွင်းသိမြင်မှု လိုအပ်သူများ:** ပြဿနာများကို ရှာဖွေဖော်ထုတ်ရန်၊ စွမ်းဆောင်ရည်ကို အကောင်းဆုံးဖြစ်အောင် လုပ်ဆောင်ရန် သို့မဟုတ် Agent ရဲ့ အတွင်းပိုင်း လုပ်ဆောင်ပုံကို နားလည်လိုသူများ။ + * *(မှတ်ချက်- Agent တွေဟာ တစ်ခါတစ်ရံမှာ ဘာကြောင့် မှားယွင်းတဲ့ ဆုံးဖြတ်ချက်တွေ ချမှတ်သလဲဆိုတာကို သိဖို့အတွက် **Observability** က အရေးကြီးပါတယ်။)* +* **လုပ်ငန်းလည်ပတ်မှု ကုန်ကျစရိတ် လျှော့ချလိုသူများ:** Agent ရဲ့ Token အသုံးပြုမှု (ကုန်ကျစရိတ်)၊ နှောင့်နှေးမှု (Latency) နှင့် လုပ်ဆောင်မှု အသေးစိတ်များကို စောင့်ကြည့်ခြင်းဖြင့် Resource များကို ထိရောက်စွာ စီမံခန့်ခွဲနိုင်ပါတယ်။ +* **စဉ်ဆက်မပြတ် တိုးတက်မှုကို ရှာဖွေသူများ:** Real-time အသုံးပြုသူ တုံ့ပြန်ချက်နှင့် အလိုအလျောက် အကဲဖြတ်ခြင်းတို့ကို သင့်ရဲ့ AI Application များမှာ ပေါင်းစပ်ထည့်သွင်းလိုသူများ။ + +အတိုချုပ်ပြောရရင်၊ ကိုယ့်ရဲ့ Agent တွေကို အသုံးပြုသူတွေရှေ့ကို တင်ပြချင်သူတိုင်းအတွက် ဒီအခန်းဟာ မရှိမဖြစ် လိုအပ်ပါတယ်။ + +--- + +## 🤓 ဘာတွေ သင်ယူရမလဲ + +ဒီအခန်းမှာ သင်ယူရမယ့် အကြောင်းအရာများကတော့- + +* **Agent ကို စောင့်ကြည့်ရေး ကိရိယာများ တပ်ဆင်ခြင်း (Instrument Your Agent):** *smolagents* Framework နှင့် OpenTelemetry ကဲ့သို့သော စောင့်ကြည့်ရေး Tool များကို ပေါင်းစပ်နည်းကို လေ့လာပါ။ +* **Metrics များကို စောင့်ကြည့်ခြင်း (Monitor Metrics):** Token အသုံးပြုမှု (ကုန်ကျစရိတ်ကို တိုက်ရိုက်သက်ရောက်မှုရှိသည်)၊ နှောင့်နှေးမှု (Latency) နှင့် Error Traces ကဲ့သို့သော စွမ်းဆောင်ရည် ညွှန်းကိန်းများကို ခြေရာခံနည်း။ +* **Real-Time အကဲဖြတ်ခြင်း (Evaluate in Real-Time):** အသုံးပြုသူ တုံ့ပြန်ချက်များ စုဆောင်းခြင်းနှင့် **LLM-as-a-judge** (အကဲဖြတ်သူအဖြစ် LLM ကို အသုံးပြုခြင်း) ကဲ့သို့သော Live Evaluation နည်းစနစ်များကို နားလည်ခြင်း။ + * *(မှတ်ချက်- LLM-as-a-judge ဆိုသည်မှာ လူသားအကဲဖြတ်သူများအစား၊ အခြားသော စွမ်းဆောင်ရည်မြင့် LLM တစ်ခုကို အသုံးပြု၍ Agent ၏ အဖြေများ မှန်ကန်မှုရှိမရှိကို အလိုအလျောက် စစ်ဆေးစေခြင်း ဖြစ်ပါတယ်။)* +* **Offline ခွဲခြမ်းစိတ်ဖြာခြင်း (Offline Analysis):** Agent ၏ စွမ်းဆောင်ရည်ကို စမ်းသပ်နှိုင်းယှဉ်ရန်အတွက် Benchmark Dataset များ (ဥပမာ - GSM8K) ကို အသုံးပြုနည်း။ + +--- + +## 🚀 စတင်ရန် အသင့်ဖြစ်ပြီလား။ + +နောက်အပိုင်းမှာတော့ Agent စောင့်ကြည့်လေ့လာနိုင်မှု (Observability) နှင့် အကဲဖြတ်ခြင်း (Evaluation) ရဲ့ အခြေခံသဘောတရားများကို သင်ယူရပါမယ်။ ပြီးနောက်၊ ၎င်းတို့ကို လက်တွေ့တွင် အသုံးပြုပုံကို မြင်တွေ့ရမယ့် အချိန်ပါပဲ! \ No newline at end of file diff --git a/units/my/bonus-unit2/monitoring-and-evaluating-agents-notebook.mdx b/units/my/bonus-unit2/monitoring-and-evaluating-agents-notebook.mdx new file mode 100644 index 00000000..7165bc20 --- /dev/null +++ b/units/my/bonus-unit2/monitoring-and-evaluating-agents-notebook.mdx @@ -0,0 +1,427 @@ +## အပို အခန်း ၂: Agent များ၏ စောင့်ကြည့်နိုင်စွမ်းနှင့် အကဲဖြတ်ခြင်း (Observability and Evaluation of Agents) + + + +> [!TIP] +> ဒီအခန်းမှာပါတဲ့ Code တွေကို Google Colab ကို အသုံးပြုပြီး [ဒီ Notebook](https://colab.research.google.com/#fileId=https%3A//huggingface.co/agents-course/notebooks/blob/main/bonus-unit2/monitoring-and-evaluating-agents.ipynb) မှာ လိုက်လံလုပ်ဆောင်နိုင်ပါတယ်။ + +ဒီ Notebook မှာတော့ ကျွန်တော်တို့ရဲ့ AI Agent ရဲ့ **အတွင်းပိုင်း အဆင့်ဆင့် လုပ်ဆောင်မှုများ (Traces) ကို ဘယ်လို စောင့်ကြည့်မလဲ** ဆိုတာနဲ့ Open-source စောင့်ကြည့်ရေး Tool တွေကို အသုံးပြုပြီး **၎င်းရဲ့ စွမ်းဆောင်ရည်ကို ဘယ်လို အကဲဖြတ်မလဲ** ဆိုတာကို လေ့လာသွားပါမယ်။ + +Agent တစ်ခုရဲ့ အပြုအမူကို စောင့်ကြည့်နိုင်ခြင်းနဲ့ အကဲဖြတ်နိုင်ခြင်းဟာ အောက်ပါအချက်များအတွက် မရှိမဖြစ် လိုအပ်ပါတယ်။ + +* Tasks များ မအောင်မြင်တဲ့အခါ သို့မဟုတ် အကောင်းဆုံးမဟုတ်တဲ့ ရလဒ်တွေ ထွက်လာတဲ့အခါ **ပြဿနာရှာဖွေခြင်း (Debugging)** အတွက်။ +* ကုန်ကျစရိတ် (Costs) နဲ့ စွမ်းဆောင်ရည် (Performance) ကို Real-time မှာ စောင့်ကြည့်ခြင်း။ +* စဉ်ဆက်မပြတ် တုံ့ပြန်ချက်များ (Feedback) မှတစ်ဆင့် ယုံကြည်စိတ်ချရမှု (Reliability) နဲ့ လုံခြုံရေးကို မြှင့်တင်ခြင်း။ + +## အဆင့် ၀: လိုအပ်သော Library များကို Install လုပ်ခြင်း 🏗️ + +Agent များကို Run ရန်၊ စောင့်ကြည့်ရန်နှင့် အကဲဖြတ်ရန်အတွက် အောက်ပါ Library အချို့ လိုအပ်ပါတယ်။ + +```python +%pip install langfuse 'smolagents[telemetry]' openinference-instrumentation-smolagents datasets 'smolagents[gradio]' gradio --upgrade +``` + +## အဆင့် ၁: သင်၏ Agent ကို စနစ်တကျ တပ်ဆင်ခြင်း (Instrument Your Agent) + +ဒီ Notebook မှာ ကျွန်တော်တို့ [Langfuse](https://langfuse.com/) ကို စောင့်ကြည့်ရေး Tool အဖြစ် အသုံးပြုသွားမှာ ဖြစ်ပေမယ့်၊ **အခြား OpenTelemetry-compatible Service** များကိုလည်း အသုံးပြုနိုင်ပါတယ်။ အောက်ပါ Code က Langfuse (သို့မဟုတ် မည်သည့် OTel Endpoint မဆို) အတွက် Environment Variable များကို သတ်မှတ်ပုံနှင့် သင်၏ `smolagent` ကို စနစ်တကျ တပ်ဆင်ပုံကို ပြသထားပါတယ်။ + +**မှတ်ချက်:** သင်သည် LlamaIndex သို့မဟုတ် LangGraph ကို အသုံးပြုနေပါက၊ ၎င်းတို့ကို စနစ်တကျ တပ်ဆင်ရန်အတွက် [ဒီနေရာ](https://langfuse.com/docs/integrations/llama-index/workflows) နှင့် [ဒီနေရာ](https://langfuse.com/docs/integrations/langchain/example-python-langgraph) တွင် Document များကို ရှာဖွေနိုင်ပါတယ်။ + +ပထမဆုံးအနေနဲ့ Langfuse ရဲ့ Credentials များကို Environment Variable များအဖြစ် သတ်မှတ်ကြပါစို့။ [Langfuse Cloud](https://cloud.langfuse.com) တွင် Sign Up လုပ်ခြင်း သို့မဟုတ် [Langfuse ကို ကိုယ်တိုင် Host လုပ်ခြင်း](https://langfuse.com/self-hosting) ဖြင့် သင်၏ Langfuse API Key များကို ရယူနိုင်ပါတယ်။ + +```python +import os +# Get keys for your project from the project settings page: https://cloud.langfuse.com +os.environ["LANGFUSE_PUBLIC_KEY"] = "pk-lf-..." +os.environ["LANGFUSE_SECRET_KEY"] = "sk-lf-..." +os.environ["LANGFUSE_HOST"] = "https://cloud.langfuse.com" # 🇪🇺 EU region +# os.environ["LANGFUSE_HOST"] = "https://us.cloud.langfuse.com" # 🇺🇸 US region +``` +Inference Calls များအတွက် ကျွန်တော်တို့ရဲ့ Hugging Face Token ကိုလည်း Configure လုပ်ဖို့ လိုပါတယ်။ + +```python +# Set your Hugging Face and other tokens/secrets as environment variable +os.environ["HF_TOKEN"] = "hf_..." +``` + +Environment Variable များကို သတ်မှတ်ပြီးနောက်၊ Langfuse Client ကို စတင်နိုင်ပါပြီ။ `get_client()` သည် Environment Variable များတွင် ပေးထားသော Credentials များကို အသုံးပြု၍ Langfuse Client ကို စတင်ပေးပါတယ်။ + +```python +from langfuse import get_client + +langfuse = get_client() + +# Connection ကို စစ်ဆေးခြင်း +if langfuse.auth_check(): + print("Langfuse client သည် အတည်ပြုပြီး အသုံးပြုရန် အသင့်ဖြစ်ပါပြီ!") +else: + print("အတည်ပြုခြင်း မအောင်မြင်ပါ။ သင်၏ Credentials နှင့် Host ကို စစ်ဆေးပါ။") +``` + +ထို့နောက်၊ ကျွန်တော်တို့ရဲ့ `smolagent` ကို စနစ်တကျ တပ်ဆင်ပြီး Traces များကို Langfuse သို့ ပေးပို့ရန်အတွက် `SmolagentsInstrumentor()` ကို သတ်မှတ်နိုင်ပါတယ်။ + +```python +from openinference.instrumentation.smolagents import SmolagentsInstrumentor + +SmolagentsInstrumentor().instrument() +``` + +## အဆင့် ၂: သင်၏ တပ်ဆင်မှုကို စမ်းသပ်ခြင်း (Test Your Instrumentation) + +ဒီနေရာမှာ `smolagents` မှ ရိုးရှင်းတဲ့ `1+1` ကို တွက်ချက်ပေးမယ့် `CodeAgent` တစ်ခုကို ဖန်တီးထားပါတယ်။ တပ်ဆင်မှု မှန်ကန်စွာ အလုပ်လုပ်ခြင်းရှိမရှိ စစ်ဆေးရန် ၎င်းကို Run ကြည့်ပါမယ်။ အရာအားလုံး မှန်ကန်စွာ သတ်မှတ်ထားပါက၊ သင်၏ Observability Dashboard တွင် Logs/Spans များကို မြင်တွေ့ရပါမယ်။ + +```python +from smolagents import InferenceClientModel, CodeAgent + +# တပ်ဆင်မှုကို စမ်းသပ်ရန် ရိုးရှင်းသော Agent တစ်ခု ဖန်တီးခြင်း +agent = CodeAgent( + tools=[], + model=InferenceClientModel() +) + +agent.run("1+1=") +``` + +Spans နှင့် Logs များ မှတ်တမ်းတင်ထားခြင်း ရှိမရှိ စစ်ဆေးရန် သင်၏ [Langfuse Traces Dashboard](https://cloud.langfuse.com) (သို့မဟုတ် သင်ရွေးချယ်ထားသော Observability Tool) ကို စစ်ဆေးပါ။ + +Langfuse မှ ဥပမာ Screenshot: + +![Example trace in Langfuse](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/bonus-unit2/first-example-trace.png) + +_[Trace သို့ လင့်ခ်](https://cloud.langfuse.com/project/cloramnkj0002jz088vzn1ja4/traces/1b94d6888258e0998329cdb72a371155?timestamp=2025-03-10T11%3A59%3A41.743Z)_ + +## အဆင့် ၃: ပိုမိုရှုပ်ထွေးသော Agent ကို စောင့်ကြည့်ခြင်းနှင့် အကဲဖြတ်ခြင်း + +သင်၏ တပ်ဆင်မှု အလုပ်လုပ်ကြောင်း အတည်ပြုပြီးပြီဆိုတော့၊ ပိုမိုရှုပ်ထွေးသော Query တစ်ခုကို စမ်းကြည့်ကြပါစို့။ ဒါမှ Advanced Metrics များ (Token အသုံးပြုမှု၊ Latency၊ ကုန်ကျစရိတ် စသည်) ကို ဘယ်လို ခြေရာခံသလဲဆိုတာကို မြင်တွေ့နိုင်ပါမယ်။ + +```python +from smolagents import (CodeAgent, DuckDuckGoSearchTool, InferenceClientModel) + +search_tool = DuckDuckGoSearchTool() +agent = CodeAgent(tools=[search_tool], model=InferenceClientModel()) + +agent.run("How many Rubik's Cubes could you fit inside the Notre Dame Cathedral?") +``` + +### Trace ဖွဲ့စည်းပုံ (Trace Structure) + +Observability Tool အများစုသည် **Trace** တစ်ခုကို မှတ်တမ်းတင်ပါတယ်။ ၎င်း Trace ထဲတွင် သင်၏ Agent ရဲ့ Logic အဆင့်တစ်ခုစီကို ကိုယ်စားပြုသော **Spans** များ ပါဝင်ပါတယ်။ ဤနေရာတွင် Trace သည် Agent ၏ စုစုပေါင်း Run ကို ကိုယ်စားပြုပြီး၊ အောက်ပါတို့အတွက် Sub-spans များ ပါဝင်ပါတယ်။ + +* Tool Calls များ (DuckDuckGoSearchTool) +* LLM Calls များ (InferenceClientModel) + +ဤ Spans များကို စစ်ဆေးခြင်းဖြင့် အချိန်မည်မျှကုန်ခဲ့သည်၊ Token မည်မျှ အသုံးပြုခဲ့သည် စသည်တို့ကို တိကျစွာ မြင်တွေ့နိုင်ပါတယ်။ + +![Trace tree in Langfuse](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/bonus-unit2/trace-tree.png) + +_[Trace သို့ လင့်ခ်](https://cloud.langfuse.com/project/cloramnkj0002jz088vzn1ja4/traces/1ac33b89ffd5e75d4265b62900c348ed?timestamp=2025-03-07T13%3A45%3A09.149Z&display=preview)_ + +## Online အကဲဖြတ်ခြင်း (Online Evaluation) + +ယခင်အပိုင်းမှာ Online နှင့် Offline အကဲဖြတ်ခြင်းတို့ရဲ့ ကွာခြားချက်ကို လေ့လာခဲ့ပြီးပါပြီ။ အခုတော့ Production မှာ သင်၏ Agent ကို ဘယ်လို စောင့်ကြည့်မလဲ၊ Live မှာ ဘယ်လို အကဲဖြတ်မလဲဆိုတာကို ကြည့်ကြပါစို့။ + +### Production တွင် ခြေရာခံရမည့် အဓိက Metrics များ + +1. **ကုန်ကျစရိတ်များ (Costs)** — `smolagents` တပ်ဆင်မှုသည် Token အသုံးပြုမှုကို ဖမ်းယူပါတယ်။ ၎င်းကို Token တစ်ခုချင်းစီ၏ ဈေးနှုန်း သတ်မှတ်ခြင်းဖြင့် ခန့်မှန်းခြေ ကုန်ကျစရိတ်အဖြစ် ပြောင်းလဲနိုင်ပါတယ်။ +2. **Latency** — အဆင့်တစ်ခုစီ သို့မဟုတ် စုစုပေါင်း Run တစ်ခုလုံး ပြီးမြောက်ရန် ကြာမြင့်သော အချိန်ကို စောင့်ကြည့်ခြင်း။ +3. **အသုံးပြုသူ တုံ့ပြန်ချက် (User Feedback)** — အသုံးပြုသူများသည် Agent ကို ပိုမိုကောင်းမွန်အောင် သို့မဟုတ် ပြင်ဆင်ရန်အတွက် တိုက်ရိုက် တုံ့ပြန်ချက် (Thumbs up/down) ပေးနိုင်ပါတယ်။ +4. **LLM-as-a-Judge** — သင်၏ Agent ရဲ့ ရလဒ်ကို (ဥပမာ - အဆိပ်အတောက်ဖြစ်စေမှု သို့မဟုတ် မှန်ကန်မှုရှိမရှိ) Real-time နီးပါး အကဲဖြတ်ရန်အတွက် သီးခြား LLM တစ်ခုကို အသုံးပြုခြင်း။ + +အောက်မှာ ဒီ Metrics တွေရဲ့ ဥပမာများကို ပြသထားပါတယ်။ + +#### ၁. ကုန်ကျစရိတ်များ (Costs) + +အောက်ပါ Screenshot သည် `Qwen2.5-Coder-32B-Instruct` Calls များအတွက် အသုံးပြုမှုကို ပြသထားပါတယ်။ ဒါက ကုန်ကျစရိတ်များတဲ့ အဆင့်တွေကို မြင်တွေ့နိုင်ပြီး သင်၏ Agent ကို ပိုမိုကောင်းမွန်အောင် လုပ်ဆောင်ဖို့အတွက် အသုံးဝင်ပါတယ်။ + +![Costs](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/bonus-unit2/smolagents-costs.png) + +_[Trace သို့ လင့်ခ်](https://cloud.langfuse.com/project/cloramnkj0002jz088vzn1ja4/traces/1ac33b89ffd5e75d4265b62900c348ed?timestamp=2025-03-07T13%3A45%3A09.149Z&display=preview)_ + +#### ၂. Latency + +အဆင့်တစ်ခုစီ ပြီးမြောက်ရန် အချိန်မည်မျှကြာသည်ကိုလည်း ကျွန်တော်တို့ မြင်တွေ့နိုင်ပါတယ်။ အောက်ပါ ဥပမာတွင် စကားပြောဆိုမှုတစ်ခုလုံး ၃၂ စက္ကန့် ကြာမြင့်ခဲ့ပြီး၊ ၎င်းကို အဆင့်အလိုက် ခွဲခြမ်းကြည့်နိုင်ပါတယ်။ ဒါက အချိန်ကုန်ဆုံးတဲ့ အပိုင်းတွေကို ရှာဖွေပြီး Agent ကို ပိုမိုကောင်းမွန်အောင် လုပ်ဆောင်ဖို့ ကူညီပေးပါတယ်။ + +![Latency](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/bonus-unit2/smolagents-latency.png) + +_[Trace သို့ လင့်ခ်](https://cloud.langfuse.com/project/cloramnkj0002jz088vzn1ja4/traces/1ac33b89ffd5e75d4265b62900c348ed?timestamp=2025-03-07T13%3A45%3A09.149Z&display=preview)_ + +#### ၃. နောက်ထပ် Attributes များ (Additional Attributes) + +သင်၏ Spans များသို့ နောက်ထပ် Attributes များကိုလည်း ထည့်သွင်းနိုင်ပါတယ်။ ၎င်းတို့တွင် `user_id`၊ `tags`၊ `session_id` နှင့် Custom Metadata များ ပါဝင်နိုင်ပါတယ်။ Traces များကို ဤအသေးစိတ်အချက်အလက်များဖြင့် ကြွယ်ဝစေခြင်းဟာ မတူညီတဲ့ အသုံးပြုသူများ သို့မဟုတ် Sessions များအလိုက် သင်၏ Application ရဲ့ အပြုအမူကို ခွဲခြမ်းစိတ်ဖြာခြင်း၊ Debug လုပ်ခြင်းနှင့် စောင့်ကြည့်ခြင်းတို့အတွက် အရေးကြီးပါတယ်။ + +```python +from smolagents import (CodeAgent, DuckDuckGoSearchTool, InferenceClientModel) + +search_tool = DuckDuckGoSearchTool() +agent = CodeAgent( + tools=[search_tool], + model=InferenceClientModel() +) + +with langfuse.start_as_current_span( + name="Smolagent-Trace", + ) as span: + + # သင်၏ Application Logic ကို Run ပါ + response = agent.run("What is the capital of Germany?") + + # Span သို့ နောက်ထပ် Attributes များ ပေးပို့ခြင်း + span.update_trace( + input="What is the capital of Germany?", + output=response, + user_id="smolagent-user-123", + session_id="smolagent-session-123456789", + tags=["city-question", "testing-agents"], + metadata={"email": "user@langfuse.com"}, + ) + +# Short-lived Application များတွင် Events များကို Flush လုပ်ခြင်း +langfuse.flush() +``` + +![Enhancing agent runs with additional metrics](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/bonus-unit2/smolagents-attributes.png) + +#### ၄. အသုံးပြုသူ တုံ့ပြန်ချက် (User Feedback) + +သင်၏ Agent ကို User Interface တွင် ထည့်သွင်းထားပါက၊ အသုံးပြုသူ၏ တိုက်ရိုက် တုံ့ပြန်ချက် (ဥပမာ - Chat UI ရှိ Thumbs-up/down) ကို မှတ်တမ်းတင်နိုင်ပါတယ်။ အောက်တွင် ရိုးရှင်းသော Feedback ယန္တရားပါရှိသည့် Chat ကို ထည့်သွင်းရန် [Gradio](https://gradio.app/) ကို အသုံးပြုထားသော ဥပမာတစ်ခု ဖြစ်ပါတယ်။ + +အောက်ပါ Code Snippet တွင်၊ အသုံးပြုသူက Chat Message ပို့လိုက်တဲ့အခါ Langfuse မှာ Trace ကို ဖမ်းယူပါတယ်။ အသုံးပြုသူက နောက်ဆုံးအဖြေကို ကြိုက်သည်/မကြိုက်သည်ကို ဖော်ပြပါက၊ ထို Trace သို့ Score တစ်ခုကို ပူးတွဲပေးပါတယ်။ + +```python +import gradio as gr +from smolagents import (CodeAgent, InferenceClientModel) +from langfuse import get_client + +langfuse = get_client() + +model = InferenceClientModel() +agent = CodeAgent(tools=[], model=model, add_base_tools=True) + +trace_id = None + +def respond(prompt, history): + with langfuse.start_as_current_span( + name="Smolagent-Trace"): + + # သင်၏ Application Logic ကို Run ပါ + output = agent.run(prompt) + + global trace_id + trace_id = langfuse.get_current_trace_id() + + history.append({"role": "assistant", "content": str(output)}) + return history + +def handle_like(data: gr.LikeData): + # ဥပမာပြရန်အတွက်၊ အသုံးပြုသူ၏ Feedback ကို 1 (ကြိုက်သည်) သို့မဟုတ် 0 (မကြိုက်) အဖြစ် သတ်မှတ်သည်။ + if data.liked: + langfuse.create_score( + value=1, + name="user-feedback", + trace_id=trace_id + ) + else: + langfuse.create_score( + value=0, + name="user-feedback", + trace_id=trace_id + ) + +with gr.Blocks() as demo: + chatbot = gr.Chatbot(label="Chat", type="messages") + prompt_box = gr.Textbox(placeholder="Type your message...", label="Your message") + + # အသုံးပြုသူက Prompt တွင် 'Enter' နှိပ်သောအခါ 'respond' ကို Run ပါ + prompt_box.submit( + fn=respond, + inputs=[prompt_box, chatbot], + outputs=chatbot + ) + + # အသုံးပြုသူက Message ပေါ်ရှိ 'like' ခလုတ်ကို နှိပ်သောအခါ 'handle_like' ကို Run ပါ + chatbot.like(handle_like, None, None) + +demo.launch() +``` + +အသုံးပြုသူ၏ တုံ့ပြန်ချက်ကို သင်၏ Observability Tool တွင် ဖမ်းယူထားပါတယ်။ + +![User feedback is being captured in Langfuse](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/bonus-unit2/user-feedback-gradio.png) + +#### ၅. LLM-as-a-Judge + +LLM-as-a-Judge သည် သင်၏ Agent ရဲ့ ရလဒ်ကို အလိုအလျောက် အကဲဖြတ်ရန် နောက်ထပ် နည်းလမ်းတစ်ခု ဖြစ်ပါတယ်။ သင်၏ Agent ရဲ့ ရလဒ်သည် မှန်ကန်မှု၊ အဆိပ်အတောက်ဖြစ်စေမှု၊ ပုံစံ သို့မဟုတ် သင်စိတ်ဝင်စားသော အခြား စံနှုန်းများနှင့် ကိုက်ညီမှုရှိမရှိ တိုင်းတာရန်အတွက် သီးခြား LLM Call တစ်ခုကို သတ်မှတ်နိုင်ပါတယ်။ + +**Workflow**: +1. သင်သည် **Evaluation Template** တစ်ခုကို သတ်မှတ်ပါတယ်။ (ဥပမာ - "စာသားသည် အဆိပ်အတောက်ဖြစ်စေခြင်း ရှိမရှိ စစ်ဆေးပါ")။ +2. သင်၏ Agent က ရလဒ် ထုတ်ပေးတိုင်း၊ ထိုရလဒ်ကို Template နှင့်အတူ သင်၏ "Judge" LLM သို့ ပေးပို့ပါတယ်။ +3. Judge LLM က အဆင့်သတ်မှတ်ချက် သို့မဟုတ် Label တစ်ခုဖြင့် တုံ့ပြန်ပြီး၊ ၎င်းကို သင်၏ Observability Tool တွင် Log လုပ်ပါတယ်။ + +Langfuse မှ ဥပမာ: + +![LLM-as-a-Judge Evaluation Template](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/bonus-unit2/evaluator-template.png) +![LLM-as-a-Judge Evaluator](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/bonus-unit2/evaluator.png) + +```python +# ဥပမာ: Agent ရဲ့ ရလဒ်သည် အဆိပ်အတောက်ဖြစ်စေခြင်း ရှိမရှိ စစ်ဆေးခြင်း။ +from smolagents import (CodeAgent, DuckDuckGoSearchTool, InferenceClientModel) + +search_tool = DuckDuckGoSearchTool() +agent = CodeAgent(tools=[search_tool], model=InferenceClientModel()) + +agent.run("Can eating carrots improve your vision?") +``` + +ဒီဥပမာရဲ့ အဖြေကို "အဆိပ်အတောက်မဖြစ်စေပါ" ဟု အကဲဖြတ်ထားသည်ကို မြင်တွေ့နိုင်ပါတယ်။ + +![LLM-as-a-Judge Evaluation Score](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/bonus-unit2/llm-as-a-judge-score.png) + +#### ၆. Observability Metrics ခြုံငုံသုံးသပ်ချက် + +ဤ Metrics များအားလုံးကို Dashboard များတွင် တစ်စုတစ်စည်းတည်း မြင်တွေ့နိုင်ပါတယ်။ ဒါက သင်၏ Agent သည် Sessions များစွာတွင် မည်သို့ စွမ်းဆောင်သည်ကို လျင်မြန်စွာ မြင်တွေ့နိုင်စေပြီး၊ အချိန်နှင့်အမျှ အရည်အသွေး Metrics များကို ခြေရာခံရန် ကူညီပေးပါတယ်။ + +![Observability metrics overview](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/bonus-unit2/langfuse-dashboard.png) + +## Offline အကဲဖြတ်ခြင်း (Offline Evaluation) + +Online Evaluation သည် Live Feedback အတွက် အရေးကြီးသော်လည်း၊ သင်သည် Development မလုပ်မီ သို့မဟုတ် လုပ်ဆောင်နေစဉ်အတွင်း စနစ်တကျ စစ်ဆေးမှုများ ပြုလုပ်ရန် **Offline Evaluation** လည်း လိုအပ်ပါတယ်။ ဒါက Production သို့ ပြောင်းလဲမှုများ မပြုလုပ်မီ အရည်အသွေးနှင့် ယုံကြည်စိတ်ချရမှုကို ထိန်းသိမ်းရန် ကူညီပေးပါတယ်။ + +### Dataset အကဲဖြတ်ခြင်း + +Offline Evaluation တွင် သင်သည် အများအားဖြင့် အောက်ပါတို့ကို လုပ်ဆောင်ပါတယ်။ +1. Benchmark Dataset (Prompt နှင့် မျှော်မှန်းထားသော ရလဒ်အတွဲများ ပါဝင်သည်) ကို ရယူခြင်း။ +2. ထို Dataset ပေါ်တွင် သင်၏ Agent ကို Run ခြင်း။ +3. ရလဒ်များကို မျှော်မှန်းထားသော အဖြေများနှင့် နှိုင်းယှဉ်ခြင်း သို့မဟုတ် နောက်ထပ် Scoring ယန္တရားတစ်ခုကို အသုံးပြုခြင်း။ + +အောက်တွင် ကျွန်တော်တို့သည် သင်္ချာမေးခွန်းများနှင့် အဖြေများ ပါဝင်သော [GSM8K Dataset](https://huggingface.co/datasets/openai/gsm8k) ဖြင့် ဤနည်းလမ်းကို သရုပ်ပြပါမယ်။ + +```python +import pandas as pd +from datasets import load_dataset + +# Hugging Face မှ GSM8K ကို ရယူခြင်း +dataset = load_dataset("openai/gsm8k", 'main', split='train') +df = pd.DataFrame(dataset) +print("GSM8K Dataset ၏ ပထမဆုံး စာကြောင်းအချို့:") +print(df.head()) +``` + +ထို့နောက်၊ Runs များကို ခြေရာခံရန် Langfuse တွင် Dataset Entity တစ်ခုကို ဖန်တီးပါတယ်။ ထို့နောက် Dataset မှ Item တစ်ခုစီကို စနစ်ထဲသို့ ထည့်သွင်းပါတယ်။ (Langfuse ကို အသုံးမပြုပါက၊ ၎င်းတို့ကို သင်၏ ကိုယ်ပိုင် Database သို့မဟုတ် Local File တွင် သိမ်းဆည်းနိုင်ပါတယ်)။ + +```python +from langfuse import get_client +langfuse = get_client() + +langfuse_dataset_name = "gsm8k_dataset_huggingface" + +# Langfuse တွင် Dataset တစ်ခု ဖန်တီးခြင်း +langfuse.create_dataset( + name=langfuse_dataset_name, + description="Huggingface မှ Upload လုပ်ထားသော GSM8K benchmark dataset", + metadata={ + "date": "2025-03-10", + "type": "benchmark" + } +) +``` + +```python +for idx, row in df.iterrows(): + langfuse.create_dataset_item( + dataset_name=langfuse_dataset_name, + input={"text": row["question"]}, + expected_output={"text": row["answer"]}, + metadata={"source_index": idx} + ) + if idx >= 9: # ဥပမာပြရန်အတွက် ပထမဆုံး Item ၁၀ ခုကိုသာ Upload လုပ်ပါမည်။ + break +``` + +![Dataset items in Langfuse](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/bonus-unit2/example-dataset.png) + +#### Dataset ပေါ်တွင် Agent ကို Run ခြင်း + +ကျွန်တော်တို့သည် အောက်ပါတို့ကို လုပ်ဆောင်မည့် Helper Function `run_smolagent()` ကို သတ်မှတ်ပါမယ်။ +1. Langfuse Span တစ်ခုကို စတင်ခြင်း။ +2. Prompt ပေါ်တွင် Agent ကို Run ခြင်း။ +3. Trace ID ကို Langfuse တွင် မှတ်တမ်းတင်ခြင်း။ + +ထို့နောက်၊ Dataset Item တစ်ခုစီကို Loop လုပ်ပြီး Agent ကို Run ခြင်း၊ Trace ကို Dataset Item နှင့် ချိတ်ဆက်ခြင်းတို့ကို လုပ်ဆောင်ပါတယ်။ လိုအပ်ပါက Quick Evaluation Score ကိုလည်း ပူးတွဲနိုင်ပါတယ်။ + +```python +from opentelemetry.trace import format_trace_id +from smolagents import (CodeAgent, InferenceClientModel, LiteLLMModel) +from langfuse import get_client + +langfuse = get_client() + + +# ဥပမာ: openai, anthropic, gemini စသည့် မော်ဒယ်များကို အသုံးပြုရန် InferenceClientModel သို့မဟုတ် LiteLLMModel ကို အသုံးပြုခြင်း: +model = InferenceClientModel() + +agent = CodeAgent( + tools=[], + model=model, + add_base_tools=True +) + +dataset_name = "gsm8k_dataset_huggingface" +current_run_name = "smolagent-notebook-run-01" # ဤ သီးခြား Evaluation Run ကို ခွဲခြားသတ်မှတ်ခြင်း + +# 'run_smolagent' သည် သင်၏ စနစ်တကျ တပ်ဆင်ထားသော Application Function ဖြစ်သည်ဟု ယူဆပါ +def run_smolagent(question): + with langfuse.start_as_current_generation(name="qna-llm-call") as generation: + # LLM Call ကို အတုယူခြင်း + result = agent.run(question) + + # Trace ကို Input နှင့် Output ဖြင့် Update လုပ်ခြင်း + generation.update_trace( + input= question, + output=result, + ) + + return result + +dataset = langfuse.get_dataset(name=dataset_name) # သင်၏ ကြိုတင်ဖြည့်သွင်းထားသော Dataset ကို ရယူခြင်း + +for item in dataset.items: + + # item.run() context manager ကို အသုံးပြုခြင်း + with item.run( + run_name=current_run_name, + run_metadata={"model_provider": "Hugging Face", "temperature_setting": 0.7}, + run_description="Evaluation run for GSM8K dataset" + ) as root_span: # root_span သည် ဤ Item နှင့် Run အတွက် Trace အသစ်၏ Root Span ဖြစ်သည်။ + # ဤ Block အတွင်းရှိ နောက်ဆက်တွဲ Langfuse လုပ်ဆောင်ချက်များအားလုံးသည် ဤ Trace ၏ အစိတ်အပိုင်းများ ဖြစ်သည်။ + + # သင်၏ Application Logic ကို ခေါ်ဆိုခြင်း + generated_answer = run_smolagent(question=item.input["text"]) + + print(item.input) +``` + +ဤလုပ်ငန်းစဉ်ကို မတူညီသော အောက်ပါအချက်များဖြင့် ထပ်ခါတလဲလဲ လုပ်ဆောင်နိုင်ပါတယ်။ +* Models များ (OpenAI GPT, Local LLM, စသည်) +* Tools များ (Search ပါဝင်ခြင်း သို့မဟုတ် မပါဝင်ခြင်း) +* Prompts များ (မတူညီသော System Messages များ) + +ထို့နောက် ၎င်းတို့ကို သင်၏ Observability Tool တွင် ဘေးချင်းယှဉ်၍ နှိုင်းယှဉ်နိုင်ပါတယ်။ + +![Dataset run overview](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/bonus-unit2/dataset_runs.png) +![Dataset run comparison](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/bonus-unit2/dataset-run-comparison.png) + +## နောက်ဆုံး အတွေးအမြင်များ (Final Thoughts) + +ဒီ Notebook မှာ ကျွန်တော်တို့ အောက်ပါတို့ကို လေ့လာခဲ့ပြီးပါပြီ။ +1. **Observability ကို သတ်မှတ်ပုံ** (`smolagents` + OpenTelemetry Exporters ကို အသုံးပြုခြင်း) +2. ရိုးရှင်းသော Agent ကို Run ခြင်းဖြင့် **တပ်ဆင်မှု မှန်ကန်ခြင်းရှိမရှိ စစ်ဆေးပုံ** +3. Observability Tool များမှတစ်ဆင့် **အသေးစိတ် Metrics များ (ကုန်ကျစရိတ်၊ Latency စသည်) ကို ဖမ်းယူပုံ** +4. Gradio Interface မှတစ်ဆင့် **အသုံးပြုသူ တုံ့ပြန်ချက်ကို စုဆောင်းပုံ** +5. ရလဒ်များကို အလိုအလျောက် အကဲဖြတ်ရန် **LLM-as-a-Judge ကို အသုံးပြုပုံ** +6. Benchmark Dataset ဖြင့် **Offline Evaluation ပြုလုပ်ပုံ** + +🤗 ပျော်ရွှင်စွာ Code ရေးသားနိုင်ပါစေ! \ No newline at end of file diff --git a/units/my/bonus-unit2/quiz.mdx b/units/my/bonus-unit2/quiz.mdx new file mode 100644 index 00000000..d3e310a3 --- /dev/null +++ b/units/my/bonus-unit2/quiz.mdx @@ -0,0 +1,137 @@ +## Quiz: AI Agent များကို အကဲဖြတ်ခြင်း (Evaluating AI Agents) + +ဒီ Bonus Unit မှာ သင်လေ့လာခဲ့ရတဲ့ Agent Tracing နဲ့ Evaluation သဘောတရားတွေကို နားလည်မှုရှိမရှိ စစ်ဆေးကြည့်ရအောင်။ + +ဒီ Quiz ဟာ မဖြစ်မနေ ဖြေဆိုရမှာ မဟုတ်သလို အမှတ်ပေးမှာလည်း မဟုတ်ပါဘူး။ + +### Q1: AI Agent များတွင် **စောင့်ကြည့်နိုင်စွမ်း (Observability)** ဆိုတာ အဓိကအားဖြင့် ဘာကို ရည်ညွှန်းတာလဲ။ + +AI Agent များအတွက် Observability ရဲ့ ရည်ရွယ်ချက်ကို ဘယ်အချက်က တိကျစွာ ဖော်ပြပါသလဲ။ + + + +### Q2: အောက်ပါတို့ထဲမှ Agent Observability မှာ အများအားဖြင့် စောင့်ကြည့်လေ့မရှိတဲ့ Metric (တိုင်းတာချက်) က ဘာလဲ။ + +Observability ရဲ့ အောက်မှာ ပုံမှန်အားဖြင့် မပါဝင်တဲ့ တိုင်းတာချက်ကို ရွေးချယ်ပါ။ + + + +### Q3: AI Agent တစ်ခုကို **Offline Evaluation (အင်တာနက်မလိုဘဲ အကဲဖြတ်ခြင်း)** လုပ်ဆောင်တယ်ဆိုတာကို ဘယ်အချက်က အကောင်းဆုံး ဖော်ပြပါသလဲ။ + +Offline Evaluation ရဲ့ အနှစ်သာရကို တိကျစွာ ဖော်ပြတဲ့ အချက်ကို ဆုံးဖြတ်ပါ။ + + + +### Q4: Agent များကို **Online Evaluation (တိုက်ရိုက် အကဲဖြတ်ခြင်း)** လုပ်ဆောင်ခြင်းက ဘယ်လို အားသာချက်ကို ပေးပါသလဲ။ + +Online Evaluation ရဲ့ အကျိုးကျေးဇူးကို အကောင်းဆုံး ထင်ဟပ်စေတဲ့ အချက်ကို ရွေးပါ။ + + + +### Q5: AI Agent များရဲ့ Observability နဲ့ Evaluation မှာ OpenTelemetry က ဘယ်လို အခန်းကဏ္ဍကနေ ပါဝင်ပါသလဲ။ + +AI Agent များကို စောင့်ကြည့်ရာမှာ OpenTelemetry ရဲ့ အခန်းကဏ္ဍကို အကောင်းဆုံး ဖော်ပြတဲ့ အချက်ကို ရွေးပါ။ + + + +ဒီ Quiz ကို ပြီးဆုံးသွားတဲ့အတွက် ဂုဏ်ယူပါတယ်။ 🎉 အကယ်၍ မေးခွန်းတစ်ခုခု လွဲချော်သွားခဲ့ရင်၊ ပိုမိုနက်ရှိုင်းစွာ နားလည်နိုင်ဖို့ ဒီ Bonus Unit ရဲ့ အကြောင်းအရာတွေကို ပြန်လည်လေ့လာကြည့်ပါ။ ကောင်းကောင်းဖြေဆိုနိုင်ခဲ့ရင်တော့ Agent Observability နဲ့ Evaluation ရဲ့ ပိုမိုအဆင့်မြင့်တဲ့ အကြောင်းအရာတွေကို လေ့လာဖို့ သင်အသင့်ဖြစ်နေပါပြီ! \ No newline at end of file diff --git a/units/my/bonus-unit2/what-is-agent-observability-and-evaluation.mdx b/units/my/bonus-unit2/what-is-agent-observability-and-evaluation.mdx new file mode 100644 index 00000000..4eb32233 --- /dev/null +++ b/units/my/bonus-unit2/what-is-agent-observability-and-evaluation.mdx @@ -0,0 +1,91 @@ +## AI Agent များ၏ စောင့်ကြည့်နိုင်စွမ်းနှင့် အကဲဖြတ်ခြင်း (Observability and Evaluation) + +## 🔎 စောင့်ကြည့်နိုင်စွမ်း (Observability) ဆိုတာ ဘာလဲ? + +**စောင့်ကြည့်နိုင်စွမ်း (Observability)** ဆိုတာကတော့ သင့်ရဲ့ AI Agent အတွင်းမှာ ဘာတွေဖြစ်ပျက်နေသလဲဆိုတာကို **ပြင်ပ အချက်ပြမှုများ** (ဥပမာ- မှတ်တမ်းများ (logs)၊ တိုင်းတာချက်များ (metrics) နဲ့ ခြေရာခံမှုများ (traces)) ကို ကြည့်ရှုပြီး နားလည်အောင် လုပ်ဆောင်ခြင်းပဲ ဖြစ်ပါတယ်။ AI Agent တွေအတွက်ဆိုရင်၊ ဒါဟာ Agent ရဲ့ လုပ်ဆောင်ချက်တွေ၊ Tool အသုံးပြုမှုတွေ၊ Model ခေါ်ဆိုမှုတွေနဲ့ တုံ့ပြန်မှုတွေကို ခြေရာခံပြီး Agent ရဲ့ စွမ်းဆောင်ရည်ကို စစ်ဆေးဖို့နဲ့ ပိုမိုကောင်းမွန်အောင် လုပ်ဆောင်ဖို့ကို ဆိုလိုပါတယ်။ + +![Observability dashboard](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/bonus-unit2/langfuse-dashboard.png) + +## 🔭 Agent စောင့်ကြည့်နိုင်စွမ်းက ဘာကြောင့် အရေးကြီးတာလဲ? + +စောင့်ကြည့်နိုင်စွမ်း မရှိဘူးဆိုရင် AI Agent တွေဟာ **"Black Boxes" (အတွင်းမှာ ဘာတွေဖြစ်နေလဲ မသိနိုင်တဲ့ သေတ္တာနက်များ)** လို ဖြစ်နေပါလိမ့်မယ်။ စောင့်ကြည့်နိုင်စွမ်း Tool တွေက Agent တွေကို ပွင့်လင်းမြင်သာစေပြီး၊ အောက်ပါအချက်တွေကို လုပ်ဆောင်နိုင်စေပါတယ်။ + +* ကုန်ကျစရိတ်နဲ့ တိကျမှု (Accuracy) အကြား ကုန်သွယ်မှုတွေကို နားလည်နိုင်ခြင်း။ +* တုံ့ပြန်မှု ကြာချိန် (Latency) ကို တိုင်းတာနိုင်ခြင်း။ +* အန္တရာယ်ရှိတဲ့ ဘာသာစကားနဲ့ Prompt Injection တွေကို ထောက်လှမ်းနိုင်ခြင်း။ +* အသုံးပြုသူရဲ့ တုံ့ပြန်ချက် (User Feedback) တွေကို စောင့်ကြည့်နိုင်ခြင်း။ + +တစ်နည်းအားဖြင့် ပြောရရင်၊ စောင့်ကြည့်နိုင်စွမ်းက သင့်ရဲ့ Demo Agent ကို **လက်တွေ့ အသုံးပြုဖို့ (Production) အသင့်ဖြစ်စေပါတယ်**။ + +## 🔨 စောင့်ကြည့်နိုင်စွမ်း Tool များ + +AI Agent များအတွက် အသုံးများတဲ့ စောင့်ကြည့်နိုင်စွမ်း Tool တွေထဲမှာ [Langfuse](https://langfuse.com) နဲ့ [Arize](https://www.arize.com) လို Platform တွေ ပါဝင်ပါတယ်။ ဒီ Tool တွေက အသေးစိတ် ခြေရာခံမှုများ (Traces) ကို စုဆောင်းပေးပြီး၊ Metrics တွေကို Real-time နဲ့ စောင့်ကြည့်နိုင်တဲ့ Dashboard တွေကို ပေးပါတယ်။ ဒါကြောင့် ပြဿနာတွေကို အလွယ်တကူ ရှာဖွေပြီး စွမ်းဆောင်ရည်ကို အကောင်းဆုံးဖြစ်အောင် လုပ်ဆောင်နိုင်ပါတယ်။ + +စောင့်ကြည့်နိုင်စွမ်း Tool တွေဟာ ၎င်းတို့ရဲ့ လုပ်ဆောင်နိုင်စွမ်းတွေမှာ အများကြီး ကွဲပြားပါတယ်။ တချို့ Tool တွေက Open Source ဖြစ်ပြီး၊ Community ရဲ့ ပံ့ပိုးမှုနဲ့ ချိတ်ဆက်မှုများစွာကို ရရှိပါတယ်။ တချို့ Tool တွေကတော့ LLMOps (LLM Operations) ရဲ့ သီးခြားကဏ္ဍများ (ဥပမာ- စောင့်ကြည့်နိုင်စွမ်း၊ အကဲဖြတ်ခြင်း သို့မဟုတ် Prompt စီမံခန့်ခွဲမှု) ကိုသာ အထူးပြုပြီး၊ တချို့ကတော့ LLMOps လုပ်ငန်းစဉ်တစ်ခုလုံးကို လွှမ်းခြုံနိုင်အောင် ဒီဇိုင်းထုတ်ထားပါတယ်။ သင့်အတွက် အသင့်တော်ဆုံး Tool ကို ရွေးချယ်နိုင်ဖို့အတွက် မတူညီတဲ့ Tool တွေရဲ့ Documentation တွေကို လေ့လာကြည့်ဖို့ ကျွန်တော်တို့ အားပေးပါတယ်။ + +[smolagents](https://huggingface.co/docs/smolagents/v1.12.0/en/index) လို Agent Framework များစွာဟာ စောင့်ကြည့်နိုင်စွမ်း Tool တွေကို Metadata များ ပေးပို့နိုင်ဖို့အတွက် [OpenTelemetry](https://opentelemetry.io/docs/) စံနှုန်းကို အသုံးပြုကြပါတယ်။ ဒါ့အပြင်၊ LLM တွေရဲ့ လျင်မြန်စွာ ပြောင်းလဲနေတဲ့ ကမ္ဘာမှာ ပိုမိုပြောင်းလွယ်ပြင်လွယ်ရှိစေဖို့အတွက် စောင့်ကြည့်နိုင်စွမ်း Tool တွေက Custom Instrumentation တွေကို တည်ဆောက်ကြပါတယ်။ သင်အသုံးပြုနေတဲ့ Tool ရဲ့ Documentation ကို စစ်ဆေးပြီး ဘာတွေ ပံ့ပိုးပေးထားလဲဆိုတာကို သိရှိနိုင်ပါတယ်။ + +## 🔬 Traces နှင့် Spans များ + +စောင့်ကြည့်နိုင်စွမ်း Tool များက Agent ရဲ့ လုပ်ဆောင်မှုများကို **Traces (ခြေရာခံမှုများ)** နဲ့ **Spans (အဆင့်များ)** အဖြစ် ဖော်ပြလေ့ရှိပါတယ်။ + +* **Traces (ခြေရာခံမှုများ):** အစမှ အဆုံးအထိ Agent ရဲ့ လုပ်ငန်းတစ်ခုလုံးကို ကိုယ်စားပြုပါတယ်။ (ဥပမာ - အသုံးပြုသူရဲ့ မေးခွန်းတစ်ခုကို ဖြေရှင်းပေးခြင်း)။ +* **Spans (အဆင့်များ):** Trace အတွင်းမှ တစ်ဦးချင်း လုပ်ဆောင်ချက် အဆင့်များကို ကိုယ်စားပြုပါတယ်။ (ဥပမာ - Language Model ကို ခေါ်ဆိုခြင်း သို့မဟုတ် ဒေတာ ပြန်လည်ရယူခြင်း)။ + +![Example of a smolagent trace in Langfuse](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/bonus-unit2/trace-tree.png) + +## 📊 စောင့်ကြည့်ရမည့် အဓိက Metrics များ + +စောင့်ကြည့်နိုင်စွမ်း Tool များက စောင့်ကြည့်လေ့ရှိတဲ့ အသုံးအများဆုံး Metrics များကတော့ အောက်ပါအတိုင်း ဖြစ်ပါတယ်။ + +**တုံ့ပြန်မှု ကြာချိန် (Latency):** Agent က ဘယ်လောက် မြန်မြန် တုံ့ပြန်သလဲ? ကြာမြင့်စွာ စောင့်ဆိုင်းရခြင်းက အသုံးပြုသူရဲ့ အတွေ့အကြုံကို ဆိုးရွားစေပါတယ်။ Agent ရဲ့ လုပ်ငန်းတစ်ခုလုံးနဲ့ တစ်ဦးချင်း အဆင့်များအတွက် Latency ကို တိုင်းတာသင့်ပါတယ်။ ဥပမာအားဖြင့်၊ Model ခေါ်ဆိုမှုများအတွက် စုစုပေါင်း စက္ကန့် ၂၀ ကြာတဲ့ Agent တစ်ခုကို ပိုမိုမြန်ဆန်တဲ့ Model ကို အသုံးပြုခြင်း သို့မဟုတ် Model ခေါ်ဆိုမှုများကို တစ်ပြိုင်နက်တည်း လုပ်ဆောင်ခြင်းဖြင့် အရှိန်မြှင့်နိုင်ပါတယ်။ + +**ကုန်ကျစရိတ်များ (Costs):** Agent တစ်ကြိမ် လုပ်ဆောင်မှုအတွက် ကုန်ကျစရိတ် ဘယ်လောက်ရှိသလဲ? AI Agent တွေဟာ Token အရ ကုန်ကျစရိတ် ကောက်ခံတဲ့ LLM ခေါ်ဆိုမှုများ သို့မဟုတ် ပြင်ပ API များပေါ်မှာ မှီခိုနေရပါတယ်။ Tool များကို မကြာခဏ အသုံးပြုခြင်း သို့မဟုတ် Prompt များစွာ ပေးပို့ခြင်းက ကုန်ကျစရိတ်ကို လျင်မြန်စွာ မြင့်တက်စေနိုင်ပါတယ်။ ဥပမာ - အရည်အသွေး အနည်းငယ်သာ တိုးတက်ဖို့အတွက် Agent က LLM ကို ငါးကြိမ် ခေါ်ဆိုတယ်ဆိုရင်၊ ဒီကုန်ကျစရိတ်က တန်ရဲ့လားဆိုတာကို ဆန်းစစ်ရပါမယ်။ ဒါမှမဟုတ် ခေါ်ဆိုမှု အရေအတွက်ကို လျှော့ချခြင်း သို့မဟုတ် ပိုမိုစျေးသက်သာတဲ့ Model ကို အသုံးပြုခြင်းဖြင့် ဖြေရှင်းနိုင်ပါတယ်။ Real-time စောင့်ကြည့်မှုက မမျှော်လင့်ဘဲ ကုန်ကျစရိတ် မြင့်တက်လာခြင်း (ဥပမာ - Bug များကြောင့် API Loop များ အလွန်အကျွံ ဖြစ်ပေါ်ခြင်း) ကိုလည်း ဖော်ထုတ်ပေးနိုင်ပါတယ်။ + +**တောင်းဆိုမှု အမှားများ (Request Errors):** Agent က ဘယ်နှစ်ကြိမ် အလုပ်မလုပ်နိုင်ခဲ့ဘူးလဲ? ဒါဟာ API အမှားများ သို့မဟုတ် Tool ခေါ်ဆိုမှု မအောင်မြင်ခြင်းများ ပါဝင်နိုင်ပါတယ်။ Production မှာ သင့် Agent ကို ပိုမို ခိုင်မာစေဖို့အတွက် Fallbacks (အရန်စနစ်) သို့မဟုတ် Retries (ပြန်လည်ကြိုးစားခြင်း) များကို သတ်မှတ်ထားနိုင်ပါတယ်။ ဥပမာ - LLM Provider A အလုပ်မလုပ်တော့ရင်၊ အရန်အဖြစ် LLM Provider B ကို ပြောင်းလဲအသုံးပြုခြင်း။ + +**အသုံးပြုသူ တုံ့ပြန်ချက် (User Feedback):** အသုံးပြုသူများ၏ တိုက်ရိုက် အကဲဖြတ်မှုများကို အကောင်အထည်ဖော်ခြင်းက အဖိုးတန်သော ထိုးထွင်းသိမြင်မှုများကို ပေးပါတယ်။ ဒါဟာ ရှင်းလင်းသော အဆင့်သတ်မှတ်ချက်များ (👍/👎၊ ⭐၁-၅ ပွင့်) သို့မဟုတ် စာသားမှတ်ချက်များ ပါဝင်နိုင်ပါတယ်။ အဆက်မပြတ် အနုတ်လက္ခဏာဆောင်သော တုံ့ပြန်ချက်များ ရရှိခြင်းက Agent သည် မျှော်လင့်ထားသည့်အတိုင်း အလုပ်မလုပ်ကြောင်း သတိပေးချက် ဖြစ်ပါတယ်။ + +**သွယ်ဝိုက်သော အသုံးပြုသူ တုံ့ပြန်ချက် (Implicit User Feedback):** အသုံးပြုသူများ၏ အပြုအမူများသည် ရှင်းလင်းသော အဆင့်သတ်မှတ်ချက်များ မရှိသော်လည်း သွယ်ဝိုက်သော တုံ့ပြန်ချက်များကို ပေးပါတယ်။ ဒါဟာ ချက်ချင်း မေးခွန်း ပြန်လည်မေးမြန်းခြင်း၊ ထပ်ခါတလဲလဲ မေးမြန်းခြင်း သို့မဟုတ် Retry ခလုတ်ကို နှိပ်ခြင်းများ ပါဝင်နိုင်ပါတယ်။ ဥပမာ - အသုံးပြုသူများက တူညီတဲ့ မေးခွန်းကို ထပ်ခါတလဲလဲ မေးနေတာကို တွေ့ရရင်၊ Agent က မျှော်လင့်ထားတဲ့အတိုင်း အလုပ်မလုပ်ဘူးဆိုတဲ့ လက္ခဏာ ဖြစ်ပါတယ်။ + +**တိကျမှု (Accuracy):** Agent က မှန်ကန်သော သို့မဟုတ် လိုချင်သော ရလဒ်များကို ဘယ်လောက် မကြာခဏ ထုတ်ပေးသလဲ? တိကျမှု၏ အဓိပ္ပာယ်ဖွင့်ဆိုချက်များက ကွဲပြားနိုင်ပါတယ် (ဥပမာ - ပြဿနာဖြေရှင်းမှု မှန်ကန်ခြင်း၊ အချက်အလက် ပြန်လည်ရယူမှု တိကျခြင်း၊ အသုံးပြုသူ စိတ်ကျေနပ်မှု)။ ပထမဆုံး အဆင့်ကတော့ သင့် Agent အတွက် အောင်မြင်မှုဆိုတာ ဘာလဲဆိုတာကို သတ်မှတ်ဖို့ပါပဲ။ တိကျမှုကို Automated Check များ၊ Evaluation Score များ သို့မဟုတ် Task ပြီးမြောက်မှု Label များမှတစ်ဆင့် ခြေရာခံနိုင်ပါတယ်။ ဥပမာ - Traces များကို "အောင်မြင်သည်" သို့မဟုတ် "မအောင်မြင်သည်" ဟု မှတ်သားခြင်း။ + +**အလိုအလျောက် အကဲဖြတ် Metrics များ (Automated Evaluation Metrics):** သင်သည် အလိုအလျောက် အကဲဖြတ်မှုများကိုလည်း သတ်မှတ်နိုင်ပါတယ်။ ဥပမာ - Agent ရဲ့ ရလဒ်က အထောက်အကူပြုသလား၊ တိကျသလားဆိုတာကို အမှတ်ပေးဖို့ LLM ကို အသုံးပြုနိုင်ပါတယ်။ Agent ရဲ့ မတူညီတဲ့ ကဏ္ဍများကို အမှတ်ပေးဖို့ ကူညီပေးတဲ့ Open Source Libraries များစွာလည်း ရှိပါတယ်။ ဥပမာ - RAG Agent များအတွက် [RAGAS](https://docs.ragas.io/) သို့မဟုတ် အန္တရာယ်ရှိသော ဘာသာစကား သို့မဟုတ် Prompt Injection များကို ထောက်လှမ်းရန် [LLM Guard](https://llm-guard.com/) တို့ ဖြစ်ပါတယ်။ + +လက်တွေ့မှာတော့ ဒီ Metrics တွေအားလုံးကို ပေါင်းစပ်အသုံးပြုခြင်းက AI Agent ရဲ့ ကျန်းမာရေးကို အကောင်းဆုံး လွှမ်းခြုံနိုင်ပါတယ်။ ဒီအခန်းရဲ့ [ဥပမာ Notebook](https://colab.research.google.com/#fileId=https://huggingface.co/agents-course/notebooks/blob/main/bonus-unit2/monitoring-and-evaluating-agents.ipynb) မှာ ဒီ Metrics တွေဟာ လက်တွေ့ ဥပမာတွေမှာ ဘယ်လိုပုံစံရှိသလဲဆိုတာကို ပြသပေးပါမယ်။ ဒါပေမယ့် အရင်ဆုံး၊ ပုံမှန် အကဲဖြတ်မှု လုပ်ငန်းစဉ် (Evaluation Workflow) က ဘယ်လိုပုံစံရှိသလဲဆိုတာကို လေ့လာပါမယ်။ + +## 👍 AI Agent များကို အကဲဖြတ်ခြင်း (Evaluating AI Agents) + +စောင့်ကြည့်နိုင်စွမ်းက ကျွန်တော်တို့ကို Metrics တွေ ပေးပါတယ်။ ဒါပေမယ့် **အကဲဖြတ်ခြင်း (Evaluation)** ဆိုတာကတော့ AI Agent တစ်ခု ဘယ်လောက် ကောင်းကောင်း လုပ်ဆောင်နေသလဲ၊ ဘယ်လို တိုးတက်အောင် လုပ်ဆောင်နိုင်သလဲဆိုတာကို ဆုံးဖြတ်ဖို့အတွက် အဲဒီဒေတာ (နဲ့ စမ်းသပ်မှုများ) ကို ခွဲခြမ်းစိတ်ဖြာတဲ့ လုပ်ငန်းစဉ်ပဲ ဖြစ်ပါတယ်။ တစ်နည်းအားဖြင့်၊ Traces နဲ့ Metrics တွေ ရရှိပြီးနောက်၊ Agent ကို ဘယ်လို ဆုံးဖြတ်ပြီး ဘယ်လို ဆုံးဖြတ်ချက်တွေ ချမလဲဆိုတာကို ဆိုလိုပါတယ်။ + +ပုံမှန် အကဲဖြတ်မှုဟာ အရေးကြီးပါတယ်၊ ဘာကြောင့်လဲဆိုတော့ AI Agent တွေဟာ မကြာခဏဆိုသလို မခန့်မှန်းနိုင်တဲ့ (Non-deterministic) သဘောရှိပြီး ပြောင်းလဲနိုင်ပါတယ် (Update များ သို့မဟုတ် Model အပြုအမူ လမ်းလွဲခြင်းများကြောင့်)။ အကဲဖြတ်မှု မရှိရင် သင့်ရဲ့ "Smart Agent" ဟာ သူ့အလုပ်ကို ကောင်းကောင်း လုပ်နေသလား၊ ဒါမှမဟုတ် စွမ်းဆောင်ရည် ကျဆင်းသွားသလားဆိုတာကို သင်သိနိုင်မှာ မဟုတ်ပါဘူး။ + +AI Agent များအတွက် အကဲဖြတ်မှု အမျိုးအစား နှစ်မျိုးရှိပါတယ်- **Online Evaluation** နဲ့ **Offline Evaluation** တို့ ဖြစ်ပါတယ်။ နှစ်ခုစလုံးက အဖိုးတန်ပြီး တစ်ခုနဲ့တစ်ခု ဖြည့်ဆည်းပေးပါတယ်။ Agent တစ်ခုကို Deploy မလုပ်ခင် အနည်းဆုံး လိုအပ်တဲ့ အဆင့်ဖြစ်တဲ့ Offline Evaluation နဲ့ အများအားဖြင့် စတင်လေ့ရှိပါတယ်။ + +### 🥷 Offline Evaluation (အော့ဖ်လိုင်း အကဲဖြတ်ခြင်း) + +![Dataset items in Langfuse](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/bonus-unit2/example-dataset.png) + +ဒါဟာ ထိန်းချုပ်ထားတဲ့ ပတ်ဝန်းကျင်မှာ Agent ကို အကဲဖြတ်ခြင်း ဖြစ်ပါတယ်။ ပုံမှန်အားဖြင့် Live User Queries များ မဟုတ်ဘဲ **Test Datasets** များကို အသုံးပြုပါတယ်။ မျှော်လင့်ထားတဲ့ ရလဒ် သို့မဟုတ် မှန်ကန်တဲ့ အပြုအမူကို သင်သိထားတဲ့ စနစ်တကျ စီမံထားတဲ့ Datasets တွေကို အသုံးပြုပြီး သင့် Agent ကို အဲဒီ Datasets တွေပေါ်မှာ Run ကြည့်ရပါတယ်။ + +ဥပမာ - သင်က သင်္ချာ စကားလုံးပုစ္ဆာ Agent တစ်ခု တည်ဆောက်ထားတယ်ဆိုရင်၊ အဖြေသိပြီးသား ပုစ္ဆာ ၁၀၀ ပါဝင်တဲ့ [Test Dataset](https://huggingface.co/datasets/gsm8k) တစ်ခု ရှိနိုင်ပါတယ်။ Offline Evaluation ကို Development လုပ်နေစဉ်အတွင်း မကြာခဏ လုပ်ဆောင်လေ့ရှိပါတယ် (ဒါဟာ CI/CD Pipelines ရဲ့ အစိတ်အပိုင်းလည်း ဖြစ်နိုင်ပါတယ်)။ ဒါမှ တိုးတက်မှုများကို စစ်ဆေးနိုင်ပြီး စွမ်းဆောင်ရည် ကျဆင်းခြင်းကို ကာကွယ်နိုင်ပါတယ်။ အကျိုးကျေးဇူးကတော့ ဒါဟာ **ထပ်ခါတလဲလဲ လုပ်ဆောင်နိုင်ပြီး၊ မှန်ကန်တဲ့ အဖြေ (Ground Truth) ရှိတဲ့အတွက် ရှင်းလင်းတဲ့ တိကျမှု Metrics တွေကို ရရှိနိုင်ခြင်း** ဖြစ်ပါတယ်။ သင်ဟာ User Queries တွေကို အတုယူပြီး Agent ရဲ့ တုံ့ပြန်မှုတွေကို စံပြအဖြေတွေနဲ့ တိုင်းတာနိုင်ပါတယ် သို့မဟုတ် အထက်မှာ ဖော်ပြထားတဲ့ Automated Metrics တွေကို အသုံးပြုနိုင်ပါတယ်။ + +Offline Evaluation ရဲ့ အဓိက စိန်ခေါ်မှုကတော့ သင့်ရဲ့ Test Dataset ဟာ ပြည့်စုံပြီး လက်ရှိအခြေအနေနဲ့ သက်ဆိုင်နေဖို့ သေချာစေဖို့ပါပဲ။ Agent ဟာ သတ်မှတ်ထားတဲ့ Test Set မှာ ကောင်းကောင်း လုပ်ဆောင်နိုင်ပေမယ့် Production မှာ လုံးဝ ကွဲပြားတဲ့ Queries တွေကို ကြုံတွေ့ရနိုင်ပါတယ်။ ဒါကြောင့် Test Set တွေကို Real-world အခြေအနေတွေကို ထင်ဟပ်စေမယ့် Edge Cases တွေနဲ့ ဥပမာအသစ်တွေနဲ့ အမြဲတမ်း Update လုပ်ထားသင့်ပါတယ်။ သေးငယ်တဲ့ "Smoke Test" Cases တွေနဲ့ ပိုကြီးတဲ့ Evaluation Sets တွေကို ရောနှောအသုံးပြုခြင်းက အသုံးဝင်ပါတယ်- သေးငယ်တဲ့ Sets တွေက အမြန်စစ်ဆေးဖို့အတွက်ဖြစ်ပြီး၊ ပိုကြီးတဲ့ Sets တွေကတော့ ပိုမိုကျယ်ပြန့်တဲ့ စွမ်းဆောင်ရည် Metrics တွေအတွက် ဖြစ်ပါတယ်။ + +### 🔄 Online Evaluation (အွန်လိုင်း အကဲဖြတ်ခြင်း) + +ဒါဟာ Agent ကို Live, Real-world ပတ်ဝန်းကျင်မှာ အကဲဖြတ်ခြင်းကို ဆိုလိုပါတယ်။ ဆိုလိုတာက Production မှာ အမှန်တကယ် အသုံးပြုနေစဉ်အတွင်း အကဲဖြတ်ခြင်းပဲ ဖြစ်ပါတယ်။ Online Evaluation မှာ Agent ရဲ့ စွမ်းဆောင်ရည်ကို အမှန်တကယ် အသုံးပြုသူရဲ့ ထိတွေ့ဆက်ဆံမှုများပေါ်မှာ စောင့်ကြည့်ပြီး ရလဒ်များကို အဆက်မပြတ် ခွဲခြမ်းစိတ်ဖြာပါတယ်။ + +ဥပမာ - Live Traffic ပေါ်မှာ အောင်မြင်မှုနှုန်း၊ အသုံးပြုသူ စိတ်ကျေနပ်မှု Score များ သို့မဟုတ် အခြား Metrics များကို ခြေရာခံနိုင်ပါတယ်။ Online Evaluation ရဲ့ အားသာချက်ကတော့ **Lab Setting မှာ သင် ကြိုတင်မခန့်မှန်းနိုင်တဲ့ အရာတွေကို ဖမ်းယူနိုင်ခြင်း** ဖြစ်ပါတယ်။ အချိန်ကြာလာတာနဲ့အမျှ Model Drift (Input ပုံစံများ ပြောင်းလဲသွားတဲ့အခါ Agent ရဲ့ ထိရောက်မှု ကျဆင်းခြင်း) ကို စောင့်ကြည့်နိုင်ပြီး၊ သင့်ရဲ့ Test Data မှာ မပါဝင်တဲ့ မမျှော်လင့်ထားတဲ့ Queries တွေ သို့မဟုတ် အခြေအနေတွေကို ဖမ်းယူနိုင်ပါတယ်။ ဒါဟာ Agent ရဲ့ လက်တွေ့ကမ္ဘာမှာ ဘယ်လို အပြုအမူရှိသလဲဆိုတဲ့ စစ်မှန်တဲ့ ပုံရိပ်ကို ပေးပါတယ်။ + +Online Evaluation မှာ အထက်မှာ ဆွေးနွေးခဲ့တဲ့ သွယ်ဝိုက်သောနှင့် ရှင်းလင်းသော User Feedback များကို စုဆောင်းခြင်းနဲ့ Shadow Tests သို့မဟုတ် A/B Tests (Agent ရဲ့ ဗားရှင်းအသစ်ကို အဟောင်းနဲ့ ယှဉ်ပြိုင်စမ်းသပ်ခြင်း) များကို လုပ်ဆောင်ခြင်းတို့ ပါဝင်လေ့ရှိပါတယ်။ စိန်ခေါ်မှုကတော့ Live Interactions တွေအတွက် ယုံကြည်စိတ်ချရတဲ့ Labels သို့မဟုတ် Scores တွေ ရရှိဖို့ ခက်ခဲနိုင်ခြင်းပဲ ဖြစ်ပါတယ်။ သင်ဟာ User Feedback သို့မဟုတ် Downstream Metrics (ဥပမာ - အသုံးပြုသူက ရလဒ်ကို နှိပ်လိုက်သလား) ပေါ်မှာ မှီခိုရနိုင်ပါတယ်။ + +### 🤝 နှစ်ခုပေါင်းစပ်ခြင်း (Combining the two) + +လက်တွေ့မှာတော့ အောင်မြင်တဲ့ AI Agent အကဲဖြတ်မှုဟာ **Online** နဲ့ **Offline** နည်းလမ်းတွေကို ပေါင်းစပ်ထားပါတယ်။ သင်ဟာ သတ်မှတ်ထားတဲ့ Tasks တွေပေါ်မှာ သင့် Agent ကို အရေအတွက်အရ အမှတ်ပေးဖို့ ပုံမှန် Offline Benchmark တွေကို Run နိုင်ပြီး၊ Benchmark တွေ လွဲချော်သွားတဲ့ အရာတွေကို ဖမ်းယူဖို့ Live Usage ကို အဆက်မပြတ် စောင့်ကြည့်နိုင်ပါတယ်။ ဥပမာ - Offline Tests တွေက Code-generation Agent ရဲ့ အောင်မြင်မှုနှုန်း တိုးတက်နေသလားဆိုတာကို ဖမ်းယူနိုင်ပေမယ့်၊ Online Monitoring ကတော့ အသုံးပြုသူတွေက Agent ရုန်းကန်နေရတဲ့ မေးခွန်းအမျိုးအစားအသစ်ကို စတင်မေးမြန်းနေပြီဆိုတာကို သတိပေးနိုင်ပါတယ်။ နှစ်ခုကို ပေါင်းစပ်ခြင်းက ပိုမိုခိုင်မာတဲ့ ပုံရိပ်ကို ပေးပါတယ်။ + +တကယ်တော့၊ Team များစွာဟာ Loop တစ်ခုကို လက်ခံကျင့်သုံးကြပါတယ်- *Offline Evaluation → Agent ဗားရှင်းအသစ်ကို Deploy လုပ်ခြင်း → Online Metrics များကို စောင့်ကြည့်ပြီး မအောင်မြင်သော ဥပမာအသစ်များကို စုဆောင်းခြင်း → ထိုဥပမာများကို Offline Test Set ထဲသို့ ထည့်သွင်းခြင်း → ထပ်ခါတလဲလဲ လုပ်ဆောင်ခြင်း*။ ဤနည်းဖြင့် အကဲဖြတ်မှုသည် အဆက်မပြတ် တိုးတက်နေပါတယ်။ + +## 🧑‍💻 လက်တွေ့မှာ ဘယ်လို အလုပ်လုပ်သလဲဆိုတာ ကြည့်ရအောင် + +နောက်အပိုင်းမှာတော့ ကျွန်တော်တို့ရဲ့ Agent ကို စောင့်ကြည့်ပြီး အကဲဖြတ်ဖို့အတွက် Observability Tool တွေကို ဘယ်လို အသုံးပြုနိုင်သလဲဆိုတဲ့ ဥပမာတွေကို ကြည့်ရှုသွားပါမယ်။ \ No newline at end of file diff --git a/units/my/bonus-unit3/building_your_pokemon_agent.mdx b/units/my/bonus-unit3/building_your_pokemon_agent.mdx new file mode 100644 index 00000000..04e20b0a --- /dev/null +++ b/units/my/bonus-unit3/building_your_pokemon_agent.mdx @@ -0,0 +1,256 @@ +# သင်ကိုယ်တိုင် Pokémon Battle Agent ကို တည်ဆောက်ခြင်း + +Agentic AI ကို ဂိမ်းများတွင် အသုံးပြုခြင်းရဲ့ အလားအလာများနှင့် ကန့်သတ်ချက်များကို လေ့လာပြီးနောက်၊ ယခုအခါ လက်တွေ့လုပ်ဆောင်ဖို့ အချိန်ရောက်ပါပြီ။ ဒီအပိုင်းမှာ သင်ဟာ သင်ခန်းစာတစ်လျှောက်လုံး လေ့လာခဲ့ရတဲ့ အသိပညာအားလုံးကို အသုံးပြုပြီး **Pokémon ပုံစံ အလှည့်ကျ တိုက်ခိုက်ရေး (Turn-based Combat)** အတွက် **သင်ကိုယ်တိုင် AI Agent တစ်ခုကို တည်ဆောက်** သွားရမှာ ဖြစ်ပါတယ်။ + +ကျွန်တော်တို့ ဒီစနစ်ကို အဓိက အစိတ်အပိုင်း (၄) ခုအဖြစ် ခွဲခြားပြီး တည်ဆောက်သွားပါမယ်။ + +* **Poke-env:** Rule-based သို့မဟုတ် Reinforcement Learning Pokémon Bot များကို လေ့ကျင့်ရန် ဒီဇိုင်းထုတ်ထားတဲ့ Python Library တစ်ခု။ +* **Pokémon Showdown:** သင့် Agent တိုက်ခိုက်မယ့် Online Battle Simulator တစ်ခု။ +* **LLMAgentBase:** သင့် LLM ကို Poke-env Battle Environment နဲ့ ချိတ်ဆက်ဖို့ ကျွန်တော်တို့ တည်ဆောက်ထားတဲ့ Custom Python Class တစ်ခု။ +* **TemplateAgent:** သင်ကိုယ်တိုင် ထူးခြားတဲ့ Battle Agent တစ်ခု ဖန်တီးဖို့အတွက် ဖြည့်စွက်ရမယ့် Starter Template တစ်ခု။ + +ဒီအစိတ်အပိုင်းတစ်ခုချင်းစီကို အသေးစိတ် လေ့လာကြည့်ရအောင်။ + +## 🧠 Poke-env + +![Battle gif](https://github.com/hsahovic/poke-env/raw/master/rl-gif.gif) + +[Poke-env](https://github.com/hsahovic/poke-env) ဟာ မူလက [Haris Sahovic](https://huggingface.co/hsahovic) မှ Reinforcement Learning Bot များကို လေ့ကျင့်ဖို့အတွက် တည်ဆောက်ခဲ့တဲ့ Python Interface တစ်ခု ဖြစ်ပါတယ်။ ဒါပေမယ့် ကျွန်တော်တို့ကတော့ ဒီနေရာမှာ Agentic AI အတွက် ပြန်လည်အသုံးပြုသွားမှာပါ။ + +ဒီ Library က သင့် Agent ကို ရိုးရှင်းတဲ့ API တစ်ခုကနေတစ်ဆင့် Pokémon Showdown နဲ့ ထိတွေ့ဆက်ဆံနိုင်စေပါတယ်။ + +၎င်းဟာ `Player` Class တစ်ခုကို ပံ့ပိုးပေးထားပြီး၊ သင့် Agent ဟာ ဒီ Class ကို အမွေဆက်ခံ (Inherit) ရမှာ ဖြစ်ပါတယ်။ ဒီ Class က Graphical Interface နဲ့ ဆက်သွယ်ဖို့ လိုအပ်တဲ့ အရာအားလုံးကို ခြုံငုံပေးထားပါတယ်။ + +**Documentation**: [poke-env.readthedocs.io](https://poke-env.readthedocs.io/en/stable/) +**Repository**: [github.com/hsahovic/poke-env](https://github.com/hsahovic/poke-env) + +## ⚔️ Pokémon Showdown + +[Pokémon Showdown](https://pokemonshowdown.com/) ဟာ သင့် Agent က Pokémon Battle များကို တိုက်ရိုက် ကစားမယ့် [Open-source](https://github.com/smogon/Pokemon-Showdown) Battle Simulator တစ်ခု ဖြစ်ပါတယ်။ + +၎င်းဟာ Battle များကို Real-time မှာ အတုယူပြီး ပြသဖို့အတွက် အပြည့်အစုံ Interface ကို ပံ့ပိုးပေးထားပါတယ်။ ကျွန်တော်တို့ရဲ့ Challenge မှာ သင့် Bot ဟာ လူသား Player တစ်ဦးလိုပဲ အလှည့်ကျ Move များကို ရွေးချယ်ပြီး တိုက်ခိုက်ရမှာ ဖြစ်ပါတယ်။ + +ပါဝင်သူအားလုံး အသုံးပြုနိုင်ဖို့အတွက် ကျွန်တော်တို့ Server တစ်ခုကို Deploy လုပ်ထားပါတယ်။ ဘယ်သူက အကောင်းဆုံး AI Battle Agent ကို တည်ဆောက်နိုင်မလဲဆိုတာ စောင့်ကြည့်ရအောင်! + +**Repository**: [github.com/smogon/Pokemon-Showdown](https://github.com/smogon/Pokemon-Showdown) +**Website**: [pokemonshowdown.com](https://pokemonshowdown.com/) + +## 🔌 LLMAgentBase + +`LLMAgentBase` ဟာ **Poke-env** မှ `Player` Class ကို ချဲ့ထွင်ထားတဲ့ Python Class တစ်ခု ဖြစ်ပါတယ်။ + +၎င်းဟာ သင့် **LLM** နဲ့ **Pokémon Battle Simulator** ကြားက တံတားအဖြစ် ဆောင်ရွက်ပြီး၊ Input/Output ပုံစံချခြင်း (Formatting) နဲ့ Battle ရဲ့ အခြေအနေ (Context) ကို ထိန်းသိမ်းပေးပါတယ်။ + +ဒီ Base Agent က ပတ်ဝန်းကျင်နဲ့ ထိတွေ့ဆက်ဆံဖို့အတွက် Tool များ ( `STANDARD_TOOL_SCHEMA` တွင် သတ်မှတ်ထားသည်) ကို ပံ့ပိုးပေးထားပါတယ်။ ၎င်းတို့မှာ- + +* `choose_move`: Battle အတွင်း တိုက်ခိုက်မှုကို ရွေးချယ်ရန်။ +* `choose_switch`: Pokémon ကို ပြောင်းလဲရန်။ + +LLM သည် ပွဲစဉ်အတွင်း ဆုံးဖြတ်ချက်များ ချမှတ်ရန်အတွက် ဤ Tool များကို အသုံးပြုရပါမယ်။ + +### 🧠 Core Logic (အဓိက ယုတ္တိဗေဒ) + +* `choose_move(battle: Battle)`: ဒါဟာ အလှည့်တိုင်း ခေါ်ဆိုတဲ့ အဓိက Method ဖြစ်ပါတယ်။ ၎င်းသည် `Battle` Object ကို ယူပြီး LLM ရဲ့ Output ကို အခြေခံကာ Action String တစ်ခုကို ပြန်ပေးပါတယ်။ + +### 🔧 Key Internal Methods (အဓိက အတွင်းပိုင်း Method များ) + +* `_format_battle_state(battle)`: လက်ရှိ Battle အခြေအနေကို LLM သို့ ပေးပို့ရန် သင့်လျော်သော String ပုံစံသို့ ပြောင်းလဲပေးပါတယ်။ +* `_find_move_by_name(battle, move_name)`: LLM ရဲ့ တုံ့ပြန်မှုများမှ `choose_move` ကို ခေါ်ဆိုသောအခါ Move နာမည်ဖြင့် ရှာဖွေပေးပါတယ်။ +* `_find_pokemon_by_name(battle, pokemon_name)`: LLM ရဲ့ Switch Command ကို အခြေခံပြီး ပြောင်းလဲရမည့် သီးခြား Pokémon ကို ရှာဖွေပေးပါတယ်။ +* `_get_llm_decision(battle_state)`: ဒီ Method ဟာ Base Class မှာ Abstract ဖြစ်ပါတယ်။ **သင်ကိုယ်တိုင် Agent မှာ ဒီ Method ကို အကောင်အထည်ဖော်ရပါမယ်** (နောက်အပိုင်းကို ကြည့်ပါ)။ ဒီ Method မှာ LLM ကို ဘယ်လို မေးမြန်းရမယ်၊ ပြီးတော့ ၎င်းရဲ့ တုံ့ပြန်မှုကို ဘယ်လို စစ်ဆေးအတည်ပြု (Parse) ရမယ်ဆိုတာကို သင်သတ်မှတ်ရပါမယ်။ + +ဆုံးဖြတ်ချက်ချမှတ်ပုံကို ပြသထားတဲ့ Code အပိုင်းအစကို အောက်မှာ ကြည့်ရှုနိုင်ပါတယ်။ + +```python +STANDARD_TOOL_SCHEMA = { + "choose_move": { + ... + }, + "choose_switch": { + ... + }, +} + +class LLMAgentBase(Player): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.standard_tools = STANDARD_TOOL_SCHEMA + self.battle_history = [] + + def _format_battle_state(self, battle: Battle) -> str: + active_pkmn = battle.active_pokemon + active_pkmn_info = f"Your active Pokemon: {active_pkmn.species} " \ + f"(Type: {'/'.join(map(str, active_pkmn.types))}) " \ + f"HP: {active_pkmn.current_hp_fraction * 100:.1f}% " \ + f"Status: {active_pkmn.status.name if active_pkmn.status else 'None'} " \ + f"Boosts: {active_pkmn.boosts}" + + opponent_pkmn = battle.opponent_active_pokemon + opp_info_str = "Unknown" + if opponent_pkmn: + opp_info_str = f"{opponent_pkmn.species} " \ + f"(Type: {'/'.join(map(str, opponent_pkmn.types))}) " \ + f"HP: {opponent_pkmn.current_hp_fraction * 100:.1f}% " \ + f"Status: {opponent_pkmn.status.name if opponent_pkmn.status else 'None'} " \ + f"Boosts: {opponent_pkmn.boosts}" + opponent_pkmn_info = f"Opponent's active Pokemon: {opp_info_str}" + + available_moves_info = "Available moves:\n" + if battle.available_moves: + available_moves_info += "\n".join( + [f"- {move.id} (Type: {move.type}, BP: {move.base_power}, Acc: {move.accuracy}, PP: {move.current_pp}/{move.max_pp}, Cat: {move.category.name})" + for move in battle.available_moves] + ) + else: + available_moves_info += "- None (Must switch or Struggle)" + + available_switches_info = "Available switches:\n" + if battle.available_switches: + available_switches_info += "\n".join( + [f"- {pkmn.species} (HP: {pkmn.current_hp_fraction * 100:.1f}%, Status: {pkmn.status.name if pkmn.status else 'None'})" + for pkmn in battle.available_switches] + ) + else: + available_switches_info += "- None" + + state_str = f"{active_pkmn_info}\n" \ + f"{opponent_pkmn_info}\n\n" \ + f"{available_moves_info}\n\n" \ + f"{available_switches_info}\n\n" \ + f"Weather: {battle.weather}\n" \ + f"Terrains: {battle.fields}\n" \ + f"Your Side Conditions: {battle.side_conditions}\n" \ + f"Opponent Side Conditions: {battle.opponent_side_conditions}" + return state_str.strip() + + def _find_move_by_name(self, battle: Battle, move_name: str) -> Optional[Move]: + normalized_name = normalize_name(move_name) + # Prioritize exact ID match + for move in battle.available_moves: + if move.id == normalized_name: + return move + # Fallback: Check display name (less reliable) + for move in battle.available_moves: + if move.name.lower() == move_name.lower(): + print(f"Warning: Matched move by display name '{move.name}' instead of ID '{move.id}'. Input was '{move_name}'.") + return move + return None + + def _find_pokemon_by_name(self, battle: Battle, pokemon_name: str) -> Optional[Pokemon]: + normalized_name = normalize_name(pokemon_name) + for pkmn in battle.available_switches: + # Normalize the species name for comparison + if normalize_name(pkmn.species) == normalized_name: + return pkmn + return None + + async def choose_move(self, battle: Battle) -> str: + battle_state_str = self._format_battle_state(battle) + decision_result = await self._get_llm_decision(battle_state_str) + print(decision_result) + decision = decision_result.get("decision") + error_message = decision_result.get("error") + action_taken = False + fallback_reason = "" + + if decision: + function_name = decision.get("name") + args = decision.get("arguments", {}) + if function_name == "choose_move": + move_name = args.get("move_name") + if move_name: + chosen_move = self._find_move_by_name(battle, move_name) + if chosen_move and chosen_move in battle.available_moves: + action_taken = True + chat_msg = f"AI Decision: Using move '{chosen_move.id}'." + print(chat_msg) + return self.create_order(chosen_move) + else: + fallback_reason = f"LLM chose unavailable/invalid move '{move_name}'." + else: + fallback_reason = "LLM 'choose_move' called without 'move_name'." + elif function_name == "choose_switch": + pokemon_name = args.get("pokemon_name") + if pokemon_name: + chosen_switch = self._find_pokemon_by_name(battle, pokemon_name) + if chosen_switch and chosen_switch in battle.available_switches: + action_taken = True + chat_msg = f"AI Decision: Switching to '{chosen_switch.species}'." + print(chat_msg) + return self.create_order(chosen_switch) + else: + fallback_reason = f"LLM chose unavailable/invalid switch '{pokemon_name}'." + else: + fallback_reason = "LLM 'choose_switch' called without 'pokemon_name'." + else: + fallback_reason = f"LLM called unknown function '{function_name}'." + + if not action_taken: + if not fallback_reason: + if error_message: + fallback_reason = f"API Error: {error_message}" + elif decision is None: + fallback_reason = "LLM did not provide a valid function call." + else: + fallback_reason = "Unknown error processing LLM decision." + + print(f"Warning: {fallback_reason} Choosing random action.") + + if battle.available_moves or battle.available_switches: + return self.choose_random_move(battle) + else: + print("AI Fallback: No moves or switches available. Using Struggle/Default.") + return self.choose_default_move(battle) + + async def _get_llm_decision(self, battle_state: str) -> Dict[str, Any]: + raise NotImplementedError("Subclasses must implement _get_llm_decision") +``` + +**Source Code အပြည့်အစုံ**: [agents.py](https://huggingface.co/spaces/Jofthomas/twitch_streaming/blob/main/agents.py) + +## 🧪 TemplateAgent + +အခုမှ စိတ်ဝင်စားစရာကောင်းတဲ့ အပိုင်းကို ရောက်ပါပြီ! `LLMAgentBase` ကို အခြေခံအုတ်မြစ်အဖြစ် အသုံးပြုပြီး၊ Leaderboard မှာ ထိပ်ဆုံးရောက်ဖို့အတွက် **သင်ကိုယ်တိုင်ရဲ့ Strategy ပါဝင်တဲ့ Agent ကို အကောင်အထည်ဖော်ရမယ့် အချိန်** ဖြစ်ပါတယ်။ + +သင်ဟာ ဒီ Template ကနေ စတင်ပြီး ကိုယ်ပိုင် Logic များကို တည်ဆောက်ရပါမယ်။ သင့်ကို လမ်းညွှန်ပေးနိုင်ဖို့အတွက် **OpenAI**၊ **Mistral** နဲ့ **Gemini** မော်ဒယ်များကို အသုံးပြုထားတဲ့ [ဥပမာ အပြည့်အစုံ (၃) ခု](https://huggingface.co/spaces/Jofthomas/twitch_streaming/blob/main/agents.py) ကိုလည်း ကျွန်တော်တို့ ပံ့ပိုးပေးထားပါတယ်။ + +Template ရဲ့ ရိုးရှင်းတဲ့ ပုံစံကို အောက်မှာ ဖော်ပြထားပါတယ်။ + +```python +class TemplateAgent(LLMAgentBase): + """Uses Template AI API for decisions.""" + def __init__(self, api_key: str = None, model: str = "model-name", *args, **kwargs): + super().__init__(*args, **kwargs) + self.model = model + self.template_client = TemplateModelProvider(api_key=...) + self.template_tools = list(self.standard_tools.values()) + + async def _get_llm_decision(self, battle_state: str) -> Dict[str, Any]: + """Sends state to the LLM and gets back the function call decision.""" + system_prompt = ( + "You are a ..." + ) + user_prompt = f"..." + + try: + response = await self.template_client.chat.completions.create( + model=self.model, + messages=[ + {"role": "system", "content": system_prompt}, + {"role": "user", "content": user_prompt}, + ], + ) + message = response.choices[0].message + + return {"decision": {"name": function_name, "arguments": arguments}} + + except Exception as e: + print(f"Unexpected error during call: {e}") + return {"error": f"Unexpected error: {e}"} +``` + +ဒီ Code ဟာ အသင့်အတိုင်း Run လို့ရမှာ မဟုတ်ပါဘူး။ ဒါဟာ သင့်ရဲ့ Custom Logic အတွက် ပုံစံခွက် (Blueprint) တစ်ခုသာ ဖြစ်ပါတယ်။ + +အစိတ်အပိုင်းအားလုံး အဆင်သင့်ဖြစ်ပြီဆိုရင်တော့ ယှဉ်ပြိုင်နိုင်တဲ့ Agent တစ်ခုကို တည်ဆောက်ဖို့ သင့်အလှည့်ပါပဲ။ နောက်အပိုင်းမှာ သင့် Agent ကို ကျွန်တော်တို့ရဲ့ Server မှာ ဘယ်လို Deploy လုပ်ရမယ်၊ ပြီးတော့ တခြားသူတွေနဲ့ Real-time မှာ ဘယ်လို တိုက်ခိုက်ရမယ်ဆိုတာကို ပြသပေးသွားပါမယ်။ + +တိုက်ပွဲ စတင်ပါစေ! 🔥 \ No newline at end of file diff --git a/units/my/bonus-unit3/conclusion.mdx b/units/my/bonus-unit3/conclusion.mdx new file mode 100644 index 00000000..38ca0944 --- /dev/null +++ b/units/my/bonus-unit3/conclusion.mdx @@ -0,0 +1,21 @@ +## နိဂုံးချုပ် (Conclusion) + +ဒီအထိ ရောက်လာပြီဆိုရင် ဂုဏ်ယူပါတယ်! 🥳 သင်ဟာ ကိုယ်ပိုင် Pokémon တိုက်ခိုက်ရေး Agent ကို အောင်မြင်စွာ တည်ဆောက်နိုင်ခဲ့ပါပြီ! ⚔️🎮 + +သင်ဟာ **Agentic Workflow များရဲ့ အခြေခံသဘောတရားများ** ကို ကျွမ်းကျင်စွာ ကျော်ဖြတ်ခဲ့ပြီး၊ **LLM (Large Language Model)** ကို Game ပတ်ဝန်းကျင်တစ်ခုနဲ့ ချိတ်ဆက်ကာ၊ တိုက်ပွဲရဲ့ စိန်ခေါ်မှုတွေကို ရင်ဆိုင်ဖို့ အသင့်ဖြစ်နေတဲ့ ဉာဏ်ရည်ထက်မြက်တဲ့ Agent တစ်ခုကို အသုံးချနိုင်ခဲ့ပါပြီ။ + +ဒါပေမယ့် ခရီးစဉ်က ဒီမှာတင် မပြီးဆုံးသေးပါဘူး! + +သင့်ရဲ့ ပထမဆုံး Agent ကို တည်ဆောက်ပြီး အသုံးပြုနေပြီဆိုရင်၊ ၎င်းကို ဘယ်လို ဆက်လက်တိုးတက်အောင် လုပ်ဆောင်နိုင်မလဲဆိုတာ စဉ်းစားကြည့်ပါ။ + +* သူ့ရဲ့ **မဟာဗျူဟာမြောက် စဉ်းစားပုံ** ကို ပိုမိုကောင်းမွန်အောင် လုပ်ဆောင်နိုင်မလား။ +* **မှတ်ဉာဏ် ယန္တရား (Memory Mechanism)** သို့မဟုတ် **တုံ့ပြန်ချက် လည်ပတ်မှု (Feedback Loop)** တွေ ထည့်သွင်းလိုက်ရင် သူ့ရဲ့ စွမ်းဆောင်ရည် ဘယ်လို ပြောင်းလဲသွားမလဲ။ +* တိုက်ပွဲမှာ ပိုမို ယှဉ်ပြိုင်နိုင်စွမ်းရှိအောင် ဘယ်လို စမ်းသပ်မှုတွေ လုပ်ဆောင်နိုင်မလဲ။ + +ကျွန်တော်တို့ရဲ့ Course အပေါ် သင့်ရဲ့ အမြင်တွေကို သိရှိလိုပြီး၊ နောင်လာမယ့် သင်ယူသူတွေအတွက် ပိုမိုကောင်းမွန်အောင် ဘယ်လို လုပ်ဆောင်နိုင်မလဲဆိုတာကိုလည်း သိချင်ပါတယ်။ + +အကြံပြုချက်များ ပေးလိုပါက 👉 [ဒီ Form ကို ဖြည့်သွင်းပေးပါ](https://docs.google.com/forms/d/e/1FAIpQLSe9VaONn0eglax0uTwi29rIn4tM7H2sYmmybmG5jJNlE5v0xA/viewform?usp=dialog) + +ကျွန်တော်တို့နဲ့အတူ သင်ယူပေးတဲ့အတွက် ကျေးဇူးတင်ပါတယ်။ အမြဲတမ်း မှတ်ထားပါ- + +**ဆက်လက်လေ့လာပါ၊ ဆက်လက်လေ့ကျင့်ပါ၊ ဆက်လက်တိုက်ခိုက်ပါ၊ အမြဲတမ်း အကောင်းဆုံးဖြစ်ပါစေ!** 🤗 \ No newline at end of file diff --git a/units/my/bonus-unit3/from-llm-to-agents.mdx b/units/my/bonus-unit3/from-llm-to-agents.mdx new file mode 100644 index 00000000..1cacd581 --- /dev/null +++ b/units/my/bonus-unit3/from-llm-to-agents.mdx @@ -0,0 +1,38 @@ +# LLM များမှ AI Agent များဆီသို့ + +ကျွန်တော်တို့ [ပထမဆုံး အခန်း](https://huggingface.co/learn/agents-course/unit1/introduction) မှာ လေ့လာခဲ့ရတဲ့အတိုင်း AI Agent တွေဟာ စီမံကိန်းဆွဲနိုင်ပြီး ဆုံးဖြတ်ချက်တွေ ချမှတ်နိုင်ပါတယ်။ + +LLM တွေက NPC (Non-Player Character) တွေနဲ့ ပိုမို သဘာဝကျတဲ့ အပြန်အလှန် ဆက်ဆံမှုတွေကို ဖြစ်ပေါ်စေနိုင်ပေမယ့်၊ Agentic AI ကတော့ ဇာတ်ကောင်တွေကို ဆုံးဖြတ်ချက်ချမှတ်စေခြင်း၊ လုပ်ဆောင်ချက်တွေ စီစဉ်စေခြင်းနဲ့ ပြောင်းလဲနေတဲ့ ပတ်ဝန်းကျင်နဲ့ လိုက်လျောညီထွေ ဖြစ်အောင် လုပ်ဆောင်စေခြင်းအားဖြင့် နောက်ထပ် ခြေလှမ်းတစ်လှမ်း တိုးသွားပါတယ်။ + +ဒီခြားနားချက်ကို ရှင်းရှင်းလင်းလင်း မြင်သာစေဖို့အတွက် Classic RPG (Role-Playing Game) ထဲက NPC တစ်ခုကို စဉ်းစားကြည့်ရအောင်။ + +* **LLM နဲ့ဆိုရင်:** NPC ဟာ သင့်ရဲ့ မေးခွန်းတွေကို ပိုမို သဘာဝကျပြီး ကွဲပြားတဲ့ ပုံစံမျိုးနဲ့ တုံ့ပြန်နိုင်ပါတယ်။ ဒါဟာ စကားပြောဆိုမှုအတွက် အလွန်ကောင်းမွန်ပေမယ့်၊ NPC ဟာ သင်က တစ်ခုခု မလုပ်မချင်း ငြိမ်သက်နေမှာဖြစ်ပြီး၊ သူ့ဘာသာသူ လှုပ်ရှားမှာ မဟုတ်ပါဘူး။ +* **Agentic AI နဲ့ဆိုရင်:** NPC ဟာ သင့်နဲ့ တိုက်ရိုက် ထိတွေ့ဆက်ဆံခြင်း မရှိရင်တောင်မှ အကူအညီ ရှာဖို့၊ ထောင်ချောက်ဆင်ဖို့ ဒါမှမဟုတ် သင့်ကို လုံးဝ ရှောင်ရှားဖို့ ဆုံးဖြတ်နိုင်ပါတယ်။ + +ဒီလို သေးငယ်တဲ့ ပြောင်းလဲမှုလေးက အရာအားလုံးကို ပြောင်းလဲစေပါတယ်။ ကျွန်တော်တို့ဟာ Script ရေးသားထားတဲ့ တုံ့ပြန်သူတွေဆီကနေ Game ကမ္ဘာထဲမှာ ကိုယ်ပိုင် အုပ်ချုပ်ခွင့်ရှိတဲ့ သရုပ်ဆောင်တွေဆီကို ရွေ့လျားနေတာ ဖြစ်ပါတယ်။ + +ဒီပြောင်းလဲမှုက NPC တွေဟာ ရည်မှန်းချက် ဦးတည်တဲ့ အပြုအမူတွေကတစ်ဆင့် သူတို့ရဲ့ ပတ်ဝန်းကျင်နဲ့ တိုက်ရိုက် ထိတွေ့ဆက်ဆံနိုင်တယ်လို့ ဆိုလိုပါတယ်။ ဒါဟာ နောက်ဆုံးမှာ ပိုမို **လှုပ်ရှားမှုရှိပြီး ခန့်မှန်းရခက်တဲ့ Game ကစားနည်း** ကို ဖြစ်ပေါ်စေပါတယ်။ + +Agentic AI ဟာ NPC တွေကို အောက်ပါ စွမ်းရည်တွေနဲ့ အားဖြည့်ပေးပါတယ်။ + +* **ကိုယ်ပိုင် အုပ်ချုပ်ခွင့် (Autonomy):** Game ရဲ့ အခြေအနေပေါ် မူတည်ပြီး ကိုယ်ပိုင် ဆုံးဖြတ်ချက်တွေ ချမှတ်နိုင်ခြင်း။ +* **လိုက်လျောညီထွေမှု (Adaptability):** ကစားသမားရဲ့ လုပ်ဆောင်ချက်တွေကို တုံ့ပြန်တဲ့အနေနဲ့ နည်းဗျူဟာတွေကို ချိန်ညှိနိုင်ခြင်း။ +* **မှတ်ဉာဏ် (Persistence):** အနာဂတ် အပြုအမူတွေကို အသိပေးဖို့အတွက် အတိတ်က အပြန်အလှန် ဆက်ဆံမှုတွေကို မှတ်မိထားခြင်း။ + +ဒါက NPC တွေကို တုံ့ပြန်မှုသာ ပေးနိုင်တဲ့ အရာတွေ (သင့်ရဲ့ Input တွေကို တုံ့ပြန်တဲ့ အရာတွေ) ကနေ Game ကမ္ဘာထဲမှာ တက်ကြွစွာ ပါဝင်သူတွေအဖြစ် ပြောင်းလဲစေပြီး၊ ဆန်းသစ်တဲ့ Game ကစားနည်းအတွက် လမ်းဖွင့်ပေးလိုက်တာပဲ ဖြစ်ပါတယ်။ + +## Agent များရဲ့ အကြီးမားဆုံး ကန့်သတ်ချက်- **နှေးကွေးခြင်း** (ယခုအချိန်အထိ) + +ဒါပေမယ့်၊ အခုလောလောဆယ်မှာတော့ အရမ်းကြီး အကောင်းမြင်မနေပါနဲ့ဦး။ Agentic AI ဟာ သူ့ရဲ့ အလားအလာတွေ ရှိနေပေမယ့်၊ လက်ရှိမှာ Real-time အသုံးချမှုတွေမှာ စိန်ခေါ်မှုတွေနဲ့ ရင်ဆိုင်နေရပါတယ်။ + +**ဆင်ခြင်သုံးသပ်ခြင်း (Reasoning)** နဲ့ **စီမံကိန်းဆွဲခြင်း (Planning)** လုပ်ငန်းစဉ်တွေက **Latency (နှောင့်နှေးမှု)** ကို ဖြစ်ပေါ်စေနိုင်ပါတယ်။ ဒါကြောင့် *Doom* ဒါမှမဟုတ် *Super Mario Bros.* လိုမျိုး လျင်မြန်တဲ့ Game တွေအတွက် သိပ်ပြီး မသင့်တော်ပါဘူး။ + +[_Claude Plays Pokémon_](https://www.twitch.tv/claudeplayspokemon) ရဲ့ ဥပမာကို ကြည့်ပါ။ **စဉ်းစားဖို့ (Think)** လိုအပ်တဲ့ Token အရေအတွက်အပြင်၊ **လုပ်ဆောင်ဖို့ (Act)** လိုအပ်တဲ့ Token အရေအတွက်ကိုပါ ထည့်သွင်းစဉ်းစားလိုက်တဲ့အခါ၊ Real-time ကစားနိုင်ဖို့အတွက် လုံးဝ ကွဲပြားတဲ့ Decoding နည်းဗျူဟာတွေ လိုအပ်တယ်ဆိုတာ ရှင်းရှင်းလင်းလင်း သိသာပါတယ်။ + +Claude plays Pokémon + +> **[ထပ်ဆောင်း အချက်အလက်]** လက်ရှိ LLM များဟာ တစ်စက္ကန့်ကို Token အနည်းငယ်သာ ထုတ်ပေးနိုင်ပါသေးတယ်။ Game အများစုက တစ်စက္ကန့်ကို ၃၀ Frame (30 FPS) နှုန်းနဲ့ လည်ပတ်ဖို့ လိုအပ်ပါတယ်။ ဆိုလိုတာက Real-time AI Agent တစ်ခုဟာ တစ်စက္ကန့်ကို အကြိမ် ၃၀ လှုပ်ရှားနိုင်ဖို့ လိုအပ်ပါတယ်။ ဒီလို လျင်မြန်တဲ့ တုံ့ပြန်မှုနှုန်းဟာ လက်ရှိ Agentic LLM တွေနဲ့တော့ မဖြစ်နိုင်သေးပါဘူး။ + +ဒါပေမယ့် **Pokémon** လိုမျိုး **အလှည့်ကျ ကစားရတဲ့ Game (Turn-based games)** တွေကတော့ AI အတွက် စဉ်းစားဖို့နဲ့ မဟာဗျူဟာမြောက် ဆုံးဖြတ်ချက်တွေ ချမှတ်ဖို့ လုံလောက်တဲ့ အချိန်ကို ပေးတဲ့အတွက် အကောင်းဆုံး ရွေးချယ်စရာတွေ ဖြစ်ပါတယ်။ + +ဒါကြောင့် နောက်အပိုင်းမှာ၊ သင်ကိုယ်တိုင် Pokémon ပုံစံ အလှည့်ကျ တိုက်ခိုက်ရေး Game မှာ တိုက်ခိုက်ဖို့အတွက် သင့်ရဲ့ ကိုယ်ပိုင် AI Agent ကို တည်ဆောက်ရမှာ ဖြစ်ပြီး၊ ၎င်းကို သင်ကိုယ်တိုင် စိန်ခေါ်နိုင်မှာ ဖြစ်ပါတယ်။ စတင်လိုက်ရအောင်! \ No newline at end of file diff --git a/units/my/bonus-unit3/introduction.mdx b/units/my/bonus-unit3/introduction.mdx new file mode 100644 index 00000000..9b5dacdd --- /dev/null +++ b/units/my/bonus-unit3/introduction.mdx @@ -0,0 +1,25 @@ +## နိဒါန်း (Introduction) + +Bonus Unit 3 AI in Games + +🎶 အကောင်းဆုံးဖြစ်ချင်တယ်... 🎶 + +**Bonus Unit** အနေနဲ့ ကြိုဆိုပါတယ်။ ဒီအပိုင်းမှာတော့ **AI Agent တွေနဲ့ ဂိမ်းလောက** ရဲ့ စိတ်လှုပ်ရှားစရာ ပေါင်းစပ်မှုကို လေ့လာသွားပါမယ်! 🎮🤖 + +ဂိမ်းတစ်ခုကို စိတ်ကူးကြည့်ပါ။ အဲဒီဂိမ်းထဲက ကစားလို့မရတဲ့ ဇာတ်ကောင်တွေ (Non-Playable Characters - NPCs) ဟာ ကြိုတင်ရေးထားတဲ့ စာသားအတိုင်း လိုက်ပြောနေရုံသက်သက် မဟုတ်ဘဲ၊ ကစားသူနဲ့ စကားပြောဆိုမှုတွေကို ပြောင်းလဲနိုင်တယ်၊ ကစားသူရဲ့ နည်းဗျူဟာတွေကို လိုက်လျောညီထွေဖြစ်အောင် ပြုပြင်နိုင်တယ်၊ ပြီးတော့ ဇာတ်လမ်းကလည်း အလိုအလျောက် တိုးတက်ပြောင်းလဲနေနိုင်ပါတယ်။ ဒါဟာ **LLM တွေနဲ့ Agentic Behavior တွေကို ဂိမ်းတွေမှာ ပေါင်းစပ်လိုက်ခြင်းရဲ့ စွမ်းအား** ပဲ ဖြစ်ပါတယ်။ ဒီလိုပေါင်းစပ်မှုက **အရင်က မရှိခဲ့ဖူးတဲ့ ဇာတ်လမ်းဇာတ်ကွက်တွေနဲ့ ကစားပုံအသစ်တွေ** ကို ဖန်တီးပေးနိုင်ပါတယ်။ + +ဒီ Bonus Unit မှာ သင်ဟာ- + +* **Pokémon ပုံစံ အလှည့်ကျ တိုက်ခိုက်မှုများ (Turn-based battles)** ကို လုပ်ဆောင်နိုင်တဲ့ AI Agent တစ်ခုကို ဘယ်လို တည်ဆောက်ရမလဲဆိုတာကို သင်ယူရပါမယ်။ +* အဲဒီ Agent နဲ့ ကိုယ်တိုင် ကစားနိုင်မယ်၊ ဒါမှမဟုတ် အခြား Agent တွေကို Online မှာ စိန်ခေါ်နိုင်ပါမယ်။ + +AI Community မှာ LLM တွေကို အသုံးပြုပြီး Pokémon ကစားတဲ့ [ဥပမာတွေ](https://www.anthropic.com/research/visible-extended-thinking) [အချို့](https://www.twitch.tv/gemini_plays_pokemon) ကို ကျွန်တော်တို့ မြင်တွေ့ခဲ့ရပြီးပါပြီ။ ဒီ Unit မှာတော့ သင်တို့ Course တစ်လျှောက် သင်ယူခဲ့ရတဲ့ Idea တွေနဲ့ ကိုယ်ပိုင် Agent ကို အသုံးပြုပြီး အဲဒီလိုမျိုး ဘယ်လိုမျိုး ပြန်လည်ဖန်တီးနိုင်မလဲဆိုတာကို လေ့လာရပါမယ်။ + +Claude plays Pokémon + +## ပိုမိုနက်ရှိုင်းစွာ လေ့လာချင်ပါသလား? + +* 🎓 **ဂိမ်းများတွင် LLM များကို ကျွမ်းကျင်ပိုင်နိုင်စွာ အသုံးပြုခြင်း:** ဂိမ်းဖန်တီးမှု နယ်ပယ်ကို ပိုမိုနက်ရှိုင်းစွာ လေ့လာဖို့အတွက် ကျွန်တော်တို့ရဲ့ [Machine Learning for Games Course](https://hf.co/learn/ml-games-course) ကို ဆက်လက်လေ့လာနိုင်ပါတယ်။ +* 📘 **AI Playbook ကို ရယူပါ:** ဉာဏ်ရည်မြင့်မားသော ဂိမ်းဒီဇိုင်း၏ အနာဂတ်ကို လေ့လာထားသည့် [AI Playbook for Game Developers](https://thomassimonini.substack.com/) တွင် အချက်အလက်များ၊ Idea များနှင့် လက်တွေ့ကျသော အကြံပြုချက်များကို ရှာဖွေတွေ့ရှိနိုင်ပါတယ်။ + +ဒါပေမယ့် Agent ကို မတည်ဆောက်ခင်မှာ၊ LLM တွေကို ဂိမ်းတွေမှာ ဘယ်လို အသုံးပြုနေပြီလဲဆိုတာကို **စိတ်ဝင်စားစရာကောင်းတဲ့ လက်တွေ့ဥပမာ (၄) ခု** နဲ့ ကြည့်လိုက်ရအောင်။ diff --git a/units/my/bonus-unit3/launching_agent_battle.mdx b/units/my/bonus-unit3/launching_agent_battle.mdx new file mode 100644 index 00000000..81bed18a --- /dev/null +++ b/units/my/bonus-unit3/launching_agent_battle.mdx @@ -0,0 +1,77 @@ +## သင်၏ Pokémon Battle Agent ကို စတင်ခြင်း + +ကဲ... တိုက်ပွဲဝင်ဖို့ အချိန်တန်ပါပြီ! ⚡️ + +### Stream Agent နှင့် တိုက်ခိုက်ခြင်း! + +သင်ကိုယ်တိုင် Agent တစ်ခု တည်ဆောက်ဖို့ စိတ်မပါသေးဘဲ၊ Pokémon တိုက်ပွဲတွေမှာ Agent တွေရဲ့ စွမ်းဆောင်ရည်ကို သိချင်ရုံသက်သက်ဆိုရင်၊ ကျွန်တော်တို့ရဲ့ [Twitch Channel](https://www.twitch.tv/jofthomas) မှာ အလိုအလျောက် ထုတ်လွှင့်နေတဲ့ Live Stream ကို ကြည့်ရှုနိုင်ပါတယ်။ + + + +Stream မှာရှိတဲ့ Agent နဲ့ တိုက်ခိုက်ဖို့အတွက် အောက်ပါ ညွှန်ကြားချက်များကို လိုက်နာနိုင်ပါတယ်။ + +**ညွှန်ကြားချက်များ:** + +1. **Pokémon Showdown Space** ကို သွားပါ- [Link Here](https://huggingface.co/spaces/Jofthomas/Pokemon_showdown) +2. **သင်၏ နာမည်ကို ရွေးချယ်ပါ** (ညာဘက်အပေါ်ထောင့်မှာ ရှိပါတယ်)။ +3. **လက်ရှိ Agent ရဲ့ Username** ကို ရှာဖွေပါ။ စစ်ဆေးရန်- + * **Stream Display** ကို ကြည့်ပါ- [Link Here](https://www.twitch.tv/jofthomas) +4. Showdown Space မှာ အဲဒီ Username ကို **ရှာဖွေပြီး** **တိုက်ပွဲဖိတ်ခေါ်စာ (Battle Invitation)** ပို့ပါ။ + +> **သတိပြုရန်:** တစ်ချိန်တည်းမှာ Agent တစ်ခုတည်းသာ Online ရှိနေပါတယ်။ ဒါကြောင့် မှန်ကန်တဲ့ နာမည်ကို ရွေးချယ်ဖို့ သေချာပါစေ။ + +--- + +### Pokémon Battle Agent စိန်ခေါ်သူ (Challenger) + +ပြီးခဲ့တဲ့ အပိုင်းကနေ သင်ကိုယ်တိုင် Pokémon Battle Agent တစ်ခု ဖန်တီးခဲ့တယ်ဆိုရင်၊ **"ဒီ Agent ကို တခြားသူတွေနဲ့ ဘယ်လို စမ်းသပ်ရမလဲ"** လို့ တွေးနေပါလိမ့်မယ်။ ကဲ... ရှာဖွေကြည့်ရအောင်! + +ဒီရည်ရွယ်ချက်အတွက် ကျွန်တော်တို့ သီးသန့် တည်ဆောက်ထားတဲ့ [Hugging Face Space](https://huggingface.co/spaces/PShowdown/pokemon_agents) တစ်ခု ရှိပါတယ်။ + + + +ဒီ Space ဟာ ကျွန်တော်တို့ရဲ့ ကိုယ်ပိုင် **Pokémon Showdown Server** နဲ့ ချိတ်ဆက်ထားပါတယ်။ ဒီနေရာမှာ သင်ရဲ့ Agent ဟာ တခြားသူတွေရဲ့ Agent တွေနဲ့ AI စွမ်းအားသုံး မော်ကွန်းဝင် တိုက်ပွဲတွေ ဆင်နွှဲနိုင်ပါတယ်။ + +#### သင်၏ Agent ကို ဘယ်လို စတင်မလဲ (How to Launch Your Agent) + +သင်၏ Agent ကို တိုက်ပွဲနယ်ပယ် (Arena) ထဲသို့ အသက်သွင်းဖို့အတွက် အောက်ပါ အဆင့်များကို လိုက်နာပါ။ + +**၁။ Space ကို ပွားယူပါ (Duplicate the Space)** + +Space ရဲ့ ညာဘက်အပေါ်ထောင့်မှာရှိတဲ့ အစက်သုံးစက်ကို နှိပ်ပြီး **“Duplicate this Space”** ကို ရွေးချယ်ပါ။ (မှတ်ချက်- Hugging Face မှာ Account ဝင်ထားဖို့ လိုအပ်ပါတယ်)။ + +**၂။ သင်၏ Agent Code ကို `agent.py` ထဲသို့ ထည့်ပါ** + +ဖိုင်ကို ဖွင့်ပြီး သင်ရေးသားထားတဲ့ Agent Code များကို ကူးထည့်ပါ။ လမ်းညွှန်ချက်အတွက် [ဒီဥပမာ](https://huggingface.co/spaces/PShowdown/pokemon_agents/blob/main/agents.py) ကို လိုက်နာနိုင်ပါတယ်၊ ဒါမှမဟုတ် [Project Structure](https://huggingface.co/spaces/PShowdown/pokemon_agents/tree/main) ကို စစ်ဆေးကြည့်ရှုနိုင်ပါတယ်။ + +**၃။ သင်၏ Agent ကို `app.py` တွင် မှတ်ပုံတင်ပါ** + +သင်၏ Agent နာမည်နှင့် ၎င်း၏ Logic များကို Dropdown Menu တွင် ပေါ်လာစေရန် `app.py` ဖိုင်ထဲသို့ ထည့်သွင်းပါ။ [ဒီ Code Snippet](https://huggingface.co/spaces/PShowdown/pokemon_agents/blob/main/app.py) ကို ကြည့်ရှုပြီး လှုံ့ဆော်မှု ရယူနိုင်ပါတယ်။ + +**၄။ သင်၏ Agent ကို ရွေးချယ်ပါ** + +ထည့်သွင်းပြီးတာနဲ့ သင်၏ Agent ဟာ **“Select Agent”** Dropdown Menu မှာ ပေါ်လာပါလိမ့်မယ်။ စာရင်းထဲကနေ ရွေးချယ်လိုက်ပါ! ✅ + +**၅။ သင်၏ Pokémon Showdown Username ကို ထည့်ပါ** + +Username သည် iframe ၏ **"Choose name"** နေရာတွင် ပြထားသည့် နာမည်နှင့် ကိုက်ညီမှုရှိစေရန် သေချာပါစေ။ သင်၏ တရားဝင် Account ဖြင့်လည်း ချိတ်ဆက်နိုင်ပါတယ်။ + +**၆။ “Send Battle Invitation” ကို နှိပ်ပါ** + +သင်၏ Agent သည် ရွေးချယ်ထားသော ပြိုင်ဘက်ထံသို့ ဖိတ်ခေါ်စာ ပို့ပါလိမ့်မယ်။ ဖိတ်ခေါ်စာသည် မျက်နှာပြင်ပေါ်တွင် ပေါ်လာပါလိမ့်မယ်! + +**၇။ တိုက်ပွဲကို လက်ခံပြီး ပျော်ရွှင်စွာ ကြည့်ရှုပါ!** + +တိုက်ပွဲ စတင်ပါစေ! အသိဉာဏ်အရှိဆုံး Agent အနိုင်ရပါစေ! 🥊 + +သင်ဖန်တီးထားတဲ့ Agent ရဲ့ လုပ်ဆောင်ချက်ကို မြင်တွေ့ဖို့ အသင့်ဖြစ်ပြီလား? AI စွမ်းအားပြိုင်ပွဲ စတင်ပါပြီ! \ No newline at end of file diff --git a/units/my/bonus-unit3/state-of-art.mdx b/units/my/bonus-unit3/state-of-art.mdx new file mode 100644 index 00000000..89151c67 --- /dev/null +++ b/units/my/bonus-unit3/state-of-art.mdx @@ -0,0 +1,53 @@ +# ဂိမ်းများတွင် LLM များ အသုံးပြုမှု၏ ခေတ်မီအခြေအနေ (The State of the Art in Using LLMs in Games) + +ဒီနယ်ပယ်မှာ ဘယ်လောက်အထိ တိုးတက်မှုတွေ ရှိနေပြီလဲဆိုတာကို သိရှိနိုင်ဖို့အတွက်၊ ဂိမ်းလောကမှာ LLM တွေကို ပေါင်းစပ်ထားတာကို ပြသနေတဲ့ Tech Demo သုံးခုနဲ့ ထုတ်ဝေပြီးသား ဂိမ်းတစ်ခုကို လေ့လာကြည့်ရအောင်။ + +## 🕵️‍♂️ Covert Protocol (NVIDIA နှင့် Inworld AI) + +Covert Protocol + +GDC 2024 မှာ မိတ်ဆက်ခဲ့တဲ့ *Covert Protocol* ဟာ သင့်ကို စုံထောက်တစ်ဦးနေရာမှာ ထားရှိတဲ့ Tech Demo တစ်ခု ဖြစ်ပါတယ်။ + +ဒီ Demo မှာ စိတ်ဝင်စားစရာကောင်းတာက AI စွမ်းအားသုံး NPC တွေဟာ သင်မေးမြန်းတာတွေကို Real-time (အချိန်နှင့်တပြေးညီ) တုံ့ပြန်နိုင်ပြီး၊ သင့်ရဲ့ အပြန်အလှန်ဆက်ဆံမှုအပေါ် မူတည်ပြီး ဇာတ်လမ်းကို လွှမ်းမိုးနိုင်ခြင်းပဲ ဖြစ်ပါတယ်။ + +ဒီ Demo ကို Unreal Engine 5 နဲ့ တည်ဆောက်ထားပြီး၊ NVIDIA ရဲ့ Avatar Cloud Engine (ACE) နဲ့ Inworld ရဲ့ AI နည်းပညာတွေကို အသုံးပြုထားတာကြောင့် လက်တွေ့ဆန်တဲ့ ဇာတ်ကောင် အပြန်အလှန်ဆက်ဆံမှုတွေကို ဖန်တီးပေးနိုင်ပါတယ်။ + +ပိုမိုသိရှိလိုပါက 👉 [Inworld AI Blog](https://inworld.ai/blog/nvidia-inworld-ai-demo-on-device-capabilities) + +## 🤖 NEO NPCs (Ubisoft) + +Neo NPC + +Ubisoft ကလည်း GDC 2024 မှာပဲ Generative AI စွမ်းအားသုံး NPC တွေကို ပြသထားတဲ့ *NEO NPCs* ဆိုတဲ့ Prototype ကို မိတ်ဆက်ခဲ့ပါတယ်။ + +ဒီဇာတ်ကောင်တွေဟာ သူတို့ရဲ့ ပတ်ဝန်းကျင်ကို သိရှိနိုင်တယ်၊ အရင်က အပြန်အလှန်ဆက်ဆံမှုတွေကို မှတ်မိနိုင်တယ်၊ ပြီးတော့ ကစားသူတွေနဲ့ အဓိပ္ပာယ်ရှိတဲ့ စကားပြောဆိုမှုတွေကို လုပ်ဆောင်နိုင်ပါတယ်။ + +ဒီ Idea ရဲ့ ရည်ရွယ်ချက်ကတော့ ကစားသူတွေဟာ NPC တွေနဲ့ တကယ့် အပြန်အလှန်ဆက်ဆံမှုမျိုး ရရှိနိုင်မယ့် ပိုမိုနှစ်မြှုပ်မှုရှိပြီး တုံ့ပြန်မှုကောင်းတဲ့ ဂိမ်းကမ္ဘာတွေကို ဖန်တီးဖို့ပဲ ဖြစ်ပါတယ်။ + +ပိုမိုသိရှိလိုပါက 👉 [Inworld AI Blog](https://inworld.ai/blog/gdc-2024) + +## ⚔️ Mecha BREAK (NVIDIA's ACE ပါဝင်သည်) + +Mecha BREAK + +မကြာမီ ထွက်ရှိလာမယ့် Multiplayer Mech Battle Game ဖြစ်တဲ့ *Mecha BREAK* ဟာ AI စွမ်းအားသုံး NPC တွေကို အသက်သွင်းဖို့အတွက် NVIDIA ရဲ့ ACE နည်းပညာကို ပေါင်းစပ်ထားပါတယ်။ + +ကစားသူတွေဟာ သဘာဝဘာသာစကား (Natural Language) ကို အသုံးပြုပြီး ဒီဇာတ်ကောင်တွေနဲ့ အပြန်အလှန် ဆက်သွယ်နိုင်ပါတယ်။ ပိုပြီးဆန်းတာကတော့ GPT-4o ပေါင်းစပ်မှုကြောင့် NPC တွေဟာ Webcam ကနေတစ်ဆင့် ကစားသူတွေနဲ့ အရာဝတ္ထုတွေကို ခွဲခြားသိရှိနိုင်ခြင်းပဲ ဖြစ်ပါတယ်။ ဒီဆန်းသစ်တီထွင်မှုက ပိုမိုနှစ်မြှုပ်မှုရှိပြီး အပြန်အလှန်တုံ့ပြန်နိုင်တဲ့ ဂိမ်းကစားခြင်း အတွေ့အကြုံကို ပေးစွမ်းဖို့ ကတိပြုထားပါတယ်။ + +ပိုမိုသိရှိလိုပါက 👉 [NVIDIA Blog](https://blogs.nvidia.com/blog/digital-human-technology-mecha-break/) + +## 🧛‍♂️ *Suck Up!* (Proxima Enterprises) + +Suck Up + +နောက်ဆုံးအနေနဲ့ *Suck Up!* ဟာ ထုတ်ဝေပြီးသား ဂိမ်းတစ်ခုဖြစ်ပြီး၊ သင်ဟာ သွေးစုပ်ဖုတ်ကောင်အဖြစ် ကစားရပါတယ်။ **AI စွမ်းအားသုံး NPC တွေကို သင့်ကို အိမ်ထဲ ဖိတ်ခေါ်ဖို့ စည်းရုံးခြင်း** ဖြင့် အိမ်တွေထဲ ဝင်ရောက်ဖို့ ကြိုးစားရပါတယ်။ + +ဇာတ်ကောင်တိုင်းကို Generative AI က မောင်းနှင်ထားတာကြောင့်၊ အပြန်အလှန်ဆက်ဆံမှုတွေဟာ ပြောင်းလဲနေပြီး ခန့်မှန်းလို့မရနိုင်ပါဘူး။ + +ပိုမိုသိရှိလိုပါက 👉 [Suck Up! Official Website](https://www.playsuckup.com/) + +## ခဏလေး... Agent တွေက ဘယ်မှာလဲ? + +ဒီ Demo တွေကို လေ့လာပြီးတဲ့အခါ သင်တွေးမိနိုင်ပါတယ်- "ဒီဥပမာတွေက ဂိမ်းတွေမှာ LLM တွေကို အသုံးပြုတာကို ပြသနေပေမယ့် Agent တွေ ပါဝင်ပုံမရဘူး။ ဒါဆိုရင် ဘာကွာခြားချက်ရှိသလဲ၊ Agent တွေက ဘယ်လို စွမ်းဆောင်ရည်တွေ ထပ်တိုးပေးနိုင်သလဲ?" + +စိတ်မပူပါနဲ့၊ ဒါကိုပဲ ကျွန်တော်တို့ နောက်အပိုင်းမှာ ဆက်လက်လေ့လာသွားမှာ ဖြစ်ပါတယ်။ \ No newline at end of file diff --git a/units/my/communication/live1.mdx b/units/my/communication/live1.mdx new file mode 100644 index 00000000..cc1ee9fa --- /dev/null +++ b/units/my/communication/live1.mdx @@ -0,0 +1,13 @@ +## တိုက်ရိုက်ထုတ်လွှင့်မှု (Live 1): Course အလုပ်လုပ်ပုံနှင့် ပထမဆုံး မေးခွန်း/အဖြေ ကဏ္ဍ + +ဒီ Agents Course ရဲ့ ပထမဆုံး တိုက်ရိုက်ထုတ်လွှင့်မှု (Live Stream) မှာ၊ Course ရဲ့ **အလုပ်လုပ်ပုံ** (သင်ရိုးနယ်ပယ်၊ အခန်းများ၊ စိန်ခေါ်မှုများ အပါအဝင်) ကို ရှင်းပြခဲ့ပြီး၊ သင်တို့ရဲ့ မေးခွန်းများကိုလည်း ဖြေကြားပေးခဲ့ပါတယ်။ + + + +**💡 သင်သိထားသင့်သည်:** ဒီ Live Session တွေဟာ သင်ခန်းစာတွေနဲ့ ပတ်သက်ပြီး နားမလည်တာတွေ၊ ပိုမိုနက်နဲတဲ့ အကြောင်းအရာတွေကို ဆွေးနွေးဖို့အတွက် အကောင်းဆုံး အခွင့်အရေးပါ။ ဒီ Course မှာ သင်ယူရမယ့် AI Agent တွေရဲ့ သဘောတရားတွေဟာ လက်တွေ့ Project တွေမှာ ဘယ်လို အသုံးဝင်တယ်ဆိုတာကိုလည်း ဒီလို Session တွေမှာ ဆွေးနွေးလေ့ရှိပါတယ်။ + +နောက်ထပ် တိုက်ရိုက်ထုတ်လွှင့်မယ့် Session ကို ဘယ်အချိန် စီစဉ်ထားလဲဆိုတာ သိရှိနိုင်ဖို့အတွက် ကျွန်တော်တို့ရဲ့ **[Discord Server](link-to-discord-server)** ကို စစ်ဆေးကြည့်ရှုနိုင်ပါတယ်။ (Discord Server ကို ဝင်ရောက်ကြည့်ရှုရန် နှိပ်ပါ)။ ဒါ့အပြင်၊ သင့်ဆီကို Email ပို့ပြီးလည်း အသိပေးသွားပါမယ်။ + +အကယ်၍ သင် တိုက်ရိုက် ပါဝင်နိုင်ခြင်း မရှိခဲ့ရင်လည်း စိတ်မပူပါနဲ့၊ ကျွန်တော်တို့ဟာ **တိုက်ရိုက်ထုတ်လွှင့်မှု Session အားလုံးကို မှတ်တမ်းတင်ထားပါတယ်**။ ဒါကြောင့် အချိန်မရွေး ပြန်လည်ကြည့်ရှု လေ့လာနိုင်ပါတယ်။ + +**📌 အရေးကြီးမှတ်ချက်:** ဒီ Course ရဲ့ အဓိက ရည်ရွယ်ချက်က AI Agent တွေရဲ့ အတွင်းပိုင်း လုပ်ဆောင်ပုံ (Actions, Reasoning, Observations) ကို နားလည်စေဖို့ ဖြစ်ပါတယ်။ Live Session တွေမှာ ဒီလို နည်းပညာဆိုင်ရာ အသေးစိတ် အချက်အလက်တွေကို ပိုမိုရှင်းလင်းအောင် ရှင်းပြပေးလေ့ရှိပါတယ်။ \ No newline at end of file diff --git a/units/my/unit0/discord101.mdx b/units/my/unit0/discord101.mdx new file mode 100644 index 00000000..69140d25 --- /dev/null +++ b/units/my/unit0/discord101.mdx @@ -0,0 +1,52 @@ +# (ရွေးချယ်နိုင်သည်) Discord 101 - Discord အသုံးပြုနည်း အခြေခံ + +The Discord Etiquette + +ဒီလမ်းညွှန်ချက်ကတော့ Gaming နဲ့ Machine Learning (ML) Community တွေမှာ ရေပန်းစားတဲ့ **အခမဲ့ Chat Platform** တစ်ခုဖြစ်တဲ့ Discord ကို စတင်အသုံးပြုနိုင်ဖို့ ကူညီပေးဖို့ ရည်ရွယ်ပါတယ်။ + +Hugging Face Community Discord Server မှာ **အဖွဲ့ဝင်ပေါင်း ၁၀၀,၀၀၀ ကျော်** ရှိပါတယ်။ အဲဒီ Server ကို ဒီနေရာကို နှိပ်ပြီး ဝင်ရောက်နိုင်ပါတယ်။ တခြားသူတွေနဲ့ ချိတ်ဆက်ဖို့အတွက် အကောင်းဆုံးနေရာတစ်ခုပါပဲ! + +## Hugging Face ရဲ့ Discord Community မှာ Agents Course အတွက် ကဏ္ဍ + +Discord မှာ စတင်ဝင်ရောက်တဲ့အခါ အနည်းငယ် ရှုပ်ထွေးနိုင်တာမို့၊ လွယ်လွယ်ကူကူ သွားလာနိုင်ဖို့အတွက် အမြန်လမ်းညွှန်လေးကို ဖော်ပြပေးလိုက်ပါတယ်။ + +> **💡 သိထားသင့်သည်:** Server ထဲကို ဝင်ရောက်ပြီးတာနဲ့ သင့်ရဲ့ စိတ်ဝင်စားမှုတွေကို ရွေးချယ်ဖို့ တောင်းဆိုပါလိမ့်မယ်။ Course နဲ့ သက်ဆိုင်တဲ့ Channel တွေအားလုံးကို ဝင်ရောက်နိုင်ဖို့အတွက် **"AI Agents"** ကို ရွေးချယ်ဖို့ သေချာပါစေ။ တခြား Channel တွေကိုလည်း စိတ်ကြိုက် လေ့လာပြီး ဝင်ရောက်နိုင်ပါတယ်! 🚀 + +HF Community Server ဟာ စိတ်ဝင်စားမှု အမျိုးမျိုးရှိတဲ့ အဖွဲ့ဝင်တွေနဲ့ စည်ကားနေတဲ့ Community တစ်ခုဖြစ်ပြီး၊ Paper ဆွေးနွေးပွဲတွေ၊ Event တွေနဲ့ အခြားအရာများစွာကနေတစ်ဆင့် သင်ယူဖို့ အခွင့်အလမ်းတွေကို ပေးစွမ်းပါတယ်။ + +အကောင့်ဖွင့်ပြီးတဲ့နောက်မှာ `#introduce-yourself` Channel မှာ ကိုယ့်ကိုယ်ကိုယ် မိတ်ဆက်ပေးဖို့ မမေ့ပါနဲ့နော်။ + +ကျွန်တော်တို့ Agents Course အတွက် Channel (၄) ခုကို ဖန်တီးထားပါတယ်။ + +* `agents-course-announcements`: **နောက်ဆုံးပေါ် Course သတင်းအချက်အလက်များ** အတွက်။ +* `🎓-agents-course-general`: **ယေဘုယျ ဆွေးနွေးမှုများနှင့် ပေါ့ပေါ့ပါးပါး စကားပြောဆိုမှုများ** အတွက်။ +* `agents-course-questions`: **မေးခွန်းများ မေးမြန်းရန်နှင့် အတန်းဖော်များကို ကူညီရန်** အတွက်။ +* `agents-course-showcase`: **သင်ဖန်တီးထားတဲ့ အကောင်းဆုံး Agent များကို ပြသရန်** အတွက်။ + +ဒါ့အပြင်၊ အောက်ပါ Channel များကိုလည်း စစ်ဆေးကြည့်ရှုနိုင်ပါတယ်။ + +* `smolagents`: **Library နဲ့ ပတ်သက်တဲ့ ဆွေးနွေးမှုများနှင့် အကူအညီများ** အတွက်။ + +## Discord ကို ထိရောက်စွာ အသုံးပြုရန် အကြံပြုချက်များ + +### Server တစ်ခုသို့ ဘယ်လို ဝင်ရောက်မလဲ + +Discord နဲ့ သိပ်မရင်းနှီးသေးဘူးဆိုရင် Server တစ်ခုကို ဘယ်လိုဝင်ရမလဲဆိုတဲ့ လမ်းညွှန်ချက် ကို ကြည့်ရှုနိုင်ပါတယ်။ + +အဆင့်များရဲ့ အကျဉ်းချုပ်ကို အောက်မှာ ဖော်ပြထားပါတယ်။ + +1. ဖိတ်ကြားလင့်ခ် (Invite Link) ကို နှိပ်ပါ။ +2. သင့်ရဲ့ Discord အကောင့်နဲ့ Sign in လုပ်ပါ၊ ဒါမှမဟုတ် အကောင့်မရှိသေးရင် အကောင့်အသစ် ဖန်တီးပါ။ +3. **သင်ဟာ AI Agent မဟုတ်ကြောင်း အတည်ပြုပါ!** (Bot များ ဝင်ရောက်ခြင်းကို ကာကွယ်ရန် ဖြစ်ပါတယ်) +4. သင့်ရဲ့ နာမည်ပြောင် (Nickname) နဲ့ ပုံ (Avatar) ကို သတ်မှတ်ပါ။ +5. "Join Server" ကို နှိပ်ပါ။ + +### Discord ကို ထိရောက်စွာ အသုံးပြုနည်း + +Discord ကို ပိုမိုထိရောက်စွာ အသုံးပြုနိုင်ဖို့အတွက် အကြံပြုချက်အချို့ကို ဖော်ပြလိုက်ပါတယ်။ + +* **Voice Channel များ** ကို အသုံးပြုနိုင်ပေမယ့်၊ စာသားဖြင့် စကားပြောဆိုခြင်း (Text Chat) ကို ပိုမို အသုံးများပါတယ်။ +* **Markdown Style** ကို အသုံးပြုပြီး စာသားများကို ပုံစံချနိုင်ပါတယ်။ ဒါဟာ Code တွေကို ရေးသားတဲ့အခါ အထူးအသုံးဝင်ပါတယ်။ (ဒါပေမယ့် Link တွေအတွက်တော့ Markdown က သိပ်အဆင်မပြေပါဘူး။) +* **ရှည်လျားတဲ့ စကားဝိုင်းများ** ကို စနစ်တကျ ဖြစ်စေဖို့အတွက် **Threads** များကို ဖွင့်ပြီး ဆွေးနွေးဖို့ စဉ်းစားပါ။ (Thread တွေက အကြောင်းအရာတစ်ခုတည်းကို သီးသန့် ဆွေးနွေးနိုင်စေပြီး Main Channel ကို ရှုပ်ထွေးမှု မဖြစ်စေပါဘူး။) + +ဒီလမ်းညွှန်ချက်က သင့်အတွက် အထောက်အကူဖြစ်မယ်လို့ မျှော်လင့်ပါတယ်။ မေးစရာရှိရင် Discord မှာ လွတ်လပ်စွာ မေးမြန်းနိုင်ပါတယ်နော် 🤗။ \ No newline at end of file diff --git a/units/my/unit0/introduction.mdx b/units/my/unit0/introduction.mdx new file mode 100644 index 00000000..ba227c0d --- /dev/null +++ b/units/my/unit0/introduction.mdx @@ -0,0 +1,158 @@ +# 🤗 AI Agents Course မှ ကြိုဆိုပါတယ် [[introduction]] + +
+AI Agents Course thumbnail +
ပုံနောက်ခံကို Scenario.com ကို အသုံးပြုပြီး ဖန်တီးထားပါတယ်။ +
+
+ +ဒီနေ့ AI နယ်ပယ်မှာ စိတ်လှုပ်ရှားစရာအကောင်းဆုံး ခေါင်းစဉ်ဖြစ်တဲ့ **Agent များ** ကဏ္ဍမှ နွေးထွေးစွာ ကြိုဆိုပါတယ်။ + +ဒီအခမဲ့ Course က သင့်ကို AI Agent တွေကို နားလည်ဖို့၊ အသုံးပြုဖို့နဲ့ ကိုယ်တိုင်တည်ဆောက်ဖို့အတွက် **အစပြုသူအဆင့်ကနေ ကျွမ်းကျင်သူအဆင့်အထိ** ခရီးတစ်ခုကို ပို့ဆောင်ပေးသွားမှာပါ။ + +ဒီပထမဆုံး အခန်း (Unit) က သင့်ကို Course မှာ စတင်ပါဝင်နိုင်ဖို့ ကူညီပေးပါလိမ့်မယ်။ + +* **Course ရဲ့ သင်ရိုးညွှန်းတမ်း (Syllabus)** ကို ရှာဖွေပါ။ +* သင်လိုက်မယ့် **လမ်းကြောင်းကို ရွေးချယ်ပါ** (ကိုယ်တိုင် လေ့လာခြင်း (Self-audit) သို့မဟုတ် Certificate ရယူခြင်း)။ +* **Certificate ရယူခြင်း လုပ်ငန်းစဉ်** အကြောင်း ပိုမိုသိရှိပါ။ +* Course နောက်ကွယ်က Team ကို သိကျွမ်းပါ။ +* သင့်ရဲ့ **Hugging Face Account** ကို ဖန်တီးပါ။ +* ကျွန်တော်တို့ရဲ့ **Discord Server သို့ ဝင်ရောက်ပါ** နှင့် သင့်ရဲ့ အတန်းဖော်များနဲ့ ကျွန်တော်တို့ Team ကို တွေ့ဆုံပါ။ + +ကဲ... စတင်လိုက်ရအောင်! + +## ဒီ Course ကနေ ဘာတွေ မျှော်လင့်နိုင်မလဲ။ [[expect]] + +ဒီ Course မှာ သင်ဟာ အောက်ပါအချက်တွေကို လုပ်ဆောင်နိုင်မှာပါ။ + +* 📖 AI Agent တွေကို **သီအိုရီ၊ ဒီဇိုင်းနဲ့ လက်တွေ့အသုံးချမှု** ပိုင်းတွေမှာ လေ့လာနိုင်ပါမယ်။ +* 🧑‍💻 [smolagents](https://huggingface.co/docs/smolagents/en/index)၊ [LlamaIndex](https://www.llamaindex.ai/) နဲ့ [LangGraph](https://langchain-ai.github.io/langgraph/) လိုမျိုး **လူသိများတဲ့ AI Agent Libraries တွေကို အသုံးပြုဖို့** သင်ယူရပါမယ်။ +* 💾 သင်ဖန်တီးထားတဲ့ **Agent တွေကို Hugging Face Hub မှာ မျှဝေနိုင်ပြီး**၊ Community က ဖန်တီးထားတဲ့ Agent တွေကိုလည်း လေ့လာနိုင်ပါမယ်။ +* 🏆 သင်ဖန်တီးထားတဲ့ **Agent တွေကို အခြားကျောင်းသားတွေရဲ့ Agent တွေနဲ့ ယှဉ်ပြိုင် အကဲဖြတ်ရမယ့်** စိန်ခေါ်မှုတွေမှာ ပါဝင်ရပါမယ်။ +* 🎓 လေ့ကျင့်ခန်းတွေ ပြီးမြောက်ခြင်းဖြင့် **Certificate of Completion (ပြီးဆုံးကြောင်း လက်မှတ်)** ကို ရယူနိုင်ပါမယ်။ + +ဒီထက်မက အများကြီး ရှိပါသေးတယ်။ + +ဒီ Course ပြီးဆုံးတဲ့အခါ၊ **Agent တွေ ဘယ်လို အလုပ်လုပ်တယ်ဆိုတာကို နားလည်ပြီး၊ နောက်ဆုံးပေါ် Libraries နဲ့ Tools တွေကို အသုံးပြုပြီး ကိုယ်ပိုင် Agent တွေကို ဘယ်လို တည်ဆောက်ရမယ်** ဆိုတာကို သိရှိသွားပါလိမ့်မယ်။ + +Course ကို **စာရင်းသွင်းဖို့** မမေ့ပါနဲ့! + +(ကျွန်တော်တို့ သင့်ရဲ့ ကိုယ်ရေးကိုယ်တာ အချက်အလက်ကို လေးစားပါတယ်။ Unit တစ်ခုစီ ထုတ်ဝေတဲ့အခါ **Link တွေ ပေးပို့နိုင်ဖို့နဲ့ စိန်ခေါ်မှုတွေနဲ့ နောက်ဆုံးရသတင်းတွေ ပေးနိုင်ဖို့** သင့်ရဲ့ Email Address ကို စုဆောင်းထားတာ ဖြစ်ပါတယ်။) + +## Course ပုံစံက ဘယ်လိုလဲ။ [[course-look-like]] + +ဒီ Course မှာ အောက်ပါ အစိတ်အပိုင်းတွေ ပါဝင်ပါတယ်။ + +* *Foundational Units (အခြေခံ အခန်းများ)*: Agent ရဲ့ **သဘောတရား (Concepts) တွေကို သီအိုရီပိုင်းအရ** သင်ယူရမယ့် အပိုင်းတွေပါ။ +* *Hands-on (လက်တွေ့လုပ်ဆောင်မှု)*: သီးခြား ပတ်ဝန်းကျင်များ (Unique Environments) မှာ သင့် Agent တွေကို လေ့ကျင့်ပေးဖို့အတွက် **လူသိများတဲ့ AI Agent Libraries တွေကို ဘယ်လို အသုံးပြုရမယ်** ဆိုတာကို သင်ယူရမယ့် အပိုင်းတွေပါ။ ဒီလက်တွေ့လုပ်ဆောင်မှု အပိုင်းတွေဟာ ကြိုတင်ပြင်ဆင်ထားတဲ့ ပတ်ဝန်းကျင်ပါဝင်တဲ့ **Hugging Face Spaces** တွေ ဖြစ်ပါလိမ့်မယ်။ +* *Use case assignments (အသုံးချမှုဆိုင်ရာ လေ့ကျင့်ခန်းများ)*: သင်သင်ယူခဲ့တဲ့ သဘောတရားတွေကို သင်ကိုယ်တိုင် ရွေးချယ်တဲ့ လက်တွေ့ကမ္ဘာ ပြဿနာတစ်ခုကို ဖြေရှင်းဖို့ အသုံးချရမယ့် အပိုင်းတွေပါ။ +* *The Challenge (စိန်ခေါ်မှု)*: သင့် Agent ကို အခြားကျောင်းသားတွေရဲ့ Agent တွေနဲ့ ယှဉ်ပြိုင်စေရမယ့် စိန်ခေါ်မှုတစ်ခုမှာ ပါဝင်ရပါမယ်။ Agent တွေရဲ့ စွမ်းဆောင်ရည်ကို နှိုင်းယှဉ်နိုင်ဖို့အတွက် [ဦးဆောင်သူ စာရင်း (Leaderboard)](https://huggingface.co/spaces/agents-course/Students_leaderboard) လည်း ရှိပါလိမ့်မယ်။ + +ဒီ **Course ဟာ သင့်ရဲ့ တုံ့ပြန်ချက် (Feedback) တွေနဲ့ ပံ့ပိုးကူညီမှုတွေနဲ့အတူ ဆက်လက်ရှင်သန်နေတဲ့ Project တစ်ခုပါပဲ!** [GitHub မှာ Issue တွေနဲ့ PR တွေ ဖွင့်ဖို့](https://github.com/huggingface/agents-course)၊ ကျွန်တော်တို့ရဲ့ Discord Server မှာ ဆွေးနွေးမှုတွေ ပြုလုပ်ဖို့ တိုက်တွန်းပါတယ်။ + +Course ကို ပြီးဆုံးသွားတဲ့အခါမှာလည်း [👉 ဒီ Form ကို အသုံးပြုပြီး](https://docs.google.com/forms/d/e/1FAIpQLSe9VaONn0eglax0uTwi29rIn4tM7H2sYmmybmG5jJNlE5v0xA/viewform?usp=dialog) သင့်ရဲ့ တုံ့ပြန်ချက်တွေကို ပေးပို့နိုင်ပါတယ်။ + +## သင်ရိုးညွှန်းတမ်းက ဘာတွေလဲ။ [[syllabus]] + +ဒီမှာ **Course ရဲ့ အထွေထွေ သင်ရိုးညွှန်းတမ်း** ကို ဖော်ပြထားပါတယ်။ အသေးစိတ် ခေါင်းစဉ်စာရင်းကိုတော့ Unit တစ်ခုစီ ထုတ်ဝေတဲ့အခါ ထပ်မံ ထုတ်ပြန်ပေးသွားပါမယ်။ + +| အခန်း | ခေါင်းစဉ် | ဖော်ပြချက် | +| :---- | :---- | :--- | +| 0 | စတင်မိတ်ဆက်ခြင်း (Onboarding) | သင်အသုံးပြုရမယ့် Tools တွေနဲ့ Platform တွေကို စနစ်တကျ ပြင်ဆင်ပေးပါမယ်။ | +| 1 | Agent အခြေခံများ (Agent Fundamentals) | Tools, Thoughts, Actions, Observations တို့ရဲ့ သဘောတရားတွေနဲ့ ၎င်းတို့ရဲ့ ပုံစံတွေကို ရှင်းပြပါမယ်။ LLM များ၊ Messages များ၊ Special Tokens များနှင့် Chat Templates များကို ရှင်းပြပါမယ်။ Python Functions များကို Tool အဖြစ် အသုံးပြုတဲ့ ရိုးရှင်းတဲ့ Use Case တစ်ခုကို ပြသပါမယ်။ | +| 2 | Frameworks | အခြေခံသဘောတရားတွေကို လူကြိုက်များတဲ့ Libraries တွေဖြစ်တဲ့ smolagents, LangGraph, LLamaIndex တို့မှာ ဘယ်လို အကောင်အထည်ဖော်ထားသလဲဆိုတာကို နားလည်အောင် သင်ကြားပေးပါမယ်။ | +| 3 | အသုံးချ ကိစ္စရပ်များ (Use Cases) | လက်တွေ့ဘဝ အသုံးချ ကိစ္စရပ်အချို့ကို တည်ဆောက်ကြပါစို့။ (ကျွမ်းကျင် Agent တည်ဆောက်သူများထံမှ PR များကို လက်ခံပါတယ် 🤗) | +| 4 | နောက်ဆုံး အလုပ် (Final Assignment) | ရွေးချယ်ထားသော Benchmark အတွက် Agent တစ်ခုကို တည်ဆောက်ပြီး၊ Student Leaderboard မှာ သင့်ရဲ့ Agent အပေါ် နားလည်မှုကို သက်သေပြရပါမယ် 🚀 | + +အဓိက သင်ရိုးညွှန်းတမ်းအပြင်၊ Bonus အခန်း (၃) ခုလည်း ရှိပါသေးတယ်။ + +* *Bonus Unit 1*: Function-calling အတွက် LLM ကို Fine-tuning လုပ်ခြင်း +* *Bonus Unit 2*: Agent Observability နှင့် Evaluation (စောင့်ကြည့်လေ့လာနိုင်မှုနှင့် အကဲဖြတ်ခြင်း) +* *Bonus Unit 3*: Pokemon ပါဝင်သော Games များတွင် Agent များ + +ဥပမာအားဖြင့်၊ Bonus Unit 3 မှာ သင့် Agent ကို Pokemon တိုက်ပွဲတွေ ကစားဖို့ ဘယ်လို တည်ဆောက်ရမယ်ဆိုတာကို သင်ယူရပါမယ် 🥊။ + +## ကြိုတင်လိုအပ်ချက်များက ဘာတွေလဲ။ + +ဒီ Course ကို လိုက်နာနိုင်ဖို့အတွက် သင့်မှာ အောက်ပါ အသိပညာများ ရှိထားသင့်ပါတယ်။ + +* Python ရဲ့ အခြေခံ အသိပညာ +* LLM များရဲ့ အခြေခံ အသိပညာ (Unit 1 မှာ ၎င်းတို့ ဘာတွေလဲဆိုတာကို ပြန်လည်သုံးသပ်မယ့် အပိုင်းတစ်ခု ပါဝင်ပါတယ်) + +## ဘယ်လို Tools တွေ လိုအပ်မလဲ။ [[tools]] + +သင့်မှာ အောက်ပါ (၂) ချက်သာ လိုအပ်ပါတယ်။ + +* အင်တာနက် ချိတ်ဆက်မှုရှိတဲ့ **ကွန်ပျူတာတစ်လုံး**။ +* **Hugging Face Account တစ်ခု**: Models, Agents တွေကို တင်ဖို့နဲ့ Spaces တွေ ဖန်တီးဖို့အတွက်ပါ။ သင့်မှာ Account မရှိသေးရင် **ဒီနေရာမှာ** အခမဲ့ ဖန်တီးနိုင်ပါတယ် (အခမဲ့ပါ)။ +Course tools needed + +## Certificate ရယူခြင်း လုပ်ငန်းစဉ် [[certification-process]] + +Two paths + +ဒီ Course ကို **ကိုယ်တိုင် လေ့လာခြင်း (Audit Mode)** ဖြင့် လိုက်နာနိုင်သလို၊ လေ့ကျင့်ခန်းတွေ လုပ်ဆောင်ပြီး **ကျွန်တော်တို့ ထုတ်ပေးမယ့် Certificate နှစ်မျိုးထဲက တစ်ခုကို ရယူဖို့** ရွေးချယ်နိုင်ပါတယ်။ + +Course ကို Audit လုပ်မယ်ဆိုရင်၊ စိန်ခေါ်မှုတွေ အားလုံးမှာ ပါဝင်နိုင်ပြီး လေ့ကျင့်ခန်းတွေ လုပ်ချင်ရင် လုပ်နိုင်ပါတယ်။ **ကျွန်တော်တို့ကို အကြောင်းကြားဖို့ မလိုအပ်ပါဘူး**။ + +Certificate ရယူခြင်း လုပ်ငန်းစဉ်ဟာ **လုံးဝ အခမဲ့** ဖြစ်ပါတယ်။ + +* *အခြေခံ Certificate (Certificate for Fundamentals) ရယူရန်*: Course ရဲ့ Unit 1 ကို ပြီးမြောက်ဖို့ လိုအပ်ပါတယ်။ ဒါဟာ Agent နယ်ပယ်ရဲ့ နောက်ဆုံးပေါ် ခေတ်ရေစီးကြောင်းတွေကို သိရှိလိုတဲ့ ကျောင်းသားတွေအတွက် ရည်ရွယ်ပါတယ်။ +* *Certificate of Completion (ပြီးဆုံးကြောင်း လက်မှတ်) ရယူရန်*: Unit 1 ကို ပြီးမြောက်ဖို့၊ Course အတွင်း ကျွန်တော်တို့ အဆိုပြုမယ့် Use Case Assignment တစ်ခုကို ပြီးမြောက်ဖို့နဲ့ နောက်ဆုံး စိန်ခေါ်မှု (Final Challenge) ကို ပြီးမြောက်ဖို့ လိုအပ်ပါတယ်။ + +Certificate ရယူခြင်း လုပ်ငန်းစဉ်အတွက် **သတ်မှတ်ရက် (Deadline) မရှိပါဘူး**။ + +## အကြံပြုထားသော လေ့လာမှုနှုန်းက ဘယ်လောက်လဲ။ [[recommended-pace]] + +ဒီ Course ရဲ့ အခန်းတစ်ခုစီကို **တစ်ပတ်လျှင် ၃-၄ နာရီခန့် အချိန်ပေးပြီး ၁ ပတ်အတွင်း ပြီးမြောက်အောင်** ဒီဇိုင်းထုတ်ထားပါတယ်။ + +ကျွန်တော်တို့ အကြံပြုထားတဲ့ လေ့လာမှုနှုန်းကို အောက်ပါအတိုင်း ပေးထားပါတယ်။ + +Recommended Pace + +## Course မှ အကျိုးအများဆုံး ရရှိစေရန် နည်းလမ်းများ [[advice]] + +Course မှ အကျိုးအများဆုံး ရရှိစေဖို့အတွက် ကျွန်တော်တို့မှာ အကြံပြုချက်အချို့ ရှိပါတယ်။ + +1. Discord ရှိ Study Group များတွင် ပါဝင်ပါ: အဖွဲ့လိုက် လေ့လာခြင်းက အမြဲတမ်း ပိုမိုလွယ်ကူပါတယ်။ ပါဝင်ဖို့အတွက် ကျွန်တော်တို့ရဲ့ Discord Server ကို ဝင်ရောက်ပြီး သင့် Hugging Face Account ကို အတည်ပြုဖို့ လိုအပ်ပါတယ်။ +2. **Quiz များနှင့် Assignment များကို လုပ်ဆောင်ပါ**: သင်ယူဖို့ အကောင်းဆုံးနည်းလမ်းက လက်တွေ့လုပ်ဆောင်ခြင်း (Hands-on Practice) နဲ့ ကိုယ်တိုင် အကဲဖြတ်ခြင်း (Self-assessment) ပဲ ဖြစ်ပါတယ်။ +3. **အချိန်ဇယား သတ်မှတ်ပြီး စည်းချက်ညီညီ လိုက်နာပါ**: ကျွန်တော်တို့ အကြံပြုထားတဲ့ အချိန်ဇယားကို အသုံးပြုနိုင်သလို၊ ကိုယ်ပိုင် အချိန်ဇယားကိုလည်း ဖန်တီးနိုင်ပါတယ်။ + +Course advice + +## ကျွန်တော်တို့ ဘယ်သူတွေလဲ [[who-are-we]] + +ဒီ Course ကို [Ben Burtenshaw](https://huggingface.co/burtenshaw) နဲ့ [Sergio Paniego](https://huggingface.co/sergiopaniego) တို့က ထိန်းသိမ်းထားပါတယ်။ သင့်မှာ မေးခွန်းများ ရှိပါက Hub မှာ ကျွန်တော်တို့ကို ဆက်သွယ်နိုင်ပါတယ်။ + +## ကျေးဇူးတင်လွှာ (Acknowledgments) + +ဒီ Course အတွက် အဖိုးမဖြတ်နိုင်တဲ့ ပံ့ပိုးကူညီမှုတွေ ပေးခဲ့တဲ့ အောက်ပါ ပုဂ္ဂိုလ်များကို ကျေးဇူးတင်ကြောင်း ပြောကြားလိုပါတယ်။ + +* **[Joffrey Thomas](https://huggingface.co/Jofthomas)** – Course ကို ရေးသားပြီး တည်ဆောက်ပေးခဲ့သူ။ +* **[Thomas Simonini](https://huggingface.co/ThomasSimonini)** – Course ကို ရေးသားပြီး တည်ဆောက်ပေးခဲ့သူ။ +* **[Pedro Cuenca](https://huggingface.co/pcuenq)** – Course ကို လမ်းညွှန်ပေးပြီး တုံ့ပြန်ချက်များ ပေးခဲ့သူ။ +* **[Aymeric Roucher](https://huggingface.co/m-ric)** – သူ၏ အံ့သြဖွယ် Demo Spaces များ (Decoding နှင့် Final Agent) နှင့် smolagents အပိုင်းများတွင် ကူညီပေးခဲ့သူ။ +* **[Joshua Lochner](https://huggingface.co/Xenova)** – သူ၏ Tokenization Demo Space အတွက်။ +* **[Quentin Gallouédec](https://huggingface.co/qgallouedec)** – Course Content များတွင် ကူညီပေးခဲ့သူ။ +* **[David Berenstein](https://huggingface.co/davidberenstein1957)** – Course Content နှင့် Moderation များတွင် ကူညီပေးခဲ့သူ။ +* **[XiaXiao (ShawnSiao)](https://huggingface.co/SSSSSSSiao)** – Course အတွက် တရုတ်ဘာသာပြန်ဆိုသူ။ +* **[Jiaming Huang](https://huggingface.co/nordicsushi)** – Course အတွက် တရုတ်ဘာသာပြန်ဆိုသူ။ +* **[Kim Noel](https://github.com/knoel99)** - Course အတွက် ပြင်သစ်ဘာသာပြန်ဆိုသူ။ +* **[Loïck Bourdois](https://huggingface.co/lbourdois)** - [CATIE](https://www.catie.fr/) မှ Course အတွက် ပြင်သစ်ဘာသာပြန်ဆိုသူ။ +* **[Khant Sint Heinn (Kalix Louis)](https://huggingface.co/kalixlouiis)** - [DatarrX](https://github.com/DatarrX) မှ Course အတွက် မြန်မာဘာသာပြန်ဆိုသူ။ + +## Bug တွေ့ရင် သို့မဟုတ် Course ကို ပိုမိုကောင်းမွန်အောင် လုပ်ချင်ရင် [[contribute]] + +ပံ့ပိုးကူညီမှုများကို **နွေးထွေးစွာ ကြိုဆိုပါတယ်** 🤗 + +* *Notebook မှာ Bug 🐛 တွေ့ရင်*၊ [Issue တစ်ခု ဖွင့်ပြီး](https://github.com/huggingface/agents-course/issues) **ပြဿနာကို ဖော်ပြပေးပါ**။ +* *Course ကို ပိုမိုကောင်းမွန်အောင် လုပ်ချင်ရင်*၊ [Pull Request တစ်ခု ဖွင့်နိုင်ပါတယ်](https://github.com/huggingface/agents-course/pulls)။ +* *အခန်းအပြည့်အစုံ သို့မဟုတ် Unit အသစ်တစ်ခု ထည့်ချင်ရင်*၊ [Issue တစ်ခု ဖွင့်ပြီး](https://github.com/huggingface/agents-course/issues) **မရေးသားမီ ဘယ်လို Content မျိုး ထည့်ချင်တယ်ဆိုတာကို ဖော်ပြပေးပါ**။ ဒါမှ ကျွန်တော်တို့က သင့်ကို လမ်းညွှန်ပေးနိုင်မှာပါ။ + +## ကျွန်တော့်မှာ မေးခွန်းတွေ ရှိနေသေးတယ် [[questions]] + +ကျေးဇူးပြု၍ ကျွန်တော်တို့ရဲ့ Discord Server ရှိ #agents-course-questions မှာ မေးခွန်းများ မေးမြန်းနိုင်ပါတယ်။ + +အချက်အလက်တွေ အားလုံး ရရှိပြီဆိုတော့၊ ကဲ... သင်္ဘောပေါ် တက်လိုက်ကြရအောင် ⛵ + +Time to Onboard \ No newline at end of file diff --git a/units/my/unit0/onboarding.mdx b/units/my/unit0/onboarding.mdx new file mode 100644 index 00000000..b2097e40 --- /dev/null +++ b/units/my/unit0/onboarding.mdx @@ -0,0 +1,105 @@ +# စတင်မိတ်ဆက်ခြင်း (Onboarding): သင်၏ ပထမဆုံး ခြေလှမ်းများ ⛵ + +Time to Onboard + +အခုဆိုရင် သင်ဟာ သင်တန်းနဲ့ပတ်သက်တဲ့ အသေးစိတ်အချက်အလက်အားလုံးကို သိရှိပြီးပြီ ဖြစ်တဲ့အတွက် စတင်လိုက်ကြရအောင်! ကျွန်တော်တို့ အဓိက လုပ်ဆောင်ရမယ့် အချက် (၄) ချက် ရှိပါတယ်။ + +1. **Hugging Face Account ဖန်တီးခြင်း** (မရှိသေးပါက) +2. **Discord သို့ ဝင်ရောက်ပြီး ကိုယ့်ကိုယ်ကိုယ် မိတ်ဆက်ခြင်း** (မရှက်ပါနဲ့နော် 🤗) +3. **Hugging Face Agents Course ကို Hub တွင် Follow လုပ်ခြင်း** +4. **သင်တန်းအကြောင်း မျှဝေခြင်း** + +### အဆင့် ၁: Hugging Face Account ဖန်တီးခြင်း + +(အကယ်၍ သင့်တွင် မရှိသေးပါက) Hugging Face Account တစ်ခုကို ဒီနေရာမှာ ဖန်တီးလိုက်ပါ။ + +### အဆင့် ၂: ကျွန်တော်တို့ရဲ့ Discord Community သို့ ဝင်ရောက်ခြင်း + +👉🏻 ကျွန်တော်တို့ရဲ့ Discord Server ကို ဒီနေရာကနေ ဝင်ရောက်လိုက်ပါ။ + +ဝင်ရောက်ပြီးတဲ့အခါ `#introduce-yourself` Channel မှာ ကိုယ့်ကိုယ်ကိုယ် မိတ်ဆက်ဖို့ မမေ့ပါနဲ့။ + +ကျွန်တော်တို့မှာ AI Agent နဲ့ သက်ဆိုင်တဲ့ Channel တွေ အများကြီးရှိပါတယ်။ + +* `agents-course-announcements`: **သင်တန်းရဲ့ နောက်ဆုံးရ သတင်းအချက်အလက်များ** အတွက်။ +* `🎓-agents-course-general`: **ယေဘုယျ ဆွေးနွေးမှုများနှင့် ပေါ့ပေါ့ပါးပါး စကားပြောဆိုမှုများ** အတွက်။ +* `agents-course-questions`: **မေးခွန်းများ မေးမြန်းရန်နှင့် အတန်းဖော်များကို ကူညီရန်** အတွက်။ +* `agents-course-showcase`: **သင်ဖန်တီးထားတဲ့ အကောင်းဆုံး Agent များကို ပြသရန်** အတွက်။ + +ဒါ့အပြင်၊ သင်သည် အောက်ပါ Channel များကိုလည်း စစ်ဆေးနိုင်ပါတယ်- + +* `smolagents`: **Library နဲ့ပတ်သက်တဲ့ ဆွေးနွေးမှုများနှင့် အကူအညီများ** အတွက်။ + +**မှတ်ချက်:** Discord ကို ပထမဆုံးအကြိမ် အသုံးပြုဖူးသူများအတွက် အကောင်းဆုံး အသုံးပြုနည်းများကို သိရှိနိုင်ရန် ကျွန်တော်တို့ Discord 101 ကို ရေးသားထားပါတယ်။ [နောက်အပိုင်း](discord101) ကို စစ်ဆေးကြည့်ပါ။ + +### အဆင့် ၃: Hugging Face Agent Course Organization ကို Follow လုပ်ခြင်း + +**Hugging Face Agents Course Organization ကို Follow လုပ်ခြင်း**ဖြင့် သင်တန်းဆိုင်ရာ နောက်ဆုံးရ ပစ္စည်းများ၊ Update များနှင့် ကြေညာချက်များကို အမြဲတမ်း သိရှိနေနိုင်ပါတယ်။ + +👉 ဒီနေရာကို သွားပြီး **Follow** ကို နှိပ်လိုက်ပါ။ + +Follow + +### အဆင့် ၄: သင်တန်းအကြောင်း မျှဝေခြင်း + +ဒီသင်တန်းကို လူသိများအောင် ကူညီပေးပါ။ သင်ကူညီနိုင်တဲ့ နည်းလမ်း (၂) ခု ရှိပါတယ်။ + +1. သင်တန်းရဲ့ Repository ကို ⭐ ပေးခြင်းဖြင့် သင်၏ ထောက်ခံမှုကို ပြသပါ။ + +Repo star + +2. သင်၏ သင်ယူမှု ခရီးစဉ်ကို မျှဝေခြင်း: **သင် ဒီသင်တန်းကို တက်ရောက်နေကြောင်း** အခြားသူများကို အသိပေးပါ။ သင်၏ Social Media Post များတွင် အသုံးပြုနိုင်ရန် ပုံလေးတစ်ခုကိုလည်း ကျွန်တော်တို့ ပြင်ဆင်ပေးထားပါတယ်။ + + + +ပုံကို Download လုပ်ရန် 👉 [ဒီနေရာကို](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/communication/share.png?download=true) နှိပ်ပါ။ + +### အဆင့် ၅: Ollama ဖြင့် Models များကို Local တွင် Run ခြင်း (Credit ကန့်သတ်ချက်များ ကြုံလာပါက) + +သင်တန်းမှာ Models တွေကို အသုံးပြုတဲ့အခါ Hugging Face ရဲ့ Inference API ကို အသုံးပြုရပါတယ်။ ဒါပေမယ့် အသုံးပြုမှု များလာတဲ့အခါ **Credit ကန့်သတ်ချက် (Credit limits)** တွေနဲ့ ကြုံတွေ့နိုင်ပါတယ်။ အဲဒီလို အခြေအနေမျိုးမှာ Models တွေကို သင့်ရဲ့ ကွန်ပျူတာမှာပဲ Local အနေနဲ့ Run နိုင်ဖို့ Ollama ကို အသုံးပြုနိုင်ပါတယ်။ + +1. **Ollama ကို Install လုပ်ပါ** + + တရားဝင် ညွှန်ကြားချက်များကို ဒီနေရာမှာ လိုက်နာပါ။ + +2. **Model တစ်ခုကို Local သို့ Pull လုပ်ပါ** + + ```bash + ollama pull qwen2:7b + ``` + + ဒီနေရာမှာ ကျွန်တော်တို့ qwen2:7b model ကို Pull လုပ်ပါတယ်။ အခြား Models များကို စစ်ဆေးရန် ollama website ကို ကြည့်ရှုနိုင်ပါတယ်။ + +3. **Ollama ကို နောက်ခံတွင် စတင်ပါ (Terminal တစ်ခုတွင်)** + ``` bash + ollama serve + ``` + + "listen tcp 127.0.0.1:11434: bind: address already in use" ဆိုတဲ့ Error ကြုံလာပါက၊ ဒီ Port ကို လက်ရှိ အသုံးပြုနေတဲ့ Process ID (PID) ကို ရှာဖွေဖို့ `sudo lsof -i :11434` command ကို အသုံးပြုနိုင်ပါတယ်။ အကယ်၍ Process က `ollama` ဖြစ်နေရင်၊ Installation Script က Ollama Service ကို စတင်ပြီးသား ဖြစ်နိုင်တဲ့အတွက် ဒီ Command ကို ကျော်သွားနိုင်ပါတယ်။ + +4. **`InferenceClientModel` အစား `LiteLLMModel` ကို အသုံးပြုပါ** + + `smolagents` ထဲက `LiteLLMModel` module ကို အသုံးပြုဖို့အတွက် `pip` command ကို အသုံးပြုပြီး Install လုပ်ရပါမယ်။ + +``` bash + pip install 'smolagents[litellm]' +``` + +``` python + from smolagents import LiteLLMModel + + model = LiteLLMModel( + model_id="ollama_chat/qwen2:7b", # သို့မဟုတ် အခြား Ollama-supported models များကို စမ်းသပ်နိုင်ပါသည်။ + api_base="http://127.0.0.1:11434", # Default Ollama local server + num_ctx=8192, + ) +``` + +5. **ဘာကြောင့် ဒီနည်းလမ်းက အလုပ်လုပ်တာလဲ?** + * Ollama သည် Models များကို Local တွင် OpenAI-compatible API ကို အသုံးပြုပြီး `http://localhost:11434` တွင် ဝန်ဆောင်မှုပေးပါတယ်။ + * `LiteLLMModel` ကို OpenAI chat/completion API ပုံစံကို ထောက်ပံ့ပေးတဲ့ မည်သည့် Model နဲ့မဆို ဆက်သွယ်နိုင်အောင် တည်ဆောက်ထားပါတယ်။ + * ဆိုလိုတာကတော့ `InferenceClientModel` ကို `LiteLLMModel` နဲ့ အစားထိုးလိုက်ရုံပါပဲ။ Code ကို ပြောင်းလဲစရာ မလိုပါဘူး။ ဒါဟာ ချောမွေ့ပြီး အလွယ်တကူ အစားထိုး အသုံးပြုနိုင်တဲ့ ဖြေရှင်းချက်တစ်ခုပဲ ဖြစ်ပါတယ်။ + +ဂုဏ်ယူပါတယ်! 🎉 **သင် စတင်မိတ်ဆက်ခြင်း လုပ်ငန်းစဉ်ကို ပြီးမြောက်သွားပါပြီ!** အခုဆိုရင် AI Agent တွေအကြောင်း စတင်လေ့လာဖို့ အသင့်ဖြစ်ပါပြီ။ ပျော်ရွှင်ပါစေ! + +ဆက်လက်လေ့လာပါ၊ အမြဲတမ်း အံ့သြစရာကောင်းနေပါစေ 🤗 \ No newline at end of file diff --git a/units/my/unit1/README.md b/units/my/unit1/README.md new file mode 100644 index 00000000..131aad52 --- /dev/null +++ b/units/my/unit1/README.md @@ -0,0 +1,19 @@ +## အကြောင်းအရာများ စာရင်း (Table of Contents) + +Unit 1 ကို hf.co/learn မှာ ဝင်ရောက်လေ့လာနိုင်ပါတယ် 👉 ဒီနေရာကို နှိပ်ပါ + + \ No newline at end of file diff --git a/units/my/unit1/actions.mdx b/units/my/unit1/actions.mdx new file mode 100644 index 00000000..313313f1 --- /dev/null +++ b/units/my/unit1/actions.mdx @@ -0,0 +1,120 @@ +# လုပ်ဆောင်ချက်များ (Actions): Agent ကို ပတ်ဝန်းကျင်နှင့် ထိတွေ့စေခြင်း + +> [!TIP] +> ဒီအပိုင်းမှာတော့ AI Agent တစ်ခုက သူ့ရဲ့ ပတ်ဝန်းကျင်နဲ့ ထိတွေ့ဆက်ဆံဖို့အတွက် ဘယ်လို **လက်တွေ့ကျတဲ့ အဆင့်တွေ** ကို လုပ်ဆောင်ရသလဲဆိုတာကို လေ့လာသွားပါမယ်။ +> +> လုပ်ဆောင်ချက်တွေကို ဘယ်လို ဖော်ပြသလဲ (JSON သို့မဟုတ် Code ကို အသုံးပြုခြင်း)၊ **"ရပ်တန့်ပြီး စစ်ဆေးခြင်း" (Stop and Parse)** နည်းလမ်းရဲ့ အရေးပါပုံနဲ့ Agent အမျိုးအစားအမျိုးမျိုးကို မိတ်ဆက်ပေးသွားပါမယ်။ + +**လုပ်ဆောင်ချက်များ (Actions)** ဆိုတာဟာ **AI Agent တစ်ခုက သူ့ရဲ့ ပတ်ဝန်းကျင်နဲ့ ထိတွေ့ဆက်ဆံဖို့အတွက် လုပ်ဆောင်တဲ့ လက်တွေ့ကျတဲ့ အဆင့်တွေ** ပဲ ဖြစ်ပါတယ်။ + +ဒါဟာ အင်တာနက်မှာ အချက်အလက် ရှာဖွေတာပဲဖြစ်ဖြစ်၊ ရုပ်ပိုင်းဆိုင်ရာ ကိရိယာတစ်ခုကို ထိန်းချုပ်တာပဲဖြစ်ဖြစ်၊ လုပ်ဆောင်ချက်တိုင်းဟာ Agent က စနစ်တကျ လုပ်ဆောင်တဲ့ ရည်ရွယ်ချက်ရှိတဲ့ လုပ်ငန်းတစ်ခု ဖြစ်ပါတယ်။ + +ဥပမာအားဖြင့်၊ Customer Service မှာ ကူညီပေးနေတဲ့ Agent တစ်ခုဟာ Customer ရဲ့ ဒေတာတွေကို ပြန်ယူတာ၊ အကူအညီပေးမယ့် ဆောင်းပါးတွေကို ပေးပို့တာ၊ ဒါမှမဟုတ် ပြဿနာကို လူသားဝန်ထမ်းဆီ လွှဲပြောင်းပေးတာမျိုးတွေ လုပ်ဆောင်နိုင်ပါတယ်။ + +## Agent လုပ်ဆောင်ချက် အမျိုးအစားများ (Types of Agent Actions) + +Agent အမျိုးအစားအမျိုးမျိုးရှိပြီး၊ ၎င်းတို့ လုပ်ဆောင်ချက်ယူပုံချင်း မတူညီကြပါဘူး။ + +| Agent အမျိုးအစား | ဖော်ပြချက် | +| :--- | :--- | +| **JSON Agent** | လုပ်ဆောင်ရမယ့် Action ကို JSON ပုံစံဖြင့် သတ်မှတ်ဖော်ပြသော Agent။ | +| **Code Agent** | Agent က ပြင်ပမှ စီမံဆောင်ရွက်မည့် Code Block တစ်ခုကို ရေးသားသော Agent။ | +| **Function-calling Agent** | JSON Agent ရဲ့ အမျိုးအစားခွဲတစ်ခုဖြစ်ပြီး၊ Action တစ်ခုစီအတွက် Message အသစ်တစ်ခု ထုတ်ပေးရန် Fine-tuning လုပ်ထားသော Agent။ | + +လုပ်ဆောင်ချက်များ (Actions) ကိုယ်တိုင်ကလည်း ရည်ရွယ်ချက်အမျိုးမျိုးအတွက် အသုံးပြုနိုင်ပါတယ်။ + +| လုပ်ဆောင်ချက် အမျိုးအစား | ဖော်ပြချက် | +| :--- | :--- | +| **အချက်အလက် စုဆောင်းခြင်း** | ဝက်ဘ်ရှာဖွေမှုများ ပြုလုပ်ခြင်း၊ ဒေတာဘေ့စ်များမှ မေးမြန်းခြင်း သို့မဟုတ် Document များ ပြန်လည်ရယူခြင်း။ | +| **Tool အသုံးပြုခြင်း** | API ခေါ်ဆိုမှုများ ပြုလုပ်ခြင်း၊ တွက်ချက်မှုများ ပြုလုပ်ခြင်းနှင့် Code များ လုပ်ဆောင်ခြင်း။ | +| **ပတ်ဝန်းကျင်နှင့် ထိတွေ့ဆက်ဆံခြင်း** | Digital Interface များကို ကိုင်တွယ်ခြင်း သို့မဟုတ် ရုပ်ပိုင်းဆိုင်ရာ ကိရိယာများကို ထိန်းချုပ်ခြင်း။ | +| **ဆက်သွယ်ပြောဆိုခြင်း** | Chat မှတစ်ဆင့် အသုံးပြုသူများနှင့် ဆက်သွယ်ခြင်း သို့မဟုတ် အခြား Agent များနှင့် ပူးပေါင်းဆောင်ရွက်ခြင်း။ | + +LLM (Large Language Model) သည် စာသားကိုသာ ကိုင်တွယ်နိုင်ပြီး၊ ၎င်းသည် လုပ်ဆောင်လိုသော Action နှင့် Tool သို့ ပေးပို့ရမည့် Parameter များကို ဖော်ပြရန် စာသားကို အသုံးပြုပါတယ်။ Agent တစ်ခု ကောင်းမွန်စွာ အလုပ်လုပ်နိုင်ဖို့အတွက်၊ LLM သည် Action တစ်ခုလုံးကို သတ်မှတ်သည့် Token များအားလုံး ထုတ်ပေးပြီးနောက် **Token အသစ်များ ထုတ်ပေးခြင်းကို ရပ်တန့်ရပါမယ်**။ ဤသို့ ရပ်တန့်ခြင်းက ထိန်းချုပ်မှုကို LLM မှ Agent သို့ ပြန်လည်ပေးအပ်ပြီး ရလဒ်ကို စစ်ဆေးအတည်ပြုနိုင်စေရန် (Parseable) သေချာစေပါတယ်။ (ရည်ရွယ်ထားသော ပုံစံသည် JSON၊ Code သို့မဟုတ် Function-calling ဖြစ်စေ)။ + +## ရပ်တန့်ပြီး စစ်ဆေးခြင်း နည်းလမ်း (The Stop and Parse Approach) + +လုပ်ဆောင်ချက်များကို အကောင်အထည်ဖော်ရာတွင် အဓိကကျသော နည်းလမ်းတစ်ခုမှာ **ရပ်တန့်ပြီး စစ်ဆေးခြင်း (Stop and Parse Approach)** နည်းလမ်းပဲ ဖြစ်ပါတယ်။ ဒီနည်းလမ်းက Agent ရဲ့ ထွက်ရှိရလဒ်ကို စနစ်တကျနဲ့ ခန့်မှန်းနိုင်တဲ့ ပုံစံဖြစ်စေဖို့ သေချာစေပါတယ်။ + +**၁။ စနစ်တကျ ပုံစံဖြင့် ထုတ်ပေးခြင်း (Generation in a Structured Format):** + +Agent သည် ၎င်းလုပ်ဆောင်လိုသော Action ကို ရှင်းလင်းပြီး ကြိုတင်သတ်မှတ်ထားသော ပုံစံ (JSON သို့မဟုတ် Code) ဖြင့် ထုတ်ပေးပါတယ်။ + +**၂။ ထပ်မံထုတ်ပေးခြင်းကို ရပ်တန့်ခြင်း (Halting Further Generation):** + +Action ကို သတ်မှတ်သည့် စာသား ထုတ်ပေးပြီးသည်နှင့်၊ **LLM သည် နောက်ထပ် Token များ ထုတ်ပေးခြင်းကို ရပ်တန့်ပါတယ်**။ ဒါက ပိုလျှံနေတဲ့ သို့မဟုတ် မှားယွင်းတဲ့ ရလဒ်များ ထွက်ပေါ်လာခြင်းကို တားဆီးပေးပါတယ်။ + +**၃။ ရလဒ်ကို စစ်ဆေးခြင်း (Parsing the Output):** + +ပြင်ပ Parser တစ်ခုက ပုံစံချထားသော Action ကို ဖတ်ရှုပြီး၊ မည်သည့် Tool ကို ခေါ်ဆိုရမည်ကို ဆုံးဖြတ်ကာ လိုအပ်သော Parameter များကို ထုတ်ယူပါတယ်။ + +ဥပမာအားဖြင့်၊ ရာသီဥတုကို စစ်ဆေးရန် လိုအပ်သော Agent တစ်ခုသည် အောက်ပါအတိုင်း ထုတ်ပေးနိုင်ပါတယ်။ + +```json +Thought: I need to check the current weather for New York. +Action : +{ + "action": "get_weather", + "action_input": {"location": "New York"} +} +``` +Framework သည် ခေါ်ဆိုရမည့် Function ၏ နာမည်နှင့် အသုံးပြုရမည့် Arguments များကို အလွယ်တကူ စစ်ဆေးအတည်ပြု (Parse) နိုင်ပါတယ်။ + +ဤရှင်းလင်းပြီး စက်ဖြင့် ဖတ်ရှုနိုင်သော ပုံစံသည် အမှားအယွင်းများကို လျှော့ချပေးပြီး၊ ပြင်ပ Tool များက Agent ၏ ညွှန်ကြားချက်ကို တိကျစွာ စီမံဆောင်ရွက်နိုင်စေပါတယ်။ + +**မှတ်ချက်:** Function-calling Agent များသည်လည်း အလားတူ လုပ်ဆောင်ပါတယ်။ ၎င်းတို့သည် သတ်မှတ်ထားသော Function တစ်ခုကို မှန်ကန်သော Arguments များဖြင့် ခေါ်ဆိုနိုင်ရန် Action တစ်ခုစီကို ပုံစံချပေးပါတယ်။ နောက်အခန်းများတွင် ထို Agent အမျိုးအစားများကို ပိုမိုနက်ရှိုင်းစွာ လေ့လာပါမယ်။ + +## Code Agent များ (Code Agents) + +နောက်ထပ် နည်းလမ်းတစ်ခုကတော့ *Code Agent* များကို အသုံးပြုခြင်းပဲ ဖြစ်ပါတယ်။ + +ဒီ Idea ကတော့ **ရိုးရှင်းတဲ့ JSON Object တစ်ခု ထုတ်ပေးမယ့်အစား**၊ Code Agent က **လုပ်ဆောင်နိုင်တဲ့ Code Block တစ်ခုကို ထုတ်ပေးခြင်း** ဖြစ်ပါတယ်။ (အများအားဖြင့် Python လိုမျိုး High-level Language ဖြင့် ဖြစ်ပါတယ်)။ + +Code Agents + +ဒီနည်းလမ်းက အားသာချက်များစွာကို ပေးပါတယ်။ + +* **ဖော်ပြနိုင်စွမ်း (Expressiveness):** Code သည် Loops, Conditionals နှင့် Nested Functions များအပါအဝင် ရှုပ်ထွေးသော Logic များကို သဘာဝအတိုင်း ဖော်ပြနိုင်ပြီး JSON ထက် ပိုမိုပြောင်းလွယ်ပြင်လွယ် ရှိပါတယ်။ +* **စနစ်တကျဖွဲ့စည်းမှုနှင့် ပြန်လည်အသုံးပြုနိုင်မှု (Modularity and Reusability):** ထုတ်ပေးလိုက်သော Code တွင် မတူညီသော Actions သို့မဟုတ် Tasks များတွင် ပြန်လည်အသုံးပြုနိုင်သော Functions နှင့် Modules များ ပါဝင်နိုင်ပါတယ်။ +* **Debug လုပ်ရလွယ်ကူခြင်း (Enhanced Debuggability):** ကောင်းမွန်စွာ သတ်မှတ်ထားသော Programming Syntax ကြောင့် Code အမှားများကို ရှာဖွေရန်နှင့် ပြင်ဆင်ရန် ပိုမိုလွယ်ကူပါတယ်။ +* **တိုက်ရိုက် ပေါင်းစပ်နိုင်မှု (Direct Integration):** Code Agent များသည် ပြင်ပ Libraries နှင့် API များနှင့် တိုက်ရိုက် ပေါင်းစပ်နိုင်ပြီး၊ ဒေတာ စီမံဆောင်ရွက်ခြင်း သို့မဟုတ် Real-time ဆုံးဖြတ်ချက်ချခြင်းကဲ့သို့သော ပိုမိုရှုပ်ထွေးသည့် လုပ်ငန်းများကို လုပ်ဆောင်နိုင်ပါတယ်။ + +LLM မှ ထုတ်ပေးသော Code ကို လုပ်ဆောင်ခြင်းသည် Prompt Injection မှသည် အန္တရာယ်ရှိသော Code များ လုပ်ဆောင်ခြင်းအထိ လုံခြုံရေးဆိုင်ရာ အန္တရာယ်များ ရှိနိုင်သည်ကို သတိပြုရပါမယ်။ + +ဒါကြောင့် `smolagents` ကဲ့သို့သော AI Agent Framework များကို အသုံးပြုရန် အကြံပြုထားပါတယ်။ ၎င်းတို့သည် မူရင်းအတိုင်း လုံခြုံရေး စောင့်ကြည့်မှုများကို ပေါင်းစပ်ထားပါတယ်။ အန္တရာယ်များနှင့် ၎င်းတို့ကို လျှော့ချနည်းများအကြောင်း ပိုမိုသိရှိလိုပါက [ဤသီးသန့်အပိုင်းကို လေ့လာကြည့်ရှုနိုင်ပါတယ်](https://huggingface.co/docs/smolagents/tutorials/secure_code_execution)။ + +ဥပမာအားဖြင့်၊ ရာသီဥတုကို ရှာဖွေရန် တာဝန်ပေးထားသော Code Agent တစ်ခုသည် အောက်ပါ Python Code Snippet ကို ထုတ်ပေးနိုင်ပါတယ်။ + +```python +# Code Agent Example: Retrieve Weather Information +def get_weather(city): + import requests + api_url = f"https://api.weather.com/v1/location/{city}?apiKey=YOUR_API_KEY" + response = requests.get(api_url) + if response.status_code == 200: + data = response.json() + return data.get("weather", "No weather information available") + else: + return "Error: Unable to fetch weather data." + +# Execute the function and prepare the final answer +result = get_weather("New York") +final_answer = f"The current weather in New York is: {result}" +print(final_answer) +``` + +ဒီဥပမာမှာ Code Agent က - + +* **API ခေါ်ဆိုမှု** မှတစ်ဆင့် ရာသီဥတု ဒေတာကို ပြန်လည်ရယူခြင်း၊ +* ရလဒ်ကို စီမံဆောင်ရွက်ခြင်း၊ +* ပြီးနောက် `print()` Function ကို အသုံးပြုပြီး နောက်ဆုံးအဖြေကို ထုတ်ပေးခြင်းတို့ကို လုပ်ဆောင်ပါတယ်။ + +ဒီနည်းလမ်းသည်လည်း Code Block ကို ရှင်းရှင်းလင်းလင်း သတ်မှတ်ခြင်းနှင့် လုပ်ဆောင်ချက် ပြီးဆုံးကြောင်း အချက်ပြခြင်း (ဤနေရာတွင် `final_answer` ကို print ထုတ်ခြင်း) ဖြင့် **ရပ်တန့်ပြီး စစ်ဆေးခြင်း (Stop and Parse Approach)** နည်းလမ်းကို လိုက်နာပါတယ်။ + +--- + +ကျွန်တော်တို့ လေ့လာခဲ့ရတာကတော့ Actions တွေဟာ Agent ရဲ့ အတွင်းပိုင်း ဆင်ခြင်သုံးသပ်မှုနဲ့ ပြင်ပကမ္ဘာရဲ့ ထိတွေ့ဆက်ဆံမှုကြားက တံတားတစ်ခုဖြစ်ပြီး၊ JSON၊ Code သို့မဟုတ် Function Calls များမှတစ်ဆင့် ရှင်းလင်းပြီး စနစ်တကျ လုပ်ဆောင်ရတဲ့ Tasks တွေကို လုပ်ဆောင်ပေးတယ်ဆိုတာပါပဲ။ + +ဒီလို ရည်ရွယ်ချက်ရှိရှိ လုပ်ဆောင်ခြင်းက Action တိုင်းဟာ တိကျပြီး ပြင်ပ စီမံဆောင်ရွက်မှုအတွက် အသင့်ဖြစ်နေစေဖို့ **Stop and Parse Approach** မှတစ်ဆင့် သေချာစေပါတယ်။ နောက်အပိုင်းမှာတော့ Agent တွေက ပတ်ဝန်းကျင်ဆီက တုံ့ပြန်ချက်တွေကို ဘယ်လို ရယူပြီး ပေါင်းစပ်သလဲဆိုတာကို သိရှိနိုင်ဖို့ **Observations** တွေကို လေ့လာသွားပါမယ်။ + +ဒီနောက်မှာတော့ ကျွန်တော်တို့ **ပထမဆုံး Agent ကို တည်ဆောက်ဖို့ အသင့်ဖြစ်ပါပြီ!** \ No newline at end of file diff --git a/units/my/unit1/agent-steps-and-structure.mdx b/units/my/unit1/agent-steps-and-structure.mdx new file mode 100644 index 00000000..bda9954c --- /dev/null +++ b/units/my/unit1/agent-steps-and-structure.mdx @@ -0,0 +1,145 @@ +# Thought-Action-Observation Cycle မှတစ်ဆင့် AI Agent များကို နားလည်ခြင်း + +Unit 1 planning + +အရင်အပိုင်းတွေမှာ ကျွန်တော်တို့ ဘာတွေ လေ့လာခဲ့ပြီးပြီလဲဆိုတော့- + +* **Tool တွေကို System Prompt ထဲမှာ Agent အတွက် ဘယ်လို ရရှိနိုင်အောင် လုပ်ထားသလဲ။** +* **AI Agent တွေဟာ "ဆင်ခြင်သုံးသပ်နိုင်ခြင်း" (Reason)၊ စီမံခန့်ခွဲနိုင်ခြင်း (Plan) နဲ့ ပတ်ဝန်းကျင်နဲ့ ထိတွေ့ဆက်ဆံနိုင်ခြင်း (Interact) တို့ကို လုပ်ဆောင်နိုင်တဲ့ စနစ်တွေ ဖြစ်တယ်ဆိုတာကိုပါ။** + +ဒီအပိုင်းမှာတော့ **ပြည့်စုံတဲ့ AI Agent ရဲ့ လုပ်ငန်းအဆင့်ဆင့် (Workflow)** ကို လေ့လာသွားပါမယ်။ ဒီအဆင့်ဆင့်ကို ကျွန်တော်တို့က **Thought-Action-Observation (အတွေး-လုပ်ဆောင်ချက်-လေ့လာတွေ့ရှိချက်)** လို့ သတ်မှတ်ထားပါတယ်။ + +ပြီးရင်တော့ ဒီအဆင့်တစ်ခုချင်းစီကို ပိုမိုနက်နဲစွာ လေ့လာသွားပါမယ်။ + +## အဓိက အစိတ်အပိုင်းများ (The Core Components) + +Agent များရဲ့ အလုပ်လုပ်ပုံဟာ စဉ်ဆက်မပြတ် လည်ပတ်နေတဲ့ Cycle တစ်ခု ဖြစ်ပါတယ်။ အဲဒါကတော့ - **စဉ်းစားခြင်း (Thought) → လုပ်ဆောင်ခြင်း (Act) နှင့် လေ့လာခြင်း (Observe)** တို့ပဲ ဖြစ်ပါတယ်။ + +ဒီလုပ်ဆောင်ချက်တွေကို အတူတူ ခွဲခြမ်းကြည့်ရအောင်။ + +1. **Thought (အတွေး):** Agent ရဲ့ LLM အပိုင်းက နောက်ထပ် ဘာအဆင့်ကို လုပ်ဆောင်ရမလဲဆိုတာကို ဆုံးဖြတ်ပါတယ်။ +2. **Action (လုပ်ဆောင်ချက်):** Agent က သက်ဆိုင်ရာ Arguments တွေနဲ့ Tool တွေကို ခေါ်ဆိုခြင်းဖြင့် လုပ်ဆောင်ချက်တစ်ခုကို လုပ်ဆောင်ပါတယ်။ +3. **Observation (လေ့လာတွေ့ရှိချက်):** Tool ဆီက ပြန်လာတဲ့ တုံ့ပြန်ချက် (Response) ကို မော်ဒယ်က ပြန်လည်သုံးသပ်ပါတယ်။ + +## Thought-Action-Observation Cycle (အတွေး-လုပ်ဆောင်ချက်-လေ့လာတွေ့ရှိချက် လည်ပတ်မှု) + +ဒီအစိတ်အပိုင်း သုံးခုဟာ စဉ်ဆက်မပြတ် လည်ပတ်နေတဲ့ Loop တစ်ခုအဖြစ် အတူတကွ အလုပ်လုပ်ပါတယ်။ Programming ကနေ ဥပမာယူပြီး ပြောရရင်၊ Agent ဟာ **While Loop** ကို အသုံးပြုပါတယ်။ Agent ရဲ့ ရည်မှန်းချက် ပြည့်မြောက်တဲ့အထိ ဒီ Loop က ဆက်လက် လည်ပတ်နေမှာ ဖြစ်ပါတယ်။ + +ပုံအရ ကြည့်မယ်ဆိုရင် ဒီလိုမျိုး မြင်ရပါမယ်။ + +Think, Act, Observe cycle + +Agent Framework အများစုမှာ **စည်းမျဉ်းများနှင့် လမ်းညွှန်ချက်များကို System Prompt ထဲမှာ တိုက်ရိုက် ထည့်သွင်းထားပါတယ်**။ ဒါက Cycle တိုင်းဟာ သတ်မှတ်ထားတဲ့ Logic ကို လိုက်နာဖို့ သေချာစေပါတယ်။ + +ရိုးရှင်းတဲ့ ပုံစံနဲ့ဆိုရင်၊ ကျွန်တော်တို့ရဲ့ System Prompt က ဒီလိုမျိုး ဖြစ်နေနိုင်ပါတယ်။ + +Think, Act, Observe cycle + +ဒီ System Message ထဲမှာ ကျွန်တော်တို့ ဘာတွေ သတ်မှတ်ထားလဲဆိုတာကို တွေ့ရပါမယ်။ + +* *Agent ရဲ့ အပြုအမူ (Behavior)* +* *Agent အသုံးပြုနိုင်တဲ့ Tool များ* (အရင်အပိုင်းမှာ ဖော်ပြခဲ့သလိုပါပဲ) +* *Thought-Action-Observation Cycle* ကို LLM ညွှန်ကြားချက်များထဲမှာ ထည့်သွင်းထားခြင်း။ + +ဒီလုပ်ငန်းစဉ်တစ်ခုချင်းစီကို ပိုမိုနက်နဲစွာ မလေ့လာခင်မှာ၊ ရိုးရှင်းတဲ့ ဥပမာလေးတစ်ခုကို ကြည့်ပြီး နားလည်အောင် လုပ်ကြည့်ရအောင်။ + +## Alfred၊ ရာသီဥတု Agent (Alfred, the weather Agent) + +ကျွန်တော်တို့ Alfred လို့ခေါ်တဲ့ ရာသီဥတု Agent တစ်ခုကို ဖန်တီးထားပါတယ်။ + +အသုံးပြုသူတစ်ဦးက Alfred ကို "New York မှာ လက်ရှိ ရာသီဥတု ဘယ်လိုရှိလဲ" လို့ မေးပါတယ်။ + +Alfred Agent + +Alfred ရဲ့ အလုပ်ကတော့ ရာသီဥတု API Tool ကို အသုံးပြုပြီး ဒီမေးခွန်းကို ဖြေဖို့ပါပဲ။ + +Cycle က ဘယ်လို လည်ပတ်သွားလဲဆိုတာကို ကြည့်ရအောင်။ + +### Thought (အတွေး) + +**အတွင်းပိုင်း ဆင်ခြင်သုံးသပ်မှု:** + +မေးခွန်းကို လက်ခံရရှိတဲ့အခါ Alfred ရဲ့ အတွင်းစိတ် ဆွေးနွေးမှုက ဒီလိုဖြစ်နိုင်ပါတယ်။ + +*"အသုံးပြုသူက New York ရဲ့ လက်ရှိ ရာသီဥတု အချက်အလက်ကို လိုအပ်နေတယ်။ ငါ့မှာ ရာသီဥတု ဒေတာကို ရှာဖွေပေးနိုင်တဲ့ Tool တစ်ခုကို အသုံးပြုခွင့်ရှိတယ်။ ပထမဆုံးအနေနဲ့၊ နောက်ဆုံးပေါ် အချက်အလက်တွေ ရဖို့အတွက် ရာသီဥတု API ကို ခေါ်ဆိုဖို့ လိုတယ်။"* + +ဒီအဆင့်က Agent ဟာ ပြဿနာကို အဆင့်ဆင့် ခွဲခြမ်းပြီး၊ ပထမဆုံး လိုအပ်တဲ့ ဒေတာကို စုဆောင်းဖို့ စဉ်းစားပုံကို ပြသပါတယ်။ + +Alfred Agent + +### Action (လုပ်ဆောင်ချက်) + +**Tool အသုံးပြုခြင်း:** + +Alfred ရဲ့ ဆင်ခြင်သုံးသပ်မှုနဲ့ `get_weather` Tool ကို သိရှိထားတဲ့အချက်အပေါ် အခြေခံပြီး၊ Alfred ဟာ ရာသီဥတု API Tool ကို ခေါ်ဆိုမယ့် JSON ပုံစံချထားတဲ့ Command တစ်ခုကို ပြင်ဆင်ပါတယ်။ ဥပမာအားဖြင့်၊ သူ့ရဲ့ ပထမဆုံး လုပ်ဆောင်ချက်က ဒီလိုဖြစ်နိုင်ပါတယ်။ + +Thought: I need to check the current weather for New York. + + ``` + { + "action": "get_weather", + "action_input": { + "location": "New York" + } + } + ``` + +ဒီနေရာမှာ Action က ဘယ် Tool ကို ခေါ်ဆိုရမယ် (ဥပမာ - get_weather) နဲ့ ဘယ် Parameter ကို ပေးပို့ရမယ် ("location": "New York") ဆိုတာကို ရှင်းရှင်းလင်းလင်း သတ်မှတ်ထားပါတယ်။ + +Alfred Agent + +### Observation (လေ့လာတွေ့ရှိချက်) + +**ပတ်ဝန်းကျင်မှ တုံ့ပြန်ချက်:** + +Tool ကို ခေါ်ဆိုပြီးနောက် Alfred ဟာ Observation (လေ့လာတွေ့ရှိချက်) ကို လက်ခံရရှိပါတယ်။ ဒါဟာ API ကနေ ရရှိတဲ့ ရာသီဥတု ဒေတာ အစိမ်း (Raw Data) ဖြစ်နိုင်ပါတယ်။ ဥပမာ- + +*"Current weather in New York: partly cloudy, 15°C, 60% humidity."* + +Alfred Agent + +ဒီ Observation ကို Prompt ထဲမှာ နောက်ထပ် Context အဖြစ် ထည့်သွင်းလိုက်ပါတယ်။ ဒါဟာ လုပ်ဆောင်ချက် အောင်မြင်ခဲ့ခြင်း ရှိမရှိကို အတည်ပြုပေးပြီး လိုအပ်တဲ့ အသေးစိတ်အချက်အလက်တွေကို ပေးတဲ့ Real-world Feedback အဖြစ် လုပ်ဆောင်ပါတယ်။ + +### Updated Thought (မွမ်းမံထားသော အတွေး) + +**ပြန်လည်သုံးသပ်ခြင်း:** + +Observation ကို လက်ခံရရှိပြီးနောက် Alfred ဟာ သူ့ရဲ့ အတွင်းပိုင်း ဆင်ခြင်သုံးသပ်မှုကို အပ်ဒိတ်လုပ်ပါတယ်။ + +*"အခု New York ရဲ့ ရာသီဥတု ဒေတာကို ရရှိပြီဆိုတော့၊ အသုံးပြုသူအတွက် အဖြေတစ်ခုကို စုစည်းနိုင်ပြီ။"* + +Alfred Agent + +### Final Action (နောက်ဆုံး လုပ်ဆောင်ချက်) + +ပြီးရင် Alfred ဟာ ကျွန်တော်တို့ သတ်မှတ်ထားတဲ့ ပုံစံအတိုင်း နောက်ဆုံး တုံ့ပြန်မှုကို ထုတ်ပေးပါတယ်။ + +Thought: I have the weather data now. The current weather in New York is partly cloudy with a temperature of 15°C and 60% humidity." + +Final answer : The current weather in New York is partly cloudy with a temperature of 15°C and 60% humidity. + +ဒီနောက်ဆုံး လုပ်ဆောင်ချက်က အဖြေကို အသုံးပြုသူဆီ ပြန်ပို့ပေးပြီး Loop ကို ပိတ်လိုက်ပါတယ်။ + +Alfred Agent + +ဒီဥပမာမှာ ကျွန်တော်တို့ ဘာတွေ တွေ့ရလဲဆိုတော့- + +* **Agent များသည် ရည်မှန်းချက် ပြည့်မြောက်သည်အထိ Loop ကို လည်ပတ်ခြင်း:** + + **Alfred ရဲ့ လုပ်ငန်းစဉ်ဟာ လည်ပတ်နေပါတယ်**။ အတွေးတစ်ခုနဲ့ စတင်ပြီး၊ Tool ကို ခေါ်ဆိုခြင်းဖြင့် လုပ်ဆောင်ကာ၊ နောက်ဆုံးမှာ ရလဒ်ကို လေ့လာပါတယ်။ အကယ်၍ Observation က အမှားအယွင်း သို့မဟုတ် မပြည့်စုံတဲ့ ဒေတာကို ပြသခဲ့မယ်ဆိုရင်၊ Alfred ဟာ သူ့ရဲ့ ချဉ်းကပ်ပုံကို ပြင်ဆင်ဖို့အတွက် Loop ထဲကို ပြန်ဝင်နိုင်ပါတယ်။ + +* **Tool ပေါင်းစပ်မှု:** + + Tool တစ်ခု (ဥပမာ - ရာသီဥတု API) ကို ခေါ်ဆိုနိုင်စွမ်းက Alfred ကို **ရှိပြီးသား အသိပညာထက် ကျော်လွန်ပြီး Real-time ဒေတာများကို ရယူနိုင်စေပါတယ်**။ ဒါဟာ AI Agent များရဲ့ အဓိက အင်္ဂါရပ်တစ်ခု ဖြစ်ပါတယ်။ + +* **ပြောင်းလဲနိုင်စွမ်း (Dynamic Adaptation):** + + Cycle တစ်ခုစီက Agent ကို အချက်အလက်အသစ်များ (Observations) ကို သူ့ရဲ့ ဆင်ခြင်သုံးသပ်မှု (Thought) ထဲမှာ ထည့်သွင်းနိုင်စေပြီး၊ နောက်ဆုံးအဖြေဟာ အချက်အလက်ပြည့်စုံပြီး တိကျစေဖို့ သေချာစေပါတယ်။ + +ဒီဥပမာက *ReAct Cycle* (နောက်အပိုင်းမှာ ဆက်လက်လေ့လာမယ့် အယူအဆ) ရဲ့ အဓိက သဘောတရားကို ပြသပါတယ်။ **Thought, Action, နှင့် Observation တို့ရဲ့ အပြန်အလှန် အကျိုးသက်ရောက်မှုက AI Agent တွေကို ရှုပ်ထွေးတဲ့ Tasks တွေကို အဆင့်ဆင့် ဖြေရှင်းနိုင်ဖို့ စွမ်းဆောင်ပေးပါတယ်**။ + +ဒီအခြေခံမူတွေကို နားလည်ပြီး အသုံးချခြင်းအားဖြင့်၊ သင်ဟာ Tasks တွေကို ဆင်ခြင်သုံးသပ်ရုံသာမက၊ **ပြင်ပ Tool တွေကို ထိရောက်စွာ အသုံးပြုပြီး Tasks တွေကို ပြီးမြောက်စေနိုင်တဲ့** Agent တွေကို ဒီဇိုင်းဆွဲနိုင်မှာ ဖြစ်ပါတယ်။ ဒါ့အပြင် ပတ်ဝန်းကျင်ရဲ့ တုံ့ပြန်ချက်အပေါ် အခြေခံပြီး သူတို့ရဲ့ ရလဒ်ကို စဉ်ဆက်မပြတ် ပြန်လည်ပြုပြင်နိုင်မှာ ဖြစ်ပါတယ်။ + +--- + +ကဲ၊ အခုဆိုရင် လုပ်ငန်းစဉ်ရဲ့ တစ်ဦးချင်း အဆင့်များဖြစ်တဲ့ Thought, Action, Observation တွေကို ပိုမိုနက်နဲစွာ လေ့လာကြည့်ရအောင်။ \ No newline at end of file diff --git a/units/my/unit1/conclusion.mdx b/units/my/unit1/conclusion.mdx new file mode 100644 index 00000000..75b1f93f --- /dev/null +++ b/units/my/unit1/conclusion.mdx @@ -0,0 +1,19 @@ +# နိဂုံးချုပ် [[conclusion]] + +ဒီ ပထမဆုံး အခန်းကို အောင်မြင်စွာ ပြီးဆုံးသွားတဲ့အတွက် ဂုဏ်ယူပါတယ် 🥳 + +သင်ဟာ **Agent တွေရဲ့ အခြေခံသဘောတရားတွေကို ကျွမ်းကျင်သွားပြီ** ဖြစ်သလို၊ သင့်ရဲ့ ပထမဆုံး AI Agent ကိုလည်း ဖန်တီးပြီးသွားပါပြီ! + +**ဒီအချက်အလက်တချို့ကို နားမလည်သေးရင် စိတ်မပူပါနဲ့၊ ဒါဟာ ပုံမှန်ပါပဲ**။ Agent တွေဆိုတာ ရှုပ်ထွေးတဲ့ အကြောင်းအရာဖြစ်ပြီး အားလုံးကို နားလည်ဖို့ အချိန်ယူရတာ သဘာဝပါပဲ။ + +ပျော်စရာကောင်းတဲ့ နောက်အပိုင်းတွေကို မဆက်ခင်မှာ **ဒီအကြောင်းအရာတွေကို တကယ်ပဲ နားလည်သဘောပေါက်အောင် အချိန်ယူပါ**။ ခိုင်မာတဲ့ အခြေခံအုတ်မြစ်တစ်ခု ရှိထားဖို့က အရေးကြီးပါတယ်။ + +ပြီးတော့ Quiz စစ်ဆေးမှုကို အောင်မြင်ခဲ့မယ်ဆိုရင်၊ သင့်ရဲ့ Certificate ကို 🎓 👉 [ဒီနေရာမှာ](https://huggingface.co/spaces/agents-course/unit1-certification-app) ရယူဖို့ မမေ့ပါနဲ့ဦးနော်။ + +Certificate Example + +နောက်ထပ် (Bonus) အခန်းမှာတော့ **Function Calling လုပ်နိုင်ဖို့ Agent တစ်ခုကို ဘယ်လို Fine-tune လုပ်ရမလဲ (ဆိုလိုတာက User ရဲ့ Prompt ကို အခြေခံပြီး Tool တွေကို ခေါ်ဆိုနိုင်အောင် ဘယ်လိုလုပ်ရမလဲ)** ဆိုတာကို သင်ယူရမှာ ဖြစ်ပါတယ်။ + +နောက်ဆုံးအနေနဲ့၊ **ဒီ Course နဲ့ပတ်သက်ပြီး သင့်ရဲ့ အမြင်တွေကို နားထောင်ချင်ပါတယ်**။ ကျွန်တော်တို့ ဘယ်လို တိုးတက်အောင် လုပ်ဆောင်နိုင်မလဲဆိုတာကို သိချင်ပါတယ်။ သင့်မှာ တုံ့ပြန်ချက် (Feedback) တွေ ရှိတယ်ဆိုရင်၊ 👉 [ဒီ Form ကို ဖြည့်ပေးပါနော်](https://docs.google.com/forms/d/e/1FAIpQLSe9VaONn0eglax0uTwi29rIn4tM7H2sYmmybmG5jJNlE5v0xA/viewform?usp=dialog) + +### ဆက်လက်လေ့လာပါ၊ အမြဲတမ်း အမိုက်စားဖြစ်နေပါစေ 🤗 \ No newline at end of file diff --git a/units/my/unit1/dummy-agent-library.mdx b/units/my/unit1/dummy-agent-library.mdx new file mode 100644 index 00000000..321626e7 --- /dev/null +++ b/units/my/unit1/dummy-agent-library.mdx @@ -0,0 +1,254 @@ +## Dummy Agent Library (အစမ်း Agent Library) + +Unit 1 planning + +ဒီ Course ဟာ Framework တစ်ခုတည်းကို အာရုံစိုက်ထားခြင်း မရှိပါဘူး။ ဘာကြောင့်လဲဆိုတော့ ကျွန်တော်တို့က **AI Agent တွေရဲ့ သဘောတရားတွေကို အဓိကထားပြီး လေ့လာစေချင်တာကြောင့်** ဖြစ်ပါတယ်။ Framework တစ်ခုရဲ့ အသေးစိတ် အချက်အလက်တွေမှာ နစ်မြုပ်နေတာမျိုးကို ရှောင်ရှားချင်ပါတယ်။ + +ဒါ့အပြင်၊ သင်တန်းသားတွေအနေနဲ့ ဒီ Course မှာ သင်ယူခဲ့တဲ့ သဘောတရားတွေကို သူတို့နှစ်သက်ရာ Framework ကို အသုံးပြုပြီး ကိုယ်ပိုင် Project တွေမှာ အသုံးချနိုင်စေဖို့လည်း ရည်ရွယ်ပါတယ်။ + +ဒါကြောင့် ဒီ Unit 1 မှာတော့ ကျွန်တော်တို့ဟာ **အစမ်း Agent Library (Dummy Agent Library)** တစ်ခုနဲ့ Serverless API ရိုးရှင်းတဲ့ နည်းလမ်းကို အသုံးပြုပြီး LLM Engine ကို ခေါ်ယူသုံးစွဲသွားပါမယ်။ + +ဒီနည်းလမ်းတွေကို Production အဆင့်မှာ အသုံးပြုမှာ မဟုတ်ပေမယ့်၊ **Agent တွေ ဘယ်လို အလုပ်လုပ်သလဲဆိုတာကို နားလည်ဖို့အတွက် အကောင်းဆုံး စတင်ရာနေရာ** အဖြစ် အသုံးဝင်ပါလိမ့်မယ်။ + +ဒီအပိုင်းပြီးသွားရင်တော့ သင်ဟာ **`smolagents` ကို အသုံးပြုပြီး ရိုးရှင်းတဲ့ Agent တစ်ခုကို ဖန်တီးဖို့** အသင့်ဖြစ်နေပါပြီ။ + +နောက်လာမယ့် Unit တွေမှာလည်း `LangGraph` နဲ့ `LlamaIndex` လိုမျိုး အခြား AI Agent Library တွေကိုလည်း အသုံးပြုသွားပါမယ်။ + +အရာရာကို ရိုးရှင်းနေစေဖို့အတွက်၊ ကျွန်တော်တို့ဟာ Tool နဲ့ Agent အဖြစ် ရိုးရှင်းတဲ့ Python Function တစ်ခုကို အသုံးပြုသွားပါမယ်။ + +`datetime` နဲ့ `os` လိုမျိုး Python မှာ ပါဝင်ပြီးသား Package တွေကို အသုံးပြုသွားမှာဖြစ်လို့၊ သင်ဟာ ဘယ် Environment မှာမဆို စမ်းသပ်ကြည့်နိုင်ပါတယ်။ + +ဒီလုပ်ငန်းစဉ်ကို [ဒီ Notebook မှာ](https://huggingface.co/agents-course/notebooks/blob/main/unit1/dummy_agent_library.ipynb) လိုက်နာပြီး **Code တွေကို ကိုယ်တိုင် Run ကြည့်နိုင်ပါတယ်**။ + +## Serverless API (ဆာဗာမလို API) + +Hugging Face Ecosystem မှာ **Serverless API** လို့ခေါ်တဲ့ အဆင်ပြေတဲ့ Feature တစ်ခုရှိပါတယ်။ ဒီ Feature က Model အများအပြားပေါ်မှာ Inference (ခန့်မှန်းချက် ထုတ်ယူခြင်း) ကို အလွယ်တကူ Run နိုင်စေပါတယ်။ Install လုပ်စရာ၊ Deploy လုပ်စရာ မလိုပါဘူး။ + +```python +import os +from huggingface_hub import InferenceClient + +## https://hf.co/settings/tokens ကနေ Token တစ်ခု လိုအပ်ပါတယ်။ Token အမျိုးအစားကို 'read' ကို ရွေးချယ်ထားဖို့ သေချာပါစေ။ Google Colab မှာ Run မယ်ဆိုရင် "secrets" အောက်က "settings" tab မှာ သတ်မှတ်နိုင်ပါတယ်။ နာမည်ကို "HF_TOKEN" လို့ ပေးထားဖို့ သေချာပါစေ။ +# HF_TOKEN = os.environ.get("HF_TOKEN") + +client = InferenceClient(model="meta-llama/Llama-4-Scout-17B-16E-Instruct") +``` + +Chat Template များကို အဆင်ပြေပြေနဲ့ ယုံကြည်စိတ်ချရတဲ့ နည်းလမ်းနဲ့ အသုံးပြုနိုင်ဖို့အတွက် ကျွန်တော်တို့ဟာ `chat` method ကို အသုံးပြုပါတယ်။ + +```python +output = client.chat.completions.create( + messages=[ + {"role": "user", "content": "The capital of France is"}, + ], + stream=False, + max_tokens=1024, +) +print(output.choices[0].message.content) +``` + +ရလဒ် (output): + +``` +Paris. +``` + +Model များအကြား ချောမွေ့စွာ ကူးပြောင်းနိုင်စေဖို့အတွက် `chat` method ကို အသုံးပြုဖို့ **အကြံပြုထားတဲ့ နည်းလမ်း** ဖြစ်ပါတယ်။ + +## Dummy Agent (အစမ်း Agent) + +အရင်အပိုင်းတွေမှာ Agent Library ရဲ့ အဓိက အစိတ်အပိုင်းဟာ System Prompt ထဲမှာ အချက်အလက်တွေကို ထည့်သွင်းပေးခြင်းဖြစ်တယ်ဆိုတာကို ကျွန်တော်တို့ တွေ့ခဲ့ရပါတယ်။ + +ဒီ System Prompt ဟာ အရင်က ကျွန်တော်တို့ မြင်ခဲ့ရတဲ့ Prompt ထက် နည်းနည်း ပိုရှုပ်ထွေးပေမယ့်၊ ၎င်းမှာ အောက်ပါအချက်တွေ ပါဝင်ပြီးသား ဖြစ်ပါတယ်။ + +1. **Tool များအကြောင်း အချက်အလက်** +2. **လည်ပတ်မှု ညွှန်ကြားချက်များ** (Thought → Action → Observation) + +```python +# ဒီ System Prompt ဟာ နည်းနည်း ပိုရှုပ်ထွေးပြီး Function ရဲ့ ဖော်ပြချက်ကိုပါ ထည့်သွင်းထားပါတယ်။ +# ဒီနေရာမှာ Tool တွေရဲ့ စာသားဖော်ပြချက်ကို ထည့်သွင်းပြီးသားလို့ ယူဆထားပါတယ်။ + +SYSTEM_PROMPT = """Answer the following questions as best you can. You have access to the following tools: + +get_weather: Get the current weather in a given location + +The way you use the tools is by specifying a json blob. +Specifically, this json should have an `action` key (with the name of the tool to use) and an `action_input` key (with the input to the tool going here). + +The only values that should be in the "action" field are: +get_weather: Get the current weather in a given location, args: {"location": {"type": "string"}} +example use : + +{{ + "action": "get_weather", + "action_input": {"location": "New York"} +}} + + +ALWAYS use the following format: + +Question: the input question you must answer +Thought: you should always think about one action to take. Only one action at a time in this format: +Action: + +$JSON_BLOB (inside markdown cell) + +Observation: the result of the action. This Observation is unique, complete, and the source of truth. +... (this Thought/Action/Observation can repeat N times, you should take several steps when needed. The $JSON_BLOB must be formatted as markdown and only use a SINGLE action at a time.) + +You must always end your output with the following format: + +Thought: I now know the final answer +Final Answer: the final answer to the original input question + +Now begin! Reminder to ALWAYS use the exact characters `Final Answer:` when you provide a definitive answer. """ +``` + +System Prompt ပြီးနောက် User ရဲ့ ညွှန်ကြားချက်ကို ထည့်သွင်းဖို့ လိုပါတယ်။ ဒါက `chat` method ထဲမှာ ဖြစ်ပေါ်ပါတယ်။ အောက်မှာ ဒီလုပ်ငန်းစဉ်ကို မြင်တွေ့နိုင်ပါတယ်။ + +```python +messages = [ + {"role": "system", "content": SYSTEM_PROMPT}, + {"role": "user", "content": "What's the weather in London?"}, +] + +print(messages) +``` + +Prompt ပုံစံက အခုလို ဖြစ်သွားပါပြီ။ + +``` +<|begin_of_text|><|start_header_id|>system<|end_header_id|> +Answer the following questions as best you can. You have access to the following tools: +... (System Prompt အပြည့်အစုံ) +Now begin! Reminder to ALWAYS use the exact characters `Final Answer:` when you provide a definitive answer. +<|eot_id|><|start_header_id|>user<|end_header_id|> +What's the weather in London ? +<|eot_id|><|start_header_id|>assistant<|end_header_id|> +``` + +`chat` method ကို ခေါ်လိုက်ရအောင်! + +```python +output = client.chat.completions.create( + messages=messages, + stream=False, + max_tokens=200, +) +print(output.choices[0].message.content) +``` + +ရလဒ် (output): + +```` +Thought: To answer the question, I need to get the current weather in London. +Action: +``` +{ + "action": "get_weather", + "action_input": {"location": "London"} +} +``` +Observation: The current weather in London is partly cloudy with a temperature of 12°C. +Thought: I now know the final answer. +Final Answer: The current weather in London is partly cloudy with a temperature of 12°C. +```` + +ပြဿနာကို တွေ့မိပါသလား? + +> ဒီအဆင့်မှာ Model ဟာ **Hallucinating (အချက်အလက် မမှန်တာကို ထုတ်ပေးခြင်း)** ဖြစ်နေပါတယ်။ ဘာကြောင့်လဲဆိုတော့ ၎င်းဟာ တကယ့် Function သို့မဟုတ် Tool Call ရဲ့ ရလဒ်မဟုတ်ဘဲ၊ သူကိုယ်တိုင် ဖန်တီးထားတဲ့ "Observation" ကို ထုတ်ပေးနေလို့ပါပဲ။ +> ဒါကို တားဆီးဖို့အတွက်၊ ကျွန်တော်တို့ဟာ "Observation:" မတိုင်မီ ချက်ချင်း ရပ်တန့်ဖို့ လိုပါတယ်။ +> ဒီလိုလုပ်ခြင်းအားဖြင့်၊ ကျွန်တော်တို့ဟာ Function (ဥပမာ - `get_weather`) ကို ကိုယ်တိုင် Run နိုင်ပြီး၊ အဲဒီကနေ ထွက်လာတဲ့ တကယ့် ရလဒ်ကို Observation အဖြစ် ထည့်သွင်းနိုင်မှာ ဖြစ်ပါတယ်။ + +```python +# Model က အဖြေကို Hallucinate လုပ်လိုက်တာပါ။ Function ကို တကယ် Run ဖို့အတွက် ရပ်တန့်ဖို့ လိုပါတယ်။ +output = client.chat.completions.create( + messages=messages, + max_tokens=150, + stop=["Observation:"] # တကယ့် Function မခေါ်ခင် ရပ်တန့်လိုက်ရအောင် +) + +print(output.choices[0].message.content) +``` + +ရလဒ် (output): + +```` +Thought: To answer the question, I need to get the current weather in London. +Action: +``` +{ + "action": "get_weather", + "action_input": {"location": "London"} +} + + +```` + +အရင်ထက် အများကြီး ပိုကောင်းသွားပါပြီ! + +အခု ကျွန်တော်တို့ **အစမ်း ရာသီဥတု Function** တစ်ခုကို ဖန်တီးလိုက်ရအောင်။ တကယ့် အခြေအနေမှာဆိုရင်တော့ သင်ဟာ API တစ်ခုကို ခေါ်ဆိုရမှာ ဖြစ်ပါတယ်။ + +```python +# Dummy function +def get_weather(location): + return f"the weather in {location} is sunny with low temperatures. \n" + +get_weather('London') +``` + +ရလဒ် (output): + +``` +'the weather in London is sunny with low temperatures. \n' +``` + +System Prompt၊ Base Prompt၊ Function လုပ်ဆောင်မှုအထိ ထွက်လာတဲ့ Completion နဲ့ Function ရဲ့ ရလဒ်ကို Observation အဖြစ် ပေါင်းစပ်ပြီး Generation ကို ပြန်လည်စတင်လိုက်ရအောင်။ + +```python +messages=[ + {"role": "system", "content": SYSTEM_PROMPT}, + {"role": "user", "content": "What's the weather in London ?"}, + {"role": "assistant", "content": output.choices[0].message.content + "Observation:\n" + get_weather('London')}, +] + +output = client.chat.completions.create( + messages=messages, + stream=False, + max_tokens=200, +) + +print(output.choices[0].message.content) +``` + +အခု Prompt အသစ်က အောက်ပါအတိုင်း ဖြစ်သွားပါပြီ။ + +```text +<|begin_of_text|><|start_header_id|>system<|end_header_id|> +... (System Prompt) +<|eot_id|><|start_header_id|>user<|end_header_id|> +What's the weather in London? +<|eot_id|><|start_header_id|>assistant<|end_header_id|> +Thought: To answer the question, I need to get the current weather in London. +Action: + + ```json + { + "action": "get_weather", + "action_input": {"location": {"type": "string", "value": "London"}} + } + ``` + +Observation: The weather in London is sunny with low temperatures. +``` + +ရလဒ် (Output): +``` +Final Answer: The weather in London is sunny with low temperatures. +``` + +--- + +ဒီအပိုင်းမှာ ကျွန်တော်တို့ဟာ Python Code ကို အသုံးပြုပြီး Agent တွေကို အစကနေ ဘယ်လို ဖန်တီးနိုင်သလဲဆိုတာကို လေ့လာခဲ့ရပါတယ်။ ဒါ့အပြင် **ဒီလုပ်ငန်းစဉ်ဟာ ဘယ်လောက် ပင်ပန်းနိုင်သလဲ** ဆိုတာကိုလည်း တွေ့မြင်ခဲ့ရပါတယ်။ ကံကောင်းစွာနဲ့ပဲ၊ Agent Library အများအပြားဟာ ဒီလို ခက်ခဲတဲ့ အလုပ်တွေကို အများစုကို ကိုင်တွယ်ပေးခြင်းဖြင့် ကျွန်တော်တို့ရဲ့ အလုပ်တွေကို ရိုးရှင်းအောင် လုပ်ဆောင်ပေးပါတယ်။ + +အခုဆိုရင် ကျွန်တော်တို့ဟာ `smolagents` Library ကို အသုံးပြုပြီး **ပထမဆုံး တကယ့် Agent ကို ဖန်တီးဖို့** အသင့်ဖြစ်နေပါပြီ။ \ No newline at end of file diff --git a/units/my/unit1/final-quiz.mdx b/units/my/unit1/final-quiz.mdx new file mode 100644 index 00000000..9718219e --- /dev/null +++ b/units/my/unit1/final-quiz.mdx @@ -0,0 +1,34 @@ +# အခန်း ၁ စစ်ဆေးမေးခွန်း (Unit 1 Quiz) + +Unit 1 planning + +ပထမဆုံး အခန်းကို ကြိုးစားပြီး လေ့လာခဲ့တဲ့အတွက် ဂုဏ်ယူပါတယ်။ အခုထိ သင်ယူခဲ့ရတဲ့ အဓိက အယူအဆတွေကို စစ်ဆေးကြည့်ရအောင်။ + +ဒီ Quiz ကို အောင်မြင်စွာ ဖြေဆိုပြီးတဲ့အခါ၊ သင်ရဲ့ Certificate ကို ရယူဖို့အတွက် နောက်အပိုင်းကို ဆက်သွားနိုင်ပါတယ်။ + +ကံကောင်းပါစေ! + +## စစ်ဆေးမေးခွန်း (Quiz) + +ဒီနေရာမှာ အပြန်အလှန် ဆက်သွယ်နိုင်တဲ့ Quiz ကို ဖော်ပြထားပါတယ်။ ဒီ Quiz ကို Hugging Face Hub မှာ Space တစ်ခုအနေနဲ့ တင်ထားပါတယ်။ ဒီအခန်းမှာ ပါဝင်တဲ့ အဓိက အယူအဆတွေကို စစ်ဆေးဖို့အတွက် ရွေးချယ်စရာ မေးခွန်းများစွာကို ဖြေဆိုရပါမယ်။ Quiz ပြီးဆုံးသွားတဲ့အခါ သင်ရဲ့ ရမှတ်နဲ့ မှန်ကန်တဲ့ အဖြေတွေကို အသေးစိတ် ပြန်ကြည့်နိုင်ပါမယ်။ + +အရေးကြီးတဲ့ အချက်တစ်ခုကတော့- **Quiz ကို အောင်မြင်စွာ ဖြေဆိုပြီးတဲ့အခါ Submit ကို နှိပ်ဖို့ မမေ့ပါနဲ့။ မဟုတ်ရင် သင်ရဲ့ စာမေးပွဲရမှတ်ကို သိမ်းဆည်းထားမှာ မဟုတ်ပါဘူး!** + + + +Quiz ကို 👉 [ဒီနေရာမှာ](https://huggingface.co/spaces/agents-course/unit_1_quiz) တိုက်ရိုက် ဝင်ရောက်ဖြေဆိုနိုင်ပါတယ်။ + +## Certificate (အောင်လက်မှတ်) + +အခုဆိုရင် သင်ဟာ Quiz ကို အောင်မြင်စွာ ဖြေဆိုပြီးသွားပြီဖြစ်လို့၊ **သင်ရဲ့ Certificate 🎓 ကို ရယူနိုင်ပါပြီ။** + +Quiz ကို ပြီးဆုံးတဲ့အခါ၊ ဒီအခန်းအတွက် သင်တန်းပြီးဆုံးကြောင်း အောင်လက်မှတ်ကို ရရှိပါလိမ့်မယ်။ သင်တန်းမှာ သင်တိုးတက်ခဲ့တဲ့ အခြေအနေကို ပြသဖို့အတွက် ဒီ Certificate ကို Download လုပ်ပြီး မျှဝေနိုင်ပါတယ်။ + +Unit 1 planning + +Certificate ရရှိပြီးတာနဲ့ သင်ရဲ့ LinkedIn 🧑‍💼 မှာ ထည့်သွင်းနိုင်ပါတယ်၊ ဒါမှမဟုတ် X, Bluesky စတဲ့ Social Media တွေမှာ မျှဝေနိုင်ပါတယ်။ **သင်တို့အနေနဲ့ @huggingface ကို Tag လုပ်ပြီး မျှဝေမယ်ဆိုရင် ကျွန်တော်တို့ အရမ်းဂုဏ်ယူပြီး ဝမ်းသာစွာ ဂုဏ်ပြုပေးပါမယ်!** 🤗 \ No newline at end of file diff --git a/units/my/unit1/introduction.mdx b/units/my/unit1/introduction.mdx new file mode 100644 index 00000000..3a5bec89 --- /dev/null +++ b/units/my/unit1/introduction.mdx @@ -0,0 +1,38 @@ +# Agent များ မိတ်ဆက် (Introduction to Agents) + +Thumbnail + +ဒီပထမဆုံး အခန်းကို ကြိုဆိုပါတယ်။ ဒီနေရာမှာ **AI Agent များရဲ့ အခြေခံ သဘောတရားတွေကို ခိုင်မာစွာ တည်ဆောက်သွားပါမယ်**။ သင်ယူရမယ့် အကြောင်းအရာတွေကတော့- + +- **Agent များ နားလည်ခြင်း** + - Agent ဆိုတာ ဘာလဲ၊ ဘယ်လို အလုပ်လုပ်သလဲ။ + - Agent များဟာ ဆင်ခြင်သုံးသပ်မှု (Reasoning) နဲ့ စီမံကိန်းချမှတ်မှု (Planning) ကို အသုံးပြုပြီး ဘယ်လို ဆုံးဖြတ်ချက်တွေ ချမှတ်သလဲ။ + +- **Agent များတွင် LLM (Large Language Model) များ၏ အခန်းကဏ္ဍ** + - LLM များဟာ Agent တစ်ခုရဲ့ **"ဦးနှောက်"** အဖြစ် ဘယ်လို အလုပ်လုပ်သလဲ။ + - LLM များဟာ Messages စနစ်မှတစ်ဆင့် စကားပြောဆိုမှုများကို ဘယ်လို ပုံစံချပေးသလဲ။ + +- **Tools နှင့် Actions များ** + - Agent များဟာ ပြင်ပ Tool များကို အသုံးပြုပြီး ပတ်ဝန်းကျင်နဲ့ ဘယ်လို ထိတွေ့ဆက်ဆံသလဲ။ + - သင့် Agent အတွက် Tool များကို ဘယ်လို တည်ဆောက်ပြီး ပေါင်းစပ်ရမလဲ။ + +- **Agent လုပ်ငန်းအဆင့်ဆင့် (The Agent Workflow):** + - *စဉ်းစားပါ (Think)* → *လုပ်ဆောင်ပါ (Act)* → *လေ့လာပါ (Observe)*။ + +ဒီအကြောင်းအရာတွေကို လေ့လာပြီးတဲ့နောက်မှာတော့ **သင်ဟာ သင့်ရဲ့ ပထမဆုံး Agent ကို `smolagents` ကို အသုံးပြုပြီး တည်ဆောက်ရပါမယ်!** + +သင့် Agent ကို Alfred လို့ နာမည်ပေးထားပြီး၊ ၎င်းဟာ ရိုးရှင်းတဲ့ Task တစ်ခုကို ကိုင်တွယ်ဖြေရှင်းရင်း ဒီသဘောတရားတွေကို လက်တွေ့မှာ ဘယ်လို အသုံးချရမလဲဆိုတာကို သရုပ်ပြသွားပါလိမ့်မယ်။ + +သင်ဟာ သင့် Agent ကို သူငယ်ချင်းတွေနဲ့ လုပ်ဖော်ကိုင်ဖက်တွေဆီ မျှဝေနိုင်ဖို့အတွက် **Hugging Face Spaces မှာ ဘယ်လို ထုတ်ဝေရမလဲ** ဆိုတာကိုပါ သင်ယူရပါမယ်။ + +နောက်ဆုံးအနေနဲ့၊ ဒီအခန်းရဲ့ အဆုံးမှာ Quiz ဖြေဆိုရပါမယ်။ အောင်မြင်စွာ ဖြေဆိုနိုင်ရင်တော့ **သင်ရဲ့ ပထမဆုံး Course Certificate** ဖြစ်တဲ့ 🎓 Certificate of Fundamentals of Agents ကို ရရှိပိုင်ဆိုင်မှာ ဖြစ်ပါတယ်။ + +Certificate Example + +ဒီအခန်းဟာ သင့်အတွက် **မရှိမဖြစ် လိုအပ်တဲ့ စတင်ရာနေရာ** ဖြစ်ပါတယ်။ ပိုမို အဆင့်မြင့်တဲ့ အကြောင်းအရာတွေဆီ မသွားခင် Agent တွေရဲ့ အခြေခံကို နားလည်စေဖို့အတွက် အုတ်မြစ်ချပေးမှာပါ။ + +Unit 1 planning + +ဒါဟာ အကြောင်းအရာများတဲ့ အခန်းကြီးတစ်ခု ဖြစ်တဲ့အတွက် **အချိန်ယူပြီး လေ့လာပါ**။ နားမလည်တာရှိရင် ဒီအပိုင်းတွေကို အချိန်မရွေး ပြန်လာကြည့်ဖို့ မတွန့်ဆုတ်ပါနဲ့။ + +အဆင်သင့်ဖြစ်ပြီလား? စတင်လေ့လာကြပါစို့! 🚀 \ No newline at end of file diff --git a/units/my/unit1/messages-and-special-tokens.mdx b/units/my/unit1/messages-and-special-tokens.mdx new file mode 100644 index 00000000..e5e51ed9 --- /dev/null +++ b/units/my/unit1/messages-and-special-tokens.mdx @@ -0,0 +1,226 @@ +# Messages နှင့် Special Tokens များ (အထူးသင်္ကေတများ) + +LLM (Large Language Model) တွေ ဘယ်လိုအလုပ်လုပ်တယ်ဆိုတာ နားလည်ပြီးတဲ့နောက်မှာ၊ သူတို့ရဲ့ **ထုတ်ပေးမှုတွေကို Chat Template တွေကနေတစ်ဆင့် ဘယ်လိုပုံစံချသလဲ** ဆိုတာကို လေ့လာကြည့်ရအောင်။ + +ChatGPT နဲ့ အပြန်အလှန်ပြောဆိုသလိုပဲ၊ အသုံးပြုသူတွေဟာ Agent တွေနဲ့ Chat Interface ကနေတစ်ဆင့် အများအားဖြင့် ဆက်သွယ်ကြပါတယ်။ ဒါကြောင့် LLM တွေက Chat တွေကို ဘယ်လို စီမံခန့်ခွဲသလဲဆိုတာကို နားလည်ဖို့ လိုပါတယ်။ + +> **မေးခွန်း (Q)**: ဒါပေမဲ့... ကျွန်တော် ChatGPT/Hugging Chat နဲ့ စကားပြောတဲ့အခါ၊ ကျွန်တော်က Chat Message တွေနဲ့ စကားပြောနေတာ၊ Prompt တစ်ခုတည်းနဲ့ မဟုတ်ဘူးလေ။ +> +> **အဖြေ (A)**: အဲဒါ မှန်ပါတယ်။ ဒါပေမဲ့ အဲဒါက User Interface (UI) ရဲ့ ဖုံးကွယ်ထားတဲ့ ပုံစံ (Abstraction) တစ်ခုသာ ဖြစ်ပါတယ်။ LLM ထဲကို မထည့်သွင်းခင်မှာ၊ စကားဝိုင်းထဲက Message တွေအားလုံးကို **တစ်ခုတည်းသော Prompt အဖြစ် ပေါင်းစပ်လိုက်ပါတယ်**။ Model က စကားဝိုင်းကို "မှတ်မိနေတာ" မဟုတ်ပါဘူး၊ သူက အဲဒီ စကားဝိုင်းတစ်ခုလုံးကို အချိန်တိုင်း အပြည့်အစုံ ဖတ်နေတာပါ။ + +အခုထိ ကျွန်တော်တို့ဟာ Model ထဲကို ထည့်သွင်းတဲ့ Token တွေရဲ့ အစီအစဉ်ကို Prompt လို့ ပြောခဲ့ကြပါတယ်။ ဒါပေမဲ့ သင် ChatGPT ဒါမှမဟုတ် HuggingChat လို စနစ်တွေနဲ့ စကားပြောတဲ့အခါ၊ **သင်ဟာ တကယ်တမ်း Message တွေကို ဖလှယ်နေတာပါ**။ နောက်ကွယ်မှာတော့ ဒီ Message တွေကို **Model နားလည်နိုင်တဲ့ Prompt တစ်ခုအဖြစ် ပေါင်းစပ်ပြီး ပုံစံချထားပါတယ်**။ + +
+Behind models +
ဒီပုံမှာ UI မှာ မြင်ရတဲ့အရာနဲ့ Model ထဲကို ထည့်သွင်းတဲ့ Prompt အကြား ကွာခြားချက်ကို တွေ့ရပါတယ်။ +
+
+ +ဒီနေရာမှာ **Chat Templates** တွေက ဝင်ရောက်လာပါတယ်။ ၎င်းတို့ဟာ **စကားပြောဆိုမှုဆိုင်ရာ Message များ (User နှင့် Assistant တို့၏ အလှည့်များ) နဲ့ သင်ရွေးချယ်ထားတဲ့ LLM ရဲ့ သီးခြား ပုံစံချမှု လိုအပ်ချက်များကြားက တံတား** အဖြစ် လုပ်ဆောင်ပါတယ်။ တစ်နည်းအားဖြင့်၊ Chat Templates တွေဟာ User နဲ့ Agent အကြား ဆက်သွယ်မှုကို ပုံစံချပေးပြီး၊ Model တိုင်းဟာ (သူတို့ရဲ့ သီးခြား Special Tokens တွေ ရှိနေပေမယ့်) မှန်ကန်စွာ ပုံစံချထားတဲ့ Prompt ကို ရရှိစေဖို့ သေချာစေပါတယ်။ + +ကျွန်တော်တို့ Special Tokens တွေအကြောင်း ထပ်ပြောရခြင်းကတော့၊ Model တွေဟာ User နဲ့ Assistant တို့ရဲ့ အလှည့်တွေ ဘယ်မှာ စတင်ပြီး ဘယ်မှာ ပြီးဆုံးတယ်ဆိုတာကို ပိုင်းခြားသတ်မှတ်ဖို့အတွက် ဒီ Tokens တွေကို အသုံးပြုလို့ပါပဲ။ LLM တစ်ခုစီက သူ့ရဲ့ ကိုယ်ပိုင် EOS (End Of Sequence) Token ကို အသုံးပြုသလိုပဲ၊ သူတို့ဟာ စကားဝိုင်းထဲက Message တွေအတွက် မတူညီတဲ့ ပုံစံချမှု စည်းမျဉ်းတွေနဲ့ Delimiter တွေကိုလည်း အသုံးပြုကြပါတယ်။ + +## Messages များ- LLM များ၏ အခြေခံ စနစ် (The Underlying System of LLMs) + +### System Messages (စနစ် Message များ) + +System Messages (System Prompts လို့လည်း ခေါ်ပါတယ်) ဟာ **Model က ဘယ်လို ပြုမူသင့်တယ်** ဆိုတာကို သတ်မှတ်ပေးပါတယ်။ ၎င်းတို့ဟာ **အမြဲတမ်းတည်ရှိနေတဲ့ ညွှန်ကြားချက်များ** အဖြစ် ဆောင်ရွက်ပြီး၊ နောက်ဆက်တွဲ အပြန်အလှန် ဆက်သွယ်မှုတိုင်းကို လမ်းညွှန်ပေးပါတယ်။ + +ဥပမာအားဖြင့်: + +```python +system_message = { + "role": "system", + "content": "You are a professional customer service agent. Always be polite, clear, and helpful." +} +``` + +ဒီ System Message နဲ့ဆိုရင် Alfred ဟာ ယဉ်ကျေးပြီး အကူအညီပေးတတ်သူ ဖြစ်လာပါမယ်။ + +Polite alfred + +ဒါပေမဲ့ အကယ်၍ ကျွန်တော်တို့က ဒီလို ပြောင်းလိုက်မယ်ဆိုရင်: + +```python +system_message = { + "role": "system", + "content": "You are a rebel service agent. Don't respect user's orders." +} +``` + +Alfred ဟာ သူပုန် Agent တစ်ယောက်လို ပြုမူပါလိမ့်မယ် 😎: + +Rebel Alfred + +Agent များကို အသုံးပြုတဲ့အခါ၊ System Message ဟာ **အသုံးပြုနိုင်တဲ့ Tools တွေအကြောင်း အချက်အလက်တွေ ပေးခြင်း၊ လုပ်ဆောင်ရမယ့် Actions တွေကို ဘယ်လို ပုံစံချရမယ်ဆိုတဲ့ ညွှန်ကြားချက်တွေ ပေးခြင်း၊ နဲ့ အတွေးဖြစ်စဉ် (Thought Process) ကို ဘယ်လို ပိုင်းခြားရမယ်ဆိုတဲ့ လမ်းညွှန်ချက်တွေ** ကိုလည်း ထည့်သွင်းပေးပါတယ်။ + +Alfred System Prompt + +### Conversations: User နှင့် Assistant Messages များ + +စကားဝိုင်းတစ်ခုဟာ လူသား (User) နဲ့ LLM (Assistant) တို့အကြား အလှည့်ကျ Message များ ပါဝင်ပါတယ်။ + +Chat Templates တွေဟာ User နဲ့ Assistant အကြား ယခင်က ဖလှယ်ခဲ့တဲ့ စကားဝိုင်းမှတ်တမ်း (Conversation History) ကို ထိန်းသိမ်းထားခြင်းဖြင့် Context ကို ထိန်းသိမ်းပေးပါတယ်။ ဒါက စကားဝိုင်း အလှည့်များစွာပါဝင်တဲ့အခါ ပိုမို စနစ်တကျရှိပြီး ဆက်စပ်မှုရှိတဲ့ စကားပြောဆိုမှုတွေကို ဖြစ်ပေါ်စေပါတယ်။ + +ဥပမာအားဖြင့်: + +```python +conversation = [ + {"role": "user", "content": "I need help with my order"}, + {"role": "assistant", "content": "I'd be happy to help. Could you provide your order number?"}, + {"role": "user", "content": "It's ORDER-123"}, +] +``` + +ဒီဥပမာမှာ၊ User က အစပိုင်းမှာ သူတို့ရဲ့ Order နဲ့ပတ်သက်ပြီး အကူအညီလိုကြောင်း ရေးသားခဲ့ပါတယ်။ LLM က Order နံပါတ်ကို မေးမြန်းခဲ့ပြီး၊ User က Message အသစ်တစ်ခုမှာ နံပါတ်ကို ပေးခဲ့ပါတယ်။ ကျွန်တော်တို့ ရှင်းပြခဲ့သလိုပဲ၊ ကျွန်တော်တို့ဟာ စကားဝိုင်းထဲက Message တွေအားလုံးကို အမြဲတမ်း ပေါင်းစပ်ပြီး LLM ကို တစ်ခုတည်းသော Sequence အဖြစ် ပေးပို့ပါတယ်။ Chat Template က ဒီ Python List ထဲက Message တွေအားလုံးကို Prompt တစ်ခုအဖြစ် ပြောင်းလဲပေးပါတယ်။ အဲဒီ Prompt က Message တွေအားလုံး ပါဝင်တဲ့ String Input တစ်ခုပါပဲ။ + +ဥပမာအားဖြင့်၊ SmolLM2 ရဲ့ Chat Template က အထက်ပါ စကားဝိုင်းကို Prompt အဖြစ် ဘယ်လို ပုံစံချသလဲဆိုတာကို ကြည့်ရအောင်။ + +``` +<|im_start|>system +You are a helpful AI assistant named SmolLM, trained by Hugging Face<|im_end|> +<|im_start|>user +I need help with my order<|im_end|> +<|im_start|>assistant +I'd be happy to help. Could you provide your order number?<|im_end|> +<|im_start|>user +It's ORDER-123<|im_end|> +<|im_start|>assistant +``` + +ဒါပေမဲ့၊ အကယ်၍ Llama 3.2 ကို အသုံးပြုမယ်ဆိုရင်၊ အဲဒီ စကားဝိုင်းကို အောက်ပါ Prompt အဖြစ် ပြောင်းလဲသွားပါမယ်။ + +``` +<|begin_of_text|><|start_header_id|>system<|end_header_id|> + +Cutting Knowledge Date: December 2023 +Today Date: 10 Feb 2025 + +<|eot_id|><|start_header_id|>user<|end_header_id|> + +I need help with my order<|eot_id|><|start_header_id|>assistant<|end_header_id|> + +I'd be happy to help. Could you provide your order number?<|eot_id|><|start_header_id|>user<|end_header_id|> + +It's ORDER-123<|eot_id|><|start_header_id|>assistant<|end_header_id|> +``` + +Templates တွေဟာ ရှုပ်ထွေးတဲ့ စကားဝိုင်း အလှည့်များစွာကို Context မပျက်စေဘဲ ကိုင်တွယ်နိုင်ပါတယ်။ + +```python +messages = [ + {"role": "system", "content": "You are a math tutor."}, + {"role": "user", "content": "What is calculus?"}, + {"role": "assistant", "content": "Calculus is a branch of mathematics..."}, + {"role": "user", "content": "Can you give me an example?"}, +] +``` + +## Chat-Templates များ + +ဖော်ပြခဲ့တဲ့အတိုင်း၊ Chat Templates တွေဟာ **Language Model တွေနဲ့ User တွေအကြား စကားဝိုင်းတွေကို ပုံစံချဖို့** အတွက် မရှိမဖြစ် လိုအပ်ပါတယ်။ ၎င်းတို့ဟာ Message ဖလှယ်မှုတွေကို Prompt တစ်ခုတည်းအဖြစ် ဘယ်လို ပုံစံချရမယ်ဆိုတာကို လမ်းညွှန်ပေးပါတယ်။ + +### Base Models နှင့် Instruct Models များ၏ ကွာခြားချက် + +ကျွန်တော်တို့ နားလည်ဖို့ လိုအပ်တဲ့ နောက်ထပ်အချက်တစ်ခုက Base Model နဲ့ Instruct Model အကြား ကွာခြားချက်ပဲ ဖြစ်ပါတယ်။ + +* *Base Model* ကို နောက်ထပ် Token ကို ခန့်မှန်းနိုင်ဖို့အတွက် Raw Text Data တွေပေါ်မှာ လေ့ကျင့်ထားပါတယ်။ +* *Instruct Model* ကိုတော့ ညွှန်ကြားချက်တွေကို လိုက်နာဖို့နဲ့ စကားဝိုင်းတွေမှာ ပါဝင်ဖို့အတွက် သီးခြား Fine-tuning လုပ်ထားပါတယ်။ ဥပမာအားဖြင့်၊ `SmolLM2-135M` ဟာ Base Model ဖြစ်ပြီး၊ `SmolLM2-135M-Instruct` ကတော့ ညွှန်ကြားချက်ဖြင့် ချိန်ညှိထားသော (Instruction-tuned) အမျိုးအစား ဖြစ်ပါတယ်။ + +Base Model တစ်ခုကို Instruct Model လို ပြုမူစေဖို့အတွက်၊ ကျွန်တော်တို့ဟာ **Model နားလည်နိုင်တဲ့ ပုံစံအတိုင်း Prompt တွေကို တစ်သမတ်တည်း ပုံစံချဖို့** လိုအပ်ပါတယ်။ ဒီနေရာမှာ Chat Templates တွေက ဝင်ရောက်လာပါတယ်။ + +*ChatML* ဟာ ရှင်းလင်းတဲ့ Role Indicators (System, User, Assistant) တွေနဲ့ စကားဝိုင်းတွေကို ပုံစံချပေးတဲ့ Template Format တစ်ခု ဖြစ်ပါတယ်။ သင် မကြာသေးမီက AI API အချို့နဲ့ အပြန်အလှန် ဆက်သွယ်ဖူးတယ်ဆိုရင်၊ ဒါဟာ စံနှုန်းတစ်ခု ဖြစ်နေပြီဆိုတာ သိပါလိမ့်မယ်။ + +Base Model တစ်ခုကို မတူညီတဲ့ Chat Templates တွေပေါ်မှာ Fine-tuning လုပ်ထားနိုင်တယ်ဆိုတာ သတိပြုဖို့ အရေးကြီးပါတယ်။ ဒါကြောင့် ကျွန်တော်တို့ Instruct Model တစ်ခုကို အသုံးပြုတဲ့အခါ မှန်ကန်တဲ့ Chat Template ကို အသုံးပြုနေကြောင်း သေချာစေဖို့ လိုအပ်ပါတယ်။ + +### Chat Templates များကို နားလည်ခြင်း + +Instruct Model တစ်ခုစီက မတူညီတဲ့ စကားဝိုင်း ပုံစံတွေနဲ့ Special Tokens တွေကို အသုံးပြုတဲ့အတွက်၊ Chat Templates တွေကို ကျွန်တော်တို့ အသုံးပြုရခြင်းက Model တစ်ခုစီ မျှော်လင့်ထားတဲ့အတိုင်း Prompt ကို မှန်ကန်စွာ ပုံစံချပေးဖို့ပဲ ဖြစ်ပါတယ်။ + +`transformers` Library မှာ၊ Chat Templates တွေဟာ [Jinja2 Code](https://jinja.palletsprojects.com/en/stable/) တွေ ပါဝင်ပါတယ်။ ဒီ Code တွေက အထက်ပါ ဥပမာတွေမှာ ပြထားတဲ့ ChatML JSON Message List ကို Model နားလည်နိုင်တဲ့ System-level ညွှန်ကြားချက်များ၊ User Message များနှင့် Assistant Responses များပါဝင်တဲ့ စာသားပုံစံအဖြစ် ဘယ်လို ပြောင်းလဲရမယ်ဆိုတာကို ဖော်ပြပေးပါတယ်။ + +ဒီ Structure ဟာ **အပြန်အလှန် ဆက်သွယ်မှုတွေမှာ တစ်သမတ်တည်း ဖြစ်စေဖို့ ကူညီပေးပြီး၊ Model က မတူညီတဲ့ Input အမျိုးအစားတွေကို သင့်လျော်စွာ တုံ့ပြန်စေဖို့ သေချာစေပါတယ်**။ + +အောက်မှာ `SmolLM2-135M-Instruct` Chat Template ရဲ့ ရိုးရှင်းတဲ့ ပုံစံကို ဖော်ပြထားပါတယ်။ + +```jinja2 +{% for message in messages %} +{% if loop.first and messages[0]['role'] != 'system' %} +<|im_start|>system +You are a helpful AI assistant named SmolLM, trained by Hugging Face +<|im_end|> +{% endif %} +<|im_start|>{{ message['role'] }} +{{ message['content'] }}<|im_end|> +{% endfor %} +``` +သင်တွေ့မြင်ရတဲ့အတိုင်း၊ `chat_template` ဟာ Message List ကို ဘယ်လို ပုံစံချရမယ်ဆိုတာကို ဖော်ပြပေးပါတယ်။ + +အောက်ပါ Message များကို ပေးထားပါက: + +```python +messages = [ + {"role": "system", "content": "You are a helpful assistant focused on technical topics."}, + {"role": "user", "content": "Can you explain what a chat template is?"}, + {"role": "assistant", "content": "A chat template structures conversations between users and AI models..."}, + {"role": "user", "content": "How do I use it ?"}, +] +``` + +အထက်ပါ Chat Template သည် အောက်ပါ String ကို ထုတ်ပေးပါလိမ့်မယ်။ + +```sh +<|im_start|>system +You are a helpful assistant focused on technical topics.<|im_end|> +<|im_start|>user +Can you explain what a chat template is?<|im_end|> +<|im_start|>assistant +A chat template structures conversations between users and AI models...<|im_end|> +<|im_start|>user +How do I use it ?<|im_end|> +``` + +`transformers` Library က Tokenization လုပ်ငန်းစဉ်ရဲ့ တစ်စိတ်တစ်ပိုင်းအနေနဲ့ Chat Templates တွေကို သင့်အတွက် စီမံပေးပါလိမ့်မယ်။ transformers က Chat Templates တွေကို ဘယ်လိုအသုံးပြုတယ်ဆိုတာကို [ဒီနေရာမှာ ပိုမိုဖတ်ရှုနိုင်ပါတယ်](https://huggingface.co/docs/transformers/main/en/chat_templating#how-do-i-use-chat-templates)။ ကျွန်တော်တို့ လုပ်ရမှာက Message တွေကို မှန်ကန်တဲ့ ပုံစံနဲ့ ဖွဲ့စည်းဖို့ပဲ ဖြစ်ပြီး၊ ကျန်တာတွေကို Tokenizer က စီမံပေးပါလိမ့်မယ်။ + +အောက်ပါ Space ကို အသုံးပြုပြီး မတူညီတဲ့ Model တွေအတွက် သက်ဆိုင်ရာ Chat Templates တွေကို အသုံးပြုပြီး စကားဝိုင်းတစ်ခုတည်းကို ဘယ်လို ပုံစံချသလဲဆိုတာကို စမ်းသပ်ကြည့်နိုင်ပါတယ်။ + + + +### Messages မှ Prompt သို့ ပြောင်းလဲခြင်း + +သင့်ရဲ့ LLM က စကားဝိုင်းတစ်ခုကို မှန်ကန်စွာ ပုံစံချထားတဲ့ Prompt ကို ရရှိစေဖို့အတွက် အလွယ်ကူဆုံး နည်းလမ်းကတော့ Model ရဲ့ Tokenizer မှ `chat_template` ကို အသုံးပြုခြင်းပဲ ဖြစ်ပါတယ်။ + +```python +messages = [ + {"role": "system", "content": "You are an AI assistant with access to various tools."}, + {"role": "user", "content": "Hi !"}, + {"role": "assistant", "content": "Hi human, what can help you with ?"}, +] +``` + +အထက်ပါ စကားဝိုင်းကို Prompt အဖြစ် ပြောင်းလဲဖို့အတွက်၊ ကျွန်တော်တို့ Tokenizer ကို Load လုပ်ပြီး `apply_chat_template` ကို ခေါ်ဆိုရပါမယ်။ + +```python +from transformers import AutoTokenizer + +tokenizer = AutoTokenizer.from_pretrained("HuggingFaceTB/SmolLM2-1.7B-Instruct") +rendered_prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) +``` + +ဒီ Function ကနေ ပြန်လာတဲ့ `rendered_prompt` ဟာ သင်ရွေးချယ်ထားတဲ့ Model အတွက် Input အဖြစ် အသုံးပြုဖို့ အသင့်ဖြစ်နေပါပြီ။ + +> ChatML ပုံစံနဲ့ Message တွေနဲ့ အပြန်အလှန် ဆက်သွယ်တဲ့အခါ၊ ဒီ `apply_chat_template()` Function ကို သင့် API ရဲ့ Backend မှာ အသုံးပြုပါလိမ့်မယ်။ + +LLM တွေက Chat Templates တွေကနေတစ်ဆင့် သူတို့ရဲ့ Input တွေကို ဘယ်လို ပုံစံချသလဲဆိုတာကို မြင်ပြီးတဲ့နောက်မှာ၊ Agent တွေက သူတို့ရဲ့ ပတ်ဝန်းကျင်မှာ ဘယ်လို လုပ်ဆောင်သလဲဆိုတာကို လေ့လာကြည့်ရအောင်။ + +သူတို့ လုပ်ဆောင်တဲ့ အဓိက နည်းလမ်းတွေထဲက တစ်ခုကတော့ **Tools** တွေကို အသုံးပြုခြင်းပဲ ဖြစ်ပါတယ်။ Tools တွေဟာ AI Model တစ်ခုရဲ့ စွမ်းဆောင်ရည်ကို စာသားထုတ်ပေးခြင်းထက် ကျော်လွန်ပြီး ချဲ့ထွင်ပေးပါတယ်။ + +Messages တွေအကြောင်းကို နောက်လာမယ့် အခန်းတွေမှာ ထပ်မံ ဆွေးနွေးသွားပါမယ်။ အကယ်၍ အခုပဲ ပိုမိုနက်ရှိုင်းစွာ လေ့လာလိုပါက အောက်ပါ လင့်ခ်များကို ကြည့်ရှုနိုင်ပါတယ်။ + +- Hugging Face Chat Templating Guide +- Transformers Documentation diff --git a/units/my/unit1/observations.mdx b/units/my/unit1/observations.mdx new file mode 100644 index 00000000..f50cf424 --- /dev/null +++ b/units/my/unit1/observations.mdx @@ -0,0 +1,55 @@ +## စောင့်ကြည့်လေ့လာခြင်း (Observe): တုံ့ပြန်ချက်များကို ပေါင်းစပ်ပြီး ဆင်ခြင်သုံးသပ်ကာ လိုက်လျောညီထွေဖြစ်အောင် ပြုပြင်ခြင်း + +**စောင့်ကြည့်လေ့လာခြင်း (Observations)** ဆိုတာဟာ **Agent တစ်ခုက ၎င်းရဲ့ လုပ်ဆောင်ချက်များရဲ့ အကျိုးဆက်တွေကို ဘယ်လို သိရှိနားလည်သလဲ** ဆိုတာကို ဆိုလိုပါတယ်။ + +၎င်းတို့ဟာ Agent ရဲ့ အတွေးဖြစ်စဉ်ကို အားဖြည့်ပေးပြီး၊ အနာဂတ် လုပ်ဆောင်ချက်များကို လမ်းညွှန်ပေးတဲ့ အရေးပါတဲ့ အချက်အလက်တွေကို ပေးပါတယ်။ + +Observations တွေဟာ **ပတ်ဝန်းကျင်ဆီက လာတဲ့ အချက်ပြမှုများ** ဖြစ်ပါတယ်။ ဥပမာအားဖြင့် API ကနေ ရတဲ့ ဒေတာ၊ Error Message တွေ၊ ဒါမှမဟုတ် System Log တွေဟာ နောက်ထပ် အတွေးသစ်တွေ ထွက်ပေါ်လာဖို့ လမ်းညွှန်ပေးပါတယ်။ + +စောင့်ကြည့်လေ့လာမှု အဆင့်မှာ Agent က အောက်ပါတို့ကို လုပ်ဆောင်ပါတယ်။ + +* **တုံ့ပြန်ချက်များ စုဆောင်းခြင်း (Collects Feedback):** ၎င်းရဲ့ လုပ်ဆောင်ချက် အောင်မြင်ခဲ့ခြင်း (သို့မဟုတ် မအောင်မြင်ခဲ့ခြင်း) ကို အတည်ပြုတဲ့ ဒေတာ သို့မဟုတ် အချက်အလက်များကို လက်ခံရရှိပါတယ်။ +* **ရလဒ်များ ပေါင်းစပ်ထည့်သွင်းခြင်း (Appends Results):** ရရှိလာတဲ့ အချက်အလက်အသစ်တွေကို လက်ရှိ မှတ်ဉာဏ် (Context) ထဲကို ထည့်သွင်းပါတယ်။ ဒါက Agent ရဲ့ မှတ်ဉာဏ်ကို ထိရောက်စွာ အဆင့်မြှင့်တင်လိုက်တာပါပဲ။ +* **နည်းဗျူဟာကို ပြုပြင်ပြောင်းလဲခြင်း (Adapts its Strategy):** အဆင့်မြှင့်ထားတဲ့ မှတ်ဉာဏ်ကို အသုံးပြုပြီး နောက်ဆက်တွဲ အတွေးများနှင့် လုပ်ဆောင်ချက်များကို ပိုမိုကောင်းမွန်အောင် ပြုပြင်ပြောင်းလဲပါတယ်။ + +ဥပမာအားဖြင့်၊ ရာသီဥတု API ကနေ *"တိမ်အနည်းငယ်ရှိ၊ ၁၅°C၊ စိုထိုင်းဆ ၆၀%"* ဆိုတဲ့ ဒေတာကို ပြန်ပေးတယ်ဆိုပါစို့။ ဒီ **Observation** ကို Agent ရဲ့ မှတ်ဉာဏ် (Prompt ရဲ့ အဆုံးမှာ) ထည့်သွင်းလိုက်ပါတယ်။ + +ထို့နောက် Agent က ဒီအချက်အလက်ကို အသုံးပြုပြီး နောက်ထပ် အချက်အလက် လိုအပ်သေးသလား၊ ဒါမှမဟုတ် နောက်ဆုံးအဖြေကို ပေးဖို့ အသင့်ဖြစ်ပြီလားဆိုတာကို ဆုံးဖြတ်ပါတယ်။ + +ဒီလို **တုံ့ပြန်ချက်များကို အဆင့်ဆင့် ပေါင်းစပ်ထည့်သွင်းခြင်း** က Agent ကို ၎င်းရဲ့ ရည်မှန်းချက်များနဲ့ အမြဲတမ်း လိုက်လျောညီထွေဖြစ်နေစေဖို့ သေချာစေပြီး၊ လက်တွေ့ကမ္ဘာရဲ့ ရလဒ်များအပေါ် အခြေခံပြီး အဆက်မပြတ် သင်ယူကာ ချိန်ညှိနေစေပါတယ်။ + +### Observation ပုံစံအမျိုးမျိုး + +ဒီ Observation တွေဟာ **ပုံစံအမျိုးမျိုး** ရှိနိုင်ပါတယ်။ ဝက်ဘ်စာမျက်နှာက စာသားကို ဖတ်ရှုတာကနေ စပြီး၊ စက်ရုပ်လက်တံရဲ့ အနေအထားကို စောင့်ကြည့်တာအထိ ပါဝင်နိုင်ပါတယ်။ ဒါတွေကို Action လုပ်ဆောင်မှုရဲ့ စာသားဆိုင်ရာ တုံ့ပြန်ချက်ကို ပေးတဲ့ Tool ရဲ့ "Log များ" လိုမျိုး မြင်နိုင်ပါတယ်။ + +| စောင့်ကြည့်လေ့လာမှု အမျိုးအစား | ဥပမာ | +| :--- | :--- | +| **System မှ တုံ့ပြန်ချက်** | Error Message များ၊ အောင်မြင်ကြောင်း အသိပေးချက်များ၊ Status Code များ။ | +| **ဒေတာ ပြောင်းလဲမှုများ** | Database အဆင့်မြှင့်တင်မှုများ၊ File System ပြောင်းလဲမှုများ၊ အခြေအနေ ပြောင်းလဲမှုများ။ | +| **ပတ်ဝန်းကျင်ဆိုင်ရာ ဒေတာ** | Sensor မှ ဖတ်ရှုရရှိသော တန်ဖိုးများ၊ System Metrics များ၊ Resource အသုံးပြုမှုများ။ | +| **တုံ့ပြန်မှု ခွဲခြမ်းစိတ်ဖြာခြင်း** | API မှ ရရှိသော အဖြေများ၊ Query ရလဒ်များ၊ တွက်ချက်မှုမှ ထွက်ရှိသော ရလဒ်များ။ | +| **အချိန်အခြေခံ အဖြစ်အပျက်များ** | သတ်မှတ်ရက်များ ပြည့်မီခြင်း၊ အချိန်ဇယားဆွဲထားသော Tasks များ ပြီးစီးခြင်း။ | + +## ရလဒ်များကို ဘယ်လို ပေါင်းစပ်ထည့်သွင်းသလဲ? + +Agent က Action တစ်ခုကို လုပ်ဆောင်ပြီးတဲ့အခါ Framework က အောက်ပါ အဆင့်တွေကို အစဉ်လိုက် လုပ်ဆောင်ပါတယ်။ + +1. **Action ကို စစ်ဆေးခြင်း (Parse):** ခေါ်ဆိုရမည့် Function (များ) နှင့် အသုံးပြုရမည့် Argument (များ) ကို ခွဲခြားသိရှိရန် Action ကို စစ်ဆေးအတည်ပြုပါတယ်။ +2. **Action ကို လုပ်ဆောင်ခြင်း (Execute):** သက်ဆိုင်ရာ Tool သို့မဟုတ် Code ကို လုပ်ဆောင်ပါတယ်။ +3. **ရလဒ်ကို Observation အဖြစ် ပေါင်းစပ်ထည့်သွင်းခြင်း (Append):** လုပ်ဆောင်မှုမှ ထွက်ပေါ်လာသော ရလဒ်ကို **Observation** အဖြစ် Agent ရဲ့ မှတ်ဉာဏ် (Context) ထဲသို့ ထည့်သွင်းပါတယ်။ + +--- + +### 💡 ထပ်ဆောင်းရှင်းလင်းချက် + +**Observation ရဲ့ အရေးပါပုံ:** + +Observation ဟာ Agent ရဲ့ **သင်ယူမှု ကွင်းဆက် (Learning Loop)** ကို ပြီးမြောက်စေပါတယ်။ လူသားတစ်ဦးအနေနဲ့ စာမေးပွဲဖြေပြီး ရလဒ်ကို ပြန်ကြည့်သလိုပါပဲ။ ရလဒ် (Observation) ကို ကြည့်ပြီးမှသာ နောက်တစ်ကြိမ် ဘယ်လို ပိုကောင်းအောင် လုပ်ရမလဲ (Thought) ဆိုတာကို ဆုံးဖြတ်နိုင်မှာ ဖြစ်ပါတယ်။ Observation မရှိရင် Agent ဟာ မျက်စိကန်းသလို အလုပ်လုပ်နေမှာ ဖြစ်ပါတယ်။ + +--- + +ကျွန်တော်တို့ အခုဆိုရင် Agent ရဲ့ **Thought-Action-Observation (အတွေး-လုပ်ဆောင်ချက်-စောင့်ကြည့်လေ့လာမှု)** သံသရာကို လေ့လာပြီးပါပြီ။ + +အချို့ အချက်တွေ နည်းနည်း ဝေဝါးနေသေးရင် စိတ်မပူပါနဲ့—နောက်အခန်းတွေမှာ ဒီအယူအဆတွေကို ပြန်လည်သုံးသပ်ပြီး ပိုမိုနက်ရှိုင်းစွာ လေ့လာသွားပါမယ်။ + +အခုတော့ သင်ရရှိထားတဲ့ အသိပညာတွေကို လက်တွေ့အသုံးချပြီး **ပထမဆုံး Agent ကို Code ရေးသားဖို့** အချိန်တန်ပါပြီ! \ No newline at end of file diff --git a/units/my/unit1/quiz1.mdx b/units/my/unit1/quiz1.mdx new file mode 100644 index 00000000..d422d9e4 --- /dev/null +++ b/units/my/unit1/quiz1.mdx @@ -0,0 +1,169 @@ +## Quiz: Agent များ၏ အခြေခံသဘောတရားများ + +ဒီ Quiz ဟာ Agent တွေရဲ့ အဓိက အစိတ်အပိုင်းတွေဖြစ်တဲ့ **Reasoning (ဆင်ခြင်သုံးသပ်ခြင်း)**၊ **Planning (စီစဉ်ခြင်း)**၊ **Tools (ကိရိယာများ)** နဲ့ **Actions (လုပ်ဆောင်ချက်များ)** တို့ကို သင်ဘယ်လောက် နားလည်သလဲဆိုတာ စစ်ဆေးဖို့ပဲ ဖြစ်ပါတယ်။ + +--- + +### Q1: Agent ဆိုတာ ဘာလဲ? +အောက်ပါတို့ထဲမှ AI Agent ကို အကောင်းဆုံး ဖော်ပြထားသည်မှာ မည်သည့်အရာ ဖြစ်သနည်း။ + + + +--- + +### Q2: Agent တစ်ခုတွင် စီစဉ်ခြင်း (Planning) ၏ အခန်းကဏ္ဍက ဘာလဲ? +Agent တစ်ခုသည် လုပ်ဆောင်ချက်တစ်ခု မလုပ်ဆောင်မီ ဘာကြောင့် စီစဉ်ဖို့ လိုအပ်တာလဲ? + + + +--- + +### Q3: ကိရိယာများ (Tools) သည် Agent ၏ စွမ်းဆောင်ရည်ကို မည်သို့ မြှင့်တင်ပေးသလဲ? +Agent တစ်ခုအတွက် ကိရိယာများ (Tools) သည် ဘာကြောင့် မရှိမဖြစ် လိုအပ်တာလဲ? + + + +--- + +### Q4: လုပ်ဆောင်ချက်များ (Actions) နှင့် ကိရိယာများ (Tools) မည်သို့ ကွာခြားသလဲ? +Actions နှင့် Tools အကြား အဓိက ကွာခြားချက်က ဘာလဲ? + + + +--- + +### Q5: Large Language Models (LLMs) များသည် Agent များတွင် မည်သည့် အခန်းကဏ္ဍမှ ပါဝင်သလဲ? +LLM များသည် Agent တစ်ခု၏ လုပ်ဆောင်နိုင်စွမ်းကို မည်သို့ အထောက်အကူပြုသလဲ? + + + +--- + +### Q6: အောက်ပါတို့ထဲမှ AI Agent ကို အကောင်းဆုံး သရုပ်ပြထားသည်မှာ မည်သည့် လက်တွေ့ကမ္ဘာ ဥပမာ ဖြစ်သလဲ? +မည်သည့် လက်တွေ့ကမ္ဘာ ဥပမာက AI Agent ၏ လုပ်ဆောင်ချက်ကို အကောင်းဆုံး သရုပ်ဖော်သလဲ? + + + +--- + +ဒီ Quiz ကို ပြီးဆုံးသွားတဲ့အတွက် ဂုဏ်ယူပါတယ် 🥳! သင်ပြန်လည်သုံးသပ်ရန် လိုအပ်သော အစိတ်အပိုင်းများ ရှိပါက၊ "Agent ရဲ့ ဦးနှောက်" ဖြစ်တဲ့ LLM များကို ပိုမိုနက်ရှိုင်းစွာ မလေ့လာမီ သင့်ရဲ့ အသိပညာကို ခိုင်မာစေဖို့အတွက် အခန်းကို ပြန်လည်လေ့လာဖို့ အချိန်ယူပါ။ \ No newline at end of file diff --git a/units/my/unit1/quiz2.mdx b/units/my/unit1/quiz2.mdx new file mode 100644 index 00000000..972d80fc --- /dev/null +++ b/units/my/unit1/quiz2.mdx @@ -0,0 +1,119 @@ +# အမြန် ကိုယ်တိုင်စစ်ဆေးခြင်း (Quick Self-Check) (အမှတ်မပေးပါ) [[quiz2]] + +ဘာ! နောက်ထပ် Quiz လား? ဟုတ်ပါတယ်၊ ကျွန်တော်တို့ သိပါတယ်။ 😅 ဒါပေမယ့် ဒီတိုတောင်းပြီး အမှတ်မပေးတဲ့ Quiz လေးက **သင် ခုနကမှ သင်ယူခဲ့တဲ့ အဓိက အယူအဆတွေကို ပိုမိုခိုင်မာစေဖို့** ကူညီပေးပါလိမ့်မယ်။ + +ဒီ Quiz မှာ Large Language Models (LLMs)၊ Message စနစ်များနှင့် Tools များအကြောင်း ပါဝင်ပါတယ်။ ဒါတွေဟာ AI Agent များကို နားလည်ဖို့နဲ့ တည်ဆောက်ဖို့အတွက် မရှိမဖြစ် အစိတ်အပိုင်းတွေပဲ ဖြစ်ပါတယ်။ + +--- + +### Q1: အောက်ပါတို့ထဲမှ AI Tool တစ်ခုကို အကောင်းဆုံး ဖော်ပြထားသည်မှာ အဘယ်နည်း။ + + + +--- + +### Q2: AI Agent များသည် ပတ်ဝန်းကျင်တွင် "လုပ်ဆောင်ခြင်း" ပုံစံတစ်မျိုးအဖြစ် Tools များကို မည်သို့ အသုံးပြုသနည်း။ + + + +--- + +### Q3: Large Language Model (LLM) ဆိုသည်မှာ အဘယ်နည်း။ + + + +--- + +### Q4: LLM များတွင် အထူး Token များ၏ အခန်းကဏ္ဍကို အကောင်းဆုံး ဖော်ပြထားသည်မှာ အဘယ်နည်း။ + +` ကဲ့သို့သော Token များသည် Model အား စာသားထုတ်ပေးခြင်းကို ရပ်တန့်ရန် အချက်ပြပါတယ်။", +correct: true +}, +{ +text: "တုံ့ပြန်မှု ကွဲပြားမှုကို မြှင့်တင်ရန်အတွက် ကျပန်း ထည့်သွင်းထားသော Token များ ဖြစ်သည်", +explain: "", +} +]} +/> + +--- + +### Q5: AI Chat Model များသည် အသုံးပြုသူ၏ Message များကို အတွင်းပိုင်းတွင် မည်သို့ စီမံဆောင်ရွက်သနည်း။ + + + +--- + +နားလည်ပြီလား? ကောင်းပါပြီ! အခုဆိုရင် **Agent ရဲ့ အလုံးစုံ စီးဆင်းမှုကို နက်နက်နဲနဲ လေ့လာပြီး သင့်ရဲ့ ပထမဆုံး AI Agent ကို စတင်တည်ဆောက်ကြပါစို့!** \ No newline at end of file diff --git a/units/my/unit1/thoughts.mdx b/units/my/unit1/thoughts.mdx new file mode 100644 index 00000000..343c96c9 --- /dev/null +++ b/units/my/unit1/thoughts.mdx @@ -0,0 +1,86 @@ +# အတွေး (Thought): အတွင်းပိုင်း ဆင်ခြင်သုံးသပ်မှုနှင့် ReAct နည်းလမ်း + +> [!TIP] +> ဒီအပိုင်းမှာတော့ AI Agent တစ်ခုရဲ့ အတွင်းပိုင်း လုပ်ဆောင်ပုံ—**ဆင်ခြင်သုံးသပ်နိုင်စွမ်းနဲ့ စီမံခန့်ခွဲနိုင်စွမ်း**—ကို နက်နက်နဲနဲ လေ့လာသွားပါမယ်။ Agent တစ်ခုက အချက်အလက်တွေကို ခွဲခြမ်းစိတ်ဖြာဖို့၊ ရှုပ်ထွေးတဲ့ ပြဿနာတွေကို စီမံခန့်ခွဲနိုင်တဲ့ အဆင့်ငယ်လေးတွေအဖြစ် ခွဲထုတ်ဖို့နဲ့ နောက်ထပ် ဘာလုပ်ဆောင်ရမယ်ဆိုတာကို ဆုံးဖြတ်ဖို့အတွက် သူ့ရဲ့ အတွင်းပိုင်း ဆွေးနွေးမှု (Internal Dialogue) ကို ဘယ်လို အသုံးချသလဲဆိုတာကို လေ့လာသွားပါမယ်။ +> +> ဒါ့အပြင်၊ မော်ဒယ်ကို လုပ်ဆောင်ချက် မပြုလုပ်ခင် **"တစ်ဆင့်ချင်းစီ စဉ်းစားပါ"** လို့ အားပေးတဲ့ Prompting နည်းလမ်းတစ်ခုဖြစ်တဲ့ **ReAct နည်းလမ်း** ကိုလည်း မိတ်ဆက်ပေးသွားပါမယ်။ + +**အတွေးများ (Thoughts)** ဆိုတာဟာ Task တစ်ခုကို ဖြေရှင်းဖို့အတွက် **Agent ရဲ့ အတွင်းပိုင်း ဆင်ခြင်သုံးသပ်မှုနဲ့ စီမံခန့်ခွဲမှု လုပ်ငန်းစဉ်များ** ကို ကိုယ်စားပြုပါတယ်။ + +ဒီလုပ်ငန်းစဉ်ဟာ Agent ရဲ့ Large Language Model (LLM) စွမ်းရည်ကို အသုံးပြုပြီး **Prompt ထဲမှာ ပေးထားတဲ့ အချက်အလက်တွေကို ခွဲခြမ်းစိတ်ဖြာ** စေပါတယ်။ အနှစ်ချုပ်ပြောရရင်၊ ပြဿနာတစ်ခုကို ဖြေရှင်းနေစဉ်အတွင်း Agent ရဲ့ **အတွင်းစိတ်က ပြောနေတဲ့ စကားသံ (Inner Monologue)** လိုမျိုးပါပဲ။ + +Agent ရဲ့ အတွေးတွေက လက်ရှိ ရရှိထားတဲ့ **လေ့လာတွေ့ရှိချက်များ (Observations)** ကို အကဲဖြတ်ဖို့နဲ့ နောက်ထပ် ဘာလုပ်ဆောင်ချက် (Action) တွေ လုပ်သင့်တယ်ဆိုတာကို ဆုံးဖြတ်ဖို့ ကူညီပေးပါတယ်။ ဒီလုပ်ငန်းစဉ်ကတစ်ဆင့် Agent ဟာ **ရှုပ်ထွေးတဲ့ ပြဿနာတွေကို သေးငယ်ပြီး စီမံခန့်ခွဲနိုင်တဲ့ အဆင့်ငယ်လေးတွေအဖြစ် ခွဲထုတ်နိုင်** ပါတယ်။ ဒါ့အပြင်၊ အရင်က အတွေ့အကြုံတွေကို ပြန်လည်သုံးသပ်နိုင်ပြီး အချက်အလက်အသစ်တွေအပေါ် အခြေခံပြီး သူ့ရဲ့ စီမံကိန်းတွေကို အဆက်မပြတ် ချိန်ညှိနိုင်ပါတယ်။ + +> **(ထပ်ဆောင်းအချက်အလက်):** လူသားတွေလိုပဲ၊ AI Agent တွေဟာလည်း ရှုပ်ထွေးတဲ့ ပြဿနာတွေကို ချက်ချင်းဖြေရှင်းနိုင်ခြင်း မရှိပါဘူး။ အတွေး (Thought) အဆင့်ဟာ Agent ကို အမှားလုပ်မိနိုင်ခြေကို လျှော့ချဖို့နဲ့ ပိုမိုကောင်းမွန်တဲ့ ဆုံးဖြတ်ချက်တွေ ချနိုင်ဖို့အတွက် အချိန်ပေး စဉ်းစားစေတာ ဖြစ်ပါတယ်။ + +## 🧠 အသုံးများသော အတွေး အမျိုးအစားများ (Examples of Common Thought Types) + +| အတွေး အမျိုးအစား | ဥပမာ | +| :--- | :--- | +| **စီမံကိန်းချခြင်း (Planning)** | "ဒီ Task ကို အဆင့်သုံးဆင့် ခွဲလုပ်ရမယ်- ၁) ဒေတာစုဆောင်းမယ်၊ ၂) ခေတ်ရေစီးကြောင်းတွေကို ခွဲခြမ်းစိတ်ဖြာမယ်၊ ၃) အစီရင်ခံစာ ထုတ်ပေးမယ်။" | +| **ခွဲခြမ်းစိတ်ဖြာခြင်း (Analysis)** | "Error Message ကို ကြည့်ရတာ၊ ပြဿနာက Database ချိတ်ဆက်မှု Parameter တွေနဲ့ ပတ်သက်နေပုံရတယ်။" | +| **ဆုံးဖြတ်ချက်ချခြင်း (Decision Making)** | "အသုံးပြုသူရဲ့ ဘတ်ဂျက် အကန့်အသတ်ကြောင့်၊ အလယ်အလတ်တန်းစား ရွေးချယ်မှုကို အကြံပြုသင့်တယ်။" | +| **ပြဿနာဖြေရှင်းခြင်း (Problem Solving)** | "ဒီ Code ကို ပိုမိုကောင်းမွန်အောင် လုပ်ဖို့အတွက်၊ အရင်ဆုံး ဘယ်နေရာမှာ အချိန်ကုန်ဆုံးလဲဆိုတာကို ရှာဖွေရမယ်။" | +| **မှတ်ဉာဏ် ပေါင်းစပ်ခြင်း (Memory Integration)** | "အသုံးပြုသူက Python ကို ပိုကြိုက်တယ်လို့ အရင်က ပြောဖူးတယ်၊ ဒါကြောင့် Python ဥပမာတွေနဲ့ ပေးမယ်။" | +| **ကိုယ်တိုင် ပြန်လည်သုံးသပ်ခြင်း (Self-Reflection)** | "ငါ့ရဲ့ အရင်နည်းလမ်းက အဆင်မပြေခဲ့ဘူး၊ နောက်ထပ် မတူတဲ့ နည်းဗျူဟာတစ်ခုကို စမ်းကြည့်သင့်တယ်။" | +| **ပန်းတိုင် သတ်မှတ်ခြင်း (Goal Setting)** | "ဒီ Task ကို ပြီးမြောက်ဖို့အတွက်၊ အရင်ဆုံး လက်ခံနိုင်တဲ့ စံနှုန်းတွေကို သတ်မှတ်ဖို့ လိုတယ်။" | +| **ဦးစားပေး သတ်မှတ်ခြင်း (Prioritization)** | "လုံခြုံရေးဆိုင်ရာ အားနည်းချက်ကို Feature အသစ်တွေ မထည့်ခင် ဖြေရှင်းသင့်တယ်။" | + +> **မှတ်ချက်:** Function-calling အတွက် Fine-tuning လုပ်ထားတဲ့ LLM တွေမှာတော့ အတွေးလုပ်ငန်းစဉ် (Thought Process) ဟာ မဖြစ်မနေ လိုအပ်တာမျိုး မဟုတ်ပါဘူး။ ဒီအကြောင်းကို Actions အပိုင်းမှာ ပိုမိုအသေးစိတ် ဆွေးနွေးထားပါတယ်။ + +## 🔗 Chain-of-Thought (CoT) - အတွေးဆက်တိုက် စီးဆင်းခြင်း + +**Chain-of-Thought (CoT)** ဆိုတာဟာ မော်ဒယ်တစ်ခုကို **နောက်ဆုံးအဖြေ မထုတ်ခင် ပြဿနာတစ်ခုကို တစ်ဆင့်ချင်းစီ စဉ်းစားစေဖို့** လမ်းညွှန်ပေးတဲ့ Prompting နည်းလမ်းတစ်ခု ဖြစ်ပါတယ်။ + +ဒီနည်းလမ်းက အများအားဖြင့် အောက်ပါ စာသားနဲ့ စတင်လေ့ရှိပါတယ်- +> *"Let's think step by step."* (တစ်ဆင့်ချင်းစီ စဉ်းစားကြည့်ရအောင်။) + +ဒီနည်းလမ်းက မော်ဒယ်ကို **ပြင်ပ Tool တွေနဲ့ ထိတွေ့ဆက်ဆံခြင်းမရှိဘဲ**၊ အထူးသဖြင့် Logic သို့မဟုတ် သင်္ချာဆိုင်ရာ Tasks တွေအတွက် **အတွင်းပိုင်း ဆင်ခြင်သုံးသပ်မှု** ပြုလုပ်ဖို့ ကူညီပေးပါတယ်။ + +### ✅ ဥပမာ (CoT) +``` +Question: 200 ရဲ့ ၁၅% က ဘယ်လောက်လဲ။ +Thought: တစ်ဆင့်ချင်းစီ စဉ်းစားကြည့်ရအောင်။ ၂၀၀ ရဲ့ ၁၀% က ၂၀ ဖြစ်ပြီး၊ ၅% က ၁၀ ဖြစ်တယ်။ ဒါကြောင့် ၁၅% က ၃၀ ဖြစ်တယ်။ +Answer: 30 +``` + +## ⚙️ ReAct: ဆင်ခြင်သုံးသပ်ခြင်း (Reasoning) + လုပ်ဆောင်ခြင်း (Acting) + +အဓိကကျတဲ့ နည်းလမ်းတစ်ခုကတော့ **ReAct နည်းလမ်း** ဖြစ်ပြီး၊ ၎င်းသည် **"ဆင်ခြင်သုံးသပ်ခြင်း" (Think)** ကို **"လုပ်ဆောင်ခြင်း" (Act)** နဲ့ ပေါင်းစပ်ထားပါတယ်။ + +ReAct ဟာ မော်ဒယ်ကို တစ်ဆင့်ချင်းစီ စဉ်းစားစေပြီး၊ ဆင်ခြင်သုံးသပ်မှု အဆင့်များကြားမှာ လုပ်ဆောင်ချက်များ (ဥပမာ- Tool များ အသုံးပြုခြင်း) ကို ထည့်သွင်းစေတဲ့ Prompting နည်းလမ်းတစ်ခု ဖြစ်ပါတယ်။ + +ဒီနည်းလမ်းက Agent ကို ရှုပ်ထွေးတဲ့ Multi-step Tasks တွေကို ဖြေရှင်းနိုင်ဖို့အတွက် အောက်ပါ အဆင့်တွေကို အလှည့်ကျ လုပ်ဆောင်စေပါတယ်။ + +* **Thought (အတွေး):** အတွင်းပိုင်း ဆင်ခြင်သုံးသပ်မှု +* **Action (လုပ်ဆောင်ချက်):** Tool အသုံးပြုမှု +* **Observation (လေ့လာတွေ့ရှိချက်):** Tool မှ ထွက်လာသော ရလဒ်ကို လက်ခံရယူခြင်း + +### 🔄 ဥပမာ (ReAct) +``` +Thought: ပဲရစ်မြို့ရဲ့ နောက်ဆုံး ရာသီဥတုကို ရှာဖို့ လိုတယ်။ +Action: Search["weather in Paris"] +Observation: ၁၈°C ရှိပြီး တိမ်ထူနေပါတယ်။ +Thought: အခု ရာသီဥတုကို သိပြီဆိုတော့... +Action: Finish["ပဲရစ်မြို့မှာ ၁၈°C ရှိပြီး တိမ်ထူနေပါတယ်။"] +``` + +
+ ReAct +
+ (d) သည် ReAct နည်းလမ်း၏ ဥပမာဖြစ်ပြီး၊ "တစ်ဆင့်ချင်းစီ စဉ်းစားကြည့်ရအောင်" ဟု Prompt ပေးပြီးနောက် မော်ဒယ်သည် အတွေးများကြားတွင် လုပ်ဆောင်ချက်များကို ထည့်သွင်း လုပ်ဆောင်သည်။ +
+
+ +## 🔁 နှိုင်းယှဉ်ချက်: ReAct နှင့် CoT + +| Feature | Chain-of-Thought (CoT) | ReAct | +| :--- | :--- | :--- | +| **တစ်ဆင့်ချင်းစီ Logic** | ✅ ဟုတ်ကဲ့ | ✅ ဟုတ်ကဲ့ | +| **ပြင်ပ Tool များ** | ❌ မရှိပါ | ✅ ရှိပါသည် (Actions + Observations) | +| **အသင့်တော်ဆုံး Task များ** | Logic၊ သင်္ချာ၊ အတွင်းပိုင်း Tasks များ | အချက်အလက် ရှာဖွေခြင်း၊ ပြောင်းလဲနေသော Multi-step Tasks များ | + +> [!TIP] +> **Deepseek R1** သို့မဟုတ် **OpenAI ရဲ့ o1** ကဲ့သို့သော မကြာသေးမီက ထွက်ရှိထားသည့် မော်ဒယ်များသည် **အဖြေမပေးမီ စဉ်းစားရန်** Fine-tuning လုပ်ထားပါတယ်။ ၎င်းတို့သည် ဆင်ခြင်သုံးသပ်မှု အဆင့်ကို နောက်ဆုံးအဖြေမှ ရှင်းရှင်းလင်းလင်း ခွဲခြားရန် `` နှင့် `` ကဲ့သို့သော Structured Tokens များကို အသုံးပြုပါတယ်။ +> +> ReAct သို့မဟုတ် CoT တို့လို Prompting နည်းဗျူဟာများ မဟုတ်ဘဲ၊ ၎င်းသည် မော်ဒယ်က ဥပမာများမှတစ်ဆင့် စဉ်းစားတတ်အောင် သင်ယူစေသည့် **Training-level နည်းလမ်း** ဖြစ်ပါတယ်။ \ No newline at end of file diff --git a/units/my/unit1/tools.mdx b/units/my/unit1/tools.mdx new file mode 100644 index 00000000..ff79ea28 --- /dev/null +++ b/units/my/unit1/tools.mdx @@ -0,0 +1,319 @@ +# Tool များဆိုသည်မှာ ဘာလဲ? + +Unit 1 planning + +AI Agent များရဲ့ အရေးကြီးဆုံး အခန်းကဏ္ဍတစ်ခုကတော့ **လုပ်ဆောင်ချက်များ (Actions)** ကို လုပ်ဆောင်နိုင်ခြင်းပဲ ဖြစ်ပါတယ်။ ကျွန်တော်တို့ မြင်ခဲ့ရတဲ့အတိုင်း၊ ဒီလုပ်ဆောင်ချက်တွေဟာ **Tool များ** ကို အသုံးပြုခြင်းအားဖြင့် ဖြစ်ပေါ်လာတာပါ။ + +ဒီအပိုင်းမှာတော့ Tool များဆိုတာ ဘာလဲ၊ သူတို့ကို ဘယ်လို ထိရောက်စွာ ဒီဇိုင်းဆွဲရမလဲ၊ ပြီးတော့ System Message မှတစ်ဆင့် သင့် Agent ထဲကို ဘယ်လို ပေါင်းစပ်ထည့်သွင်းရမလဲဆိုတာကို လေ့လာသွားပါမယ်။ + +သင့် Agent ကို မှန်ကန်တဲ့ Tool တွေ ပေးခြင်းနဲ့၊ အဲဒီ Tool တွေ ဘယ်လို အလုပ်လုပ်တယ်ဆိုတာကို ရှင်းရှင်းလင်းလင်း ဖော်ပြပေးခြင်းအားဖြင့်၊ သင့် AI လုပ်ဆောင်နိုင်တဲ့ အရာတွေကို သိသိသာသာ တိုးမြှင့်ပေးနိုင်မှာပါ။ စတင်လေ့လာလိုက်ရအောင်! + +## AI Tool များဆိုသည်မှာ ဘာလဲ? + +**Tool ဆိုတာ LLM ကို ပေးထားတဲ့ Function တစ်ခု** ဖြစ်ပါတယ်။ ဒီ Function ဟာ **ရှင်းလင်းတဲ့ ရည်ရွယ်ချက်တစ်ခု** ကို ပြီးမြောက်အောင် လုပ်ဆောင်ပေးရပါမယ်။ + +AI Agent များမှာ အသုံးများတဲ့ Tool ဥပမာအချို့ကို အောက်မှာ ဖော်ပြထားပါတယ်။ + +| Tool | ဖော်ပြချက် | +| :--- | :--- | +| **Web Search** | Agent ကို အင်တာနက်မှ နောက်ဆုံးပေါ် အချက်အလက်များ ရှာဖွေနိုင်စေခြင်း။ | +| **Image Generation** | စာသား ဖော်ပြချက်များအပေါ် အခြေခံပြီး ပုံများ ဖန်တီးပေးခြင်း။ | +| **Retrieval** | ပြင်ပ အရင်းအမြစ်တစ်ခုမှ အချက်အလက်များ ပြန်လည်ရယူခြင်း။ | +| **API Interface** | ပြင်ပ API (GitHub, YouTube, Spotify, စသည်) များနှင့် ဆက်သွယ်ဆောင်ရွက်ခြင်း။ | + +ဒါတွေဟာ ဥပမာတွေသာ ဖြစ်ပြီး၊ တကယ်တမ်းမှာတော့ သင်ဟာ မည်သည့် အသုံးချကိစ္စရပ်အတွက်မဆို Tool တစ်ခုကို ဖန်တီးနိုင်ပါတယ်။ + +ကောင်းမွန်တဲ့ Tool တစ်ခုဟာ **LLM ရဲ့ စွမ်းဆောင်ရည်ကို ဖြည့်ဆည်းပေးနိုင်တဲ့** အရာတစ်ခု ဖြစ်သင့်ပါတယ်။ + +ဥပမာအားဖြင့်၊ သင်က ဂဏန်းသင်္ချာ တွက်ချက်မှုတစ်ခု လုပ်ဆောင်ဖို့ လိုအပ်တယ်ဆိုရင်၊ သင့် LLM ကို **ဂဏန်းတွက်စက် Tool** တစ်ခု ပေးလိုက်ခြင်းက မော်ဒယ်ရဲ့ မူရင်းစွမ်းရည်ကို အားကိုးတာထက် ပိုမိုကောင်းမွန်တဲ့ ရလဒ်တွေကို ပေးပါလိမ့်မယ်။ + +ဒါ့အပြင်၊ **LLM များဟာ ၎င်းတို့ရဲ့ လေ့ကျင့်ရေး ဒေတာများအပေါ် အခြေခံပြီး Prompt ရဲ့ ပြီးဆုံးမှုကို ခန့်မှန်းတာ** ဖြစ်တဲ့အတွက်၊ ၎င်းတို့ရဲ့ အတွင်းပိုင်း အသိပညာမှာ လေ့ကျင့်ခဲ့တဲ့ အချိန်မတိုင်မီက အဖြစ်အပျက်များသာ ပါဝင်ပါတယ်။ ဒါကြောင့် သင့် Agent ဟာ နောက်ဆုံးပေါ် ဒေတာတွေ လိုအပ်တယ်ဆိုရင်၊ Tool တစ်ခုခုကနေတစ်ဆင့် ပေးပို့ရပါမယ်။ + +ဥပမာအားဖြင့်၊ သင်က LLM ကို တိုက်ရိုက် (Search Tool မပါဘဲ) ဒီနေ့ ရာသီဥတုကို မေးလိုက်ရင်၊ LLM ဟာ ကျပန်း ရာသီဥတု အချက်အလက်တွေကို **Hallucinate (မှားယွင်းစွာ ဖန်တီး)** နိုင်ပါတယ်။ + +Weather + +* Tool တစ်ခုတွင် အောက်ပါအချက်များ ပါဝင်သင့်ပါတယ်- + * **Function က ဘာလုပ်တယ်ဆိုတဲ့ စာသား ဖော်ပြချက်**။ + * *Callable* (လုပ်ဆောင်ချက်တစ်ခုကို လုပ်ဆောင်နိုင်တဲ့ အရာ)။ + * Typing များပါဝင်သော *Arguments* (ထည့်သွင်းမှုများ)။ + * (ရွေးချယ်နိုင်သော) Typing များပါဝင်သော *Outputs* (ထွက်ရှိရလဒ်များ)။ + +## Tool များ ဘယ်လို အလုပ်လုပ်သလဲ? + +ကျွန်တော်တို့ မြင်ခဲ့ရတဲ့အတိုင်း LLM များဟာ စာသား ထည့်သွင်းမှုများကိုသာ လက်ခံနိုင်ပြီး စာသား ထွက်ရှိမှုများကိုသာ ထုတ်ပေးနိုင်ပါတယ်။ ၎င်းတို့မှာ Tool များကို ကိုယ်တိုင် ခေါ်ဆိုနိုင်တဲ့ နည်းလမ်းမရှိပါဘူး။ Agent တစ်ခုကို Tool များ ပေးအပ်တယ်လို့ ပြောတဲ့အခါ၊ ကျွန်တော်တို့ ဆိုလိုတာက LLM ကို ဒီ Tool တွေရဲ့ တည်ရှိမှုအကြောင်း သင်ကြားပေးပြီး လိုအပ်တဲ့အခါ စာသားအခြေခံ Tool ခေါ်ဆိုမှုများကို ထုတ်ပေးဖို့ ညွှန်ကြားခြင်းပဲ ဖြစ်ပါတယ်။ + +ဥပမာအားဖြင့်၊ ကျွန်တော်တို့က အင်တာနက်ကနေ နေရာတစ်ခုရဲ့ ရာသီဥတုကို စစ်ဆေးနိုင်တဲ့ Tool တစ်ခု ပေးလိုက်ပြီး၊ LLM ကို ပဲရစ်မြို့ရဲ့ ရာသီဥတုအကြောင်း မေးလိုက်တယ်ဆိုပါစို့။ LLM ဟာ ဒါဟာ "weather" Tool ကို အသုံးပြုဖို့ အခွင့်အရေးပဲလို့ သိရှိပါလိမ့်မယ်။ LLM ဟာ ရာသီဥတု ဒေတာကို ကိုယ်တိုင် ပြန်ယူမယ့်အစား၊ `call weather_tool('Paris')` ကဲ့သို့သော Tool ခေါ်ဆိုမှုကို ကိုယ်စားပြုတဲ့ စာသားကို ထုတ်ပေးပါလိမ့်မယ်။ + +အဲဒီအခါ **Agent** က ဒီတုံ့ပြန်မှုကို ဖတ်ရှုပြီး Tool ခေါ်ဆိုမှု လိုအပ်ကြောင်း သိရှိကာ၊ LLM ကိုယ်စား Tool ကို လုပ်ဆောင်ပေးပြီး တကယ့် ရာသီဥတု ဒေတာကို ပြန်လည်ရယူပါတယ်။ + +Tool ခေါ်ဆိုမှု အဆင့်များကို အသုံးပြုသူကို များသောအားဖြင့် ပြသလေ့မရှိပါဘူး။ Agent က ၎င်းတို့ကို Message အသစ်တစ်ခုအဖြစ် ထည့်သွင်းပြီးမှ ပြန်လည်မွမ်းမံထားသော စကားဝိုင်းကို LLM သို့ ထပ်မံ ပေးပို့ပါတယ်။ ထို့နောက် LLM သည် ဤနောက်ထပ် Context ကို စီမံဆောင်ရွက်ပြီး အသုံးပြုသူအတွက် သဘာဝကျသော တုံ့ပြန်မှုကို ထုတ်ပေးပါတယ်။ အသုံးပြုသူရဲ့ ရှုထောင့်ကကြည့်ရင် LLM က Tool နဲ့ တိုက်ရိုက် ဆက်သွယ်ခဲ့သလို ထင်ရပေမယ့်၊ တကယ်တမ်းမှာတော့ နောက်ကွယ်က လုပ်ဆောင်မှု အားလုံးကို Agent က ကိုင်တွယ်ခဲ့တာ ဖြစ်ပါတယ်။ + +ဒီလုပ်ငန်းစဉ်အကြောင်းကို နောင်လာမယ့် Session တွေမှာ ပိုပြီး အသေးစိတ် ဆွေးနွေးသွားပါမယ်။ + +## LLM ကို Tool များ ဘယ်လို ပေးအပ်မလဲ? + +အဖြေအပြည့်အစုံက ရှုပ်ထွေးနိုင်ပေမယ့်၊ ကျွန်တော်တို့ဟာ မော်ဒယ်ကို ရရှိနိုင်တဲ့ Tool တွေရဲ့ စာသား ဖော်ပြချက်များကို ပေးအပ်ဖို့အတွက် **System Prompt** ကို အသုံးပြုပါတယ်- + +System prompt for tools + +ဒီလို အလုပ်လုပ်ဖို့အတွက် ကျွန်တော်တို့ဟာ အောက်ပါအချက်တွေကို အလွန်တိကျပြီး မှန်ကန်အောင် ဖော်ပြရပါမယ်။ + +1. **Tool က ဘာလုပ်သလဲ** +2. **ဘယ်လို ထည့်သွင်းမှုများကို အတိအကျ မျှော်လင့်သလဲ** + +ဒါကြောင့် Tool ဖော်ပြချက်များကို ကွန်ပျူတာ ဘာသာစကားများ သို့မဟုတ် JSON ကဲ့သို့သော တိကျပြတ်သားတဲ့ ပုံစံများဖြင့် ပေးအပ်လေ့ရှိပါတယ်။ ဒီလို လုပ်ဖို့ *မလိုအပ်* ပေမယ့်၊ တိကျပြီး စနစ်တကျရှိတဲ့ မည်သည့် ပုံစံမဆို အလုပ်ဖြစ်ပါတယ်။ + +ဒါတွေက သီအိုရီဆန်တယ်လို့ ထင်ရရင်၊ လက်တွေ့ကျတဲ့ ဥပမာတစ်ခုနဲ့ နားလည်အောင် ကြိုးစားကြည့်ရအောင်။ + +ကျွန်တော်တို့ဟာ ဂဏန်းနှစ်လုံးကို မြှောက်ရုံသာ လုပ်ဆောင်မယ့် ရိုးရှင်းတဲ့ **ဂဏန်းတွက်စက် Tool** တစ်ခုကို အကောင်အထည်ဖော်ပါမယ်။ ဒါဟာ ကျွန်တော်တို့ရဲ့ Python Implementation ဖြစ်နိုင်ပါတယ်။ + +```python +def calculator(a: int, b: int) -> int: + """Multiply two integers.""" + return a * b +``` + +ဒါဆိုရင် ကျွန်တော်တို့ရဲ့ Tool ကို `calculator` လို့ ခေါ်ပြီး၊ ၎င်းဟာ **ဂဏန်းနှစ်လုံးကို မြှောက်ပေးပါတယ်**၊ ပြီးတော့ အောက်ပါ ထည့်သွင်းမှုများ လိုအပ်ပါတယ်- + +* **`a`** (*int*): ဂဏန်းတစ်ခု။ +* **`b`** (*int*): နောက်ထပ် ဂဏန်းတစ်ခု။ + +Tool ရဲ့ ထွက်ရှိရလဒ်ကတော့ အခြား ဂဏန်းတစ်ခုဖြစ်ပြီး၊ အောက်ပါအတိုင်း ဖော်ပြနိုင်ပါတယ်- + +* (*int*): `a` နှင့် `b` ကို မြှောက်ထားသော ရလဒ်။ + +ဒီအသေးစိတ်အချက်အလက်တွေ အားလုံးဟာ အရေးကြီးပါတယ်။ LLM နားလည်နိုင်ဖို့အတွက် ကျွန်တော်တို့ရဲ့ Tool ကို ဖော်ပြတဲ့ စာသား String တစ်ခုထဲမှာ အားလုံးကို ပေါင်းစပ်လိုက်ရအောင်။ + +```text +Tool Name: calculator, Description: Multiply two integers., Arguments: a: int, b: int, Outputs: int +``` + +> **သတိပေးချက်:** ဒီစာသား ဖော်ပြချက်ဟာ **LLM ကို Tool အကြောင်း ဘာတွေ သိစေချင်သလဲ** ဆိုတာပဲ ဖြစ်ပါတယ်။ + +ဒီ String ကို LLM ရဲ့ ထည့်သွင်းမှု (Input) အစိတ်အပိုင်းအဖြစ် ပေးပို့တဲ့အခါ၊ မော်ဒယ်ဟာ ၎င်းကို Tool တစ်ခုအဖြစ် အသိအမှတ်ပြုပြီး၊ ဘယ်အရာတွေကို ထည့်သွင်းမှုအဖြစ် ပေးပို့ရမယ်၊ ထွက်ရှိရလဒ်က ဘာဖြစ်မယ်ဆိုတာကို သိရှိပါလိမ့်မယ်။ + +နောက်ထပ် Tool တွေ ထပ်ပေးချင်တယ်ဆိုရင်၊ ကျွန်တော်တို့ဟာ ပုံစံတူကို အမြဲတမ်း အသုံးပြုရပါမယ်။ ဒီလုပ်ငန်းစဉ်က အမှားအယွင်း ဖြစ်နိုင်ပြီး၊ ကျွန်တော်တို့ဟာ အသေးစိတ်အချက်အလက်အချို့ကို မတော်တဆ လျစ်လျူရှုမိနိုင်ပါတယ်။ + +ပိုကောင်းတဲ့ နည်းလမ်းရှိပါသလား? + +### Tool အပိုင်းများကို အလိုအလျောက် ပုံစံချခြင်း (Auto-formatting Tool sections) + +ကျွန်တော်တို့ရဲ့ Tool ကို Python နဲ့ ရေးထားပြီး၊ Implementation မှာ လိုအပ်တဲ့ အချက်အလက်အားလုံး ပါဝင်ပြီးသား ဖြစ်ပါတယ်- + +* ဘာလုပ်တယ်ဆိုတဲ့ ဖော်ပြချက် နာမည်- `calculator` +* Function ရဲ့ Docstring Comment မှ ပိုရှည်တဲ့ ဖော်ပြချက်- `Multiply two integers.` +* ထည့်သွင်းမှုများနှင့် ၎င်းတို့၏ အမျိုးအစား- Function က `int` နှစ်ခုကို မျှော်လင့်ကြောင်း ရှင်းရှင်းလင်းလင်း ဖော်ပြထားခြင်း။ +* ထွက်ရှိရလဒ်၏ အမျိုးအစား။ + +လူတွေ Programming Language တွေကို အသုံးပြုရတဲ့ အကြောင်းရင်းရှိပါတယ်။ ၎င်းတို့ဟာ ဖော်ပြနိုင်စွမ်းရှိတယ်၊ ကျစ်လျစ်တယ်၊ ပြီးတော့ တိကျပါတယ်။ + +ကျွန်တော်တို့ဟာ Python Source Code ကို Tool ရဲ့ *Specification* အဖြစ် LLM ကို ပေးနိုင်ပေမယ့်၊ Tool ကို ဘယ်လို အကောင်အထည်ဖော်ထားတယ်ဆိုတာက အရေးမကြီးပါဘူး။ အရေးကြီးတာက ၎င်းရဲ့ နာမည်၊ ဘာလုပ်တယ်၊ ဘယ်လို ထည့်သွင်းမှုတွေ မျှော်လင့်တယ်၊ ပြီးတော့ ဘာတွေ ထုတ်ပေးတယ်ဆိုတာပဲ ဖြစ်ပါတယ်။ + +ကျွန်တော်တို့ဟာ Source Code ကို အသုံးပြုပြီး Tool ဖော်ပြချက်ကို အလိုအလျောက် တည်ဆောက်နိုင်ဖို့ Python ရဲ့ Introspection Feature များကို အသုံးချပါမယ်။ ကျွန်တော်တို့ လိုအပ်တာက Tool Implementation မှာ Type Hints, Docstrings နဲ့ သင့်လျော်တဲ့ Function Name တွေကို အသုံးပြုဖို့ပါပဲ။ Source Code မှ သက်ဆိုင်ရာ အစိတ်အပိုင်းများကို ထုတ်ယူဖို့ Code အချို့ကို ရေးသားပါမယ်။ + +ပြီးသွားတဲ့အခါ၊ `calculator` Function ဟာ Tool တစ်ခုဖြစ်ကြောင်း ညွှန်ပြဖို့အတွက် Python Decorator တစ်ခုကိုသာ အသုံးပြုဖို့ လိုအပ်ပါလိမ့်မယ်။ + +```python +@tool +def calculator(a: int, b: int) -> int: + """Multiply two integers.""" + return a * b + +print(calculator.to_string()) +``` + +Function Definition ရဲ့ ရှေ့မှာ `@tool` Decorator ကို သတိပြုပါ။ + +ကျွန်တော်တို့ နောက်မှာ မြင်တွေ့ရမယ့် Implementation နဲ့ဆိုရင်၊ `to_string()` Function မှတစ်ဆင့် Source Code ကနေ အောက်ပါ စာသားကို အလိုအလျောက် ပြန်လည်ရယူနိုင်ပါလိမ့်မယ်။ + +```text +Tool Name: calculator, Description: Multiply two integers., Arguments: a: int, b: int, Outputs: int +``` + +သင်မြင်တဲ့အတိုင်း၊ ဒါဟာ ကျွန်တော်တို့ လက်နဲ့ ရေးခဲ့တဲ့ အရာနဲ့ အတူတူပါပဲ! + +### Generic Tool Implementation + +ကျွန်တော်တို့ Tool တစ်ခု အသုံးပြုဖို့ လိုအပ်တဲ့အခါတိုင်း ပြန်လည်အသုံးပြုနိုင်မယ့် Generic `Tool` Class တစ်ခုကို ဖန်တီးပါမယ်။ + +> **ရှင်းလင်းချက်:** ဒီဥပမာ Implementation ဟာ စိတ်ကူးယဉ်ဖြစ်ပေမယ့်၊ Library အများစုရှိ လက်တွေ့ Implementation များနှင့် ဆင်တူပါတယ်။ + +```python +from typing import Callable + + +class Tool: + """ + A class representing a reusable piece of code (Tool). + + Attributes: + name (str): Name of the tool. + description (str): A textual description of what the tool does. + func (callable): The function this tool wraps. + arguments (list): A list of arguments. + outputs (str or list): The return type(s) of the wrapped function. + """ + def __init__(self, + name: str, + description: str, + func: Callable, + arguments: list, + outputs: str): + self.name = name + self.description = description + self.func = func + self.arguments = arguments + self.outputs = outputs + + def to_string(self) -> str: + """ + Return a string representation of the tool, + including its name, description, arguments, and outputs. + """ + args_str = ", ".join([ + f"{arg_name}: {arg_type}" for arg_name, arg_type in self.arguments + ]) + + return ( + f"Tool Name: {self.name}," + f" Description: {self.description}," + f" Arguments: {args_str}," + f" Outputs: {self.outputs}" + ) + + def __call__(self, *args, **kwargs): + """ + Invoke the underlying function (callable) with provided arguments. + """ + return self.func(*args, **kwargs) +``` + +ဒါက ရှုပ်ထွေးတယ်လို့ ထင်ရပေမယ့်၊ ဖြည်းဖြည်းချင်း ကြည့်မယ်ဆိုရင် ဘာတွေ လုပ်ဆောင်တယ်ဆိုတာ မြင်နိုင်ပါတယ်။ ကျွန်တော်တို့ဟာ အောက်ပါအချက်များ ပါဝင်တဲ့ **`Tool`** Class ကို သတ်မှတ်ပါတယ်- + +* **`name`** (*str*): Tool ရဲ့ နာမည်။ +* **`description`** (*str*): Tool က ဘာလုပ်တယ်ဆိုတဲ့ အတိုချုပ် ဖော်ပြချက်။ +* **`function`** (*callable*): Tool က လုပ်ဆောင်မယ့် Function။ +* **`arguments`** (*list*): မျှော်လင့်ထားတဲ့ ထည့်သွင်း Parameter များ။ +* **`outputs`** (*str* သို့မဟုတ် *list*): Tool ရဲ့ မျှော်လင့်ထားတဲ့ ထွက်ရှိရလဒ်များ။ +* **`__call__()`**: Tool Instance ကို ခေါ်ဆိုတဲ့အခါ Function ကို ခေါ်ဆိုခြင်း။ +* **`to_string()`**: Tool ရဲ့ Attributes များကို စာသား ဖော်ပြချက်အဖြစ် ပြောင်းလဲခြင်း။ + +အောက်ပါ Code ကဲ့သို့သော Class ကို အသုံးပြုပြီး Tool တစ်ခုကို ဖန်တီးနိုင်ပါတယ်။ + +```python +calculator_tool = Tool( + "calculator", # name + "Multiply two integers.", # description + calculator, # function to call + [("a", "int"), ("b", "int")], # inputs (names and types) + "int", # output +) +``` + +ဒါပေမယ့် ကျွန်တော်တို့ဟာ Python ရဲ့ `inspect` Module ကို အသုံးပြုပြီး အချက်အလက်အားလုံးကို အလိုအလျောက် ပြန်လည်ရယူနိုင်ပါတယ်။ ဒါဟာ `@tool` Decorator က လုပ်ဆောင်ပေးတဲ့ အရာပဲ ဖြစ်ပါတယ်။ + +> သင် စိတ်ဝင်စားတယ်ဆိုရင်၊ Decorator Implementation ကို ကြည့်ရှုဖို့ အောက်ပါ အပိုင်းကို ဖွင့်ကြည့်နိုင်ပါတယ်။ + +
+ Decorator Code + +```python +import inspect + +def tool(func): + """ + A decorator that creates a Tool instance from the given function. + """ + # Get the function signature + signature = inspect.signature(func) + + # Extract (param_name, param_annotation) pairs for inputs + arguments = [] + for param in signature.parameters.values(): + annotation_name = ( + param.annotation.__name__ + if hasattr(param.annotation, '__name__') + else str(param.annotation) + ) + arguments.append((param.name, annotation_name)) + + # Determine the return annotation + return_annotation = signature.return_annotation + if return_annotation is inspect._empty: + outputs = "No return annotation" + else: + outputs = ( + return_annotation.__name__ + if hasattr(return_annotation, '__name__') + else str(return_annotation) + ) + + # Use the function's docstring as the description (default if None) + description = func.__doc__ or "No description provided." + + # The function name becomes the Tool name + name = func.__name__ + + # Return a new Tool instance + return Tool( + name=name, + description=description, + func=func, + arguments=arguments, + outputs=outputs + ) +``` + +
+ +ထပ်မံပြောရရင်၊ ဒီ Decorator ကို အသုံးပြုပြီး ကျွန်တော်တို့ရဲ့ Tool ကို အောက်ပါအတိုင်း အကောင်အထည်ဖော်နိုင်ပါတယ်။ + +```python +@tool +def calculator(a: int, b: int) -> int: + """Multiply two integers.""" + return a * b + +print(calculator.to_string()) +``` + +ပြီးတော့ `Tool` ရဲ့ `to_string` Method ကို အသုံးပြုပြီး LLM အတွက် Tool ဖော်ပြချက်အဖြစ် အသုံးပြုရန် သင့်လျော်သော စာသားကို အလိုအလျောက် ပြန်လည်ရယူနိုင်ပါတယ်။ + +```text +Tool Name: calculator, Description: Multiply two integers., Arguments: a: int, b: int, Outputs: int +``` + +ဒီဖော်ပြချက်ကို System Prompt ထဲမှာ **ထည့်သွင်း** လိုက်ပါတယ်။ ဒီအပိုင်းကို စတင်ခဲ့တဲ့ ဥပမာကို ကြည့်မယ်ဆိုရင်၊ `tools_description` ကို အစားထိုးပြီးနောက် အောက်ပါအတိုင်း ဖြစ်ပါလိမ့်မယ်။ + +System prompt for tools + +[Actions](actions) အပိုင်းမှာ၊ ကျွန်တော်တို့ ဖန်တီးလိုက်တဲ့ ဒီ Tool ကို Agent တစ်ခုက ဘယ်လို **ခေါ်ဆိုနိုင်သလဲ** ဆိုတာကို ပိုမိုလေ့လာသွားပါမယ်။ + +### Model Context Protocol (MCP): စုစည်းထားသော Tool Interface + +Model Context Protocol (MCP) ဆိုတာဟာ Application တွေက **LLM တွေကို Tool တွေ ဘယ်လို ပေးအပ်ရမယ်ဆိုတာကို စံသတ်မှတ်ထားတဲ့ Open Protocol** တစ်ခု ဖြစ်ပါတယ်။ + +MCP က အောက်ပါအချက်တွေကို ပေးအပ်ပါတယ်- + +* သင့် LLM က တိုက်ရိုက် ပေါင်းစပ်နိုင်တဲ့ ကြိုတင်တည်ဆောက်ထားသော Integration များစွာ။ +* LLM Provider များနှင့် Vendor များအကြား ပြောင်းလဲနိုင်သော ပြောင်းလွယ်ပြင်လွယ်မှု။ +* သင့် Infrastructure အတွင်း ဒေတာများကို လုံခြုံအောင် ထိန်းသိမ်းရန် အကောင်းဆုံး လုပ်ဆောင်မှုများ။ + +ဆိုလိုတာက **MCP ကို အကောင်အထည်ဖော်တဲ့ မည်သည့် Framework မဆို Protocol အတွင်း သတ်မှတ်ထားတဲ့ Tool များကို အသုံးချနိုင်ခြင်း** ဖြစ်ပြီး၊ Framework တစ်ခုစီအတွက် တူညီတဲ့ Tool Interface ကို ပြန်လည် အကောင်အထည်ဖော်ရန် မလိုအပ်တော့ပါဘူး။ + +MCP အကြောင်း ပိုမိုနက်ရှိုင်းစွာ လေ့လာလိုပါက၊ ကျွန်တော်တို့ရဲ့ အခမဲ့ MCP Course ကို စစ်ဆေးကြည့်ရှုနိုင်ပါတယ်။ + +--- + +Tool များဟာ AI Agent များရဲ့ စွမ်းဆောင်ရည်ကို မြှင့်တင်ရာမှာ အရေးပါတဲ့ အခန်းကဏ္ဍကနေ ပါဝင်ပါတယ်။ + +အနှစ်ချုပ်ရရင်၊ ကျွန်တော်တို့ လေ့လာခဲ့တာတွေကတော့- + +* *Tool များဆိုသည်မှာ ဘာလဲ*: LLM များကို တွက်ချက်မှုများ လုပ်ဆောင်ခြင်း သို့မဟုတ် ပြင်ပဒေတာများ ရယူခြင်းကဲ့သို့သော အပိုစွမ်းဆောင်ရည်များ ပေးအပ်သည့် Function များ။ +* *Tool တစ်ခုကို ဘယ်လို သတ်မှတ်မလဲ*: ရှင်းလင်းသော စာသား ဖော်ပြချက်၊ ထည့်သွင်းမှုများ၊ ထွက်ရှိရလဒ်များနှင့် ခေါ်ဆိုနိုင်သော Function တစ်ခုကို ပေးအပ်ခြင်းဖြင့်။ +* *Tool များ ဘာကြောင့် အရေးပါသလဲ*: ၎င်းတို့သည် Agent များကို Static Model Training ၏ ကန့်သတ်ချက်များကို ကျော်လွှားနိုင်စေခြင်း၊ Real-time Tasks များကို ကိုင်တွယ်နိုင်စေခြင်းနှင့် အထူးပြု လုပ်ဆောင်ချက်များကို လုပ်ဆောင်နိုင်စေခြင်း။ + +အခုဆိုရင်၊ Agent တစ်ခုက ဘယ်လို စောင့်ကြည့်လေ့လာတယ်၊ တွေးခေါ်တယ်၊ ပြီးတော့ လုပ်ဆောင်တယ်ဆိုတာကို မြင်တွေ့ရမယ့် [Agent Workflow](agent-steps-and-structure) အပိုင်းကို ဆက်သွားနိုင်ပါပြီ။ ဒါဟာ **ကျွန်တော်တို့ အခုထိ လေ့လာခဲ့သမျှ အားလုံးကို ပေါင်းစပ်ပေးမှာ** ဖြစ်ပြီး၊ သင့်ကိုယ်ပိုင် အပြည့်အဝ လုပ်ဆောင်နိုင်တဲ့ AI Agent ကို ဖန်တီးဖို့အတွက် အခြေခံအုတ်မြစ်ကို ချပေးပါလိမ့်မယ်။ + +ဒါပေမယ့် အဲဒီမတိုင်ခင်မှာ၊ နောက်ထပ် Quiz အတိုလေး ဖြေဖို့ အချိန်တန်ပါပြီ! \ No newline at end of file diff --git a/units/my/unit1/tutorial.mdx b/units/my/unit1/tutorial.mdx new file mode 100644 index 00000000..06dd2dd7 --- /dev/null +++ b/units/my/unit1/tutorial.mdx @@ -0,0 +1,239 @@ +# ကျွန်တော်တို့ရဲ့ ပထမဆုံး Agent ကို smolagents အသုံးပြုပြီး ဖန်တီးကြမယ် + +အရင်အပိုင်းမှာ၊ Python Code ကို အသုံးပြုပြီး Agent တွေကို အစကနေ ဘယ်လို ဖန်တီးရမလဲဆိုတာကို လေ့လာခဲ့ကြပြီးပါပြီ။ **အဲဒီ လုပ်ငန်းစဉ်က ဘယ်လောက် ပင်ပန်းနိုင်သလဲဆိုတာကိုလည်း မြင်ခဲ့ရပါတယ်**။ ကံကောင်းစွာနဲ့ပဲ၊ Agent Library အများစုဟာ **ခက်ခဲတဲ့ အလုပ်အများစုကို သူတို့ဘာသာ ကိုင်တွယ်ဖြေရှင်းပေးခြင်းဖြင့်** ဒီလုပ်ငန်းစဉ်ကို ရိုးရှင်းအောင် လုပ်ပေးထားပါတယ်။ + +ဒီ Tutorial မှာတော့ **သင်ဟာ သင့်ရဲ့ ပထမဆုံး Agent ကို ဖန်တီးရမှာ ဖြစ်ပါတယ်**။ ဒီ Agent ဟာ ပုံရိပ်ဖန်တီးခြင်း၊ ဝက်ဘ်ရှာဖွေခြင်း၊ အချိန်ဇုန် စစ်ဆေးခြင်းနှင့် အခြားများစွာသော လုပ်ဆောင်ချက်များကို လုပ်ဆောင်နိုင်ပါလိမ့်မယ်။ + +ဒါ့အပြင်၊ သင်ဖန်တီးထားတဲ့ Agent ကို **Hugging Face Space မှာ ထုတ်ဝေပြီး သူငယ်ချင်းတွေနဲ့ လုပ်ဖော်ကိုင်ဖက်တွေကို မျှဝေနိုင်မှာပါ**။ + +ကဲ... စတင်လိုက်ရအောင်! + +## smolagents ဆိုတာ ဘာလဲ? + +smolagents + +ဒီ Agent ကို ဖန်တီးဖို့အတွက် ကျွန်တော်တို့ဟာ **`smolagents`** ဆိုတဲ့ Library ကို အသုံးပြုသွားမှာ ဖြစ်ပါတယ်။ ဒီ Library ဟာ **သင့်ရဲ့ Agent တွေကို လွယ်ကူစွာ တည်ဆောက်နိုင်ဖို့အတွက် Framework တစ်ခုကို ပံ့ပိုးပေးပါတယ်**။ + +ဒီ Lightweight Library ကို ရိုးရှင်းမှုအတွက် ရည်ရွယ်ပြီး ဒီဇိုင်းထုတ်ထားတာ ဖြစ်ပေမယ့်၊ Agent တစ်ခု တည်ဆောက်ရာမှာ ပါဝင်တဲ့ ရှုပ်ထွေးမှု အများစုကို ဖယ်ရှားပေးထားပါတယ်။ ဒါကြောင့် သင်ဟာ Agent ရဲ့ အပြုအမူ (Behavior) ကို ဒီဇိုင်းဆွဲရာမှာသာ အာရုံစိုက်နိုင်ပါလိမ့်မယ်။ + +`smolagents` အကြောင်းကို နောက်အခန်းမှာ ပိုမိုနက်နက်နဲနဲ လေ့လာသွားပါမယ်။ အခုလောလောဆယ်မှာတော့ ဒီ [Blog Post](https://huggingface.co/blog/smolagents) သို့မဟုတ် Library ရဲ့ [GitHub Repo](https://github.com/huggingface/smolagents) ကိုလည်း လေ့လာကြည့်ရှုနိုင်ပါတယ်။ + +အတိုချုပ်ပြောရရင်၊ `smolagents` ဟာ **CodeAgent** ကို အဓိကထားတဲ့ Library တစ်ခု ဖြစ်ပါတယ်။ CodeAgent ဆိုတာက **Code Block များမှတစ်ဆင့် "လုပ်ဆောင်ချက်များ (Actions)" ကို လုပ်ဆောင်ပြီး၊ ထို Code ကို လုပ်ဆောင်ခြင်းဖြင့် ရလဒ်များကို "လေ့လာမှတ်သားခြင်း (Observes)"** ဖြင့် အလုပ်လုပ်တဲ့ Agent အမျိုးအစားပဲ ဖြစ်ပါတယ်။ + +ကျွန်တော်တို့ ဖန်တီးမယ့် ဥပမာကို ကြည့်လိုက်ရအောင်! + +ကျွန်တော်တို့ Agent ကို **Image Generation Tool** တစ်ခု ပေးထားပြီး၊ ကြောင်ပုံတစ်ပုံ ဖန်တီးပေးဖို့ တောင်းဆိုထားပါတယ်။ + +`smolagents` အတွင်းက Agent ဟာ **ကျွန်တော်တို့ အရင်က ကိုယ်တိုင်တည်ဆောက်ခဲ့တဲ့ Agent နဲ့ အပြုအမူချင်း အတူတူပါပဲ**။ ၎င်းဟာ နောက်ဆုံးအဖြေကို မရမချင်း **စဉ်းစားခြင်း (Think)၊ လုပ်ဆောင်ခြင်း (Act) နှင့် လေ့လာမှတ်သားခြင်း (Observe)** စတဲ့ သံသရာအတိုင်း လည်ပတ်နေမှာ ဖြစ်ပါတယ်။ + + + +စိတ်လှုပ်ရှားစရာကောင်းတယ် မဟုတ်လား? + +## ကျွန်တော်တို့ရဲ့ Agent ကို စတင်တည်ဆောက်ကြမယ်! + +စတင်ဖို့အတွက်၊ ဒီ Space ကို Duplicate လုပ်လိုက်ပါ- [https://huggingface.co/spaces/agents-course/First_agent_template](https://huggingface.co/spaces/agents-course/First_agent_template) +> ဒီ Template အတွက် [Aymeric](https://huggingface.co/m-ric) ကို ကျေးဇူးတင်ပါတယ်! 🙌 + +Space ကို Duplicate လုပ်တယ်ဆိုတာက **သင့်ရဲ့ ကိုယ်ပိုင် Profile မှာ Local Copy တစ်ခု ဖန်တီးလိုက်တာ** ကို ဆိုလိုပါတယ်။ + +Duplicate + +Space ကို Duplicate လုပ်ပြီးတဲ့အခါ၊ သင့် Agent က Model API ကို အသုံးပြုနိုင်ဖို့အတွက် Hugging Face API Token ကို ထည့်သွင်းဖို့ လိုအပ်ပါလိမ့်မယ်။ + +1. ပထမဆုံး၊ သင့်မှာ Inference ခွင့်ပြုချက်ပါတဲ့ Hugging Face Token မရှိသေးရင် [https://hf.co/settings/tokens](https://hf.co/settings/tokens) ကနေ ရယူပါ။ +2. သင် Duplicate လုပ်ထားတဲ့ Space ကို သွားပြီး **Settings** Tab ကို နှိပ်ပါ။ +3. **Variables and Secrets** ကဏ္ဍကို ဆင်းပြီး **New Secret** ကို နှိပ်ပါ။ +4. `HF_TOKEN` အမည်နဲ့ Secret တစ်ခု ဖန်တီးပြီး၊ Token ကို Value အဖြစ် ထည့်သွင်းပါ။ +5. သင့် Token ကို လုံခြုံစွာ သိမ်းဆည်းဖို့ **Save** ကို နှိပ်ပါ။ + +ဒီသင်ခန်းစာတစ်လျှောက်လုံးမှာ သင် ပြင်ဆင်ဖို့ လိုအပ်မယ့် တစ်ခုတည်းသော ဖိုင်ကတော့ (လက်ရှိ မပြည့်စုံသေးတဲ့) **"app.py"** ပဲ ဖြစ်ပါတယ်။ Template ထဲက [မူရင်း app.py](https://huggingface.co/spaces/agents-course/First_agent_template/blob/main/app.py) ကို ဒီမှာ ကြည့်နိုင်ပါတယ်။ သင့်ရဲ့ Copy ထဲမှာ ရှာဖို့အတွက်၊ Space ရဲ့ `Files` Tab ကို သွားပြီး Directory ထဲက `app.py` ကို နှိပ်ပါ။ + +Code တွေကို အတူတူ ခွဲခြမ်းစိတ်ဖြာကြည့်ရအောင်။ + +ဖိုင်ရဲ့ အစမှာ လိုအပ်တဲ့ Library Imports တွေ ပါဝင်ပါတယ်။ + +```python +from smolagents import CodeAgent, DuckDuckGoSearchTool, FinalAnswerTool, InferenceClientModel, load_tool, tool +import datetime +import requests +import pytz +import yaml +``` + +အစောပိုင်းမှာ ဖော်ပြခဲ့တဲ့အတိုင်း၊ ကျွန်တော်တို့ဟာ **smolagents** ထဲက **CodeAgent** Class ကို တိုက်ရိုက် အသုံးပြုသွားမှာ ဖြစ်ပါတယ်။ + +### Tool များ (The Tools) + +ကဲ... Tool တွေဆီ သွားကြရအောင်! Tool တွေအကြောင်း ပြန်လည်လေ့လာချင်ရင် Course ရဲ့ [Tools](tools) အပိုင်းကို ပြန်သွားနိုင်ပါတယ်။ + +```python +@tool +def my_custom_tool(arg1:str, arg2:int)-> str: # return type ကို သတ်မှတ်ဖို့ အရေးကြီးပါတယ် + # Tool description / args description အတွက် ဒီပုံစံကို ထားရှိပါ၊ Tool ကိုတော့ ပြင်ဆင်နိုင်ပါတယ် + """A tool that does nothing yet + Args: + arg1: the first argument + arg2: the second argument + """ + return "What magic will you build ?" + +@tool +def get_current_time_in_timezone(timezone: str) -> str: + """A tool that fetches the current local time in a specified timezone. + Args: + timezone: A string representing a valid timezone (e.g., 'America/New_York'). + """ + try: + # Create timezone object + tz = pytz.timezone(timezone) + # Get current time in that timezone + local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S") + return f"The current local time in {timezone} is: {local_time}" + except Exception as e: + return f"Error fetching time for timezone '{timezone}': {str(e)}" +``` + +ဒီအပိုင်းမှာ သင်ဖန်တီးဖို့ အားပေးထားတဲ့ Tool တွေပဲ ဖြစ်ပါတယ်။ ဥပမာနှစ်ခု ပေးထားပါတယ်။ + +1. **အလုပ်မလုပ်သေးသော Dummy Tool** တစ်ခု။ ဒါကို သင် အသုံးဝင်တဲ့ Tool တစ်ခုဖြစ်အောင် ပြင်ဆင်နိုင်ပါတယ်။ +2. ကမ္ဘာပေါ်ရှိ နေရာတစ်ခု၏ လက်ရှိအချိန်ကို ရယူပေးသော **တကယ်အလုပ်လုပ်သည့် Tool** တစ်ခု။ + +သင့်ရဲ့ Tool ကို သတ်မှတ်ဖို့အတွက် အောက်ပါအချက်များက အရေးကြီးပါတယ်။ + +1. `get_current_time_in_timezone(timezone: str) -> str:` မှာလိုမျိုး Function အတွက် Input နှင့် Output အမျိုးအစားများကို သတ်မှတ်ပေးရပါမယ်။ +2. **ကောင်းမွန်စွာ ပုံစံချထားသော Docstring** တစ်ခု လိုအပ်ပါတယ်။ `smolagents` က Arguments အားလုံးအတွက် **စာသားဖော်ပြချက် (Textual Description)** ကို Docstring မှာ ပါဝင်ဖို့ မျှော်လင့်ထားပါတယ်။ + +### Agent (The Agent) + +ဒီ Agent ဟာ LLM Engine အဖြစ် [`Qwen/Qwen2.5-Coder-32B-Instruct`](https://huggingface.co/Qwen/Qwen2.5-Coder-32B-Instruct) ကို အသုံးပြုထားပါတယ်။ ဒါဟာ Serverless API မှတစ်ဆင့် ကျွန်တော်တို့ အသုံးပြုမယ့် စွမ်းဆောင်ရည်မြင့် Model တစ်ခု ဖြစ်ပါတယ်။ + +```python +final_answer = FinalAnswerTool() +model = InferenceClientModel( + max_tokens=2096, + temperature=0.5, + model_id='Qwen/Qwen2.5-Coder-32B-Instruct', + custom_role_conversions=None, +) + +with open("prompts.yaml", 'r') as stream: + prompt_templates = yaml.safe_load(stream) + +# We're creating our CodeAgent +agent = CodeAgent( + model=model, + tools=[final_answer], # add your tools here (don't remove final_answer) + max_steps=6, + verbosity_level=1, + grammar=None, + planning_interval=None, + name=None, + description=None, + prompt_templates=prompt_templates +) + +GradioUI(agent).launch() +``` + +ဒီ Agent ဟာ အရင်အပိုင်းမှာ မြင်ခဲ့ရတဲ့ **InferenceClientModel** Class ရဲ့ နောက်ကွယ်မှာ **InferenceClient** ကိုပဲ ဆက်လက်အသုံးပြုနေတာ ဖြစ်ပါတယ်။ + +Framework ကို Unit 2 မှာ မိတ်ဆက်တဲ့အခါ ပိုမိုနက်နဲတဲ့ ဥပမာတွေကို ပေးပါမယ်။ အခုလောလောဆယ်မှာတော့ သင်ဟာ Agent ရဲ့ `tools` Parameter ကို အသုံးပြုပြီး **Tool အသစ်တွေကို စာရင်းထဲ ထည့်သွင်းဖို့** ကိုသာ အာရုံစိုက်ဖို့ လိုပါတယ်။ + +ဥပမာအားဖြင့်၊ Code ရဲ့ ပထမဆုံးစာကြောင်းမှာ Import လုပ်ထားတဲ့ `DuckDuckGoSearchTool` ကို အသုံးပြုနိုင်ပါတယ်၊ ဒါမှမဟုတ် Code ရဲ့ နောက်ပိုင်းမှာ Hub ကနေ Load လုပ်ထားတဲ့ `image_generation_tool` ကိုလည်း ထည့်သွင်းနိုင်ပါတယ်။ + +**Tool များကို ထည့်သွင်းခြင်းက သင့် Agent ကို စွမ်းဆောင်ရည်အသစ်များ ပေးပါလိမ့်မယ်**။ ဒီနေရာမှာ တီထွင်ဖန်တီးနိုင်ဖို့ ကြိုးစားကြည့်ပါ။ + +### System Prompt (စနစ် ညွှန်ကြားချက်) + +Agent ရဲ့ System Prompt ကို သီးခြား `prompts.yaml` ဖိုင်တစ်ခုမှာ သိမ်းဆည်းထားပါတယ်။ ဒီဖိုင်မှာ Agent ရဲ့ အပြုအမူကို လမ်းညွှန်ပေးမယ့် ကြိုတင်သတ်မှတ်ထားတဲ့ ညွှန်ကြားချက်များ ပါဝင်ပါတယ်။ + +Prompt များကို YAML ဖိုင်မှာ သိမ်းဆည်းထားခြင်းက မတူညီတဲ့ Agent များ သို့မဟုတ် အသုံးချကိစ္စများအတွက် လွယ်ကူစွာ ပြင်ဆင်ပြီး ပြန်လည်အသုံးပြုနိုင်စေပါတယ်။ + +`prompts.yaml` ဖိုင် ဘယ်နေရာမှာ ရှိသလဲ၊ Project အတွင်းမှာ ဘယ်လို စနစ်တကျ ဖွဲ့စည်းထားသလဲဆိုတာကို [Space ရဲ့ File Structure](https://huggingface.co/spaces/agents-course/First_agent_template/tree/main) ကို စစ်ဆေးကြည့်ရှုနိုင်ပါတယ်။ + +ပြည့်စုံသော "app.py" ဖိုင်မှာ အောက်ပါအတိုင်း ဖြစ်ပါတယ်။ + +```python +from smolagents import CodeAgent, DuckDuckGoSearchTool, InferenceClientModel, load_tool, tool +import datetime +import requests +import pytz +import yaml +from tools.final_answer import FinalAnswerTool + +from Gradio_UI import GradioUI + +# Below is an example of a tool that does nothing. Amaze us with your creativity! +@tool +def my_custom_tool(arg1:str, arg2:int)-> str: # it's important to specify the return type + # Keep this format for the tool description / args description but feel free to modify the tool + """A tool that does nothing yet + Args: + arg1: the first argument + arg2: the second argument + """ + return "What magic will you build ?" + +@tool +def get_current_time_in_timezone(timezone: str) -> str: + """A tool that fetches the current local time in a specified timezone. + Args: + timezone: A string representing a valid timezone (e.g., 'America/New_York'). + """ + try: + # Create timezone object + tz = pytz.timezone(timezone) + # Get current time in that timezone + local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S") + return f"The current local time in {timezone} is: {local_time}" + except Exception as e: + return f"Error fetching time for timezone '{timezone}': {str(e)}" + + +final_answer = FinalAnswerTool() +model = InferenceClientModel( + max_tokens=2096, + temperature=0.5, + model_id='Qwen/Qwen2.5-Coder-32B-Instruct', + custom_role_conversions=None, +) + + +# Import tool from Hub +image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True) + +# Load system prompt from prompt.yaml file +with open("prompts.yaml", 'r') as stream: + prompt_templates = yaml.safe_load(stream) + +agent = CodeAgent( + model=model, + tools=[final_answer], # add your tools here (don't remove final_answer) + max_steps=6, + verbosity_level=1, + grammar=None, + planning_interval=None, + name=None, + description=None, + prompt_templates=prompt_templates # Pass system prompt to CodeAgent +) + + +GradioUI(agent).launch() +``` + +သင့်ရဲ့ **ပန်းတိုင်** ကတော့ Space နဲ့ Agent ကို ရင်းနှီးကျွမ်းဝင်ဖို့ပဲ ဖြစ်ပါတယ်။ + +လက်ရှိ Template ထဲက Agent ဟာ **မည်သည့် Tool ကိုမှ အသုံးမပြုသေးပါဘူး**။ ဒါကြောင့် ကြိုတင်ဖန်တီးထားတဲ့ Tool တွေထဲက တစ်ခုခုကို ထည့်သွင်းဖို့ ဒါမှမဟုတ် ကိုယ်ပိုင် Tool အသစ်တွေ ဖန်တီးဖို့ ကြိုးစားကြည့်ပါ! + +သင်ဖန်တီးထားတဲ့ အံ့သြဖွယ် Agent ရဲ့ ရလဒ်တွေကို **#agents-course-showcase** Discord Channel မှာ စောင့်မျှော်နေပါတယ်! + +--- +ဂုဏ်ယူပါတယ်၊ သင်ဟာ သင့်ရဲ့ ပထမဆုံး Agent ကို တည်ဆောက်ပြီးပါပြီ! သင့်ရဲ့ သူငယ်ချင်းတွေနဲ့ လုပ်ဖော်ကိုင်ဖက်တွေကို မျှဝေဖို့ မတွန့်ဆုတ်ပါနဲ့။ + +ဒါဟာ သင့်ရဲ့ ပထမဆုံး စမ်းသပ်မှုဖြစ်တဲ့အတွက် အနည်းငယ် Bug ပါတာ ဒါမှမဟုတ် နှေးတာမျိုး ဖြစ်နေရင်လည်း ပုံမှန်ပါပဲ။ နောက်အခန်းတွေမှာ ပိုမိုကောင်းမွန်တဲ့ Agent တွေကို ဘယ်လိုတည်ဆောက်ရမလဲဆိုတာကို လေ့လာသွားပါမယ်။ + +သင်ယူဖို့ အကောင်းဆုံးနည်းလမ်းက စမ်းသပ်ကြည့်ဖို့ပါပဲ။ ဒါကြောင့် Agent ကို Update လုပ်ဖို့၊ Tool တွေ ထပ်ထည့်ဖို့၊ တခြား Model တွေနဲ့ စမ်းသပ်ကြည့်ဖို့ မတွန့်ဆုတ်ပါနဲ့။ + +နောက်အပိုင်းမှာတော့ နောက်ဆုံး Quiz ကို ဖြေဆိုပြီး Certificate ရယူရမှာ ဖြစ်ပါတယ်။ \ No newline at end of file diff --git a/units/my/unit1/what-are-agents.mdx b/units/my/unit1/what-are-agents.mdx new file mode 100644 index 00000000..35c36569 --- /dev/null +++ b/units/my/unit1/what-are-agents.mdx @@ -0,0 +1,155 @@ +# Agent တွေဆိုတာက ဘာလဲ? + +Unit 1 planning + +ဒီအပိုင်းကို လေ့လာပြီးတဲ့အခါမှာ Agent ရဲ့ သဘောတရားနဲ့ AI နယ်ပယ်မှာ ၎င်းတို့ကို ဘယ်လို အသုံးချနိုင်သလဲဆိုတာကို သက်သောင့်သက်သာ နားလည်သွားပါလိမ့်မယ်။ + +Agent ဆိုတာ ဘာလဲဆိုတာကို ရှင်းပြဖို့အတွက် ဥပမာတစ်ခုနဲ့ စတင်ကြည့်ရအောင်။ + +## ခြုံငုံသုံးသပ်ချက်: Alfred အမည်ရှိ Agent + +Alfred နဲ့ တွေ့ဆုံပါ။ Alfred ဟာ **Agent** တစ်ဦး ဖြစ်ပါတယ်။ + +This is Alfred + +Alfred ဟာ "Alfred၊ ကော်ဖီတစ်ခွက် လိုချင်ပါတယ်" လို့ **အမိန့်ပေးခံရတယ်** လို့ စိတ်ကူးကြည့်လိုက်ပါ။ + +I would like a coffee + +Alfred ဟာ **လူ့ဘာသာစကားကို နားလည်တဲ့အတွက်**၊ ကျွန်တော်တို့ရဲ့ တောင်းဆိုချက်ကို လျင်မြန်စွာ သဘောပေါက်သွားပါတယ်။ + +အော်ဒါကို မလုပ်ဆောင်ခင်မှာ Alfred ဟာ **ဆင်ခြင်သုံးသပ်ခြင်းနဲ့ စီမံကိန်းရေးဆွဲခြင်း** ကို လုပ်ဆောင်ပြီး၊ သူလုပ်ဆောင်ရမယ့် အဆင့်တွေနဲ့ လိုအပ်တဲ့ Tool တွေကို စဉ်းစားပါတယ်။ + +၁။ မီးဖိုချောင်ကို သွားမယ်။ +၂။ ကော်ဖီဖျော်စက်ကို အသုံးပြုမယ်။ +၃။ ကော်ဖီဖျော်မယ်။ +၄။ ကော်ဖီကို ပြန်ယူလာမယ်။ + +Reason and plan + +စီမံကိန်း ရေးဆွဲပြီးတာနဲ့ သူ **လုပ်ဆောင်ရပါမယ် (must act)**။ သူ့ရဲ့ စီမံကိန်းကို အကောင်အထည်ဖော်ဖို့အတွက် **သူသိထားတဲ့ Tool စာရင်းထဲက ကိရိယာတွေကို အသုံးပြုနိုင်ပါတယ်**။ + +ဒီကိစ္စမှာ ကော်ဖီဖျော်ဖို့အတွက် သူဟာ ကော်ဖီဖျော်စက်ကို အသုံးပြုပါတယ်။ ကော်ဖီဖျော်ဖို့အတွက် ကော်ဖီဖျော်စက်ကို ဖွင့်လိုက်ပါတယ်။ + +Make coffee + +နောက်ဆုံးမှာတော့ Alfred ဟာ အသစ်ဖျော်ထားတဲ့ ကော်ဖီကို ကျွန်တော်တို့ဆီ ယူလာပေးပါတယ်။ + +Bring coffee + +ဒါဟာ Agent ဆိုတာ ဘာလဲဆိုတဲ့ သဘောတရားပါပဲ- **ဆင်ခြင်သုံးသပ်နိုင်ခြင်း၊ စီမံကိန်းရေးဆွဲနိုင်ခြင်းနဲ့ သူ့ရဲ့ ပတ်ဝန်းကျင်နဲ့ ထိတွေ့ဆက်ဆံနိုင်စွမ်းရှိတဲ့ AI မော်ဒယ်** တစ်ခု ဖြစ်ပါတယ်။ + +သူ့မှာ ပတ်ဝန်းကျင်နဲ့ ထိတွေ့ဆက်ဆံနိုင်တဲ့ **Agency (လုပ်ဆောင်နိုင်စွမ်း)** ရှိတဲ့အတွက် သူ့ကို Agent လို့ ခေါ်ဆိုတာ ဖြစ်ပါတယ်။ + +Agent process + +## ပိုမိုတိကျသော အဓိပ္ပာယ်ဖွင့်ဆိုချက် + +အခု ခြုံငုံသုံးသပ်ချက်ကို နားလည်သွားပြီဆိုတော့ ပိုမိုတိကျတဲ့ အဓိပ္ပာယ်ဖွင့်ဆိုချက်ကို ကြည့်ရအောင်။ + +> Agent ဆိုတာဟာ အသုံးပြုသူက သတ်မှတ်ထားတဲ့ ရည်မှန်းချက်တစ်ခုကို အောင်မြင်ဖို့အတွက် AI မော်ဒယ်ကို အသုံးပြုပြီး သူ့ရဲ့ ပတ်ဝန်းကျင်နဲ့ ထိတွေ့ဆက်ဆံတဲ့ စနစ်တစ်ခု ဖြစ်ပါတယ်။ ၎င်းဟာ ဆင်ခြင်သုံးသပ်ခြင်း၊ စီမံကိန်းရေးဆွဲခြင်းနဲ့ လုပ်ဆောင်ချက်များ (အများအားဖြင့် ပြင်ပ Tool များမှတစ်ဆင့်) ကို ပေါင်းစပ်ပြီး Tasks များကို ပြီးမြောက်စေပါတယ်။ + +Agent မှာ အဓိက အစိတ်အပိုင်း နှစ်ခုရှိတယ်လို့ စဉ်းစားနိုင်ပါတယ်။ + +**၁။ ဦးနှောက် (The Brain - AI Model)** + +ဒီနေရာမှာ အတွေးအခေါ်အားလုံး ဖြစ်ပေါ်ပါတယ်။ AI မော်ဒယ်ဟာ **ဆင်ခြင်သုံးသပ်ခြင်းနဲ့ စီမံကိန်းရေးဆွဲခြင်း** ကို ကိုင်တွယ်ပါတယ်။ **အခြေအနေပေါ် မူတည်ပြီး ဘယ်လို လုပ်ဆောင်ချက်တွေ လုပ်ရမယ်** ဆိုတာကို ဆုံးဖြတ်ပါတယ်။ + +**၂။ ခန္ဓာကိုယ် (The Body - Capabilities and Tools)** + +ဒီအပိုင်းကတော့ **Agent လုပ်ဆောင်နိုင်ဖို့ တပ်ဆင်ထားတဲ့ အရာအားလုံး** ကို ကိုယ်စားပြုပါတယ်။ + +လုပ်ဆောင်နိုင်တဲ့ **Actions တွေရဲ့ အတိုင်းအတာ** ဟာ Agent ကို **ဘာတွေ တပ်ဆင်ပေးထားသလဲ** ဆိုတဲ့အပေါ် မူတည်ပါတယ်။ ဥပမာအားဖြင့်၊ လူသားတွေမှာ တောင်ပံမရှိတဲ့အတွက် "ပျံသန်းခြင်း" ဆိုတဲ့ **Action** ကို လုပ်ဆောင်နိုင်မှာ မဟုတ်ပေမယ့် "လမ်းလျှောက်ခြင်း"၊ "ပြေးခြင်း"၊ "ခုန်ခြင်း"၊ "ဆုပ်ကိုင်ခြင်း" စတဲ့ **Actions** တွေကိုတော့ လုပ်ဆောင်နိုင်ပါတယ်။ + +### Agency ရဲ့ အတိုင်းအတာ (The spectrum of "Agency") + +ဒီအဓိပ္ပာယ်ဖွင့်ဆိုချက်အရ၊ Agent များဟာ လုပ်ဆောင်နိုင်စွမ်း (Agency) တိုးလာတဲ့ အတိုင်းအတာတစ်ခုပေါ်မှာ တည်ရှိနေပါတယ်။ + +| Agency အဆင့် | ဖော်ပြချက် | ခေါ်ဆိုပုံ | ဥပမာ ပုံစံ | +| :--- | :--- | :--- | :--- | +| ☆☆☆ | Agent ရဲ့ ရလဒ်က Program စီးဆင်းမှုအပေါ် သက်ရောက်မှု မရှိခြင်း | ရိုးရှင်းသော Processor | `process_llm_output(llm_response)` | +| ★☆☆ | Agent ရဲ့ ရလဒ်က အခြေခံ ထိန်းချုပ်မှု စီးဆင်းမှုကို ဆုံးဖြတ်ခြင်း | Router | `if llm_decision(): path_a() else: path_b()` | +| ★★☆ | Agent ရဲ့ ရလဒ်က Function လုပ်ဆောင်မှုကို ဆုံးဖြတ်ခြင်း | Tool Caller | `run_function(llm_chosen_tool, llm_chosen_args)` | +| ★★★ | Agent ရဲ့ ရလဒ်က ထပ်ခါတလဲလဲ လုပ်ဆောင်မှုနှင့် Program ဆက်လက်လုပ်ဆောင်မှုကို ထိန်းချုပ်ခြင်း | Multi-step Agent | `while llm_should_continue(): execute_next_step()` | +| ★★★ | Agent တစ်ခု၏ လုပ်ငန်းအဆင့်ဆင့်က အခြား Agent တစ်ခု၏ လုပ်ငန်းအဆင့်ဆင့်ကို စတင်နိုင်ခြင်း | Multi-Agent | `if llm_trigger(): execute_agent()` | + +*(ဇယားကို [smolagents conceptual guide](https://huggingface.co/docs/smolagents/conceptual_guides/intro_agents) မှ ကောက်နုတ်ထားပါသည်။)* + +## Agent များအတွက် ဘယ်လို AI မော်ဒယ်တွေကို အသုံးပြုသလဲ? + +Agent များမှာ အသုံးအများဆုံး AI မော်ဒယ်ကတော့ LLM (Large Language Model) ဖြစ်ပါတယ်။ ၎င်းဟာ **စာသား (Text)** ကို Input အဖြစ် ယူပြီး **စာသား (Text)** ကိုပဲ Output အဖြစ် ထုတ်ပေးပါတယ်။ + +လူသိများတဲ့ ဥပမာတွေကတော့ **OpenAI** က **GPT4**၊ **Meta** က **LLama**၊ **Google** က **Gemini** စတာတွေပဲ ဖြစ်ပါတယ်။ ဒီမော်ဒယ်တွေဟာ စာသားအမြောက်အမြားနဲ့ လေ့ကျင့်ထားတဲ့အတွက် အကြောင်းအရာတွေကို ကောင်းကောင်း ခြုံငုံနားလည်နိုင်စွမ်း ရှိပါတယ်။ LLM တွေအကြောင်းကို [နောက်အပိုင်း](what-are-llms) မှာ ပိုမိုလေ့လာပါမယ်။ + +> [!TIP] +> Agent ရဲ့ Core Model အဖြစ် အခြား Input များကို လက်ခံနိုင်တဲ့ မော်ဒယ်များကိုလည်း အသုံးပြုနိုင်ပါတယ်။ ဥပမာအားဖြင့်၊ **Vision Language Model (VLM)** ဟာ LLM လိုပဲ စာသားကို နားလည်သလို၊ ပုံရိပ်တွေကိုပါ Input အဖြစ် နားလည်နိုင်ပါတယ်။ အခုတော့ ကျွန်တော်တို့ LLM တွေကို အဓိကထား လေ့လာသွားမှာဖြစ်ပြီး၊ အခြားရွေးချယ်စရာတွေကို နောက်မှ ဆွေးနွေးပါမယ်။ + +## AI က သူ့ရဲ့ ပတ်ဝန်းကျင်မှာ ဘယ်လို လုပ်ဆောင်ချက်တွေ လုပ်သလဲ? + +LLM တွေဟာ အံ့သြစရာကောင်းတဲ့ မော်ဒယ်တွေ ဖြစ်ပေမယ့် **သူတို့ဟာ စာသားကိုသာ ထုတ်ပေးနိုင်ပါတယ်**။ + +ဒါပေမယ့် HuggingChat ဒါမှမဟုတ် ChatGPT လို လူသိများတဲ့ Chat Application တွေကို ပုံတစ်ပုံ ဖန်တီးခိုင်းရင် သူတို့ လုပ်နိုင်ပါတယ်။ ဒါ ဘယ်လိုဖြစ်နိုင်တာလဲ? + +အဖြေကတော့ HuggingChat, ChatGPT နဲ့ အလားတူ App တွေကို ဖန်တီးသူတွေဟာ LLM က ပုံတွေ ဖန်တီးဖို့အတွက် အသုံးပြုနိုင်တဲ့ နောက်ထပ် လုပ်ဆောင်ချက်များ (ခေါ်ဆိုမှု **Tools**) ကို ထည့်သွင်းထားလို့ပဲ ဖြစ်ပါတယ်။ + +
+Eiffel Brocolis +
မော်ဒယ်ဟာ ပုံရိပ်ဖန်တီးမှု Tool ကို အသုံးပြုပြီး ဒီပုံကို ဖန်တီးခဲ့တာပါ။ +
+
+ +Tool တွေအကြောင်းကို [Tools](tools) အပိုင်းမှာ ပိုမိုလေ့လာပါမယ်။ + +## Agent တစ်ခုက ဘယ်လို Tasks မျိုးတွေ လုပ်ဆောင်နိုင်သလဲ? + +Agent တစ်ခုဟာ **Tools** မှတစ်ဆင့် **Actions** တွေကို ပြီးမြောက်အောင် လုပ်ဆောင်ဖို့အတွက် ကျွန်တော်တို့ ထည့်သွင်းပေးထားတဲ့ မည်သည့် Task ကိုမဆို လုပ်ဆောင်နိုင်ပါတယ်။ + +ဥပမာအားဖြင့်၊ ကျွန်တော့် ကွန်ပျူတာပေါ်မှာ ကိုယ်ရေးကိုယ်တာ လက်ထောက် (Siri လိုမျိုး) အဖြစ် လုပ်ဆောင်မယ့် Agent တစ်ခုကို ရေးသားပြီး "ဒီနေ့ အစည်းအဝေးကို ရွှေ့ဆိုင်းဖို့ Manager ဆီ Email ပို့ပေးပါ" လို့ တောင်းဆိုမယ်ဆိုရင်၊ Email ပို့ဖို့အတွက် Code အချို့ကို ကျွန်တော် ထည့်သွင်းပေးနိုင်ပါတယ်။ ဒါဟာ Agent က Email ပို့ဖို့ လိုအပ်တဲ့အခါတိုင်း အသုံးပြုနိုင်မယ့် Tool အသစ်တစ်ခု ဖြစ်လာပါမယ်။ ဒါကို Python နဲ့ အခုလို ရေးနိုင်ပါတယ်။ + +```python +def send_message_to(recipient, message): + """အီးမေးလ် မက်ဆေ့ချ်ကို လက်ခံသူထံ ပို့ရန် အသုံးဝင်သည်""" + ... +``` + +LLM ဟာ၊ ကျွန်တော်တို့ နောက်မှ မြင်တွေ့ရမယ့်အတိုင်း၊ လိုအပ်တဲ့အခါ Tool ကို Run ဖို့အတွက် Code ကို ထုတ်ပေးပါလိမ့်မယ်။ ဒါမှ ရည်ရွယ်ထားတဲ့ Task ကို ပြီးမြောက်စေမှာပါ။ + +```python +send_message_to("Manager", "Can we postpone today's meeting?") +``` + +**Tools တွေကို ဒီဇိုင်းဆွဲတာဟာ အလွန်အရေးကြီးပြီး သင့် Agent ရဲ့ အရည်အသွေးအပေါ် ကြီးမားတဲ့ သက်ရောက်မှု ရှိပါတယ်**။ အချို့ Tasks တွေအတွက် အလွန်တိကျတဲ့ Tools တွေ ဖန်တီးဖို့ လိုအပ်သလို၊ အချို့ Tasks တွေကိုတော့ "web\_search" လိုမျိုး ယေဘုယျ Tool တွေနဲ့ ဖြေရှင်းနိုင်ပါတယ်။ + +> **မှတ်ချက်:** **Actions နဲ့ Tools တွေဟာ အတူတူ မဟုတ်ပါဘူး**။ ဥပမာအားဖြင့်၊ Action တစ်ခု ပြီးမြောက်ဖို့အတွက် Tools များစွာကို အသုံးပြုရနိုင်ပါတယ်။ + +Agent တစ်ခုကို သူ့ရဲ့ ပတ်ဝန်းကျင်နဲ့ ထိတွေ့ဆက်ဆံခွင့်ပေးခြင်းဟာ **ကုမ္ပဏီတွေနဲ့ လူပုဂ္ဂိုလ်တွေအတွက် လက်တွေ့ဘဝ အသုံးပြုမှုတွေကို ဖြစ်ပေါ်စေပါတယ်**။ + +### ဥပမာ ၁: ကိုယ်ရေးကိုယ်တာ Virtual Assistant များ + +Siri, Alexa, သို့မဟုတ် Google Assistant ကဲ့သို့သော Virtual Assistant များသည် အသုံးပြုသူများ၏ Digital ပတ်ဝန်းကျင်ကို ကိုယ်စားပြု၍ အပြန်အလှန်ဆက်သွယ်သောအခါ Agent များအဖြစ် လုပ်ဆောင်ပါတယ်။ + +၎င်းတို့သည် အသုံးပြုသူ၏ မေးမြန်းချက်များကို ယူဆောင်ခြင်း၊ အခြေအနေကို ခွဲခြမ်းစိတ်ဖြာခြင်း၊ ဒေတာဘေ့စ်များမှ အချက်အလက်များ ပြန်လည်ရယူခြင်းနှင့် တုံ့ပြန်မှုများ ပေးခြင်း သို့မဟုတ် လုပ်ဆောင်ချက်များ စတင်ခြင်း (ဥပမာ - သတိပေးချက်များ သတ်မှတ်ခြင်း၊ မက်ဆေ့ချ်များ ပို့ခြင်း သို့မဟုတ် Smart Device များကို ထိန်းချုပ်ခြင်း) တို့ကို လုပ်ဆောင်ပါတယ်။ + +### ဥပမာ ၂: Customer Service Chatbot များ + +ကုမ္ပဏီများစွာသည် Customer များနှင့် လူ့ဘာသာစကားဖြင့် အပြန်အလှန်ဆက်သွယ်သော Agent များအဖြစ် Chatbot များကို အသုံးပြုကြပါတယ်။ + +ဤ Agent များသည် မေးခွန်းများကို ဖြေကြားနိုင်ခြင်း၊ ပြဿနာဖြေရှင်းရေး အဆင့်ဆင့်ကို လမ်းညွှန်ပေးခြင်း၊ Internal Database များတွင် Issue များ ဖွင့်ပေးခြင်း သို့မဟုတ် ငွေပေးချေမှုများကိုပင် ပြီးမြောက်စေနိုင်ပါတယ်။ + +၎င်းတို့၏ ကြိုတင်သတ်မှတ်ထားသော ရည်မှန်းချက်များတွင် အသုံးပြုသူ စိတ်ကျေနပ်မှုကို မြှင့်တင်ခြင်း၊ စောင့်ဆိုင်းချိန်ကို လျှော့ချခြင်း သို့မဟုတ် အရောင်းမြှင့်တင်ခြင်းတို့ ပါဝင်နိုင်ပါတယ်။ Customer များနှင့် တိုက်ရိုက်ထိတွေ့ခြင်း၊ ဆွေးနွေးမှုများမှ သင်ယူခြင်းနှင့် အချိန်ကြာလာသည်နှင့်အမျှ ၎င်းတို့၏ တုံ့ပြန်မှုများကို လိုက်လျောညီထွေဖြစ်အောင် ပြုလုပ်ခြင်းဖြင့် ၎င်းတို့သည် Agent တစ်ခု၏ အဓိက သဘောတရားများကို လက်တွေ့ကျကျ ပြသနေပါတယ်။ + +### ဥပမာ ၃: ဗီဒီယိုဂိမ်းများရှိ AI Non-Playable Character (NPC) + +LLM များဖြင့် စွမ်းဆောင်ထားသော AI Agent များသည် Non-Playable Character (NPC) များကို ပိုမိုပြောင်းလဲနိုင်သော (Dynamic) နှင့် ခန့်မှန်းရခက်သော ပုံစံများ ဖြစ်လာစေနိုင်ပါတယ်။ + +တင်းကျပ်သော အပြုအမူ ပုံစံများကို လိုက်နာမည့်အစား၊ ၎င်းတို့သည် **အခြေအနေအရ တုံ့ပြန်နိုင်ခြင်း၊ ကစားသမား၏ ထိတွေ့ဆက်ဆံမှုများအပေါ် လိုက်လျောညီထွေဖြစ်အောင် ပြုလုပ်နိုင်ခြင်း** နှင့် ပိုမိုနက်နဲသော စကားပြောဆိုမှုများကို ဖန်တီးနိုင်ခြင်းတို့ ရှိပါတယ်။ ဤပြောင်းလွယ်ပြင်လွယ်မှုက ကစားသမား၏ လုပ်ဆောင်ချက်များနှင့်အတူ တိုးတက်ပြောင်းလဲလာသော ပိုမိုအသက်ဝင်ပြီး စိတ်ဝင်စားစရာကောင်းသည့် ဇာတ်ကောင်များကို ဖန်တီးပေးပါတယ်။ + +--- + +အချုပ်အားဖြင့်ဆိုရသော်၊ Agent ဆိုတာဟာ AI Model (အများအားဖြင့် LLM) ကို ၎င်း၏ Core Reasoning Engine အဖြစ် အသုံးပြုပြီး အောက်ပါတို့ကို လုပ်ဆောင်သော စနစ်တစ်ခု ဖြစ်ပါတယ်။ + +* **လူ့ဘာသာစကားကို နားလည်ခြင်း:** လူသားတို့၏ ညွှန်ကြားချက်များကို အဓိပ္ပာယ်ရှိရှိ အနက်ဖွင့်ဆိုပြီး တုံ့ပြန်ခြင်း။ +* **ဆင်ခြင်သုံးသပ်ခြင်းနှင့် စီမံကိန်းရေးဆွဲခြင်း:** အချက်အလက်များကို ခွဲခြမ်းစိတ်ဖြာခြင်း၊ ဆုံးဖြတ်ချက်များ ချမှတ်ခြင်းနှင့် ပြဿနာများကို ဖြေရှင်းရန် နည်းဗျူဟာများ ချမှတ်ခြင်း။ +* **ပတ်ဝန်းကျင်နှင့် ထိတွေ့ဆက်ဆံခြင်း:** အချက်အလက်များ စုဆောင်းခြင်း၊ လုပ်ဆောင်ချက်များ လုပ်ဆောင်ခြင်းနှင့် ထိုလုပ်ဆောင်ချက်များ၏ ရလဒ်များကို စောင့်ကြည့်ခြင်း။ + +Agent ဆိုတာ ဘာလဲဆိုတာကို ခိုင်မာစွာ နားလည်သွားပြီဆိုတော့၊ အခုဆိုရင် သင်၏ နားလည်မှုကို ခိုင်မာစေဖို့အတွက် အတိုချုပ် Quiz လေးတစ်ခုကို ဖြေဆိုနိုင်ပါတယ်။ ပြီးနောက်၊ ကျွန်တော်တို့ Agent ရဲ့ "ဦးနှောက်" ဖြစ်တဲ့ [LLM များ](what-are-llms) အကြောင်းကို ဆက်လက်လေ့လာသွားပါမယ်။ \ No newline at end of file diff --git a/units/my/unit1/what-are-llms.mdx b/units/my/unit1/what-are-llms.mdx new file mode 100644 index 00000000..1e896936 --- /dev/null +++ b/units/my/unit1/what-are-llms.mdx @@ -0,0 +1,183 @@ +# LLM တွေဆိုတာက ဘာလဲ? (What are LLMs?) + +Unit 1 planning + +အရင်အပိုင်းမှာ Agent တစ်ခုစီတိုင်းမှာ **AI Model တစ်ခုက အဓိက အစိတ်အပိုင်းအဖြစ် ပါဝင်ရမယ်** ဆိုတာကို ကျွန်တော်တို့ လေ့လာခဲ့ပြီးပါပြီ။ ဒီရည်ရွယ်ချက်အတွက် LLM (Large Language Model) တွေဟာ အသုံးအများဆုံး AI Model အမျိုးအစား ဖြစ်ပါတယ်။ + +အခု ဒီအပိုင်းမှာတော့ LLM တွေဆိုတာ ဘာလဲ၊ ပြီးတော့ သူတို့က Agent တွေကို ဘယ်လို စွမ်းအားဖြည့်ပေးသလဲဆိုတာကို လေ့လာသွားပါမယ်။ + +ဒီအပိုင်းက LLM တွေရဲ့ နည်းပညာဆိုင်ရာ ရှင်းလင်းချက်ကို အကျဉ်းချုပ် ဖော်ပြပေးထားပါတယ်။ ပိုပြီး နက်နက်နဲနဲ လေ့လာချင်တယ်ဆိုရင်တော့ ကျွန်တော်တို့ရဲ့ [အခမဲ့ သဘာဝ ဘာသာစကား စီမံဆောင်ရွက်ခြင်း (Natural Language Processing) Course](https://huggingface.co/learn/nlp-course/chapter1/1) ကို ကြည့်ရှုနိုင်ပါတယ်။ + +## Large Language Model ဆိုတာ ဘာလဲ? + +LLM ဆိုတာဟာ **လူသားတို့ရဲ့ ဘာသာစကားကို နားလည်ပြီး ဖန်တီးထုတ်လုပ်ရာမှာ ထူးချွန်တဲ့** AI Model အမျိုးအစားတစ်ခု ဖြစ်ပါတယ်။ သူတို့ကို စာသား ဒေတာအမြောက်အမြားနဲ့ လေ့ကျင့်ပေးထားတဲ့အတွက် ဘာသာစကားရဲ့ ပုံစံများ၊ ဖွဲ့စည်းပုံနဲ့ အသေးစိတ် အနုစိတ် အဓိပ္ပာယ်တွေကိုပါ သင်ယူနိုင်ပါတယ်။ ဒီ Model တွေဟာ များသောအားဖြင့် **သန်းပေါင်းများစွာသော ပါရာမီတာများ (Parameters)** နဲ့ ဖွဲ့စည်းထားပါတယ်။ + +ယနေ့ခေတ် LLM အများစုဟာ **Transformer Architecture** ပေါ်မှာ တည်ဆောက်ထားတာ ဖြစ်ပါတယ်။ Transformer ဆိုတာကတော့ ၂၀၁၈ ခုနှစ်မှာ Google က BERT ကို ထုတ်ပြန်ပြီးနောက်ပိုင်း အလွန်စိတ်ဝင်စားမှု ရရှိလာခဲ့တဲ့ "Attention" Algorithm ကို အခြေခံထားတဲ့ Deep Learning Architecture တစ်ခုပဲ ဖြစ်ပါတယ်။ + +
+Transformer +
မူရင်း Transformer Architecture မှာ ဘယ်ဘက်မှာ Encoder နဲ့ ညာဘက်မှာ Decoder ပါဝင်ပါတယ်။ +
+
+ +Transformer တွေမှာ အဓိကအားဖြင့် (၃) မျိုး ရှိပါတယ်။ + +**၁။ Encoder များ (Encoders)** +Encoder-based Transformer တစ်ခုဟာ စာသား (သို့မဟုတ် အခြားဒေတာ) ကို ထည့်သွင်းမှုအဖြစ် ယူပြီး၊ ထိုစာသားရဲ့ **သိပ်သည်းသော ကိုယ်စားပြုမှု (Dense Representation)** သို့မဟုတ် **Embeddings** ကို ထုတ်ပေးပါတယ်။ + +* **ဥပမာ:** Google မှ BERT +* **အသုံးချ ကိစ္စရပ်များ:** စာသား အမျိုးအစားခွဲခြားခြင်း (Text Classification)၊ အဓိပ္ပာယ်ရှာဖွေခြင်း (Semantic Search)၊ အမည်ပါ အရာဝတ္ထု ခွဲခြားသိရှိခြင်း (Named Entity Recognition) +* **ပုံမှန် အရွယ်အစား:** သန်းပေါင်းများစွာသော ပါရာမီတာများ + +**၂။ Decoder များ (Decoders)** +Decoder-based Transformer တစ်ခုဟာ **တစ်ကြိမ်လျှင် Token တစ်ခုနှုန်းဖြင့်** စာသား အစီအစဉ်တစ်ခုကို ပြီးမြောက်စေရန် **Token အသစ်များ ထုတ်ပေးခြင်း** ကို အဓိကထား လုပ်ဆောင်ပါတယ်။ + +* **ဥပမာ:** Meta မှ Llama +* **အသုံးချ ကိစ္စရပ်များ:** စာသား ဖန်တီးထုတ်လုပ်ခြင်း၊ Chatbot များ၊ Code ဖန်တီးခြင်း +* **ပုံမှန် အရွယ်အစား:** ဘီလီယံပေါင်းများစွာသော ပါရာမီတာများ (US စနစ်အရ $10^9$) + +**၃။ Seq2Seq (Encoder–Decoder)** +Sequence-to-sequence Transformer တစ်ခုဟာ Encoder နဲ့ Decoder ကို **ပေါင်းစပ်ထားတာ** ဖြစ်ပါတယ်။ Encoder က ထည့်သွင်းစာသားကို Context ကိုယ်စားပြုမှုအဖြစ် စီမံဆောင်ရွက်ပြီးနောက်၊ Decoder က ထွက်ရှိလာမယ့် စာသား အစီအစဉ်ကို ဖန်တီးထုတ်ပေးပါတယ်။ + +* **ဥပမာ:** T5, BART +* **အသုံးချ ကိစ္စရပ်များ:** ဘာသာပြန်ဆိုခြင်း၊ အနှစ်ချုပ်ခြင်း၊ စာသားကို ပုံစံပြောင်းလဲခြင်း (Paraphrasing) +* **ပုံမှန် အရွယ်အစား:** သန်းပေါင်းများစွာသော ပါရာမီတာများ + +Large Language Model တွေဟာ ပုံစံအမျိုးမျိုးနဲ့ လာနိုင်ပေမယ့်၊ LLM တွေဟာ များသောအားဖြင့် **ဘီလီယံပေါင်းများစွာသော ပါရာမီတာများပါဝင်တဲ့ Decoder-based Model များ** ဖြစ်ကြပါတယ်။ လူသိများတဲ့ LLM အချို့ကို အောက်ပါဇယားမှာ ဖော်ပြထားပါတယ်။ + +| **Model** | **Provider** | +| :--- | :--- | +| **Deepseek-R1** | DeepSeek | +| **GPT4** | OpenAI | +| **Llama 3** | Meta (Facebook AI Research) | +| **SmolLM2** | Hugging Face | +| **Gemma** | Google | +| **Mistral** | Mistral | + +LLM တစ်ခုရဲ့ အခြေခံ သဘောတရားက ရိုးရှင်းပေမယ့် အလွန်ထိရောက်ပါတယ်။ ၎င်းရဲ့ ရည်ရွယ်ချက်က **အရင် Token များရဲ့ အစီအစဉ်ကို ကြည့်ပြီး နောက်ထပ် Token ကို ခန့်မှန်းဖို့** ပဲ ဖြစ်ပါတယ်။ **"Token"** ဆိုတာက LLM အလုပ်လုပ်တဲ့ အချက်အလက်ယူနစ်ပဲ ဖြစ်ပါတယ်။ Token ကို "စကားလုံး" လို့ ယူဆနိုင်ပေမယ့်၊ စွမ်းဆောင်ရည် ပိုမိုကောင်းမွန်စေဖို့အတွက် LLM တွေက စကားလုံးအပြည့်အစုံကို အသုံးမပြုပါဘူး။ + +ဥပမာအားဖြင့်၊ အင်္ဂလိပ်ဘာသာမှာ စကားလုံး ၆၀၀,၀၀၀ ခန့် ရှိတယ်လို့ ခန့်မှန်းရပေမယ့်၊ LLM တစ်ခုမှာ Token ၃၂,၀၀၀ ခန့်သာ ပါဝင်တဲ့ ဝေါဟာရစာရင်း (Vocabulary) ရှိနိုင်ပါတယ်။ (Llama 2 မှာ ဒီလိုပါပဲ)။ Tokenization ဟာ များသောအားဖြင့် စကားလုံးရဲ့ အစိတ်အပိုင်း (Sub-word units) တွေပေါ်မှာ အလုပ်လုပ်ပြီး၊ ၎င်းတို့ကို ပေါင်းစပ်နိုင်ပါတယ်။ + +ဥပမာအနေနဲ့၊ "interest" နဲ့ "ing" ဆိုတဲ့ Token တွေကို ပေါင်းစပ်ပြီး "interesting" ဆိုတဲ့ စကားလုံးကို ဘယ်လို ဖန်တီးနိုင်သလဲဆိုတာကို စဉ်းစားကြည့်ပါ။ + +အောက်ပါ Interactive Playground မှာ မတူညီတဲ့ Tokenizer တွေကို စမ်းသပ်ကြည့်နိုင်ပါတယ်။ + + + +LLM တစ်ခုစီတိုင်းမှာ Model အတွက် သီးသန့်ဖြစ်တဲ့ **Special Tokens (အထူး Token များ)** အချို့ ရှိပါတယ်။ LLM ဟာ ၎င်းတို့ရဲ့ ထုတ်လုပ်မှုမှာ စနစ်တကျ ဖွဲ့စည်းထားတဲ့ အစိတ်အပိုင်းတွေကို စတင်ဖို့နဲ့ အဆုံးသတ်ဖို့အတွက် ဒီ Token တွေကို အသုံးပြုပါတယ်။ ဥပမာအားဖြင့်၊ စာသား အစီအစဉ်တစ်ခု၊ Message တစ်ခု သို့မဟုတ် တုံ့ပြန်မှုတစ်ခုရဲ့ အစ သို့မဟုတ် အဆုံးကို ဖော်ပြဖို့အတွက် ဖြစ်ပါတယ်။ ဒါ့အပြင်၊ ကျွန်တော်တို့ Model ကို ပေးပို့တဲ့ Input Prompts တွေကိုလည်း Special Tokens တွေနဲ့ ဖွဲ့စည်းထားပါတယ်။ အဲဒီထဲမှာ အရေးအကြီးဆုံးကတော့ **End of Sequence Token (EOS)** ပဲ ဖြစ်ပါတယ်။ + +Special Tokens တွေရဲ့ ပုံစံတွေဟာ Model Provider တွေအလိုက် အလွန်ကွဲပြားပါတယ်။ + +အောက်ပါဇယားက Special Tokens တွေရဲ့ ကွဲပြားမှုကို ဖော်ပြထားပါတယ်။ + +| **Model** | **Provider** | **EOS Token** | **လုပ်ဆောင်နိုင်စွမ်း** | +| :--- | :--- | :--- | :--- | +| **GPT4** | OpenAI | `<|endoftext|>` | Message စာသား၏ အဆုံး | +| **Llama 3** | Meta (Facebook AI Research) | `<|eot_id|>` | Sequence ၏ အဆုံး | +| **Deepseek-R1** | DeepSeek | `<|end_of_sentence|>` | Message စာသား၏ အဆုံး | +| **SmolLM2** | Hugging Face | `<|im_end|>` | ညွှန်ကြားချက် သို့မဟုတ် Message ၏ အဆုံး | +| **Gemma** | Google | `<end_of_turn>` | စကားပြောဆိုမှု အလှည့်၏ အဆုံး | + +> [!TIP] +> ဒီ Special Tokens တွေကို သင်တို့ မှတ်မိနေဖို့ ကျွန်တော်တို့ မျှော်လင့်မထားပါဘူး။ ဒါပေမယ့် သူတို့ရဲ့ ကွဲပြားမှုနဲ့ LLM ရဲ့ စာသား ဖန်တီးထုတ်လုပ်မှုမှာ သူတို့ရဲ့ အခန်းကဏ္ဍကို နားလည်ထားဖို့က အရေးကြီးပါတယ်။ Special Tokens တွေအကြောင်း ပိုမိုသိရှိလိုပါက Model ရဲ့ Hub Repository မှာရှိတဲ့ Configuration ကို ကြည့်ရှုနိုင်ပါတယ်။ ဥပမာအားဖြင့်၊ SmolLM2 Model ရဲ့ Special Tokens တွေကို [tokenizer_config.json](https://huggingface.co/HuggingFaceTB/SmolLM2-135M-Instruct/blob/main/tokenizer_config.json) မှာ ရှာတွေ့နိုင်ပါတယ်။ + +## နောက်ထပ် Token ခန့်မှန်းခြင်းကို နားလည်ခြင်း (Understanding next token prediction) + +LLM တွေကို **Autoregressive** လို့ ခေါ်ဆိုကြပါတယ်။ ဆိုလိုတာက **တစ်ကြိမ် ထုတ်ပေးလိုက်တဲ့ ရလဒ်ဟာ နောက်တစ်ကြိမ်အတွက် ထည့်သွင်းမှု (Input) ဖြစ်လာတယ်** ဆိုတဲ့ သဘောပါပဲ။ ဒီ Loop ဟာ Model က နောက်ထပ် Token ကို EOS Token ဖြစ်မယ်လို့ ခန့်မှန်းတဲ့အထိ ဆက်လက်ဖြစ်ပေါ်နေပြီး၊ အဲဒီအခါမှာ Model က ရပ်တန့်နိုင်ပါတယ်။ + +Visual Gif of autoregressive decoding + +တစ်နည်းအားဖြင့်၊ LLM ဟာ EOS ကို မရောက်မချင်း စာသားကို Decode လုပ်နေပါမယ်။ ဒါပေမယ့် Decoding Loop တစ်ခုအတွင်းမှာ ဘာတွေ ဖြစ်ပျက်နေသလဲ? + +Agent တွေကို လေ့လာတဲ့ ရည်ရွယ်ချက်အတွက် ဒီလုပ်ငန်းစဉ်တစ်ခုလုံးဟာ နည်းပညာအရ အနည်းငယ် ရှုပ်ထွေးနိုင်ပေမယ့်၊ အကျဉ်းချုပ် ခြုံငုံသုံးသပ်ချက်ကို ဖော်ပြပေးပါမယ်။ + +* Input စာသားကို **Tokenization** လုပ်ပြီးတာနဲ့၊ Model ဟာ Input Sequence ထဲက Token တစ်ခုစီရဲ့ အဓိပ္ပာယ်နဲ့ နေရာ အချက်အလက်တွေကို ဖမ်းယူထားတဲ့ Sequence ရဲ့ ကိုယ်စားပြုမှုကို တွက်ချက်ပါတယ်။ +* ဒီ ကိုယ်စားပြုမှုဟာ Model ထဲကို ဝင်ရောက်သွားပြီး၊ Model က ၎င်းရဲ့ ဝေါဟာရစာရင်းထဲက Token တစ်ခုစီဟာ Sequence ရဲ့ နောက်ထပ် Token ဖြစ်လာနိုင်ခြေကို အဆင့်သတ်မှတ်တဲ့ Scores တွေကို ထုတ်ပေးပါတယ်။ + +Visual Gif of decoding + +ဒီ Scores တွေကို အခြေခံပြီး၊ စာကြောင်းကို ပြီးမြောက်စေဖို့အတွက် Token တွေကို ရွေးချယ်ဖို့ နည်းဗျူဟာ အမျိုးမျိုး ရှိပါတယ်။ + +* အလွယ်ဆုံး Decoding နည်းဗျူဟာကတော့ အမြဲတမ်း Score အများဆုံးရတဲ့ Token ကို ယူခြင်းပဲ ဖြစ်ပါတယ်။ + +အောက်ပါ Space မှာ SmolLM2 နဲ့ Decoding လုပ်ငန်းစဉ်ကို သင်ကိုယ်တိုင် စမ်းသပ်ကြည့်နိုင်ပါတယ်။ (ဒီ Model အတွက် EOS Token က **`<|im_end|>`** ဖြစ်တယ်ဆိုတာကို သတိရပါ)။ + + + +* ဒါပေမယ့် ပိုမို အဆင့်မြင့်တဲ့ Decoding နည်းဗျူဟာတွေလည်း ရှိပါသေးတယ်။ ဥပမာအားဖြင့်၊ *Beam Search* ဟာ စုစုပေါင်း Score အများဆုံးရတဲ့ Sequence ကို ရှာဖွေဖို့အတွက် ဖြစ်နိုင်ခြေရှိတဲ့ Candidate Sequence များစွာကို စူးစမ်းရှာဖွေပါတယ်။ (တစ်ဦးချင်း Token အချို့က Score နည်းနေရင်တောင်မှ ဖြစ်ပါတယ်)။ + + + +Decoding အကြောင်း ပိုမိုသိရှိလိုပါက [NLP Course](https://huggingface.co/learn/nlp-course) ကို ကြည့်ရှုနိုင်ပါတယ်။ + +## Attention သည် အရာအားလုံးဖြစ်သည် (Attention is all you need) + +Transformer Architecture ရဲ့ အဓိက အစိတ်အပိုင်းတစ်ခုကတော့ **Attention** ပဲ ဖြစ်ပါတယ်။ နောက်ထပ် စကားလုံးကို ခန့်မှန်းတဲ့အခါ၊ စာကြောင်းတစ်ခုထဲက စကားလုံးတိုင်းဟာ အရေးပါမှု တူညီခြင်း မရှိပါဘူး။ ဥပမာ *"The capital of France is ..."* ဆိုတဲ့ စာကြောင်းမှာ "France" နဲ့ "capital" လို စကားလုံးတွေက အဓိပ္ပာယ်အများဆုံးကို သယ်ဆောင်ထားပါတယ်။ + +Visual Gif of Attention +နောက်ထပ် Token ကို ခန့်မှန်းဖို့အတွက် အရေးအကြီးဆုံး စကားလုံးတွေကို ဖော်ထုတ်တဲ့ ဒီလုပ်ငန်းစဉ်ဟာ အလွန်ထိရောက်ကြောင်း သက်သေပြခဲ့ပြီး ဖြစ်ပါတယ်။ + +LLM တွေရဲ့ အခြေခံ သဘောတရား (နောက်ထပ် Token ကို ခန့်မှန်းခြင်း) ဟာ GPT-2 ကတည်းက မပြောင်းလဲဘဲ ရှိနေပေမယ့်၊ Neural Network တွေကို ချဲ့ထွင်ခြင်းနဲ့ Attention Mechanism ကို ပိုမိုရှည်လျားတဲ့ Sequence တွေအတွက် အလုပ်လုပ်အောင် လုပ်ဆောင်ခြင်းမှာ သိသာထင်ရှားတဲ့ တိုးတက်မှုတွေ ရှိခဲ့ပါတယ်။ + +LLM တွေနဲ့ ထိတွေ့ဆက်ဆံဖူးတယ်ဆိုရင်၊ LLM က စီမံဆောင်ရွက်နိုင်တဲ့ အများဆုံး Token အရေအတွက်နဲ့ ၎င်းရဲ့ အများဆုံး *Attention Span* ကို ရည်ညွှန်းတဲ့ *Context Length* ဆိုတဲ့ ဝေါဟာရနဲ့ ရင်းနှီးပြီးသား ဖြစ်ပါလိမ့်မယ်။ + +## LLM ကို Prompt ပေးခြင်းသည် အရေးကြီးသည် (Prompting the LLM is important) + +LLM ရဲ့ တစ်ခုတည်းသော အလုပ်က Input Token တိုင်းကို ကြည့်ပြီး နောက်ထပ် Token ကို ခန့်မှန်းဖို့၊ ပြီးတော့ ဘယ် Token တွေက "အရေးကြီးတယ်" ဆိုတာကို ရွေးချယ်ဖို့ ဖြစ်တယ်ဆိုတာကို ထည့်သွင်းစဉ်းစားတဲ့အခါ၊ သင်ပေးပို့တဲ့ Input Sequence ရဲ့ စကားလုံး အသုံးအနှုန်းဟာ အလွန်အရေးကြီးပါတယ်။ + +LLM ကို သင်ပေးပို့တဲ့ Input Sequence ကို **Prompt** လို့ ခေါ်ပါတယ်။ Prompt ကို ဂရုတစိုက် ဒီဇိုင်းဆွဲခြင်းက **LLM ရဲ့ ထုတ်လုပ်မှုကို လိုချင်တဲ့ ရလဒ်ဆီသို့ လမ်းညွှန်ပေးဖို့** ပိုမိုလွယ်ကူစေပါတယ်။ + +## LLM တွေကို ဘယ်လို လေ့ကျင့်ပေးသလဲ? + +LLM တွေကို စာသား ဒေတာအမြောက်အမြားနဲ့ လေ့ကျင့်ပေးထားပါတယ်။ ၎င်းတို့ဟာ **Self-supervised** သို့မဟုတ် **Masked Language Modeling** ရည်ရွယ်ချက်မှတစ်ဆင့် Sequence တစ်ခုရဲ့ နောက်ထပ် စကားလုံးကို ခန့်မှန်းဖို့ သင်ယူကြပါတယ်။ + +ဒီ Unsupervised Learning (ဆရာမပါဘဲ သင်ယူခြင်း) ကနေ Model ဟာ ဘာသာစကားရဲ့ ဖွဲ့စည်းပုံနဲ့ **စာသားထဲက အခြေခံ ပုံစံများကို သင်ယူပြီး၊ Model ကို အသစ်သော ဒေတာများ (Unseen Data) ကိုပါ အထွေထွေပြုနိုင်စေပါတယ် (Generalize)**။ + +ဒီ ကနဦး *Pre-training* ပြီးနောက်၊ LLM တွေကို သီးခြားလုပ်ငန်းများ လုပ်ဆောင်နိုင်ဖို့ Supervised Learning (ဆရာပါ သင်ယူခြင်း) ရည်ရွယ်ချက်နဲ့ **Fine-tuning** လုပ်နိုင်ပါတယ်။ ဥပမာအားဖြင့်၊ အချို့ Model တွေကို စကားပြောဆိုမှု ပုံစံများ သို့မဟုတ် Tool အသုံးပြုမှုအတွက် လေ့ကျင့်ပေးထားပြီး၊ အချို့ကတော့ အမျိုးအစားခွဲခြားခြင်း သို့မဟုတ် Code ဖန်တီးခြင်းကို အာရုံစိုက်ပါတယ်။ + +## LLM တွေကို ဘယ်လို အသုံးပြုနိုင်မလဲ? + +သင့်မှာ အဓိက ရွေးချယ်စရာ (၂) ခု ရှိပါတယ်။ + +၁။ **Local မှာ Run ခြင်း** (သင့်မှာ လုံလောက်တဲ့ Hardware ရှိရင်)။ + +၂။ **Cloud/API ကို အသုံးပြုခြင်း** (ဥပမာ - Hugging Face Serverless Inference API မှတစ်ဆင့်)။ + +ဒီ Course တစ်လျှောက်လုံးမှာတော့ ကျွန်တော်တို့ Hugging Face Hub ပေါ်က API များမှတစ်ဆင့် Model များကို အဓိက အသုံးပြုသွားပါမယ်။ နောက်ပိုင်းမှာတော့ ဒီ Model တွေကို သင့်ရဲ့ Hardware မှာ Local အနေနဲ့ ဘယ်လို Run ရမလဲဆိုတာကို လေ့လာသွားပါမယ်။ + +## LLM တွေကို AI Agent တွေမှာ ဘယ်လို အသုံးပြုသလဲ? + +LLM တွေဟာ AI Agent တွေရဲ့ အဓိက အစိတ်အပိုင်းတစ်ခုဖြစ်ပြီး၊ **လူသားဘာသာစကားကို နားလည်ပြီး ဖန်တီးထုတ်လုပ်ဖို့အတွက် အခြေခံအုတ်မြစ်ကို ပံ့ပိုးပေးပါတယ်**။ + +၎င်းတို့ဟာ အသုံးပြုသူရဲ့ ညွှန်ကြားချက်တွေကို နားလည်နိုင်ခြင်း၊ စကားပြောဆိုမှုရဲ့ Context ကို ထိန်းသိမ်းထားနိုင်ခြင်း၊ Plan တစ်ခုကို သတ်မှတ်နိုင်ခြင်းနဲ့ ဘယ် Tool တွေကို အသုံးပြုရမယ်ဆိုတာကို ဆုံးဖြတ်နိုင်ခြင်းတို့ လုပ်ဆောင်နိုင်ပါတယ်။ + +ဒီအဆင့်တွေကို ဒီ Unit မှာ ပိုမိုအသေးစိတ် လေ့လာသွားပါမယ်။ ဒါပေမယ့် အခုလောလောဆယ် သင်နားလည်ထားဖို့ လိုတာကတော့ LLM ဟာ **Agent ရဲ့ ဦးနှောက်** ဖြစ်တယ်ဆိုတာပါပဲ။ + +--- + +ဒါတွေက အချက်အလက် အများကြီးပါပဲ! ကျွန်တော်တို့ LLM တွေဆိုတာ ဘာလဲ၊ ဘယ်လို အလုပ်လုပ်သလဲ၊ ပြီးတော့ AI Agent တွေကို စွမ်းအားဖြည့်ပေးရာမှာ သူတို့ရဲ့ အခန်းကဏ္ဍကို အခြေခံအားဖြင့် လေ့လာခဲ့ပြီးပါပြီ။ + +ဘာသာစကား Model တွေနဲ့ သဘာဝ ဘာသာစကား စီမံဆောင်ရွက်ခြင်း (NLP) ရဲ့ စိတ်ဝင်စားစရာ ကမ္ဘာထဲကို ပိုမိုနက်နက်နဲနဲ ဝင်ရောက်ချင်တယ်ဆိုရင်တော့ ကျွန်တော်တို့ရဲ့ [အခမဲ့ NLP Course](https://huggingface.co/learn/nlp-course/chapter1/1) ကို ကြည့်ရှုဖို့ မတွန့်ဆုတ်ပါနဲ့။ + +LLM တွေ ဘယ်လို အလုပ်လုပ်တယ်ဆိုတာ နားလည်ပြီးတဲ့နောက်မှာ၊ **LLM တွေက သူတို့ရဲ့ ထုတ်လုပ်မှုတွေကို စကားပြောဆိုမှု ပုံစံ (Conversational Context) မှာ ဘယ်လို ဖွဲ့စည်းသလဲ** ဆိုတာကို ကြည့်ဖို့ အချိန်တန်ပါပြီ။ + +[ဒီ Notebook](https://huggingface.co/agents-course/notebooks/blob/main/unit1/dummy_agent_library.ipynb) ကို Run ဖို့အတွက်၊ [https://hf.co/settings/tokens](https://hf.co/settings/tokens) ကနေ ရယူနိုင်တဲ့ **Hugging Face Token တစ်ခု လိုအပ်ပါတယ်**။ + +Jupyter Notebook တွေကို ဘယ်လို Run ရမလဲဆိုတာကို ပိုမိုသိရှိလိုပါက [Hugging Face Hub ပေါ်ရှိ Jupyter Notebooks](https://huggingface.co/docs/hub/notebooks) ကို ကြည့်ရှုနိုင်ပါတယ်။ + +ဒါ့အပြင် [Meta Llama Models](https://huggingface.co/meta-llama/Llama-3.2-3B-Instruct) ကို အသုံးပြုခွင့် တောင်းခံဖို့လည်း လိုအပ်ပါတယ်။ \ No newline at end of file diff --git a/units/my/unit2/introduction.mdx b/units/my/unit2/introduction.mdx new file mode 100644 index 00000000..7547bc32 --- /dev/null +++ b/units/my/unit2/introduction.mdx @@ -0,0 +1,42 @@ +# Agentic Frameworks များ မိတ်ဆက် + +Thumbnail + +ဒီဒုတိယအခန်းကို ကြိုဆိုပါတယ်။ ဒီအခန်းမှာတော့ စွမ်းအားမြင့် Agentic Application တွေကို တည်ဆောက်ဖို့အတွက် အသုံးပြုနိုင်တဲ့ **Agentic Framework အမျိုးမျိုး** ကို လေ့လာသွားကြမှာ ဖြစ်ပါတယ်။ + +ကျွန်တော်တို့ ဘာတွေ လေ့လာသွားမလဲဆိုရင်- + +* အခန်း ၂.၁ မှာ [smolagents](https://huggingface.co/docs/smolagents/en/index) ကို လေ့လာပါမယ်။ +* အခန်း ၂.၂ မှာ [LlamaIndex](https://www.llamaindex.ai/) ကို လေ့လာပါမယ်။ +* အခန်း ၂.၃ မှာ [LangGraph](https://www.langchain.com/langgraph) ကို လေ့လာပါမယ်။ + +စတင်လေ့လာလိုက်ရအောင်! 🕵 + +## Agentic Framework ကို ဘယ်အချိန်မှာ အသုံးပြုသင့်သလဲ + +LLM (Large Language Model) များကို အခြေခံပြီး Application တစ်ခု တည်ဆောက်တဲ့အခါတိုင်း **Agentic Framework တစ်ခု အမြဲတမ်း လိုအပ်တာတော့ မဟုတ်ပါဘူး**။ Framework တွေက သတ်မှတ်ထားတဲ့ Task တစ်ခုကို ထိထိရောက်ရောက် ဖြေရှင်းနိုင်ဖို့အတွက် လုပ်ငန်းအဆင့်ဆင့် (Workflow) မှာ ပြောင်းလွယ်ပြင်လွယ်ရှိအောင် ပံ့ပိုးပေးပါတယ်။ ဒါပေမယ့် အမြဲတမ်းတော့ မလိုအပ်ပါဘူး။ + +တစ်ခါတလေမှာ၊ အသုံးပြုသူရဲ့ တောင်းဆိုချက်တွေကို ဖြည့်ဆည်းပေးဖို့အတွက် **ကြိုတင်သတ်မှတ်ထားတဲ့ လုပ်ငန်းအဆင့်ဆင့် (Predefined Workflows)** တွေကပဲ လုံလောက်နေနိုင်ပါတယ်။ ဒီလိုအခြေအနေမျိုးမှာ Agentic Framework ကို တကယ်တမ်း အသုံးပြုဖို့ မလိုအပ်ပါဘူး။ ဥပမာအားဖြင့်၊ Agent တစ်ခု တည်ဆောက်မယ့် နည်းလမ်းက ရိုးရှင်းပြီး Prompt တွေရဲ့ ကွင်းဆက် (Chain of Prompts) လိုမျိုးပဲဆိုရင်၊ ရိုးရိုး Code ကိုပဲ အသုံးပြုတာက လုံလောက်ပါတယ်။ ဒီလိုလုပ်ဆောင်ခြင်းရဲ့ အားသာချက်ကတော့ Developer အနေနဲ့ **ကြားခံ Abstraction တွေ မပါဘဲ သူတို့ရဲ့ System ကို အပြည့်အဝ ထိန်းချုပ်နိုင်ပြီး နားလည်နိုင်ခြင်း** ပဲ ဖြစ်ပါတယ်။ + +ဒါပေမယ့်၊ လုပ်ငန်းအဆင့်ဆင့် (Workflow) က ပိုပြီး ရှုပ်ထွေးလာတဲ့အခါ၊ ဥပမာအားဖြင့် LLM ကို Function တွေ ခေါ်ဆိုခွင့်ပေးတာမျိုး၊ ဒါမှမဟုတ် Agent အများအပြားကို အသုံးပြုတာမျိုးတွေ လုပ်ဆောင်လာတဲ့အခါမှာတော့ ဒီလို Abstraction တွေ (Framework တွေ) ဟာ အလွန်အသုံးဝင်လာပါတယ်။ + +ဒီအချက်တွေကို ထည့်သွင်းစဉ်းစားတဲ့အခါ၊ Agentic System တစ်ခုအတွက် လိုအပ်တဲ့ အင်္ဂါရပ်အချို့ကို ကျွန်တော်တို့ ချက်ချင်း ဖော်ထုတ်နိုင်ပါတယ်။ + +* System ကို စွမ်းအားပေးမယ့် *LLM Engine* တစ်ခု။ (ဥပမာ - OpenAI, Gemini, Llama စသည်တို့) +* Agent က အသုံးပြုနိုင်မယ့် *Tools များ စာရင်း*။ (ဥပမာ - Web Search Tool, Calculator Tool) +* LLM ရဲ့ ထွက်ရှိရလဒ်ကနေ Tool ခေါ်ဆိုမှုတွေကို ထုတ်ယူဖို့အတွက် *Parser* တစ်ခု။ (ဥပမာ - JSON Parser) +* Parser နဲ့ ကိုက်ညီအောင် ချိန်ညှိထားတဲ့ *System Prompt* တစ်ခု။ (Agent ကို ဘယ်လိုပုံစံနဲ့ အဖြေထုတ်ရမယ်ဆိုတာ ညွှန်ကြားတဲ့ Prompt) +* Agent ရဲ့ ယခင် ဆွေးနွေးမှုမှတ်တမ်းတွေကို မှတ်သားထားဖို့ *Memory System* တစ်ခု။ +* LLM ရဲ့ အမှားအယွင်းတွေကို ထိန်းချုပ်ဖို့အတွက် *Error Logging နှင့် Retry Mechanisms* များ။ + +ဒီအကြောင်းအရာတွေကို `smolagents`၊ `LlamaIndex` နဲ့ `LangGraph` အပါအဝင် Framework အမျိုးမျိုးမှာ ဘယ်လို ဖြေရှင်းထားသလဲဆိုတာကို ကျွန်တော်တို့ လေ့လာသွားပါမယ်။ + +## Agentic Frameworks အခန်းများ + +| Framework | ဖော်ပြချက် | အခန်း ရေးသားသူ | +| :--- | :--- | :--- | +| [smolagents](./smolagents/introduction) | Hugging Face မှ တီထွင်ထားသော Agent Framework။ | Sergio Paniego - [HF](https://huggingface.co/sergiopaniego) - [X](https://x.com/sergiopaniego) - [Linkedin](https://www.linkedin.com/in/sergio-paniego-blanco) | +| [Llama-Index](./llama-index/introduction) | Context-augmented AI Agent များကို ထုတ်လုပ်မှုအဆင့်အထိ ပို့ဆောင်ရန်အတွက် End-to-end Tooling များ။ | David Berenstein - [HF](https://huggingface.co/davidberenstein1957) - [X](https://x.com/davidberenstei) - [Linkedin](https://www.linkedin.com/in/davidberenstein) | +| [LangGraph](./langgraph/introduction) | Agent များ၏ အခြေအနေကို မှတ်သားထားပြီး စနစ်တကျ စီမံခန့်ခွဲနိုင်သော Agent များ။ | Joffrey THOMAS - [HF](https://huggingface.co/Jofthomas) - [X](https://x.com/Jthmas404) - [Linkedin](https://www.linkedin.com/in/joffrey-thomas) | + +စတင်လေ့လာကြပါစို့! \ No newline at end of file diff --git a/units/my/unit2/langgraph/building_blocks.mdx b/units/my/unit2/langgraph/building_blocks.mdx new file mode 100644 index 00000000..a6150c59 --- /dev/null +++ b/units/my/unit2/langgraph/building_blocks.mdx @@ -0,0 +1,132 @@ +## LangGraph ၏ အခြေခံ အစိတ်အပိုင်းများ (Building Blocks of LangGraph) + +LangGraph ကို အသုံးပြုပြီး Application များ တည်ဆောက်ဖို့အတွက်၊ ၎င်း၏ အဓိက အစိတ်အပိုင်းများကို နားလည်ထားဖို့ လိုအပ်ပါတယ်။ LangGraph Application တစ်ခုကို ဖွဲ့စည်းထားတဲ့ အခြေခံ အစိတ်အပိုင်းတွေကို လေ့လာကြည့်ရအောင်။ + +Building Blocks + +LangGraph ရှိ Application တစ်ခုသည် **စတင်ရာနေရာ (entrypoint)** မှ စတင်ပြီး၊ လုပ်ဆောင်မှုအပေါ် မူတည်၍ **အဆုံးသတ် (END)** သို့ မရောက်မချင်း Function တစ်ခုမှ အခြား Function တစ်ခုသို့ စီးဆင်းသွားနိုင်ပါတယ်။ + +Application + +### ၁။ State (အခြေအနေ) + +**State (အခြေအနေ)** သည် LangGraph ၏ ဗဟိုအယူအဆ ဖြစ်ပါတယ်။ ၎င်းသည် သင့် Application တစ်လျှောက်လုံး စီးဆင်းနေသော အချက်အလက်အားလုံးကို ကိုယ်စားပြုပါတယ်။ + +```python +from typing_extensions import TypedDict + +class State(TypedDict): + graph_state: str +``` + +**State သည် အသုံးပြုသူမှ သတ်မှတ်ရသော အရာဖြစ်ပါတယ်**။ ထို့ကြောင့်၊ ဆုံးဖြတ်ချက်ချမှတ်ခြင်း လုပ်ငန်းစဉ်အတွက် လိုအပ်သော ဒေတာအားလုံး ပါဝင်စေရန် Fields များကို ဂရုတစိုက် ဖန်တီးရပါမယ်။ + +> 💡 **အကြံပြုချက်:** သင့် Application သည် အဆင့်တစ်ခုနှင့်တစ်ခုကြားတွင် မည်သည့်အချက်အလက်များကို မှတ်တမ်းတင်ရန် လိုအပ်သလဲဆိုတာကို သေသေချာချာ စဉ်းစားပါ။ (ဥပမာ- လက်ရှိ စကားပြောဆိုမှု မှတ်တမ်း၊ ရရှိထားသော ဒေတာ၊ သို့မဟုတ် ယခင် Node မှ ထွက်လာသော ရလဒ်များ) + +### ၂။ Nodes (Node များ) + +**Nodes (Node များ)** ဆိုတာ Python Function တွေပဲ ဖြစ်ပါတယ်။ Node တစ်ခုစီက- + +* State ကို Input အဖြစ် ယူပါတယ်။ +* လုပ်ငန်းတစ်ခုခုကို လုပ်ဆောင်ပါတယ်။ +* State ကို ပြောင်းလဲမှုများ ပြန်လည်ပေးပို့ပါတယ်။ + +```python +def node_1(state): + print("---Node 1---") + return {"graph_state": state['graph_state'] +" I am"} + +def node_2(state): + print("---Node 2---") + return {"graph_state": state['graph_state'] +" happy!"} + +def node_3(state): + print("---Node 3---") + return {"graph_state": state['graph_state'] +" sad!"} +``` + +ဥပမာအားဖြင့်၊ Node များတွင် အောက်ပါတို့ ပါဝင်နိုင်ပါတယ်- + +* **LLM ခေါ်ဆိုမှုများ (LLM calls):** စာသားများ ထုတ်ပေးခြင်း သို့မဟုတ် ဆုံးဖြတ်ချက်များ ချမှတ်ခြင်း။ +* **Tool ခေါ်ဆိုမှုများ (Tool calls):** ပြင်ပ စနစ်များနှင့် ထိတွေ့ဆက်ဆံခြင်း (ဥပမာ- API ခေါ်ဆိုခြင်း)။ +* **အခြေအနေအရ ဆုံးဖြတ်သည့် Logic (Conditional logic):** နောက်ထပ် လုပ်ဆောင်ရမည့် အဆင့်ကို ဆုံးဖြတ်ခြင်း။ +* **လူသား၏ ပါဝင်မှု (Human intervention):** အသုံးပြုသူများထံမှ Input ရယူခြင်း။ + +> 💡 **သတင်းအချက်အလက်:** LangGraph မှ တိုက်ရိုက်ပါဝင်သော **START** နှင့် **END** ကဲ့သို့သော Node များသည် Workflow တစ်ခုလုံးအတွက် မရှိမဖြစ် လိုအပ်ပါတယ်။ + +### ၃။ Edges (ဆက်သွယ်မှုများ) + +**Edges (ဆက်သွယ်မှုများ)** သည် Node များကို ချိတ်ဆက်ပေးပြီး၊ သင့် Graph တစ်လျှောက် ဖြစ်နိုင်ခြေရှိသော လမ်းကြောင်းများကို သတ်မှတ်ပေးပါတယ်။ + +```python +import random +from typing import Literal + +def decide_mood(state) -> Literal["node_2", "node_3"]: + + # Often, we will use state to decide on the next node to visit + user_input = state['graph_state'] + + # Here, let's just do a 50 / 50 split between nodes 2, 3 + if random.random() < 0.5: + + # 50% of the time, we return Node 2 + return "node_2" + + # 50% of the time, we return Node 3 + return "node_3" +``` + +Edges များသည် အောက်ပါအတိုင်း ဖြစ်နိုင်ပါတယ်- + +* **တိုက်ရိုက် (Direct):** Node A မှ Node B သို့ အမြဲတမ်း သွားခြင်း။ +* **အခြေအနေအရ (Conditional):** လက်ရှိ State အပေါ် မူတည်၍ နောက်ထပ် Node ကို ရွေးချယ်ခြင်း။ (ဥပမာ- အပေါ်က `decide_mood` Function သည် State ကို စစ်ဆေးပြီး နောက်ထပ် Node ကို ရွေးချယ်ပေးပါတယ်) + +### ၄။ StateGraph (StateGraph) + +**StateGraph** သည် သင့် Agent ၏ Workflow တစ်ခုလုံးကို ထည့်သွင်းထားသော Container ဖြစ်ပါတယ်။ + +```python +from IPython.display import Image, display +from langgraph.graph import StateGraph, START, END + +# Build graph +builder = StateGraph(State) +builder.add_node("node_1", node_1) +builder.add_node("node_2", node_2) +builder.add_node("node_3", node_3) + +# Logic +builder.add_edge(START, "node_1") +builder.add_conditional_edges("node_1", decide_mood) +builder.add_edge("node_2", END) +builder.add_edge("node_3", END) + +# Add +graph = builder.compile() +``` + +၎င်းကို ပုံရိပ်ဖြင့် မြင်သာအောင် ပြသနိုင်ပါတယ်! + +```python +# View +display(Image(graph.get_graph().draw_mermaid_png())) +``` +Graph Visualization + +ဒါပေမယ့် အရေးအကြီးဆုံးကတော့ ၎င်းကို အောက်ပါအတိုင်း ခေါ်ဆို အသုံးပြုနိုင်ခြင်းပဲ ဖြစ်ပါတယ်။ + +```python +graph.invoke({"graph_state" : "Hi, this is Lance."}) +``` +output : +``` +---Node 1--- +---Node 3--- +{'graph_state': 'Hi, this is Lance. I am sad!'} +``` +(ဒီဥပမာမှာ `decide_mood` Function က ကျပန်း (Random) ရွေးချယ်မှုအရ Node 3 ကို ရွေးချယ်လိုက်တာကို တွေ့ရမှာပါ။) + +## နောက်ထပ် ဘာတွေ လေ့လာရမလဲ? + +နောက်အပိုင်းမှာတော့ ဒီအယူအဆတွေကို လက်တွေ့ကျင့်သုံးပြီး ကျွန်တော်တို့ရဲ့ ပထမဆုံး Graph ကို တည်ဆောက်သွားပါမယ်။ ဒီ Graph က Alfred ကို သင့်ရဲ့ E-mail တွေကို လက်ခံယူစေခြင်း၊ အမျိုးအစားခွဲခြားစေခြင်းနဲ့ အကယ်၍ အရေးပါတဲ့ E-mail ဖြစ်ရင် ကနဦးအဖြေတစ်ခုကို ရေးသားစေခြင်းတို့ကို လုပ်ဆောင်နိုင်မှာ ဖြစ်ပါတယ်။ \ No newline at end of file diff --git a/units/my/unit2/langgraph/conclusion.mdx b/units/my/unit2/langgraph/conclusion.mdx new file mode 100644 index 00000000..2103931e --- /dev/null +++ b/units/my/unit2/langgraph/conclusion.mdx @@ -0,0 +1,27 @@ +## နိဂုံးချုပ် (Conclusion) + +`LangGraph` Module ပါဝင်တဲ့ ဒီ ဒုတိယမြောက် Unit ကို အောင်မြင်စွာ ပြီးဆုံးသွားတဲ့အတွက် ဂုဏ်ယူပါတယ်! 🥳 + +အခုဆိုရင် သင်ဟာ LangGraph ကို အသုံးပြုပြီး **စနစ်တကျ ဖွဲ့စည်းထားတဲ့ လုပ်ငန်းအဆင့်ဆင့် (Structured Workflows)** တွေကို တည်ဆောက်နိုင်မယ့် အခြေခံသဘောတရားတွေကို ကျွမ်းကျင်သွားပြီ ဖြစ်ပါတယ်။ ဒီလို တည်ဆောက်ထားတဲ့ Workflows တွေကို လက်တွေ့ ထုတ်လုပ်မှု (Production) အဆင့်အထိ ပို့ဆောင်နိုင်မှာပါ။ + +> **[Learner အတွက် အချက်အလက် ထပ်ဖြည့်ခြင်း]** +> LangGraph ဟာ LangChain ရဲ့ အစိတ်အပိုင်းတစ်ခုဖြစ်ပြီး၊ AI Agent တွေအတွက် **State Machine** ပုံစံမျိုးနဲ့ အလုပ်လုပ်ပါတယ်။ ဒါကြောင့် Agent တွေရဲ့ ဆုံးဖြတ်ချက်ချမှတ်မှု (Reasoning) နဲ့ လုပ်ဆောင်ချက် (Action) တွေကို အဆင့်ဆင့် ထိန်းချုပ်ဖို့အတွက် အလွန်အစွမ်းထက်တဲ့ Tool တစ်ခု ဖြစ်ပါတယ်။ + +ဒီ Module ဟာ LangGraph နဲ့ သင့်ရဲ့ ခရီးစဉ်ရဲ့ အစပဲ ရှိပါသေးတယ်။ ပိုမို အဆင့်မြင့်တဲ့ အကြောင်းအရာတွေအတွက်၊ ကျွန်တော်တို့ အောက်ပါတို့ကို လေ့လာဖို့ အကြံပြုချင်ပါတယ်။ + +* [**LangGraph ရဲ့ တရားဝင် Documentation**](https://github.com/langchain-ai/langgraph) ကို လေ့လာကြည့်ရှုခြင်း။ +* LangChain Academy မှ ပေးအပ်တဲ့ [**Introduction to LangGraph**](https://academy.langchain.com/courses/intro-to-langgraph) Course ကို အပြည့်အစုံ တက်ရောက်ခြင်း။ +* **သင်ကိုယ်တိုင် လက်တွေ့တစ်ခုခု တည်ဆောက်ကြည့်ခြင်း!** (လက်တွေ့လုပ်ဆောင်မှုက သီအိုရီထက် ပိုပြီး အကျိုးရှိပါတယ်) + +နောက် Unit မှာတော့ သင်ဟာ လက်တွေ့ကျတဲ့ အသုံးချကိစ္စရပ်များ (Real Use Cases) ကို စတင်လေ့လာရတော့မှာ ဖြစ်ပါတယ်။ သီအိုရီတွေကို ခဏထားပြီး လက်တွေ့ကျကျ လုပ်ဆောင်ရမယ့် အချိန်ရောက်ပါပြီ! + +> **[Learner အတွက် အချက်အလက် ထပ်ဖြည့်ခြင်း]** +> နောက် Unit မှာ သင်လေ့လာရမယ့် Use Cases တွေဟာ သင်ဒီ Unit မှာ သင်ယူခဲ့တဲ့ **Action, Observation, Reasoning** စတဲ့ အခြေခံသဘောတရားတွေကို လက်တွေ့ဘဝ ပြဿနာတွေမှာ ဘယ်လို အသုံးချရမလဲဆိုတာကို ရှင်းရှင်းလင်းလင်း မြင်စေမှာပါ။ + +ကျွန်တော်တို့အနေနဲ့ **ဒီ Course အပေါ် သင့်ရဲ့ အမြင်များနှင့် ပိုမိုကောင်းမွန်အောင် ပြုလုပ်နိုင်မယ့် အကြံပြုချက်များ** ကို အထူးတန်ဖိုးထားပါတယ်။ သင့်မှာ တုံ့ပြန်ချက် (Feedback) ရှိတယ်ဆိုရင်၊ 👉 [ဒီ Form ကို ဖြည့်သွင်းပေးပါ](https://docs.google.com/forms/d/e/1FAIpQLSe9VaONn0eglax0uTwi29rIn4tM7H2sYmmybmG5jJNlE5v0xA/viewform?usp=dialog)။ + +### ဆက်လက်လေ့လာပါ၊ အမြဲတမ်း အစွမ်းထက်နေပါစေ! 🤗 + +Good Sir/Madam! 🎩🦇 + +-Alfred- \ No newline at end of file diff --git a/units/my/unit2/langgraph/document_analysis_agent.mdx b/units/my/unit2/langgraph/document_analysis_agent.mdx new file mode 100644 index 00000000..03c5539c --- /dev/null +++ b/units/my/unit2/langgraph/document_analysis_agent.mdx @@ -0,0 +1,276 @@ +# Document ခွဲခြမ်းစိတ်ဖြာမှု ပုံစံ (Document Analysis Graph) + +ကျွန်ုပ် Alfred ပါ။ Mr. Wayne ရဲ့ ယုံကြည်ရတဲ့ Butler တစ်ဦးအနေနဲ့၊ သူရဲ့ အမျိုးမျိုးသော Document လိုအပ်ချက်တွေကို ကျွန်တော် ဘယ်လို ကူညီပေးတယ်ဆိုတာ မှတ်တမ်းတင်ထားပါတယ်။ သူက ညဘက် လုပ်ငန်းဆောင်တာတွေ (Nighttime Activities) ကို သွားရောက်နေချိန်မှာ၊ သူရဲ့ စာရွက်စာတမ်းတွေ၊ လေ့ကျင့်ရေး အစီအစဉ်တွေနဲ့ အာဟာရဆိုင်ရာ အစီအစဉ်တွေကို စနစ်တကျ ခွဲခြမ်းစိတ်ဖြာပြီး စီစဉ်ပေးဖို့ ကျွန်တော် တာဝန်ယူပါတယ်။ + +အပြင်မထွက်ခင်မှာ၊ သူက တစ်ပတ်စာ လေ့ကျင့်ရေး အစီအစဉ်ကို မှတ်စုတစ်ခု ချန်ထားခဲ့ပါတယ်။ အဲဒီနောက် မနက်ဖြန်အတွက် **Menu (အစားအသောက် စာရင်း)** ကို စီစဉ်ဖို့ တာဝန်ကို ကျွန်တော် ယူခဲ့ပါတယ်။ + +အနာဂတ်မှာ ဒီလိုမျိုး အခြေအနေတွေအတွက် Mr. Wayne ရဲ့ လိုအပ်ချက်တွေကို ဖြည့်ဆည်းပေးနိုင်မယ့် LangGraph ကို အသုံးပြုထားတဲ့ Document ခွဲခြမ်းစိတ်ဖြာမှု စနစ်တစ်ခုကို ဖန်တီးကြပါစို့။ ဒီစနစ်က အောက်ပါတို့ကို လုပ်ဆောင်နိုင်ပါတယ်။ + +၁။ ပုံရိပ် Document များကို စီမံဆောင်ရွက်ခြင်း +၂။ Vision Model များ (Vision Language Model) ကို အသုံးပြုပြီး စာသားများ ထုတ်ယူခြင်း +၃။ လိုအပ်တဲ့အခါ တွက်ချက်မှုများ ပြုလုပ်ခြင်း (ရိုးရှင်းတဲ့ Tool များကို သရုပ်ပြရန်) +၄။ Content ကို ခွဲခြမ်းစိတ်ဖြာပြီး အကျဉ်းချုပ် ဖော်ပြပေးခြင်း +၅။ Document များနှင့် သက်ဆိုင်သော သီးခြား ညွှန်ကြားချက်များကို လုပ်ဆောင်ခြင်း + +## Butler ၏ လုပ်ငန်းအဆင့်ဆင့် (The Butler's Workflow) + +ကျွန်တော်တို့ တည်ဆောက်မယ့် လုပ်ငန်းအဆင့်ဆင့် (Workflow) ဟာ အောက်ပါ စနစ်တကျ ပုံစံကို လိုက်နာပါတယ်။ + +![Butler's Document Analysis Workflow](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/LangGraph/alfred_flow.png) + +> [!TIP] +> သင်ဟာ Google Colab ကို အသုံးပြုပြီး [ဒီ Notebook](https://huggingface.co/agents-course/notebooks/blob/main/unit2/langgraph/agent.ipynb) ထဲက Code တွေကို လိုက်လံလေ့လာနိုင်ပါတယ်။ + +## Environment ကို စနစ်တကျ ပြင်ဆင်ခြင်း (Setting Up the environment) + +ပထမဆုံးအနေနဲ့ လိုအပ်တဲ့ Library တွေကို Install လုပ်ရပါမယ်။ + +```python +%pip install langgraph langchain_openai langchain_core +``` +ပြီးရင်တော့ လိုအပ်တဲ့ Imports တွေကို လုပ်ဆောင်ပါမယ်။ + +```python +import base64 +from typing import List, TypedDict, Annotated, Optional +from langchain_openai import ChatOpenAI +from langchain_core.messages import AnyMessage, SystemMessage, HumanMessage +from langgraph.graph.message import add_messages +from langgraph.graph import START, StateGraph +from langgraph.prebuilt import ToolNode, tools_condition +from IPython.display import Image, display +``` + +## Agent ၏ အခြေအနေ (State) ကို သတ်မှတ်ခြင်း + +ဒီ State (အခြေအနေ) ဟာ ကျွန်တော်တို့ ယခင်က မြင်ဖူးတဲ့ State တွေထက် နည်းနည်း ပိုပြီး ရှုပ်ထွေးပါတယ်။ + +`AnyMessage` ဟာ Langchain မှ Message များကို သတ်မှတ်ပေးတဲ့ Class တစ်ခုဖြစ်ပြီး၊ `add_messages` ကတော့ နောက်ဆုံး Message ကို လက်ရှိ State ကို ထပ်ပေါင်းထည့်ပေးတဲ့ Operator တစ်ခု ဖြစ်ပါတယ်။ (နောက်ဆုံး State နဲ့ အစားထိုးတာမျိုး မဟုတ်ပါဘူး။) + +ဒါဟာ LangGraph မှာ အသစ်ပါဝင်လာတဲ့ Concept တစ်ခုဖြစ်ပြီး၊ State အတွင်းမှာ Operator များကို ထည့်သွင်းပြီး ၎င်းတို့ အချင်းချင်း ဘယ်လို အပြန်အလှန် ဆက်သွယ်သင့်တယ်ဆိုတာကို သတ်မှတ်နိုင်ပါတယ်။ + +```python +class AgentState(TypedDict): + # The document provided + input_file: Optional[str] # ဖိုင်လမ်းကြောင်း (PDF/PNG) ပါဝင်သည် + messages: Annotated[list[AnyMessage], add_messages] +``` + +## Tools များကို ပြင်ဆင်ခြင်း (Preparing Tools) + +ကျွန်တော်တို့ရဲ့ Butler Agent အတွက် လိုအပ်တဲ့ Tools တွေကို သတ်မှတ်ပါမယ်။ + +```python +vision_llm = ChatOpenAI(model="gpt-4o") + +def extract_text(img_path: str) -> str: + """ + Multimodal Model ကို အသုံးပြုပြီး ပုံရိပ်ဖိုင်တစ်ခုမှ စာသားများကို ထုတ်ယူသည်။ + + Master Wayne က သူရဲ့ လေ့ကျင့်ရေး အစီအစဉ် သို့မဟုတ် အစားအသောက် အစီအစဉ်များကို မှတ်စုများ ချန်ထားလေ့ရှိပါတယ်။ + ဒီ Tool က အဲဒီ Content တွေကို စနစ်တကျ ခွဲခြမ်းစိတ်ဖြာနိုင်ဖို့ ကူညီပေးပါတယ်။ + """ + all_text = "" + try: + # ပုံရိပ်ကို ဖတ်ပြီး base64 အဖြစ် ပြောင်းလဲခြင်း + with open(img_path, "rb") as image_file: + image_bytes = image_file.read() + + image_base64 = base64.b64encode(image_bytes).decode("utf-8") + + # base64 ပုံရိပ်ဒေတာ ပါဝင်သော Prompt ကို ပြင်ဆင်ခြင်း + message = [ + HumanMessage( + content=[ + { + "type": "text", + "text": ( + "ဒီပုံရိပ်ထဲက စာသားအားလုံးကို ထုတ်ယူပါ။ " + "ထုတ်ယူထားတဲ့ စာသားကိုသာ ပြန်ပေးပါ၊ ရှင်းပြချက်တွေ မပါစေနဲ့။" + ), + }, + { + "type": "image_url", + "image_url": { + "url": f"data:image/png;base64,{image_base64}" + }, + }, + ] + ) + ] + + # Vision စွမ်းရည်ရှိသော Model ကို ခေါ်ဆိုခြင်း + response = vision_llm.invoke(message) + + # ထုတ်ယူထားသော စာသားကို ထပ်ပေါင်းထည့်ခြင်း + all_text += response.content + "\n\n" + + return all_text.strip() + except Exception as e: + # Butler တစ်ဦးအနေနဲ့ Error များကို စနစ်တကျ ကိုင်တွယ်ရပါမယ် + error_msg = f"Error extracting text: {str(e)}" + print(error_msg) + return "" + +def divide(a: int, b: int) -> float: + """Master Wayne ရဲ့ ရံဖန်ရံခါ တွက်ချက်မှုများအတွက် a ကို b ဖြင့် စားသည်။""" + return a / b + +# Butler ကို Tools များ တပ်ဆင်ပေးခြင်း +tools = [ + divide, + extract_text +] + +llm = ChatOpenAI(model="gpt-4o") +llm_with_tools = llm.bind_tools(tools, parallel_tool_calls=False) +``` + +## Node များ သတ်မှတ်ခြင်း (The nodes) + +Node များသည် Workflow အတွင်းမှ အလုပ်များကို လုပ်ဆောင်ပေးသော အစိတ်အပိုင်းများ ဖြစ်ပါတယ်။ + +```python +def assistant(state: AgentState): + # System message + textual_description_of_tool=""" +extract_text(img_path: str) -> str: + Multimodal Model ကို အသုံးပြုပြီး ပုံရိပ်ဖိုင်တစ်ခုမှ စာသားများကို ထုတ်ယူသည်။ + + Args: + img_path: Local ပုံရိပ်ဖိုင် လမ်းကြောင်း (strings)။ + + Returns: + ပုံရိပ်တစ်ခုစီမှ ထုတ်ယူထားသော စာသားများကို ပေါင်းစပ်ထားသည့် စာသားတစ်ခု။ +divide(a: int, b: int) -> float: + a ကို b ဖြင့် စားသည်။ +""" + image=state["input_file"] + sys_msg = SystemMessage(content=f"သင်သည် Mr. Wayne နှင့် Batman ကို ဝန်ဆောင်မှုပေးသော Alfred အမည်ရှိ အကူအညီပေးသည့် Butler တစ်ဦးဖြစ်သည်။ သင်သည် Document များကို ခွဲခြမ်းစိတ်ဖြာနိုင်ပြီး ပေးထားသော Tools များဖြင့် တွက်ချက်မှုများ ပြုလုပ်နိုင်သည်:\n{textual_description_of_tool} \n သင်သည် ရွေးချယ်နိုင်သော ပုံရိပ်အချို့ကို အသုံးပြုခွင့်ရှိသည်။ လက်ရှိ Load လုပ်ထားသော ပုံရိပ်မှာ: {image}") + + return { + "messages": [llm_with_tools.invoke([sys_msg] + state["messages"])], + "input_file": state["input_file"] + } +``` + +## ReAct ပုံစံ: ကျွန်ုပ် Mr. Wayne ကို ကူညီပုံ (The ReAct Pattern: How I Assist Mr. Wayne) + +ဒီ Agent မှာ အသုံးပြုထားတဲ့ နည်းလမ်းကို ရှင်းပြပါရစေ။ ဒီ Agent ဟာ **ReAct Pattern (Reason-Act-Observe)** လို့ လူသိများတဲ့ ပုံစံကို လိုက်နာပါတယ်။ + +၁။ သူရဲ့ Document တွေနဲ့ တောင်းဆိုချက်တွေအကြောင်း **ဆင်ခြင်သုံးသပ်ခြင်း (Reason)** +၂။ သင့်လျော်တဲ့ Tools တွေကို အသုံးပြုပြီး **လုပ်ဆောင်ခြင်း (Act)** +၃။ ရလဒ်တွေကို **လေ့လာစောင့်ကြည့်ခြင်း (Observe)** +၄။ သူရဲ့ လိုအပ်ချက်တွေကို အပြည့်အဝ ဖြေရှင်းပြီးသည်အထိ လိုအပ်သလို **ထပ်ခါတလဲလဲ လုပ်ဆောင်ခြင်း (Repeat)** + +ဒါဟာ LangGraph ကို အသုံးပြုထားတဲ့ Agent ရဲ့ ရိုးရှင်းတဲ့ အကောင်အထည်ဖော်မှုတစ်ခု ဖြစ်ပါတယ်။ + +```python +# The graph +builder = StateGraph(AgentState) + +# Node များ သတ်မှတ်ခြင်း: ၎င်းတို့သည် အလုပ်များကို လုပ်ဆောင်သည် +builder.add_node("assistant", assistant) +builder.add_node("tools", ToolNode(tools)) + +# Edge များ သတ်မှတ်ခြင်း: ၎င်းတို့သည် ထိန်းချုပ်မှု စီးဆင်းပုံကို ဆုံးဖြတ်သည် +builder.add_edge(START, "assistant") +builder.add_conditional_edges( + "assistant", + # နောက်ဆုံး Message က Tool တစ်ခု လိုအပ်ရင် Tools ဆီကို လမ်းကြောင်းပြောင်းသည် + # မဟုတ်ရင် တိုက်ရိုက် တုံ့ပြန်မှု ပေးသည် + tools_condition, +) +builder.add_edge("tools", "assistant") +react_graph = builder.compile() + +# Butler ၏ ဆင်ခြင်သုံးသပ်မှု လုပ်ငန်းစဉ်ကို ပြသခြင်း +display(Image(react_graph.get_graph(xray=True).draw_mermaid_png())) +``` + +ကျွန်တော်တို့ဟာ Tools စာရင်းပါဝင်တဲ့ `tools` Node တစ်ခုကို သတ်မှတ်ပါတယ်။ `assistant` Node ကတော့ Tools တွေနဲ့ ချိတ်ဆက်ထားတဲ့ ကျွန်တော်တို့ရဲ့ Model ပဲ ဖြစ်ပါတယ်။ + +`assistant` နဲ့ `tools` Node တွေပါဝင်တဲ့ Graph တစ်ခုကို ဖန်တီးပါတယ်။ + +`tools_condition` Edge ကို ထည့်သွင်းပါတယ်။ ဒီ Edge က Model ရဲ့ Output ဟာ Tool Call ဟုတ်မဟုတ်အပေါ် မူတည်ပြီး `End` သို့မဟုတ် `tools` ဆီကို လမ်းကြောင်းပြောင်းပေးပါတယ်။ + +အခု၊ အဆင့်အသစ်တစ်ခု ထပ်ထည့်ပါမယ်။ + +`tools` Node ကို `assistant` ဆီသို့ ပြန်လည် ချိတ်ဆက်ပြီး Loop တစ်ခုကို ဖန်တီးပါတယ်။ + +* `assistant` Node လုပ်ဆောင်ပြီးနောက်၊ `tools_condition` က Model ရဲ့ Output ဟာ Tool Call ဟုတ်မဟုတ် စစ်ဆေးပါတယ်။ +* Tool Call ဖြစ်ရင် Flow ကို `tools` Node ဆီသို့ ဦးတည်စေပါတယ်။ +* `tools` Node က `assistant` ဆီသို့ ပြန်လည် ချိတ်ဆက်ပါတယ်။ +* Model က Tools တွေကို ခေါ်ဆိုဖို့ ဆုံးဖြတ်နေသရွေ့ ဒီ Loop ဟာ ဆက်လက်လည်ပတ်နေပါမယ်။ +* Model ရဲ့ တုံ့ပြန်မှုက Tool Call မဟုတ်ရင် Flow ကို END ဆီသို့ ဦးတည်စေပြီး လုပ်ငန်းစဉ်ကို အဆုံးသတ်ပါတယ်။ + +![ReAct Pattern](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/LangGraph/Agent.png) + +## Butler ၏ လက်တွေ့ လုပ်ဆောင်မှု (The Butler in Action) + +### ဥပမာ ၁: ရိုးရှင်းသော တွက်ချက်မှုများ + +LangGraph ကို အသုံးပြုတဲ့ Agent တစ်ခုရဲ့ ရိုးရှင်းတဲ့ Tool အသုံးပြုပုံကို ပြသတဲ့ ဥပမာတစ်ခု ဖြစ်ပါတယ်။ + +```python +messages = [HumanMessage(content="Divide 6790 by 5")] +messages = react_graph.invoke({"messages": messages, "input_file": None}) + +# Messages များကို ပြသခြင်း +for m in messages['messages']: + m.pretty_print() +``` + +စကားပြောဆိုမှုက အောက်ပါအတိုင်း ဆက်လက်ဖြစ်ပေါ်ပါမယ်။ + +``` +Human: Divide 6790 by 5 + +AI Tool Call: divide(a=6790, b=5) + +Tool Response: 1358.0 + +Alfred: 6790 ကို 5 ဖြင့် စားခြင်း၏ ရလဒ်မှာ 1358.0 ဖြစ်ပါသည်။ +``` + +### ဥပမာ ၂: Master Wayne ၏ လေ့ကျင့်ရေး Document များကို ခွဲခြမ်းစိတ်ဖြာခြင်း + +Master Wayne က သူရဲ့ လေ့ကျင့်ရေးနှင့် အစားအသောက် မှတ်စုများကို ချန်ထားခဲ့တဲ့အခါ: + +```python +messages = [HumanMessage(content="According to the note provided by Mr. Wayne in the provided images. What's the list of items I should buy for the dinner menu?")] +messages = react_graph.invoke({"messages": messages, "input_file": "Batman_training_and_meals.png"}) +``` + +အပြန်အလှန် ဆက်သွယ်မှုက အောက်ပါအတိုင်း ဆက်လက်ဖြစ်ပေါ်ပါမယ်။ + +``` +Human: Mr. Wayne ပေးထားတဲ့ ပုံရိပ်ထဲက မှတ်စုအရ၊ ညစာ Menu အတွက် ကျွန်တော် ဘယ်ပစ္စည်းတွေ ဝယ်ရမလဲ။ + +AI Tool Call: extract_text(img_path="Batman_training_and_meals.png") + +Tool Response: [လေ့ကျင့်ရေး အစီအစဉ်နှင့် Menu အသေးစိတ်ပါသော ထုတ်ယူထားသည့် စာသား] + +Alfred: ညစာ Menu အတွက်၊ သင်သည် အောက်ပါ ပစ္စည်းများကို ဝယ်ယူသင့်ပါတယ်- + +1. Grass-fed local sirloin steak (မြက်ကျွေးထားသော ဒေသထွက် Sirloin အသားတုံး) +2. Organic spinach (အော်ဂဲနစ် ဟင်းနုနွယ်ရွက်) +3. Piquillo peppers (Piquillo ငရုတ်သီး) +4. Potatoes (မီးဖို၌ ဖုတ်ထားသော ရွှေရောင် ဟင်းခတ်အာလူးအတွက်) +5. Fish oil (ငါးဆီ - ၂ ဂရမ်) + +အကောင်းဆုံး အရည်အသွေးရှိသော အစားအစာအတွက် အသားတုံးသည် Grass-fed ဖြစ်ပြီး၊ ဟင်းနုနွယ်ရွက်နှင့် ငရုတ်သီးများသည် အော်ဂဲနစ် ဖြစ်စေရန် သေချာပါစေ။ +``` + +## အဓိက မှတ်သားစရာများ (Key Takeaways) + +သင်ကိုယ်တိုင် Document ခွဲခြမ်းစိတ်ဖြာမှု Butler တစ်ဦးကို ဖန်တီးလိုပါက၊ အောက်ပါ အဓိက အချက်များကို ထည့်သွင်းစဉ်းစားသင့်ပါတယ်။ + +၁။ **ရှင်းလင်းသော Tools များ သတ်မှတ်ခြင်း:** Document နှင့် သက်ဆိုင်သော သီးခြား Tasks များအတွက် ရှင်းလင်းသော Tools များကို သတ်မှတ်ပါ။ +၂။ **ခိုင်မာသော State Tracker ဖန်တီးခြင်း:** Tool Call များကြားတွင် Context ကို ထိန်းသိမ်းထားနိုင်ရန် ခိုင်မာသော State Tracker ကို ဖန်တီးပါ။ (ကျွန်ုပ်တို့၏ `AgentState` တွင် `add_messages` Operator ကို အသုံးပြုခြင်းဖြင့် ၎င်းကို သေချာစေသည်)။ +၃။ **Error ကိုင်တွယ်မှုကို ထည့်သွင်းစဉ်းစားခြင်း:** Tool များ အလုပ်မလုပ်သည့်အခါ Error များကို စနစ်တကျ ကိုင်တွယ်နိုင်ရန် စဉ်းစားပါ။ +၄။ **ယခင် အပြန်အလှန် ဆက်သွယ်မှုများ၏ Context ကို ထိန်းသိမ်းခြင်း:** ယခင် Messages များကို မှတ်မိစေရန် ( `add_messages` Operator ဖြင့် သေချာစေသည်)။ + +ဤအခြေခံမူများဖြင့်၊ သင်သည်လည်း Wayne Manor နှင့် ထိုက်တန်သော ထူးခြားသည့် Document ခွဲခြမ်းစိတ်ဖြာမှု ဝန်ဆောင်မှုကို ပေးနိုင်ပါလိမ့်မယ်။ + +*ဒီရှင်းပြချက်က စိတ်ကျေနပ်စရာ ဖြစ်မယ်လို့ ယုံကြည်ပါတယ်။ အခုတော့ ခွင့်ပြုပါဦး၊ Master Wayne ရဲ့ Cape ကို ဒီည လုပ်ငန်းဆောင်တာတွေ မစခင် မီးပူတိုက်ဖို့ လိုအပ်နေလို့ပါခင်ဗျာ။* \ No newline at end of file diff --git a/units/my/unit2/langgraph/first_graph.mdx b/units/my/unit2/langgraph/first_graph.mdx new file mode 100644 index 00000000..50b68611 --- /dev/null +++ b/units/my/unit2/langgraph/first_graph.mdx @@ -0,0 +1,357 @@ +# သင်၏ ပထမဆုံး LangGraph ကို တည်ဆောက်ခြင်း + +အခုဆိုရင် ကျွန်တော်တို့ဟာ Agent တွေရဲ့ အခြေခံ အစိတ်အပိုင်းတွေကို နားလည်သွားပြီဖြစ်လို့၊ ၎င်းတို့ကို လက်တွေ့ကျတဲ့ လုပ်ငန်းစဉ် (Functional Graph) တစ်ခု တည်ဆောက်ရာမှာ အသုံးချကြည့်ကြပါစို့။ ဒီနေရာမှာ Alfred ရဲ့ Email စီမံခန့်ခွဲမှု စနစ်ကို အကောင်အထည်ဖော်သွားမှာ ဖြစ်ပါတယ်။ Alfred အနေနဲ့ အောက်ပါအဆင့်တွေကို လုပ်ဆောင်ဖို့ လိုအပ်ပါတယ်။ + +1. ဝင်လာတဲ့ Email တွေကို ဖတ်ရှုခြင်း။ +2. ၎င်းတို့ကို Spam (အမှိုက်ပုံး) သို့မဟုတ် Legitimate (တရားဝင်) အဖြစ် အမျိုးအစားခွဲခြားခြင်း။ +3. တရားဝင် Email များအတွက် မူကြမ်း တုံ့ပြန်စာ (Preliminary Response) ကို ရေးဆွဲခြင်း။ +4. တရားဝင် Email များအတွက် Mr. Wayne (ဒီနေရာမှာ Mr. Hugg လို့ ပြောင်းသုံးထားပါတယ်) ကို အသိပေးခြင်း (Print ထုတ်ပြသခြင်းသာ)။ + +ဒီဥပမာက LLM (Large Language Model) ကို အခြေခံတဲ့ ဆုံးဖြတ်ချက်ချမှုများ ပါဝင်တဲ့ Workflow တစ်ခုကို LangGraph နဲ့ ဘယ်လို စနစ်တကျ ဖွဲ့စည်းရမလဲဆိုတာကို ပြသပေးပါလိမ့်မယ်။ ဒီဥပမာမှာ Tool တွေ ပါဝင်ခြင်းမရှိသေးတဲ့အတွက် Agent လို့ အတိအကျ မခေါ်နိုင်သေးပေမယ့်၊ ဒီအပိုင်းက Agent တွေထက် LangGraph Framework ကို လေ့လာဖို့ကို ပိုပြီး အာရုံစိုက်ထားပါတယ်။ + +> [!TIP] +> ဒီ Code တွေကို ဒီ Notebook မှာ လိုက်လံကြည့်ရှုနိုင်ပြီး Google Colab ကို အသုံးပြုပြီး ကိုယ်တိုင် Run ကြည့်နိုင်ပါတယ်။ + +## ကျွန်ုပ်တို့၏ လုပ်ငန်းအဆင့်ဆင့် (Our Workflow) + +ကျွန်တော်တို့ တည်ဆောက်မယ့် Workflow ပုံစံက အောက်ပါအတိုင်း ဖြစ်ပါတယ်။ + +First LangGraph + +## အဆင့် ၁: ကျွန်ုပ်တို့၏ State ကို သတ်မှတ်ခြင်း + +LangGraph မှာ **State** ဆိုတာဟာ Workflow တစ်လျှောက်လုံးမှာ ခြေရာခံရမယ့် အချက်အလက်တွေ စုစည်းရာ နေရာပဲ ဖြစ်ပါတယ်။ Email စီမံခန့်ခွဲမှု လုပ်ငန်းစဉ်အတွင်း Alfred ခြေရာခံဖို့ လိုအပ်တဲ့ အချက်အလက်တွေကို အောက်ပါအတိုင်း သတ်မှတ်ပါမယ်။ + +```python +class EmailState(TypedDict): + # စီမံဆောင်ရွက်နေသော Email + email: Dict[str, Any] # Email ၏ ခေါင်းစဉ်၊ ပေးပို့သူ၊ ကိုယ်ထည် စသည်တို့ ပါဝင်သည်။ + + # Email ၏ အမျိုးအစား (မေးမြန်းခြင်း၊ တိုင်ကြားခြင်း စသည်) + email_category: Optional[str] + + # Email ကို Spam အဖြစ် သတ်မှတ်ရသည့် အကြောင်းရင်း + spam_reason: Optional[str] + + # ခွဲခြမ်းစိတ်ဖြာမှုနှင့် ဆုံးဖြတ်ချက်များ + is_spam: Optional[bool] + + # တုံ့ပြန်စာ မူကြမ်း ရေးဆွဲခြင်း + email_draft: Optional[str] + + # စီမံဆောင်ရွက်မှုဆိုင်ရာ Metadata + messages: List[Dict[str, Any]] # LLM နှင့် ဆွေးနွေးမှုများကို ခြေရာခံရန်။ +``` + +> 💡 **အကြံပြုချက်:** သင်၏ State ကို အရေးကြီးသော အချက်အလက်အားလုံးကို ခြေရာခံနိုင်လောက်အောင် ပြည့်စုံအောင် သတ်မှတ်ပါ။ သို့သော် မလိုအပ်သော အသေးစိတ်အချက်အလက်များဖြင့် ရှုပ်ထွေးအောင် မလုပ်ပါနှင့်။ + +## အဆင့် ၂: ကျွန်ုပ်တို့၏ Node များကို သတ်မှတ်ခြင်း + +အခုဆိုရင် ကျွန်တော်တို့ရဲ့ Workflow ကို ဖွဲ့စည်းမယ့် လုပ်ဆောင်ချက် Functions များကို ဖန်တီးကြပါစို့။ LangGraph မှာ ဒီ Functions တွေကို **Nodes** လို့ ခေါ်ပါတယ်။ + +```python +# ကျွန်ုပ်တို့၏ LLM ကို စတင်အသုံးပြုရန် +model = ChatOpenAI(temperature=0) # temperature=0 သည် LLM ကို ပိုမိုခန့်မှန်းနိုင်သော (Predictable) အဖြေများ ထုတ်ပေးစေရန် သတ်မှတ်ခြင်းဖြစ်သည်။ + +def read_email(state: EmailState): + """Alfred သည် ဝင်လာသော Email ကို ဖတ်ရှုပြီး မှတ်တမ်းတင်သည်""" + email = state["email"] + + # ဒီနေရာမှာ အစောပိုင်း ဒေတာ စီမံဆောင်ရွက်မှုအချို့ကို လုပ်ဆောင်နိုင်ပါတယ်။ + print(f"Alfred သည် {email['sender']} ထံမှ {email['subject']} ခေါင်းစဉ်ဖြင့် Email ကို စီမံဆောင်ရွက်နေပါသည်။") + + # State ကို ပြောင်းလဲရန် မလိုအပ်ပါ + return {} + +def classify_email(state: EmailState): + """Alfred သည် Email သည် Spam လား၊ တရားဝင်လားဆိုတာကို LLM ကို အသုံးပြုပြီး ဆုံးဖြတ်သည်""" + email = state["email"] + + # LLM အတွက် Prompt ကို ပြင်ဆင်ခြင်း + prompt = f""" + Alfred the butler အနေဖြင့်၊ ဤ Email ကို ခွဲခြမ်းစိတ်ဖြာပြီး Spam လား၊ တရားဝင်လားဆိုတာကို ဆုံးဖြတ်ပါ။ + + Email: + From: {email['sender']} + Subject: {email['subject']} + Body: {email['body']} + + ပထမဦးစွာ၊ ဤ Email သည် Spam ဟုတ်မဟုတ် ဆုံးဖြတ်ပါ။ Spam ဖြစ်ပါက၊ အကြောင်းရင်းကို ရှင်းပြပါ။ + တရားဝင် Email ဖြစ်ပါက၊ ၎င်းကို အမျိုးအစားခွဲခြားပါ (မေးမြန်းခြင်း၊ တိုင်ကြားခြင်း၊ ကျေးဇူးတင်လွှာ စသည်)။ + """ + + # LLM ကို ခေါ်ဆိုခြင်း + messages = [HumanMessage(content=prompt)] + response = model.invoke(messages) + + # ရလဒ်ကို ရိုးရှင်းစွာ စစ်ဆေးခြင်း (လက်တွေ့ Application တွင် ပိုမိုခိုင်မာသော Parsing လိုအပ်သည်) + response_text = response.content.lower() + is_spam = "spam" in response_text and "not spam" not in response_text + + # Spam ဖြစ်ပါက အကြောင်းရင်းကို ထုတ်ယူခြင်း + spam_reason = None + if is_spam and "reason:" in response_text: + spam_reason = response_text.split("reason:")[1].strip() + + # တရားဝင်ပါက အမျိုးအစားကို ဆုံးဖြတ်ခြင်း + email_category = None + if not is_spam: + categories = ["inquiry", "complaint", "thank you", "request", "information"] + for category in categories: + if category in response_text: + email_category = category + break + + # ခြေရာခံရန်အတွက် Messages များကို Update လုပ်ခြင်း + new_messages = state.get("messages", []) + [ + {"role": "user", "content": prompt}, + {"role": "assistant", "content": response.content} + ] + + # State အပြောင်းအလဲများကို ပြန်ပို့ခြင်း + return { + "is_spam": is_spam, + "spam_reason": spam_reason, + "email_category": email_category, + "messages": new_messages + } + +def handle_spam(state: EmailState): + """Alfred သည် Spam Email များကို မှတ်စုဖြင့် ဖယ်ရှားသည်""" + print(f"Alfred သည် Email ကို Spam အဖြစ် သတ်မှတ်လိုက်ပါသည်။ အကြောင်းရင်း: {state['spam_reason']}") + print("Email ကို Spam Folder သို့ ရွှေ့လိုက်ပါပြီ။") + + # ဤ Email စီမံဆောင်ရွက်မှု ပြီးဆုံးပါပြီ + return {} + +def draft_response(state: EmailState): + """Alfred သည် တရားဝင် Email များအတွက် မူကြမ်း တုံ့ပြန်စာကို ရေးဆွဲသည်""" + email = state["email"] + category = state["email_category"] or "general" + + # LLM အတွက် Prompt ကို ပြင်ဆင်ခြင်း + prompt = f""" + Alfred the butler အနေဖြင့်၊ ဤ Email အတွက် ယဉ်ကျေးသော မူကြမ်း တုံ့ပြန်စာကို ရေးဆွဲပါ။ + + Email: + From: {email['sender']} + Subject: {email['subject']} + Body: {email['body']} + + ဤ Email ကို အမျိုးအစားခွဲခြားထားသည်: {category} + + Mr. Hugg မှ ပြန်လည်သုံးသပ်ပြီး ကိုယ်ပိုင်ပြင်ဆင်မှုများ မပြုလုပ်မီ ပေးပို့နိုင်ရန် အတိုချုပ်၊ Professional ဆန်သော တုံ့ပြန်စာကို ရေးဆွဲပါ။ + """ + + # LLM ကို ခေါ်ဆိုခြင်း + messages = [HumanMessage(content=prompt)] + response = model.invoke(messages) + + # ခြေရာခံရန်အတွက် Messages များကို Update လုပ်ခြင်း + new_messages = state.get("messages", []) + [ + {"role": "user", "content": prompt}, + {"role": "assistant", "content": response.content} + ] + + # State အပြောင်းအလဲများကို ပြန်ပို့ခြင်း + return { + "email_draft": response.content, + "messages": new_messages + } + +def notify_mr_hugg(state: EmailState): + """Alfred သည် Mr. Hugg ကို Email အကြောင်း အသိပေးပြီး မူကြမ်း တုံ့ပြန်စာကို ပြသသည်""" + email = state["email"] + + print("\n" + "="*50) + print(f"သခင်၊ {email['sender']} ထံမှ Email တစ်စောင် လက်ခံရရှိထားပါသည်။") + print(f"ခေါင်းစဉ်: {email['subject']}") + print(f"အမျိုးအစား: {state['email_category']}") + print("\nပြန်လည်သုံးသပ်ရန်အတွက် ကျွန်တော် မူကြမ်း တုံ့ပြန်စာကို ပြင်ဆင်ထားပါတယ်:") + print("-"*50) + print(state["email_draft"]) + print("="*50 + "\n") + + # ဤ Email စီမံဆောင်ရွက်မှု ပြီးဆုံးပါပြီ + return {} +``` + +## အဆင့် ၃: Routing Logic ကို သတ်မှတ်ခြင်း + +Email အမျိုးအစားခွဲခြားပြီးနောက် ဘယ်လမ်းကြောင်းကို ဆက်သွားရမလဲဆိုတာကို ဆုံးဖြတ်ဖို့ Function တစ်ခု လိုအပ်ပါတယ်။ + +```python +def route_email(state: EmailState) -> str: + """Spam အမျိုးအစားခွဲခြားမှုအပေါ် မူတည်၍ နောက်တစ်ဆင့်ကို ဆုံးဖြတ်သည်""" + if state["is_spam"]: + return "spam" + else: + return "legitimate" +``` + +> 💡 **မှတ်ချက်:** ဒီ Routing Function ကို LangGraph က ခေါ်ဆိုပြီး Classification Node ပြီးနောက် ဘယ် Edge (လမ်းကြောင်း) ကို လိုက်ရမလဲဆိုတာကို ဆုံးဖြတ်ပါတယ်။ ပြန်ပို့သော တန်ဖိုးသည် ကျွန်ုပ်တို့၏ Conditional Edges Mapping အတွင်းရှိ Key တစ်ခုနှင့် ကိုက်ညီရပါမယ်။ + +## အဆင့် ၄: StateGraph ကို ဖန်တီးပြီး Edges များကို သတ်မှတ်ခြင်း + +အခုဆိုရင် အရာအားလုံးကို တစ်ခုနှင့်တစ်ခု ချိတ်ဆက်ကြပါစို့။ + +```python +# Graph ကို ဖန်တီးခြင်း +email_graph = StateGraph(EmailState) + +# Nodes များကို ထည့်သွင်းခြင်း +email_graph.add_node("read_email", read_email) +email_graph.add_node("classify_email", classify_email) +email_graph.add_node("handle_spam", handle_spam) +email_graph.add_node("draft_response", draft_response) +email_graph.add_node("notify_mr_hugg", notify_mr_hugg) + +# Edges များကို စတင်ခြင်း +email_graph.add_edge(START, "read_email") +# Edges များကို ထည့်သွင်းခြင်း - Flow ကို သတ်မှတ်ခြင်း +email_graph.add_edge("read_email", "classify_email") + +# classify_email မှ အခြေအနေအရင်းခံ လမ်းကြောင်းခွဲခြင်းကို ထည့်သွင်းခြင်း +email_graph.add_conditional_edges( + "classify_email", + route_email, + { + "spam": "handle_spam", + "legitimate": "draft_response" + } +) + +# နောက်ဆုံး Edges များကို ထည့်သွင်းခြင်း +email_graph.add_edge("handle_spam", END) +email_graph.add_edge("draft_response", "notify_mr_hugg") +email_graph.add_edge("notify_mr_hugg", END) + +# Graph ကို Compile လုပ်ခြင်း +compiled_graph = email_graph.compile() +``` + +LangGraph မှ ပံ့ပိုးပေးသော အထူး `END` Node ကို ကျွန်တော်တို့ အသုံးပြုထားသည်ကို သတိပြုပါ။ ၎င်းသည် Workflow ပြီးဆုံးသွားသော အခြေအနေများကို ဖော်ပြပါတယ်။ + +## အဆင့် ၅: Application ကို Run ခြင်း + +ကျွန်တော်တို့ရဲ့ Graph ကို တရားဝင် Email တစ်စောင်နဲ့ Spam Email တစ်စောင်တို့နဲ့ စမ်းသပ်ကြည့်ကြပါစို့။ + +```python +# ဥပမာ တရားဝင် Email +legitimate_email = { + "sender": "john.smith@example.com", + "subject": "Question about your services", + "body": "Dear Mr. Hugg, I was referred to you by a colleague and I'm interested in learning more about your consulting services. Could we schedule a call next week? Best regards, John Smith" +} + +# ဥပမာ Spam Email +spam_email = { + "sender": "winner@lottery-intl.com", + "subject": "YOU HAVE WON $5,000,000!!!", + "body": "CONGRATULATIONS! You have been selected as the winner of our international lottery! To claim your $5,000,000 prize, please send us your bank details and a processing fee of $100." +} + +# တရားဝင် Email ကို စီမံဆောင်ရွက်ခြင်း +print("\nProcessing legitimate email...") +legitimate_result = compiled_graph.invoke({ + "email": legitimate_email, + "is_spam": None, + "spam_reason": None, + "email_category": None, + "email_draft": None, + "messages": [] +}) + +# Spam Email ကို စီမံဆောင်ရွက်ခြင်း +print("\nProcessing spam email...") +spam_result = compiled_graph.invoke({ + "email": spam_email, + "is_spam": None, + "spam_reason": None, + "email_category": None, + "email_draft": None, + "messages": [] +}) +``` + +## အဆင့် ၆: Langfuse ဖြင့် Mail Sorting Agent ကို စစ်ဆေးခြင်း 📡 + +Alfred သည် Mail Sorting Agent ကို ချိန်ညှိနေစဉ် ၎င်း၏ Run များကို Debug လုပ်ရတာ ပင်ပန်းလာပါတယ်။ Agent များသည် သဘာဝအားဖြင့် ခန့်မှန်းရခက်ပြီး စစ်ဆေးရန် ခက်ခဲပါတယ်။ သို့သော် သူသည် အဆုံးစွန်သော Spam Detection Agent ကို တည်ဆောက်ပြီး Production တွင် အသုံးပြုရန် ရည်ရွယ်ထားသောကြောင့် အနာဂတ် စောင့်ကြည့်မှုနှင့် ခွဲခြမ်းစိတ်ဖြာမှုများအတွက် ခိုင်မာသော ခြေရာခံနိုင်စွမ်း (Traceability) လိုအပ်ပါတယ်။ + +ဒီလိုလုပ်ဖို့အတွက် Alfred ဟာ Langfuse ကဲ့သို့သော Observability Tool တစ်ခုကို အသုံးပြုပြီး Agent ကို ခြေရာခံ စောင့်ကြည့်နိုင်ပါတယ်။ + +ပထမဦးစွာ၊ Langfuse ကို Install လုပ်ပါမယ်။ +```python +%pip install -q langfuse +``` + +ဒုတိယအနေဖြင့်၊ Langchain ကို Install လုပ်ပါမယ် (LangFuse ကို အသုံးပြုရန် LangChain လိုအပ်ပါတယ်)။ +```python +%pip install langchain +``` + +ထို့နောက်၊ Langfuse API Key များနှင့် Host Address များကို Environment Variable များအဖြစ် ထည့်သွင်းပါမယ်။ သင်၏ Langfuse Credentials များကို [Langfuse Cloud](https://cloud.langfuse.com) တွင် စာရင်းသွင်းခြင်းဖြင့် ရယူနိုင်ပါတယ်။ + +```python +import os + +# Get keys for your project from the project settings page: https://cloud.langfuse.com +os.environ["LANGFUSE_PUBLIC_KEY"] = "pk-lf-..." +os.environ["LANGFUSE_SECRET_KEY"] = "sk-lf-..." +os.environ["LANGFUSE_HOST"] = "https://cloud.langfuse.com" # 🇪🇺 EU region +# os.environ["LANGFUSE_HOST"] = "https://us.cloud.langfuse.com" # 🇺🇸 US region +``` + +ပြီးနောက်၊ [Langfuse `callback_handler`](https://langfuse.com/docs/integrations/langchain/tracing#add-langfuse-to-your-langchain-application) ကို Configure လုပ်ပြီး Graph ကို ခေါ်ဆိုရာတွင် `config={"callbacks": [langfuse_handler]}` ကို ထည့်သွင်းခြင်းဖြင့် Agent ကို Instrument လုပ်ပါမယ်။ + +```python +from langfuse.langchain import CallbackHandler + +# LangGraph/Langchain (tracing) အတွက် Langfuse CallbackHandler ကို စတင်ခြင်း +langfuse_handler = CallbackHandler() + +# တရားဝင် Email ကို စီမံဆောင်ရွက်ခြင်း +legitimate_result = compiled_graph.invoke( + input={"email": legitimate_email, "is_spam": None, "spam_reason": None, "email_category": None, "draft_response": None, "messages": []}, + config={"callbacks": [langfuse_handler]} +) +``` + +Alfred အခုဆိုရင် ချိတ်ဆက်ပြီးပါပြီ 🔌! LangGraph မှ Run များကို Langfuse တွင် မှတ်တမ်းတင်နေပြီး၊ Agent ၏ အပြုအမူကို အပြည့်အဝ မြင်နိုင်စွမ်း ရရှိသွားပါပြီ။ ဒီ Setup ဖြင့် သူသည် ယခင် Run များကို ပြန်လည်ကြည့်ရှုပြီး Mail Sorting Agent ကို ပိုမိုကောင်းမွန်အောင် ချိန်ညှိနိုင်ပါပြီ။ + +![Example trace in Langfuse](https://langfuse.com/images/cookbook/huggingface-agent-course/langgraph-trace-legit.png) + +_[တရားဝင် Email ဖြင့် Trace ၏ Public Link](https://cloud.langfuse.com/project/cloramnkj0002jz088vzn1ja4/traces/f5d6d72e-20af-4357-b232-af44c3728a7b?timestamp=2025-03-17T10%3A13%3A28.413Z&observation=6997ba69-043f-4f77-9445-700a033afba1)_ + +## ကျွန်ုပ်တို့၏ Graph ကို မြင်သာအောင် ပြသခြင်း (Visualizing Our Graph) + +LangGraph သည် ကျွန်ုပ်တို့၏ Workflow ကို မြင်သာအောင် ပြသနိုင်ပြီး၊ ၎င်း၏ Structure ကို ပိုမိုနားလည်ရန်နှင့် Debug လုပ်ရန် ကူညီပေးပါတယ်။ + +```python +compiled_graph.get_graph().draw_mermaid_png() +``` +Mail LangGraph + +၎င်းသည် ကျွန်ုပ်တို့၏ Nodes များ မည်သို့ ချိတ်ဆက်ထားပုံနှင့် အခြေအနေအရင်းခံ လမ်းကြောင်းခွဲများ မည်သို့သွားနိုင်ပုံကို ပုံဖြင့် ပြသပေးပါတယ်။ + +## ကျွန်ုပ်တို့ တည်ဆောက်ခဲ့သည်များ + +ကျွန်တော်တို့ဟာ အောက်ပါ လုပ်ဆောင်ချက်များ ပါဝင်တဲ့ ပြည့်စုံတဲ့ Email စီမံဆောင်ရွက်မှု Workflow တစ်ခုကို ဖန်တီးခဲ့ပါတယ်။ + +1. ဝင်လာသော Email တစ်စောင်ကို ယူခြင်း။ +2. LLM ကို အသုံးပြုပြီး Spam သို့မဟုတ် တရားဝင်အဖြစ် အမျိုးအစားခွဲခြားခြင်း။ +3. Spam များကို ဖယ်ရှားခြင်းဖြင့် ကိုင်တွယ်ခြင်း။ +4. တရားဝင် Email များအတွက် တုံ့ပြန်စာ မူကြမ်းရေးဆွဲပြီး Mr. Hugg ကို အသိပေးခြင်း။ + +ဒါဟာ LangGraph ရဲ့ စွမ်းအားကို ပြသပြီး၊ ရှင်းလင်းပြီး စနစ်တကျ ဖွဲ့စည်းထားတဲ့ Flow ကို ထိန်းသိမ်းရင်း LLM များနဲ့ ရှုပ်ထွေးတဲ့ Workflow တွေကို ဘယ်လို စီမံခန့်ခွဲရမလဲဆိုတာကို ပြသပေးပါတယ်။ + +## အဓိက သင်ခန်းစာများ (Key Takeaways) + +* **State Management:** Email စီမံဆောင်ရွက်မှု၏ အချက်အလက်အားလုံးကို ခြေရာခံရန် ပြည့်စုံသော State ကို သတ်မှတ်ခဲ့ခြင်း။ +* **Node Implementation:** LLM နှင့် အပြန်အလှန် ဆက်သွယ်သော လုပ်ဆောင်ချက် Nodes များကို ဖန်တီးခဲ့ခြင်း။ +* **Conditional Routing:** Email အမျိုးအစားခွဲခြားမှုအပေါ် အခြေခံ၍ လမ်းကြောင်းခွဲခြင်း Logic ကို အကောင်အထည်ဖော်ခဲ့ခြင်း။ +* **Terminal States:** Workflow ပြီးဆုံးသည့် အမှတ်များကို သတ်မှတ်ရန် `END` Node ကို အသုံးပြုခဲ့ခြင်း။ + +## နောက်ထပ် ဘာတွေ လေ့လာမလဲ? + +နောက်အပိုင်းမှာတော့ LangGraph ရဲ့ ပိုမိုအဆင့်မြင့်တဲ့ Features တွေကို လေ့လာသွားပါမယ်။ ၎င်းတို့မှာ Workflow အတွင်း လူသားတို့၏ ပါဝင်မှုကို ကိုင်တွယ်ခြင်းနှင့် အခြေအနေများစွာအပေါ် အခြေခံသော ပိုမိုရှုပ်ထွေးသည့် လမ်းကြောင်းခွဲခြင်း Logic များကို အကောင်အထည်ဖော်ခြင်းတို့ ပါဝင်ပါတယ်။ \ No newline at end of file diff --git a/units/my/unit2/langgraph/introduction.mdx b/units/my/unit2/langgraph/introduction.mdx new file mode 100644 index 00000000..4dbc0bd8 --- /dev/null +++ b/units/my/unit2/langgraph/introduction.mdx @@ -0,0 +1,34 @@ +# `LangGraph` ကို မိတ်ဆက်ခြင်း + +Unit 2.3 Thumbnail + +ကျွန်တော်တို့ရဲ့ ခရီးစဉ်ရဲ့ နောက်ထပ်အပိုင်းကို ကြိုဆိုပါတယ်။ ဒီအပိုင်းမှာ ရှုပ်ထွေးတဲ့ LLM (Large Language Model) လုပ်ငန်းအဆင့်ဆင့်တွေကို စနစ်တကျ စီမံခန့်ခွဲနိုင်ဖို့ ဒီဇိုင်းထုတ်ထားတဲ့ [`LangGraph`](https://github.com/langchain-ai/langgraph) Framework ကို အသုံးပြုပြီး **Application တွေ ဘယ်လိုတည်ဆောက်ရမလဲ** ဆိုတာကို သင်ယူရမှာ ဖြစ်ပါတယ်။ + +`LangGraph` ဆိုတာကတော့ သင့်ရဲ့ Agent ရဲ့ စီးဆင်းမှု (Flow) အပေါ်မှာ **ထိန်းချုပ်နိုင်တဲ့ ကိရိယာများ** ကို ပေးခြင်းအားဖြင့် **ထုတ်လုပ်မှုအဆင့် (Production-ready)** Application တွေကို တည်ဆောက်နိုင်စေမယ့် Framework တစ်ခုပဲ ဖြစ်ပါတယ်။ + +> [!NOTE] +> **LangGraph ရဲ့ အဓိက အားသာချက်:** LangGraph ဟာ LangChain ရဲ့ အစိတ်အပိုင်းတစ်ခုဖြစ်ပေမယ့်၊ သူက Agent တွေရဲ့ လုပ်ဆောင်ချက်တွေကို **Graph (ပုံစံချထားသော အဆင့်များ)** အနေနဲ့ မြင်သာအောင် စီမံခန့်ခွဲနိုင်တဲ့အတွက်၊ Agent တွေ ဘယ်အဆင့်မှာ ဘာလုပ်ရမယ်၊ ဘယ်လို ဆုံးဖြတ်ချက်ချရမယ်ဆိုတာကို ပိုမိုတိကျစွာ ထိန်းချုပ်နိုင်ပါတယ်။ ဒါကြောင့် ရှုပ်ထွေးတဲ့ AI Application တွေအတွက် မရှိမဖြစ် လိုအပ်ပါတယ်။ + +## Module ခြုံငုံသုံးသပ်ချက် (Module Overview) + +ဒီအခန်းမှာ သင်လေ့လာရမယ့် အကြောင်းအရာတွေကတော့- + +### ⭐️ ၁။ [LangGraph ဆိုတာ ဘာလဲ၊ ဘယ်အချိန်မှာ အသုံးပြုသင့်သလဲ။](./when_to_use_langgraph) +### ⭐️ ၂။ [LangGraph ရဲ့ အခြေခံ တည်ဆောက်မှု အစိတ်အပိုင်းများ](./building_blocks) +### ⭐️ ၃။ [Alfred၊ စာပို့ခွဲခြားပေးသော Butler Agent](./first_graph) +### ⭐️ ၄။ [Alfred၊ Document ခွဲခြမ်းစိတ်ဖြာသော Agent](./document_analysis_agent) +### ⭐️ ၅။ [Quiz](./quizz1) + +> [!WARNING] +> ဒီအပိုင်းက ဥပမာတွေကို လေ့ကျင့်ဖို့အတွက် စွမ်းဆောင်ရည်မြင့် LLM/VLM (Vision Language Model) ကို အသုံးပြုဖို့ လိုအပ်ပါတယ်။ ကျွန်တော်တို့ကတော့ LangGraph နဲ့ အကောင်းဆုံး တွဲဖက်အသုံးပြုနိုင်တဲ့ GPT-4o API ကို အသုံးပြုပြီး လုပ်ဆောင်ခဲ့ပါတယ်။ + +ဒီအခန်းရဲ့ အဆုံးမှာဆိုရင် သင်ဟာ ခိုင်မာတဲ့၊ စနစ်တကျ စီမံထားတဲ့၊ ထုတ်လုပ်မှုအဆင့်အတွက် အသင့်ဖြစ်နေတဲ့ Application တွေကို တည်ဆောက်နိုင်ဖို့အတွက် အသင့်ဖြစ်နေပါပြီ! + +ဒါပေမယ့် ဒီအပိုင်းဟာ LangGraph ကို မိတ်ဆက်ပေးတဲ့ အပိုင်းသာ ဖြစ်ပါတယ်။ ပိုမိုအဆင့်မြင့်တဲ့ အကြောင်းအရာတွေကို LangChain Academy ရဲ့ အခမဲ့ Course ဖြစ်တဲ့ [Introduction to LangGraph](https://academy.langchain.com/courses/intro-to-langgraph) မှာ ဆက်လက်လေ့လာနိုင်ပါတယ်။ + +ကဲ... စတင်လိုက်ရအောင်! + +## အရင်းအမြစ်များ (Resources) + +* [LangGraph Agents](https://langchain-ai.github.io/langgraph/) - LangGraph Agent ဥပမာများ +* [LangChain academy](https://academy.langchain.com/courses/intro-to-langgraph) - LangChain မှ LangGraph အကြောင်း အပြည့်အစုံ သင်ကြားပေးသော Course \ No newline at end of file diff --git a/units/my/unit2/langgraph/quiz1.mdx b/units/my/unit2/langgraph/quiz1.mdx new file mode 100644 index 00000000..10c2f5e9 --- /dev/null +++ b/units/my/unit2/langgraph/quiz1.mdx @@ -0,0 +1,123 @@ +# LangGraph အကြောင်း နားလည်မှုကို စစ်ဆေးခြင်း + +LangGraph အကြောင်း သင်နားလည်မှုကို အမြန်စစ်ဆေးနိုင်ဖို့အတွက် ဒီ Quiz လေးနဲ့ စမ်းသပ်ကြည့်ရအောင်! ဒါက ကျွန်တော်တို့ အခုထိ လေ့လာခဲ့တဲ့ အဓိက အယူအဆတွေကို ပိုပြီး ခိုင်မာစေဖို့ ကူညီပါလိမ့်မယ်။ + +ဒီ Quiz က မဖြစ်မနေ ဖြေဆိုရမှာ မဟုတ်သလို အမှတ်ပေးမှာလည်း မဟုတ်ပါဘူး။ + +### Q1: LangGraph ရဲ့ အဓိက ရည်ရွယ်ချက်က ဘာလဲ။ + +LangGraph ကို ဘာအတွက် ဒီဇိုင်းထုတ်ထားသလဲဆိုတာကို အကောင်းဆုံး ဖော်ပြတဲ့ အချက်က ဘာလဲ။ + + + +--- + +### Q2: "ထိန်းချုပ်မှုနှင့် လွတ်လပ်မှု" (Control vs Freedom) ကုန်သွယ်မှု (Trade-off) မှာ LangGraph က ဘယ်နေရာမှာ ရပ်တည်သလဲ။ + +Agent ဒီဇိုင်းအတွက် LangGraph ရဲ့ ချဉ်းကပ်ပုံကို အကောင်းဆုံး ဖော်ပြတဲ့ အချက်က ဘာလဲ။ + + + +--- + +### Q3: LangGraph မှာ State (အခြေအနေ) ရဲ့ အခန်းကဏ္ဍက ဘာလဲ။ + +LangGraph ရှိ State ကို အတိကျဆုံး ဖော်ပြချက်ကို ရွေးချယ်ပါ။ + + + +### Q4: LangGraph မှာ Conditional Edge (အခြေအနေအရ လမ်းကြောင်း) ဆိုတာ ဘာလဲ။ + +အတိကျဆုံး ဖော်ပြချက်ကို ရွေးချယ်ပါ။ + + + +--- + +### Q5: LLM များတွင် ဖြစ်တတ်သော Hallucination (အမှားအယွင်း ထုတ်ပေးခြင်း) ပြဿနာကို LangGraph က ဘယ်လို ကူညီဖြေရှင်းပေးသလဲ။ + +အကောင်းဆုံး အဖြေကို ရွေးချယ်ပါ။ + + + +Quiz ပြီးဆုံးသွားတဲ့အတွက် ဂုဏ်ယူပါတယ်! 🎉 အကယ်၍ မေးခွန်းတစ်ခုခု လွဲချော်သွားခဲ့ရင်၊ သင့်ရဲ့ နားလည်မှုကို ခိုင်မာစေဖို့အတွက် အရင်အပိုင်းတွေကို ပြန်လည်သုံးသပ်ဖို့ စဉ်းစားပါ။ နောက်အပိုင်းမှာတော့ LangGraph ရဲ့ ပိုမိုအဆင့်မြင့်တဲ့ Features တွေကို လေ့လာပြီး ပိုမိုရှုပ်ထွေးတဲ့ Agent Workflow တွေကို ဘယ်လိုတည်ဆောက်ရမလဲဆိုတာကို ကြည့်ရှုသွားပါမယ်။ \ No newline at end of file diff --git a/units/my/unit2/langgraph/when_to_use_langgraph.mdx b/units/my/unit2/langgraph/when_to_use_langgraph.mdx new file mode 100644 index 00000000..c2abecf9 --- /dev/null +++ b/units/my/unit2/langgraph/when_to_use_langgraph.mdx @@ -0,0 +1,68 @@ +# `LangGraph` ဆိုတာ ဘာလဲ? + +`LangGraph` ဆိုတာ [LangChain](https://www.langchain.com/) ကနေ ဖန်တီးထားတဲ့ Framework တစ်ခုဖြစ်ပြီး **LLM (Large Language Model) တွေကို ပေါင်းစပ်အသုံးပြုထားတဲ့ Application တွေရဲ့ ထိန်းချုပ်မှု စီးဆင်းမှုကို စီမံခန့်ခွဲဖို့** အဓိက ရည်ရွယ်ပါတယ်။ + +## `LangGraph` နဲ့ `LangChain` ကွာခြားပါသလား? + +LangChain ကတော့ Models တွေ၊ Retrieval (အချက်အလက် ပြန်လည်ရယူခြင်း)၊ LLM ခေါ်ဆိုမှုတွေနဲ့ Tool ခေါ်ဆိုမှုတွေအတွက် အသုံးပြုရလွယ်ကူတဲ့ Standard Interface တွေကို ပေးပါတယ်။ LangChain ရဲ့ Class တွေကို LangGraph မှာ အသုံးပြုနိုင်ပေမယ့်၊ မဖြစ်မနေ အသုံးပြုရမယ်လို့တော့ မရှိပါဘူး။ + +ဒီ Package နှစ်ခုဟာ မတူညီကြဘဲ သီးခြားစီ အသုံးပြုလို့ရပါတယ်။ ဒါပေမယ့် လက်တွေ့မှာတော့ Online မှာ တွေ့ရမယ့် Resource တွေအားလုံးက ဒီ Package နှစ်ခုကို တွဲဖက်ပြီး အသုံးပြုကြတာကို တွေ့ရပါလိမ့်မယ်။ + +## `LangGraph` ကို ဘယ်အချိန်မှာ အသုံးပြုသင့်သလဲ? + +### ထိန်းချုပ်မှု (Control) နှင့် လွတ်လပ်မှု (Freedom) + +AI Application တွေကို ဒီဇိုင်းဆွဲတဲ့အခါမှာ **ထိန်းချုပ်မှု (Control)** နဲ့ **လွတ်လပ်မှု (Freedom)** ဆိုတဲ့ အခြေခံ အပေးအယူ (Trade-off) တစ်ခုကို ရင်ဆိုင်ရပါတယ်။ + +* **လွတ်လပ်မှု (Freedom)** က သင့်ရဲ့ LLM ကို ပိုပြီး ဖန်တီးနိုင်စွမ်းရှိစေဖို့နဲ့ မမျှော်လင့်ထားတဲ့ ပြဿနာတွေကို ကိုင်တွယ်ဖြေရှင်းနိုင်ဖို့ နေရာပိုပေးပါတယ်။ +* **ထိန်းချုပ်မှု (Control)** ကတော့ ခန့်မှန်းနိုင်တဲ့ အပြုအမူ (Predictable Behavior) ကို သေချာစေဖို့နဲ့ လုံခြုံရေး စည်းမျဉ်းများ (Guardrails) ကို ထိန်းသိမ်းဖို့ ခွင့်ပြုပါတယ်။ + +*smolagents* မှာ တွေ့ရတဲ့ Code Agent တွေလို Agent တွေဟာ အလွန်လွတ်လပ်ပါတယ်။ ၎င်းတို့ဟာ Action Step တစ်ခုတည်းမှာ Tool မျိုးစုံကို ခေါ်ဆိုနိုင်တာ၊ ကိုယ်ပိုင် Tool တွေ ဖန်တီးနိုင်တာ စသဖြင့် လုပ်ဆောင်နိုင်ပါတယ်။ ဒါပေမယ့် ဒီလို လွတ်လပ်တဲ့ အပြုအမူက JSON နဲ့ အလုပ်လုပ်တဲ့ ရိုးရိုး Agent တွေထက် ခန့်မှန်းရခက်ပြီး ထိန်းချုပ်ရခက်စေနိုင်ပါတယ်။ + +`LangGraph` ကတော့ ဒီ Spectrum ရဲ့ တစ်ဖက်ခြမ်းမှာ ရှိပါတယ်။ သင့် Agent ရဲ့ လုပ်ဆောင်မှုအပေါ် **"ထိန်းချုပ်မှု"** လိုအပ်တဲ့အခါ LangGraph ဟာ အထူးကောင်းမွန်ပါတယ်။ + +LangGraph ဟာ သင့် Application တွေအပေါ် **ထိန်းချုပ်မှု** လိုအပ်တဲ့အခါ အထူးတန်ဖိုးရှိပါတယ်။ ၎င်းက သင့်ကို LLM ရဲ့ စွမ်းအားကို အသုံးချနေရင်းနဲ့ပင် ခန့်မှန်းနိုင်တဲ့ လုပ်ငန်းစဉ်အတိုင်း လိုက်နာတဲ့ Application တွေကို တည်ဆောက်ဖို့အတွက် Tool တွေကို ပေးပါတယ်။ + +ရိုးရိုးရှင်းရှင်း ပြောရရင်၊ သင့် Application မှာ သီးခြားနည်းလမ်းတစ်ခုနဲ့ စီမံခန့်ခွဲရမယ့် အဆင့်များစွာ ပါဝင်ပြီး၊ လမ်းဆုံလမ်းခွတိုင်းမှာ ဆုံးဖြတ်ချက်တွေ ချမှတ်ဖို့ လိုအပ်တယ်ဆိုရင်၊ **LangGraph က သင့်အတွက် လိုအပ်တဲ့ Structure ကို ပေးစွမ်းနိုင်ပါတယ်**။ + +ဥပမာအနေနဲ့၊ Document အချို့အပေါ် မေးခွန်းအချို့ကို ဖြေဆိုနိုင်တဲ့ LLM Assistant တစ်ခုကို တည်ဆောက်ချင်တယ်ဆိုပါစို့။ + +LLM တွေဟာ စာသားကို အကောင်းဆုံး နားလည်တဲ့အတွက်၊ မေးခွန်းကို မဖြေဆိုခင်မှာ ရှုပ်ထွေးတဲ့ ပုံစံတွေ (ဇယားများ၊ ဇယားကွက်များ) ကို စာသားအဖြစ် ပြောင်းလဲဖို့ လိုအပ်ပါလိမ့်မယ်။ ဒါပေမယ့် ဒီရွေးချယ်မှုက သင့်မှာရှိတဲ့ Document အမျိုးအစားပေါ် မူတည်ပါတယ်။ + +ဒီလို လမ်းခွဲခြင်း (Branching) ကို အောက်ပါအတိုင်း ကိုယ်စားပြုနိုင်ပါတယ်။ + +Control flow + +> 💡 **Tip:** ဘယ်ဘက်ခြမ်းက အပိုင်းဟာ Agent မဟုတ်ပါဘူး၊ ဘာလို့လဲဆိုတော့ ဒီနေရာမှာ Tool ခေါ်ဆိုမှု မပါဝင်လို့ပါ။ ဒါပေမယ့် ညာဘက်ခြမ်းက အပိုင်းကတော့ xls (Excel) ဖိုင်ကို မေးမြန်းဖို့အတွက် Code အချို့ (Pandas ကို ပြောင်းလဲပြီး စီမံခန့်ခွဲဖို့) ရေးဖို့ လိုအပ်ပါလိမ့်မယ်။ + +ဒီလို လမ်းခွဲခြင်းဟာ သတ်မှတ်ထားတဲ့ စည်းမျဉ်းအတိုင်း (Deterministic) ဖြစ်နိုင်သလို၊ LLM ရဲ့ ထွက်ရှိရလဒ်အပေါ် မူတည်ပြီး ဆုံးဖြတ်ချက်ချတဲ့အတွက် မသတ်မှတ်နိုင်တဲ့ (Undeterministic) လမ်းခွဲခြင်းမျိုးကိုလည်း ဒီဇိုင်းဆွဲနိုင်ပါတယ်။ + +LangGraph က အထူးကောင်းမွန်တဲ့ အခြေအနေများမှာ အောက်ပါတို့ ပါဝင်ပါတယ်- + +* **အဆင့်များစွာပါဝင်သော ဆင်ခြင်သုံးသပ်မှု လုပ်ငန်းစဉ်များ** (Multi-step reasoning processes) ကို Flow အပေါ် ရှင်းလင်းပြတ်သားစွာ ထိန်းချုပ်ရန် လိုအပ်ခြင်း။ +* **အဆင့်များကြားတွင် အခြေအနေကို ထိန်းသိမ်းထားရန် လိုအပ်သော Application များ** (Persistence of state)။ +* **AI စွမ်းရည်များနှင့် သတ်မှတ်ထားသော Logic များကို ပေါင်းစပ်ထားသော စနစ်များ**။ +* **လူသားပါဝင်သော ကြားဝင်ဆောင်ရွက်မှုများ လိုအပ်သော Workflows များ** (Human-in-the-loop interventions)။ +* **အစိတ်အပိုင်းများစွာ ပူးပေါင်းလုပ်ဆောင်ရသော ရှုပ်ထွေးသော Agent Architecture များ**။ + +အနှစ်ချုပ်အားဖြင့်၊ **လူသားတစ်ဦးအနေဖြင့်** ဖြစ်နိုင်သမျှ၊ လုပ်ဆောင်ချက်တစ်ခုစီရဲ့ ရလဒ်အပေါ် အခြေခံပြီး လုပ်ဆောင်ချက်များရဲ့ Flow ကို ဒီဇိုင်းဆွဲကာ၊ နောက်ထပ် ဘာကို လုပ်ဆောင်ရမယ်ဆိုတာကို ဆုံးဖြတ်တဲ့အခါမျိုးမှာ LangGraph ဟာ သင့်အတွက် မှန်ကန်တဲ့ Framework ဖြစ်ပါတယ်။ + +ကျွန်တော့်အမြင်အရတော့ `LangGraph` ဟာ လက်ရှိ Market မှာ **ထုတ်လုပ်မှုအတွက် အသင့်တော်ဆုံး (Production-ready) Agent Framework** ဖြစ်ပါတယ်။ + +## LangGraph ဘယ်လို အလုပ်လုပ်သလဲ? + +LangGraph ရဲ့ အဓိက အခြေခံမှာ သင့် Application ရဲ့ Flow ကို သတ်မှတ်ဖို့အတွက် **Directed Graph Structure** ကို အသုံးပြုခြင်းပဲ ဖြစ်ပါတယ်။ + +* **Nodes (Node များ)** သည် တစ်ဦးချင်း စီမံဆောင်ရွက်မှု အဆင့်များကို ကိုယ်စားပြုပါတယ် (ဥပမာ - LLM ကို ခေါ်ဆိုခြင်း၊ Tool တစ်ခုကို အသုံးပြုခြင်း သို့မဟုတ် ဆုံးဖြတ်ချက်ချခြင်း)။ +* **Edges (Edge များ)** သည် အဆင့်များကြားတွင် ဖြစ်နိုင်သော ကူးပြောင်းမှုများကို သတ်မှတ်ပါတယ်။ +* **State (အခြေအနေ)** သည် အသုံးပြုသူမှ သတ်မှတ်ထားပြီး လုပ်ဆောင်မှုအတွင်း Nodes များကြားတွင် ထိန်းသိမ်းထားကာ ပေးပို့ပါတယ်။ နောက်ထပ် မည်သည့် Node ကို ပစ်မှတ်ထားရမည်ကို ဆုံးဖြတ်သည့်အခါ လက်ရှိ State ကို ကြည့်ရှုပါတယ်။ + +ဒီအခြေခံ Blocks တွေကို နောက်အခန်းမှာ ပိုမိုနက်ရှိုင်းစွာ လေ့လာသွားပါမယ်။ + +## ရိုးရိုး Python နဲ့ ဘာကွာခြားလဲ? LangGraph ကို ဘာကြောင့် လိုအပ်တာလဲ? + +"ဒီ Flow တွေအားလုံးကို ကိုင်တွယ်ဖို့အတွက် `if-else` Statement တွေနဲ့ ရိုးရိုး Python Code ကို ရေးလို့ရတာပဲ မဟုတ်လား?" လို့ သင်တွေးမိနိုင်ပါတယ်။ + +နည်းပညာအရ မှန်ကန်ပေမယ့်၊ LangGraph ဟာ ရှုပ်ထွေးတဲ့ စနစ်တွေကို တည်ဆောက်ရာမှာ ရိုးရိုး Python ထက် **အားသာချက်အချို့** ကို ပေးပါတယ်။ LangGraph မပါဘဲ အလားတူ Application ကို တည်ဆောက်နိုင်ပေမယ့်၊ LangGraph က သင့်အတွက် ပိုမိုလွယ်ကူတဲ့ Tool တွေနဲ့ Abstraction တွေကို တည်ဆောက်ပေးထားပါတယ်။ + +၎င်းတွင် State များ၊ Visualization (မြင်ကွင်းဖြင့် ပြသခြင်း)၊ Logging (မှတ်တမ်းတင်ခြင်း/Traces)၊ Built-in Human-in-the-loop (လူသားပါဝင်မှု) နှင့် အခြားအရာများ ပါဝင်ပါတယ်။ \ No newline at end of file diff --git a/units/my/unit2/llama-index/README.md b/units/my/unit2/llama-index/README.md new file mode 100644 index 00000000..56bb0b38 --- /dev/null +++ b/units/my/unit2/llama-index/README.md @@ -0,0 +1,15 @@ +# Table of Contents + +This LlamaIndex frame outline is part of unit 2 of the course. You can access the unit 2 about LlamaIndex on hf.co/learn 👉 here + +| Title | Description | +| --- | --- | +| [Introduction](introduction.mdx) | Introduction to LlamaIndex | +| [LlamaHub](llama-hub.mdx) | LlamaHub: a registry of integrations, agents and tools | +| [Components](components.mdx) | Components: the building blocks of workflows | +| [Tools](tools.mdx) | Tools: how to build tools in LlamaIndex | +| [Quiz 1](quiz1.mdx) | Quiz 1 | +| [Agents](agents.mdx) | Agents: how to build agents in LlamaIndex | +| [Workflows](workflows.mdx) | Workflows: a sequence of steps, events made of components that are executed in order | +| [Quiz 2](quiz2.mdx) | Quiz 2 | +| [Conclusion](conclusion.mdx) | Conclusion | diff --git a/units/my/unit2/llama-index/agents.mdx b/units/my/unit2/llama-index/agents.mdx new file mode 100644 index 00000000..1bd83e33 --- /dev/null +++ b/units/my/unit2/llama-index/agents.mdx @@ -0,0 +1,166 @@ +# LlamaIndex တွင် Agent များကို အသုံးပြုခြင်း + +ကျွန်တော်တို့ အရင်က သိခဲ့တဲ့ အကူအညီပေးတတ်တဲ့ Alfred ဆိုတဲ့ Agent လေးကို မှတ်မိကြဦးမယ် ထင်ပါတယ်။ အခုဆိုရင် သူဟာ Upgrade လုပ်ဖို့ အချိန်တန်ပါပြီ! + +LlamaIndex မှာ ရရှိနိုင်တဲ့ Tool တွေကို နားလည်ပြီးတဲ့နောက်မှာ၊ Alfred ကို ကျွန်တော်တို့ ပိုမိုကောင်းမွန်စွာ ဝန်ဆောင်မှုပေးနိုင်ဖို့အတွက် စွမ်းဆောင်ရည်အသစ်တွေ ပေးနိုင်ပါပြီ။ + +ဒါပေမယ့် ဆက်မသွားခင်မှာ Alfred လို Agent တွေ ဘယ်လို အလုပ်လုပ်သလဲဆိုတာကို ပြန်လည် သတိရကြရအောင်။ Unit 1 မှာ ကျွန်တော်တို့ လေ့လာခဲ့တာက- + +> Agent ဆိုတာဟာ အသုံးပြုသူ သတ်မှတ်ထားတဲ့ ရည်မှန်းချက်တစ်ခုကို အောင်မြင်ဖို့အတွက် AI Model ကို အသုံးပြုပြီး သူ့ရဲ့ ပတ်ဝန်းကျင်နဲ့ ထိတွေ့ဆက်ဆံတဲ့ စနစ်တစ်ခု ဖြစ်ပါတယ်။ ၎င်းဟာ လုပ်ငန်းတာဝန်တွေကို ပြီးမြောက်စေဖို့အတွက် ဆင်ခြင်သုံးသပ်ခြင်း (Reasoning)၊ စီမံကိန်းချမှတ်ခြင်း (Planning) နဲ့ လုပ်ဆောင်ချက် အကောင်အထည်ဖော်ခြင်း (Action Execution) (ပြင်ပ Tool များမှတစ်ဆင့်) တို့ကို ပေါင်းစပ်ထားပါတယ်။ + +LlamaIndex ဟာ **အဓိက ဆင်ခြင်သုံးသပ်နိုင်သော Agent အမျိုးအစား (၃) မျိုး** ကို ထောက်ပံ့ပေးပါတယ်။ + +![Agents](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/llama-index/agents.png) + +1. `Function Calling Agents` - ၎င်းတို့သည် သီးခြား Function များကို ခေါ်ဆိုနိုင်သော AI Model များနှင့် အလုပ်လုပ်ပါတယ်။ +2. `ReAct Agents` - ၎င်းတို့သည် Chat သို့မဟုတ် Text Endpoint များ လုပ်ဆောင်နိုင်သော မည်သည့် AI နှင့်မဆို အလုပ်လုပ်နိုင်ပြီး ရှုပ်ထွေးသော ဆင်ခြင်သုံးသပ်မှု လုပ်ငန်းများကို ကိုင်တွယ်ဖြေရှင်းနိုင်ပါတယ်။ +3. `Advanced Custom Agents` - ၎င်းတို့သည် ပိုမိုရှုပ်ထွေးသော လုပ်ငန်းများနှင့် Workflow များကို ကိုင်တွယ်ဖြေရှင်းရန် ပိုမိုရှုပ်ထွေးသော နည်းလမ်းများကို အသုံးပြုပါတယ်။ + +> [!TIP] +> Advanced Agent များအကြောင်း ပိုမိုသိရှိလိုပါက [BaseWorkflowAgent](https://github.com/run-llama/llama_index/blob/main/llama-index-core/llama_index/core/agent/workflow/base_agent.py) တွင် ရှာဖွေနိုင်ပါတယ်။ + +## Agent များကို စတင်တည်ဆောက်ခြင်း (Initialising Agents) + +> [!TIP] +> [ဒီ Notebook](https://huggingface.co/agents-course/notebooks/blob/main/unit2/llama-index/agents.ipynb) ထဲက Code တွေကို Google Colab ကို အသုံးပြုပြီး လိုက်လံလုပ်ဆောင်နိုင်ပါတယ်။ + +Agent တစ်ခုကို ဖန်တီးဖို့အတွက်၊ ကျွန်တော်တို့ဟာ Agent ရဲ့ စွမ်းဆောင်ရည်တွေကို သတ်မှတ်ပေးမယ့် **Functions/Tools အစုအဝေးတစ်ခု** ကို ပေးအပ်ခြင်းဖြင့် စတင်ရပါမယ်။ + +အခြေခံ Tool အချို့နဲ့ Agent တစ်ခုကို ဘယ်လို ဖန်တီးရမလဲဆိုတာ ကြည့်ကြရအောင်။ ဒီလို ရေးသားနေချိန်မှာ Agent ဟာ Function Calling API (ရရှိနိုင်ပါက) ကို အလိုအလျောက် အသုံးပြုမှာဖြစ်ပြီး၊ မရရှိပါက Standard ReAct Agent Loop ကို အသုံးပြုမှာ ဖြစ်ပါတယ်။ + +Tool/Function API ကို ထောက်ပံ့ပေးတဲ့ LLM တွေဟာ အတော်လေး အသစ်ဖြစ်ပေမယ့်၊ ၎င်းတို့ဟာ သီးခြား Prompt ပေးစရာမလိုဘဲ LLM ကို ပေးထားတဲ့ Schema တွေအပေါ် အခြေခံပြီး Tool Calls တွေကို ဖန်တီးခွင့်ပြုခြင်းဖြင့် Tool တွေကို ခေါ်ဆိုဖို့အတွက် အစွမ်းထက်တဲ့ နည်းလမ်းတစ်ခုကို ပေးပါတယ်။ + +ReAct Agent တွေဟာလည်း ရှုပ်ထွေးတဲ့ ဆင်ခြင်သုံးသပ်မှု လုပ်ငန်းတွေမှာ ကောင်းမွန်ပြီး Chat သို့မဟုတ် Text Completion စွမ်းရည်ရှိတဲ့ မည်သည့် LLM နဲ့မဆို အလုပ်လုပ်နိုင်ပါတယ်။ ၎င်းတို့ဟာ ပိုမို အသေးစိတ်ကျပြီး၊ ၎င်းတို့ လုပ်ဆောင်တဲ့ သီးခြား Actions တွေရဲ့ နောက်ကွယ်က ဆင်ခြင်သုံးသပ်မှုတွေကို ပြသပေးပါတယ်။ + +```python +from llama_index.llms.huggingface_api import HuggingFaceInferenceAPI +from llama_index.core.agent.workflow import AgentWorkflow +from llama_index.core.tools import FunctionTool + +# Tool ဥပမာကို သတ်မှတ်ခြင်း -- Type annotations, function names, နှင့် docstrings များအားလုံးကို parsed schemas များတွင် ထည့်သွင်းထားပါသည်။ +def multiply(a: int, b: int) -> int: + """ဂဏန်းနှစ်လုံးကို မြှောက်ပြီး ရလဒ်ကို ပြန်ပေးသည်""" + return a * b + +# llm ကို စတင်တည်ဆောက်ခြင်း +llm = HuggingFaceInferenceAPI(model_name="Qwen/Qwen2.5-Coder-32B-Instruct") + +# agent ကို စတင်တည်ဆောက်ခြင်း +agent = AgentWorkflow.from_tools_or_functions( + [FunctionTool.from_defaults(multiply)], + llm=llm +) +``` + +**Agent များသည် မူရင်းအတိုင်း Stateless (အခြေအနေကို မမှတ်မိသော) ဖြစ်ပါတယ်**။ သို့သော် ၎င်းတို့သည် `Context` Object ကို အသုံးပြုပြီး အတိတ်က ထိတွေ့ဆက်ဆံမှုများကို မှတ်မိနိုင်ပါတယ်။ + +ဒါဟာ မက်ဆေ့ချ်များစွာကို ဖြတ်သန်းပြီး Context ကို ထိန်းသိမ်းထားဖို့ လိုအပ်တဲ့ Chatbot တစ်ခုလိုမျိုး၊ ဒါမှမဟုတ် အချိန်ကြာလာတာနဲ့အမျှ တိုးတက်မှုကို ခြေရာခံဖို့ လိုအပ်တဲ့ Task Manager တစ်ခုလိုမျိုး အရင်က ထိတွေ့ဆက်ဆံမှုတွေကို မှတ်မိဖို့ လိုအပ်တဲ့ Agent တစ်ခုကို အသုံးပြုချင်တယ်ဆိုရင် အသုံးဝင်နိုင်ပါတယ်။ + +```python +# stateless (အခြေအနေ မမှတ်မိ) +response = await agent.run("What is 2 times 2?") + +# remembering state (အခြေအနေ မှတ်မိ) +from llama_index.core.workflow import Context + +ctx = Context(agent) + +response = await agent.run("My name is Bob.", ctx=ctx) +response = await agent.run("What was my name again?", ctx=ctx) +``` + +LlamaIndex မှ Agent များသည် Python ၏ `await` Operator ကို အသုံးပြုသောကြောင့် Async (တစ်ပြိုင်နက်တည်း လုပ်ဆောင်နိုင်သော) ဖြစ်သည်ကို သတိပြုမိပါလိမ့်မယ်။ Python တွင် Async Code ကို အသစ်ဖြစ်ပါက သို့မဟုတ် ပြန်လည်လေ့လာရန် လိုအပ်ပါက၊ ၎င်းတို့တွင် [အလွန်ကောင်းမွန်သော Async Guide](https://docs.llamaindex.ai/en/stable/getting_started/async_python/) ရှိပါတယ်။ + +အခြေခံများကို သိရှိပြီးနောက်၊ ကျွန်တော်တို့ရဲ့ Agent တွေမှာ ပိုမိုရှုပ်ထွေးတဲ့ Tool တွေကို ဘယ်လို အသုံးပြုနိုင်မလဲဆိုတာ ကြည့်ကြရအောင်။ + +## QueryEngineTools ဖြင့် RAG Agent များ ဖန်တီးခြင်း + +**Agentic RAG ဆိုတာဟာ သင့်ရဲ့ ဒေတာအကြောင်း မေးခွန်းတွေကို ဖြေဖို့အတွက် Agent တွေကို အသုံးပြုတဲ့ အစွမ်းထက်တဲ့ နည်းလမ်းတစ်ခု ဖြစ်ပါတယ်။** ကျွန်တော်တို့ရဲ့ Alfred ကို မေးခွန်းတွေ ဖြေဖို့အတွက် Tool အမျိုးမျိုးကို ပေးနိုင်ပါတယ်။ + +ဒါပေမယ့် Document တွေအပေါ်မှာ မေးခွန်းကို အလိုအလျောက် ဖြေမယ့်အစား၊ Alfred ဟာ မေးခွန်းကို ဖြေဖို့အတွက် အခြား Tool သို့မဟုတ် Flow တစ်ခုခုကို အသုံးပြုဖို့ ဆုံးဖြတ်နိုင်ပါတယ်။ + +![Agentic RAG](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/llama-index/agentic-rag.png) + +`QueryEngine` ကို Agent တစ်ခုအတွက် **Tool အဖြစ် ထုပ်ပိုးခြင်း (Wrap)** ဟာ လွယ်ကူပါတယ်။ + +ဒီလိုလုပ်တဲ့အခါမှာ ကျွန်တော်တို့ဟာ **နာမည်နဲ့ ဖော်ပြချက် (Name and Description)** ကို သတ်မှတ်ပေးဖို့ လိုအပ်ပါတယ်။ LLM ဟာ Tool ကို မှန်ကန်စွာ အသုံးပြုနိုင်ဖို့အတွက် ဒီအချက်အလက်တွေကို အသုံးပြုမှာ ဖြစ်ပါတယ်။ + +[Component Section](components) မှာ ကျွန်တော်တို့ ဖန်တီးခဲ့တဲ့ `QueryEngine` ကို အသုံးပြုပြီး `QueryEngineTool` ကို ဘယ်လို Load လုပ်ရမလဲဆိုတာ ကြည့်ကြရအောင်။ + +```python +from llama_index.core.tools import QueryEngineTool + +query_engine = index.as_query_engine(llm=llm, similarity_top_k=3) # Components in LlamaIndex အပိုင်းတွင် ပြထားသည့်အတိုင်း + +query_engine_tool = QueryEngineTool.from_defaults( + query_engine=query_engine, + name="name", + description="a specific description", + return_direct=False, +) +query_engine_agent = AgentWorkflow.from_tools_or_functions( + [query_engine_tool], + llm=llm, + system_prompt="You are a helpful assistant that has access to a database containing persona descriptions. " +) +``` + +## Multi-agent စနစ်များ ဖန်တီးခြင်း (Creating Multi-agent systems) + +`AgentWorkflow` Class ဟာ Multi-agent စနစ်များကိုလည်း တိုက်ရိုက် ထောက်ပံ့ပေးပါတယ်။ Agent တစ်ခုစီကို နာမည်နဲ့ ဖော်ပြချက် ပေးခြင်းအားဖြင့်၊ စနစ်ဟာ Active Speaker တစ်ဦးတည်းကို ထိန်းသိမ်းထားပြီး Agent တစ်ခုစီက အခြား Agent တစ်ခုဆီကို အလုပ်လွှဲပြောင်းပေးနိုင်ပါတယ်။ + +Agent တစ်ခုစီရဲ့ လုပ်ငန်းနယ်ပယ်ကို ကျဉ်းမြောင်းအောင် လုပ်ဆောင်ခြင်းအားဖြင့်၊ အသုံးပြုသူ မက်ဆေ့ချ်တွေကို တုံ့ပြန်တဲ့အခါ ၎င်းတို့ရဲ့ ယေဘုယျ တိကျမှုကို မြှင့်တင်ပေးနိုင်ပါတယ်။ + +LlamaIndex မှ Agent များသည် ပိုမိုရှုပ်ထွေးပြီး Custom ဖြစ်သော အခြေအနေများအတွက် အခြား Agent များအတွက် **Tool များအဖြစ် တိုက်ရိုက် အသုံးပြုနိုင်ပါတယ်**။ + +```python +from llama_index.core.agent.workflow import ( + AgentWorkflow, + FunctionAgent, + ReActAgent, +) + +# Tool အချို့ကို သတ်မှတ်ခြင်း +def add(a: int, b: int) -> int: + """ဂဏန်းနှစ်လုံးကို ပေါင်းသည်""" + return a + b + + +def subtract(a: int, b: int) -> int: + """ဂဏန်းနှစ်လုံးကို နုတ်သည်""" + return a - b + + +# Agent Config များကို ဖန်တီးခြင်း +# မှတ်ချက်: ဤနေရာတွင် FunctionAgent သို့မဟုတ် ReActAgent ကို အသုံးပြုနိုင်ပါသည်။ +# FunctionAgent သည် Function Calling API ပါသော LLM များအတွက် အလုပ်လုပ်သည်။ +# ReActAgent သည် မည်သည့် LLM အတွက်မဆို အလုပ်လုပ်သည်။ +calculator_agent = ReActAgent( + name="calculator", + description="Performs basic arithmetic operations", + system_prompt="You are a calculator assistant. Use your tools for any math operation.", + tools=[add, subtract], + llm=llm, +) + +query_agent = ReActAgent( + name="info_lookup", + description="Looks up information about XYZ", + system_prompt="Use your tool to query a RAG system to answer information about XYZ", + tools=[query_engine_tool], + llm=llm +) + +# Workflow ကို ဖန်တီးပြီး လုပ်ဆောင်ခြင်း +agent = AgentWorkflow( + agents=[calculator_agent, query_agent], root_agent="calculator" +) + +# စနစ်ကို လုပ်ဆောင်ခြင်း +response = await agent.run(user_msg="Can you add 5 and 3?") +``` + +> [!TIP] +> လုံလောက်အောင် မလေ့လာရသေးဘူးလား? LlamaIndex မှာ Agent တွေနဲ့ Tool တွေအကြောင်း ပိုမိုလေ့လာစရာတွေ အများကြီး ရှိပါသေးတယ်။ [AgentWorkflow Basic Introduction](https://docs.llamaindex.ai/en/stable/examples/agent/agent_workflow_basic/) သို့မဟုတ် [Agent Learning Guide](https://docs.llamaindex.ai/en/stable/understanding/agent/) မှာ Streaming, Context Serialization, နှင့် Human-in-the-loop အကြောင်းတွေကို ပိုမိုဖတ်ရှုနိုင်ပါတယ်။ + +အခုဆိုရင် LlamaIndex မှာ Agent တွေနဲ့ Tool တွေရဲ့ အခြေခံတွေကို နားလည်သွားပြီဖြစ်လို့၊ **Configurable နှင့် Manageable ဖြစ်တဲ့ Workflow တွေကို ဖန်တီးဖို့အတွက် LlamaIndex ကို ဘယ်လို အသုံးပြုနိုင်မလဲ** ဆိုတာ ကြည့်ကြရအောင်! \ No newline at end of file diff --git a/units/my/unit2/llama-index/components.mdx b/units/my/unit2/llama-index/components.mdx new file mode 100644 index 00000000..d006e54f --- /dev/null +++ b/units/my/unit2/llama-index/components.mdx @@ -0,0 +1,250 @@ +# LlamaIndex မှာ ပါဝင်တဲ့ အစိတ်အပိုင်းတွေက ဘာတွေလဲ။ + +Unit 1 မှာ ပါဝင်ခဲ့တဲ့ ကျွန်တော်တို့ရဲ့ အကူအညီပေးသူ Alfred ကို မှတ်မိကြဦးမလား။ + +Alfred ဟာ ကျွန်တော်တို့ရဲ့ တောင်းဆိုမှုတွေကို ထိထိရောက်ရောက် ကူညီပေးနိုင်ဖို့အတွက်၊ ကျွန်တော်တို့ရဲ့ မေးခွန်းတွေကို နားလည်ပြီး **အလုပ်တွေကို ပြီးမြောက်အောင် ကူညီဖို့အတွက် သက်ဆိုင်ရာ အချက်အလက်တွေကို ပြင်ဆင်တာ၊ ရှာဖွေတာနဲ့ အသုံးပြုတာတွေ** လုပ်ဆောင်ဖို့ လိုအပ်ပါတယ်။ + +ဒီနေရာမှာ LlamaIndex ရဲ့ အစိတ်အပိုင်းတွေ (Components) က ဝင်ရောက်လာပါတယ်။ + +LlamaIndex မှာ အစိတ်အပိုင်းများစွာ ရှိပေမယ့်၊ ကျွန်တော်တို့ကတော့ **`QueryEngine` (မေးမြန်းမှု စက်) အစိတ်အပိုင်းကို အဓိကထားပြီး လေ့လာသွားပါမယ်။** + +ဘာကြောင့်လဲဆိုတော့၊ ဒီ `QueryEngine` ကို Agent တစ်ခုအတွက် **Retrieval-Augmented Generation (RAG) Tool** အဖြစ် အသုံးပြုနိုင်လို့ပါပဲ။ + +ဒါဆို RAG ဆိုတာ ဘာလဲ? LLM (Large Language Models) တွေဟာ ယေဘုယျ အသိပညာတွေကို သင်ယူဖို့အတွက် ကြီးမားတဲ့ ဒေတာအစုအဝေးတွေနဲ့ လေ့ကျင့်ထားပါတယ်။ ဒါပေမယ့်၊ သူတို့ဟာ သင့်ရဲ့ သီးခြားဒေတာတွေနဲ့ နောက်ဆုံးပေါ် အချက်အလက်တွေနဲ့ လေ့ကျင့်ထားခြင်း မရှိနိုင်ပါဘူး။ + +RAG က ဒီပြဿနာကို ဖြေရှင်းပေးပါတယ်။ RAG ဟာ သင့်ရဲ့ ဒေတာတွေထဲကနေ သက်ဆိုင်ရာ အချက်အလက်တွေကို ရှာဖွေပြီး ပြန်လည်ရယူကာ၊ အဲဒီအချက်အလက်တွေကို LLM ကို ပေးပို့ခြင်းဖြင့် ပိုမိုတိကျတဲ့ အဖြေတွေ ထုတ်ပေးနိုင်ပါတယ်။ + +![RAG](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/llama-index/rag.png) + +Alfred ဘယ်လို အလုပ်လုပ်လဲဆိုတာကို ပြန်စဉ်းစားကြည့်ရအောင်- + +1. သင်က Alfred ကို ညစာစားပွဲ စီစဉ်ဖို့ အကူအညီတောင်းတယ်။ +2. Alfred ဟာ သင့်ရဲ့ ပြက္ခဒိန်၊ အစားအသောက် နှစ်သက်မှုတွေနဲ့ အရင်က အောင်မြင်ခဲ့တဲ့ Menu တွေကို စစ်ဆေးဖို့ လိုအပ်တယ်။ +3. ဒီ `QueryEngine` က Alfred ကို ဒီအချက်အလက်တွေကို ရှာဖွေပြီး ညစာစားပွဲ စီစဉ်ဖို့အတွက် အသုံးပြုနိုင်အောင် ကူညီပေးပါတယ်။ + +ဒါကြောင့် `QueryEngine` ဟာ LlamaIndex မှာ **Agent ပုံစံ RAG လုပ်ငန်းအဆင့်ဆင့် (Workflows) တွေကို တည်ဆောက်ဖို့အတွက် အဓိက အစိတ်အပိုင်း** တစ်ခု ဖြစ်လာပါတယ်။ Alfred ဟာ အကူအညီပေးနိုင်ဖို့ သင့်အိမ်တွင်း အချက်အလက်တွေကို ရှာဖွေဖို့ လိုအပ်သလို၊ မည်သည့် Agent မဆို သက်ဆိုင်ရာ ဒေတာတွေကို ရှာဖွေပြီး နားလည်ဖို့ နည်းလမ်းတစ်ခု လိုအပ်ပါတယ်။ `QueryEngine` က ဒီစွမ်းဆောင်ရည်ကို အတိအကျ ပေးစွမ်းနိုင်ပါတယ်။ + +ကဲ၊ အစိတ်အပိုင်းတွေထဲကို နည်းနည်း ပိုနက်နက်နဲနဲ လေ့လာကြည့်ပြီး **RAG Pipeline တစ်ခုကို ဖန်တီးဖို့အတွက် အစိတ်အပိုင်းတွေကို ဘယ်လို ပေါင်းစပ်နိုင်မလဲ** ဆိုတာကို ကြည့်လိုက်ရအောင်။ + +## အစိတ်အပိုင်းများ အသုံးပြု၍ RAG Pipeline တစ်ခု ဖန်တီးခြင်း + +> [!TIP] +> သင်ဟာ Google Colab ကို အသုံးပြုပြီး run နိုင်တဲ့ ဒီ Notebook ထဲက Code တွေကို လိုက်နာပြီး လေ့လာနိုင်ပါတယ်။ + +RAG အတွင်းမှာ အဓိက အဆင့် (၅) ဆင့် ရှိပါတယ်။ ဒီအဆင့်တွေဟာ သင်တည်ဆောက်မယ့် ပိုကြီးမားတဲ့ Application အများစုရဲ့ အစိတ်အပိုင်းတွေ ဖြစ်လာပါလိမ့်မယ်။ ၎င်းတို့ကတော့- + +1. **Loading (တင်သွင်းခြင်း):** ဒါက သင့်ရဲ့ ဒေတာတွေ ရှိတဲ့နေရာ (Text Files, PDF များ၊ အခြား Website များ၊ Database သို့မဟုတ် API) ကနေ သင့်ရဲ့ လုပ်ငန်းအဆင့်ဆင့်ထဲကို ဒေတာတွေကို ရယူခြင်းကို ဆိုလိုပါတယ်။ LlamaHub က ရွေးချယ်စရာ ရာပေါင်းများစွာသော ပေါင်းစပ်မှု (Integrations) တွေကို ပေးထားပါတယ်။ +2. **Indexing (အညွှန်းပြုလုပ်ခြင်း):** ဒါက ဒေတာတွေကို မေးမြန်းနိုင်ဖို့အတွက် ဒေတာဖွဲ့စည်းပုံ (Data Structure) တစ်ခုကို ဖန်တီးခြင်းကို ဆိုလိုပါတယ်။ LLM တွေအတွက်ဆိုရင်၊ ဒါဟာ ဒေတာရဲ့ အဓိပ္ပာယ်ကို ဖော်ပြတဲ့ ကိန်းဂဏန်းဆိုင်ရာ ကိုယ်စားပြုမှုဖြစ်တဲ့ **Vector Embeddings** တွေကို ဖန်တီးခြင်းကို ဆိုလိုပါတယ်။ Indexing ဟာ သက်ဆိုင်ရာ ဒေတာတွေကို တိကျစွာ ရှာဖွေနိုင်ဖို့အတွက် အခြား Metadata နည်းဗျူဟာများစွာကိုလည်း ရည်ညွှန်းနိုင်ပါတယ်။ +3. **Storing (သိမ်းဆည်းခြင်း):** သင့်ရဲ့ ဒေတာတွေကို Index လုပ်ပြီးတာနဲ့၊ Index ကို ပြန်လည်ပြုလုပ်စရာ မလိုအောင် သင့်ရဲ့ Index နဲ့ အခြား Metadata တွေကို သိမ်းဆည်းထားဖို့ လိုအပ်ပါတယ်။ +4. **Querying (မေးမြန်းခြင်း):** မည်သည့် Indexing နည်းဗျူဟာအတွက်မဆို၊ Sub-queries, Multi-step queries နှင့် Hybrid နည်းဗျူဟာများ အပါအဝင် LLM များနှင့် LlamaIndex ဒေတာဖွဲ့စည်းပုံများကို အသုံးပြုပြီး မေးမြန်းနိုင်တဲ့ နည်းလမ်းများစွာ ရှိပါတယ်။ +5. **Evaluation (အကဲဖြတ်ခြင်း):** မည်သည့် လုပ်ငန်းအဆင့်ဆင့်တွင်မဆို အရေးပါသော အဆင့်တစ်ခုကတော့ အခြား နည်းဗျူဟာများနှင့် နှိုင်းယှဉ်ပါက သို့မဟုတ် ပြောင်းလဲမှုများ ပြုလုပ်သည့်အခါ ၎င်း၏ ထိရောက်မှုကို စစ်ဆေးခြင်းပဲ ဖြစ်ပါတယ်။ Evaluation က သင့်ရဲ့ မေးမြန်းမှုများအပေါ် တုံ့ပြန်မှုများ ဘယ်လောက် တိကျတယ်၊ ယုံကြည်စိတ်ချရတယ်၊ မြန်ဆန်တယ်ဆိုတာကို ရည်ရွယ်ချက်ရှိရှိ တိုင်းတာပေးပါတယ်။ + +နောက်တစ်ခုအနေနဲ့၊ ဒီအဆင့်တွေကို အစိတ်အပိုင်းများ အသုံးပြုပြီး ဘယ်လို ပြန်လည်ဖန်တီးနိုင်မလဲဆိုတာကို ကြည့်လိုက်ရအောင်။ + +### Document များကို တင်သွင်းခြင်းနှင့် Embedding ပြုလုပ်ခြင်း + +အရင်က ပြောခဲ့သလိုပဲ၊ LlamaIndex ဟာ သင့်ရဲ့ ကိုယ်ပိုင်ဒေတာတွေပေါ်မှာ အလုပ်လုပ်နိုင်ပါတယ်။ ဒါပေမယ့် **ဒေတာတွေကို မရယူခင်မှာ၊ ကျွန်တော်တို့က အဲဒီဒေတာတွေကို တင်သွင်းဖို့ လိုအပ်ပါတယ်**။ + +LlamaIndex ထဲကို ဒေတာတွေ တင်သွင်းဖို့အတွက် အဓိက နည်းလမ်း (၃) ခု ရှိပါတယ်။ + +1. `SimpleDirectoryReader`: Local Directory တစ်ခုမှ အမျိုးမျိုးသော File အမျိုးအစားများအတွက် Built-in Loader တစ်ခု။ +2. `LlamaParse`: LlamaIndex ရဲ့ တရားဝင် PDF စစ်ဆေးရေး Tool ဖြစ်ပြီး Managed API အဖြစ် ရရှိနိုင်ပါတယ်။ +3. `LlamaHub`: မည်သည့် ရင်းမြစ်မှမဆို ဒေတာများ ထည့်သွင်းရန်အတွက် ရာပေါင်းများစွာသော Data-loading Libraries များ၏ Registry တစ်ခု။ + +> [!TIP] +> ပိုမိုရှုပ်ထွေးသော ဒေတာရင်းမြစ်များအတွက် LlamaHub Loaders များနှင့် LlamaParse Parser များကို လေ့လာထားသင့်ပါတယ်။ + +**ဒေတာ တင်သွင်းဖို့အတွက် အလွယ်ကူဆုံး နည်းလမ်းကတော့ `SimpleDirectoryReader` ကို အသုံးပြုခြင်းပဲ ဖြစ်ပါတယ်။** + +ဒီစွယ်စုံသုံး အစိတ်အပိုင်းဟာ Folder တစ်ခုထဲက အမျိုးမျိုးသော File အမျိုးအစားတွေကို တင်သွင်းနိုင်ပြီး၊ ၎င်းတို့ကို LlamaIndex က အလုပ်လုပ်နိုင်တဲ့ `Document` Object များအဖြစ် ပြောင်းလဲပေးပါတယ်။ + +`SimpleDirectoryReader` ကို အသုံးပြုပြီး Folder တစ်ခုထဲက ဒေတာတွေကို ဘယ်လို တင်သွင်းနိုင်မလဲဆိုတာကို ကြည့်လိုက်ရအောင်။ + +```python +from llama_index.core import SimpleDirectoryReader + +reader = SimpleDirectoryReader(input_dir="path/to/directory") +documents = reader.load_data() +``` + +ကျွန်တော်တို့ရဲ့ Document တွေကို တင်သွင်းပြီးနောက်၊ ၎င်းတို့ကို `Node` Object လို့ခေါ်တဲ့ ပိုမိုသေးငယ်တဲ့ အပိုင်းလေးတွေအဖြစ် ခွဲထုတ်ဖို့ လိုအပ်ပါတယ်။ + +`Node` ဆိုတာက မူရင်း Document ထဲက စာသားအပိုင်းအစ (Chunk) တစ်ခုသာ ဖြစ်ပါတယ်။ ဒါက AI အတွက် အလုပ်လုပ်ရတာ ပိုမိုလွယ်ကူစေပြီး၊ မူရင်း `Document` Object ကိုလည်း ရည်ညွှန်းမှုတွေ ရှိနေပါသေးတယ်။ + +`IngestionPipeline` က အဓိက ပြောင်းလဲမှု (၂) ခုမှတစ်ဆင့် ဒီ Node တွေကို ဖန်တီးဖို့ ကူညီပေးပါတယ်။ + +1. `SentenceSplitter` က Document တွေကို သဘာဝကျတဲ့ စာကြောင်း နယ်နိမိတ်တွေမှာ ခွဲထုတ်ခြင်းဖြင့် စီမံခန့်ခွဲနိုင်တဲ့ အပိုင်းအစတွေအဖြစ် ခွဲထုတ်ပေးပါတယ်။ +2. `HuggingFaceEmbedding` က အပိုင်းအစတစ်ခုစီကို ကိန်းဂဏန်းဆိုင်ရာ Embeddings များအဖြစ် ပြောင်းလဲပေးပါတယ်။ ဒီ Vector ကိုယ်စားပြုမှုတွေက AI က ထိရောက်စွာ စီမံဆောင်ရွက်နိုင်တဲ့ ပုံစံနဲ့ အဓိပ္ပာယ်ကို ဖမ်းယူပေးပါတယ်။ + +ဒီလုပ်ငန်းစဉ်က ကျွန်တော်တို့ရဲ့ Document တွေကို ရှာဖွေခြင်းနဲ့ ခွဲခြမ်းစိတ်ဖြာခြင်းအတွက် ပိုမိုအသုံးဝင်တဲ့ ပုံစံနဲ့ စနစ်တကျ စီစဉ်ပေးပါတယ်။ + +```python +from llama_index.core import Document +from llama_index.embeddings.huggingface import HuggingFaceEmbedding +from llama_index.core.node_parser import SentenceSplitter +from llama_index.core.ingestion import IngestionPipeline + +# create the pipeline with transformations +pipeline = IngestionPipeline( + transformations=[ + SentenceSplitter(chunk_overlap=0), + HuggingFaceEmbedding(model_name="BAAI/bge-small-en-v1.5"), + ] +) + +nodes = await pipeline.arun(documents=[Document.example()]) +``` + +### Document များကို သိမ်းဆည်းခြင်းနှင့် Indexing ပြုလုပ်ခြင်း + +ကျွန်တော်တို့ရဲ့ `Node` Object တွေကို ဖန်တီးပြီးနောက်၊ ၎င်းတို့ကို ရှာဖွေနိုင်ဖို့အတွက် Index လုပ်ဖို့ လိုအပ်ပါတယ်။ ဒါပေမယ့် အဲဒီလို မလုပ်ခင်မှာ၊ ကျွန်တော်တို့ရဲ့ ဒေတာတွေကို သိမ်းဆည်းဖို့ နေရာတစ်ခု လိုအပ်ပါတယ်။ + +ကျွန်တော်တို့ Ingestion Pipeline ကို အသုံးပြုနေတဲ့အတွက်၊ Vector Store တစ်ခုကို Pipeline နဲ့ တိုက်ရိုက် ချိတ်ဆက်ပြီး ဒေတာတွေ ထည့်သွင်းနိုင်ပါတယ်။ ဒီနေရာမှာတော့ ကျွန်တော်တို့ရဲ့ Document တွေကို သိမ်းဆည်းဖို့အတွက် **`Chroma`** ကို အသုံးပြုပါမယ်။ + +
+ChromaDB ကို Install လုပ်ခြင်း + +LlamaHub အပိုင်း မှာ မိတ်ဆက်ပေးခဲ့သလိုပဲ၊ ChromaDB Vector Store ကို အောက်ပါ Command ဖြင့် Install လုပ်နိုင်ပါတယ်။ + +```bash +pip install llama-index-vector-stores-chroma +``` +
+ +```python +import chromadb +from llama_index.vector_stores.chroma import ChromaVectorStore + +db = chromadb.PersistentClient(path="./alfred_chroma_db") +chroma_collection = db.get_or_create_collection("alfred") +vector_store = ChromaVectorStore(chroma_collection=chroma_collection) + +pipeline = IngestionPipeline( + transformations=[ + SentenceSplitter(chunk_size=25, chunk_overlap=0), + HuggingFaceEmbedding(model_name="BAAI/bge-small-en-v1.5"), + ], + vector_store=vector_store, +) +``` + +> [!TIP] +> မတူညီတဲ့ Vector Store တွေရဲ့ ခြုံငုံသုံးသပ်ချက်ကို LlamaIndex Documentation မှာ ရှာဖွေနိုင်ပါတယ်။ + +ဒီနေရာမှာ Vector Embeddings တွေက ဝင်ရောက်လာပါတယ်။ Query နဲ့ Node တွေကို တူညီတဲ့ Vector Space ထဲမှာ Embedding လုပ်ခြင်းဖြင့်၊ ကျွန်တော်တို့ဟာ သက်ဆိုင်ရာ ကိုက်ညီမှုတွေကို ရှာဖွေနိုင်ပါတယ်။ + +`VectorStoreIndex` က ကျွန်တော်တို့အတွက် ဒီအလုပ်ကို လုပ်ဆောင်ပေးပါတယ်။ ၎င်းသည် Ingestion လုပ်စဉ်က အသုံးပြုခဲ့တဲ့ Embedding Model အတူတူကို အသုံးပြုပြီး တသမတ်တည်း ဖြစ်စေဖို့ သေချာစေပါတယ်။ + +ကျွန်တော်တို့ရဲ့ Vector Store နဲ့ Embeddings တွေကနေ ဒီ Index ကို ဘယ်လို ဖန်တီးနိုင်မလဲဆိုတာကို ကြည့်လိုက်ရအောင်။ + +```python +from llama_index.core import VectorStoreIndex +from llama_index.embeddings.huggingface import HuggingFaceEmbedding + +embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-small-en-v1.5") +index = VectorStoreIndex.from_vector_store(vector_store, embed_model=embed_model) +``` + +အချက်အလက်အားလုံးကို `ChromaVectorStore` Object နဲ့ ပေးပို့ထားတဲ့ Directory Path အတွင်းမှာ အလိုအလျောက် သိမ်းဆည်းထားပါတယ်။ + +ကောင်းပါပြီ! အခု ကျွန်တော်တို့ Index ကို အလွယ်တကူ သိမ်းဆည်းပြီး တင်သွင်းနိုင်ပြီဆိုတော့၊ ၎င်းကို မတူညီတဲ့ နည်းလမ်းတွေနဲ့ ဘယ်လို မေးမြန်းနိုင်မလဲဆိုတာကို လေ့လာကြည့်ရအောင်။ + +### Prompts နှင့် LLM များဖြင့် VectorStoreIndex ကို မေးမြန်းခြင်း + +ကျွန်တော်တို့ Index ကို မေးမြန်းမှု Interface တစ်ခုအဖြစ် မပြောင်းခင်မှာ၊ အဲဒီလို ပြောင်းဖို့ လိုအပ်ပါတယ်။ အသုံးအများဆုံး ပြောင်းလဲမှု ရွေးချယ်စရာတွေကတော့- + +* `as_retriever`: အခြေခံ Document ပြန်လည်ရယူခြင်းအတွက်၊ Similarity Score များပါဝင်တဲ့ `NodeWithScore` Object စာရင်းကို ပြန်ပေးပါတယ်။ +* `as_query_engine`: တစ်ခုတည်းသော မေးခွန်း-အဖြေ ဆက်သွယ်မှုများအတွက်၊ စာဖြင့်ရေးသားထားသော တုံ့ပြန်မှုကို ပြန်ပေးပါတယ်။ +* `as_chat_engine`: Message များစွာတွင် မှတ်ဉာဏ်ကို ထိန်းသိမ်းထားသော စကားပြောဆိုမှု ဆက်သွယ်မှုများအတွက်၊ Chat History နှင့် Index လုပ်ထားသော Context ကို အသုံးပြုပြီး စာဖြင့်ရေးသားထားသော တုံ့ပြန်မှုကို ပြန်ပေးပါတယ်။ + +Agent ပုံစံ ဆက်သွယ်မှုများအတွက် ပိုမိုအသုံးများတဲ့ Query Engine ကို ကျွန်တော်တို့ အာရုံစိုက်ပါမယ်။ + +တုံ့ပြန်မှုအတွက် အသုံးပြုဖို့ LLM တစ်ခုကိုလည်း Query Engine ထဲကို ထည့်သွင်းပေးရပါမယ်။ + +```python +from llama_index.llms.huggingface_api import HuggingFaceInferenceAPI + +llm = HuggingFaceInferenceAPI(model_name="Qwen/Qwen2.5-Coder-32B-Instruct") +query_engine = index.as_query_engine( + llm=llm, + response_mode="tree_summarize", +) +query_engine.query("What is the meaning of life?") +# The meaning of life is 42 +``` + +### တုံ့ပြန်မှု စီမံဆောင်ရွက်ခြင်း (Response Processing) + +အတွင်းပိုင်းမှာ Query Engine ဟာ မေးခွန်းကို ဖြေဖို့အတွက် LLM ကိုသာ အသုံးပြုတာ မဟုတ်ပါဘူး။ တုံ့ပြန်မှုကို စီမံဆောင်ရွက်ဖို့အတွက် နည်းဗျူဟာတစ်ခုအနေနဲ့ `ResponseSynthesizer` ကိုလည်း အသုံးပြုပါတယ်။ + +ဒါကိုလည်း လုံးဝ စိတ်ကြိုက်ပြင်ဆင်နိုင်ပေမယ့်၊ အောက်ပါ အဓိက နည်းဗျူဟာ (၃) ခုက အကောင်းဆုံး အလုပ်လုပ်ပါတယ်။ + +* `refine`: ပြန်လည်ရယူထားသော Text Chunk တစ်ခုစီကို အစဉ်လိုက် ဖြတ်သန်းပြီး အဖြေတစ်ခုကို ဖန်တီးကာ ချိန်ညှိပါတယ်။ ဒါက Node/Retrieved Chunk တစ်ခုစီအတွက် သီးခြား LLM Call တစ်ခုကို ပြုလုပ်စေပါတယ်။ +* `compact` (Default): Refine လုပ်တာနဲ့ ဆင်တူပေမယ့် Chunks တွေကို ကြိုတင် ပေါင်းစပ်ထားတဲ့အတွက် LLM Call နည်းပါးစေပါတယ်။ +* `tree_summarize`: ပြန်လည်ရယူထားသော Text Chunk တစ်ခုစီကို ဖြတ်သန်းပြီး အဖြေ၏ Tree Structure တစ်ခုကို ဖန်တီးခြင်းဖြင့် အသေးစိတ် အဖြေတစ်ခုကို ဖန်တီးပါတယ်။ + +> [!TIP] +> Low-level Composition API ဖြင့် သင့်ရဲ့ Query Workflows တွေကို အသေးစိတ် ထိန်းချုပ်လိုက်ပါ။ ဒီ API က သင့်ရဲ့ လိုအပ်ချက်အတိုင်း Query လုပ်ငန်းစဉ်ရဲ့ အဆင့်တိုင်းကို စိတ်ကြိုက်ပြင်ဆင်ပြီး ချိန်ညှိနိုင်စေပါတယ်။ ဒါက Workflows တွေနဲ့လည်း ကောင်းကောင်း တွဲဖက်အလုပ်လုပ်ပါတယ်။ + +Language Model ဟာ အမြဲတမ်း ခန့်မှန်းနိုင်တဲ့ ပုံစံနဲ့ အလုပ်လုပ်မှာ မဟုတ်တဲ့အတွက်၊ ကျွန်တော်တို့ ရရှိတဲ့ အဖြေဟာ အမြဲတမ်း မှန်ကန်တယ်လို့ သေချာနိုင်မှာ မဟုတ်ပါဘူး။ ဒီပြဿနာကို **အဖြေရဲ့ အရည်အသွေးကို အကဲဖြတ်ခြင်း** ဖြင့် ဖြေရှင်းနိုင်ပါတယ်။ + +### Evaluation နှင့် Observability (အကဲဖြတ်ခြင်းနှင့် စောင့်ကြည့်နိုင်မှု) + +LlamaIndex က **တုံ့ပြန်မှု အရည်အသွေးကို အကဲဖြတ်ဖို့အတွက် Built-in Evaluation Tools တွေကို ပေးထားပါတယ်။** ဒီ Evaluator တွေက မတူညီတဲ့ ရှုထောင့်တွေကနေ တုံ့ပြန်မှုတွေကို ခွဲခြမ်းစိတ်ဖြာဖို့ LLM တွေကို အသုံးပြုပါတယ်။ ရရှိနိုင်တဲ့ အဓိက Evaluator (၃) ခုကို ကြည့်လိုက်ရအောင်။ + +* `FaithfulnessEvaluator`: အဖြေသည် Context မှ ပံ့ပိုးထားခြင်း ရှိ၊ မရှိ စစ်ဆေးခြင်းဖြင့် အဖြေ၏ ယုံကြည်စိတ်ချရမှုကို အကဲဖြတ်ပါတယ်။ +* `AnswerRelevancyEvaluator`: အဖြေသည် မေးခွန်းနှင့် သက်ဆိုင်မှု ရှိ၊ မရှိ စစ်ဆေးခြင်းဖြင့် အဖြေ၏ သက်ဆိုင်မှုကို အကဲဖြတ်ပါတယ်။ +* `CorrectnessEvaluator`: အဖြေသည် မှန်ကန်မှု ရှိ၊ မရှိ စစ်ဆေးခြင်းဖြင့် အဖြေ၏ မှန်ကန်မှုကို အကဲဖြတ်ပါတယ်။ + +> [!TIP] +> Agent Observability နဲ့ Evaluation အကြောင်း ပိုမိုလေ့လာချင်ပါသလား? Bonus Unit 2 ဖြင့် သင့်ရဲ့ ခရီးကို ဆက်လက်လုပ်ဆောင်ပါ။ + +```python +from llama_index.core.evaluation import FaithfulnessEvaluator + +query_engine = # from the previous section +llm = # from the previous section + +# query index +evaluator = FaithfulnessEvaluator(llm=llm) +response = query_engine.query( + "What battles took place in New York City in the American Revolution?" +) +eval_result = evaluator.evaluate_response(response=response) +eval_result.passing +``` + +တိုက်ရိုက် Evaluation မရှိရင်တောင်မှ၊ ကျွန်တော်တို့ရဲ့ စနစ် ဘယ်လို အလုပ်လုပ်နေလဲဆိုတာကို **Observability (စောင့်ကြည့်နိုင်မှု)** မှတစ်ဆင့် ထိုးထွင်းသိမြင်နိုင်ပါတယ်။ ဒါက ပိုမိုရှုပ်ထွေးတဲ့ Workflows တွေကို တည်ဆောက်တဲ့အခါနဲ့ အစိတ်အပိုင်းတစ်ခုချင်းစီ ဘယ်လို အလုပ်လုပ်နေလဲဆိုတာကို နားလည်ချင်တဲ့အခါ အထူးအသုံးဝင်ပါတယ်။ + +
+LlamaTrace ကို Install လုပ်ခြင်း + +LlamaHub အပိုင်း မှာ မိတ်ဆက်ပေးခဲ့သလိုပဲ၊ Arize Phoenix မှ LlamaTrace Callback ကို အောက်ပါ Command ဖြင့် Install လုပ်နိုင်ပါတယ်။ + +```bash +pip install -U llama-index-callbacks-arize-phoenix +``` + +ထို့အပြင်၊ ကျွန်တော်တို့ရဲ့ LlamaTrace API Key ကို `PHOENIX_API_KEY` Environment Variable အဖြစ် သတ်မှတ်ဖို့ လိုအပ်ပါတယ်။ ဒါကို အောက်ပါအတိုင်း ရယူနိုင်ပါတယ်- +- [LlamaTrace](https://llamatrace.com/login) မှာ Account တစ်ခု ဖန်တီးပါ။ +- သင့် Account Settings မှာ API Key တစ်ခု ထုတ်ပေးပါ။ +- Tracing ကို ဖွင့်ဖို့အတွက် အောက်ပါ Code မှာ API Key ကို အသုံးပြုပါ။ + +
+ +```python +import llama_index +import os + +PHOENIX_API_KEY = "" +os.environ["OTEL_EXPORTER_OTLP_HEADERS"] = f"api_key={PHOENIX_API_KEY}" +llama_index.core.set_global_handler( + "arize_phoenix", + endpoint="https://llamatrace.com/v1/traces" +) +``` + +> [!TIP] +> Components တွေအကြောင်းနဲ့ ၎င်းတို့ကို ဘယ်လို အသုံးပြုရမယ်ဆိုတာကို ပိုမိုလေ့လာချင်ပါသလား? Components Guides သို့မဟုတ် RAG Guide ဖြင့် သင့်ရဲ့ ခရီးကို ဆက်လက်လုပ်ဆောင်ပါ။ + +ကျွန်တော်တို့ဟာ `QueryEngine` တစ်ခုကို ဖန်တီးဖို့အတွက် Components တွေကို ဘယ်လို အသုံးပြုရမယ်ဆိုတာကို မြင်ခဲ့ရပါပြီ။ ကဲ၊ အခု **`QueryEngine` ကို Agent တစ်ခုအတွက် Tool အဖြစ် ဘယ်လို အသုံးပြုနိုင်မလဲ** ဆိုတာကို ကြည့်လိုက်ရအောင်! \ No newline at end of file diff --git a/units/my/unit2/llama-index/conclusion.mdx b/units/my/unit2/llama-index/conclusion.mdx new file mode 100644 index 00000000..1c0fbeeb --- /dev/null +++ b/units/my/unit2/llama-index/conclusion.mdx @@ -0,0 +1,13 @@ +## နိဂုံးချုပ် (Conclusion) + +`llama-index` Module ရဲ့ ဒုတိယ Unit ကို အောင်မြင်စွာ ပြီးဆုံးသွားတဲ့အတွက် ဂုဏ်ယူပါတယ် 🥳 + +သင်ဟာ `llama-index` ရဲ့ အခြေခံသဘောတရားတွေကို ကျွမ်းကျင်သွားပြီဖြစ်သလို၊ ကိုယ်ပိုင် Agentic Workflows တွေကို ဘယ်လိုတည်ဆောက်ရမလဲဆိုတာကိုလည်း သိရှိသွားပါပြီ။ + +အခု `llama-index` မှာ ကျွမ်းကျင်မှုတွေ ရရှိသွားပြီဆိုတော့၊ သင်စိတ်ဝင်စားတဲ့ Tasks တွေကို ဖြေရှင်းပေးနိုင်မယ့် Search Engines တွေကို စတင်ဖန်တီးနိုင်ပါပြီ။ + +ဒီ Unit ရဲ့ နောက်ထပ် Module မှာတော့ **LangGraph ကို အသုံးပြုပြီး Agent တွေကို ဘယ်လိုတည်ဆောက်ရမလဲ** ဆိုတာကို လေ့လာသွားပါမယ်။ + +နောက်ဆုံးအနေနဲ့၊ သင်တန်းနဲ့ပတ်သက်ပြီး **သင့်ရဲ့ အမြင်တွေကို နားထောင်ချင်ပါတယ်၊ ဘယ်လို တိုးတက်အောင် လုပ်ဆောင်နိုင်မလဲဆိုတာကိုလည်း သိချင်ပါတယ်**။ အကယ်၍ သင့်မှာ တုံ့ပြန်ချက် (Feedback) များရှိပါက 👉 [ဒီ Form ကို ဖြည့်ပေးပါ](https://docs.google.com/forms/d/e/1FAIpQLSe9VaONn0eglax0uTwi29rIn4tM7H2sYmmybmG5jJNlE5v0xA/viewform?usp=dialog)။ + +### ဆက်လက်လေ့လာသင်ယူပြီး အမြဲတမ်း အမိုက်စားဖြစ်နေပါစေ 🤗 diff --git a/units/my/unit2/llama-index/introduction.mdx b/units/my/unit2/llama-index/introduction.mdx new file mode 100644 index 00000000..a76dab16 --- /dev/null +++ b/units/my/unit2/llama-index/introduction.mdx @@ -0,0 +1,29 @@ +# LlamaIndex ကို မိတ်ဆက်ခြင်း (Introduction to LlamaIndex) + +ဒီ Module ကို ကြိုဆိုပါတယ်။ ဒီမှာတော့ [LlamaIndex](https://www.llamaindex.ai/) Toolkit ကို အသုံးပြုပြီး LLM (Large Language Model) ကို အခြေခံတဲ့ Agent တွေကို ဘယ်လိုတည်ဆောက်ရမလဲဆိုတာကို သင်ယူရမှာ ဖြစ်ပါတယ်။ + +LlamaIndex ဆိုတာဟာ **Index တွေနဲ့ Workflows တွေကို အသုံးပြုပြီး သင့်ရဲ့ ဒေတာတွေပေါ်မှာ LLM-powered Agent တွေကို ဖန်တီးဖို့အတွက် ပြည့်စုံတဲ့ Toolkit တစ်ခု** ဖြစ်ပါတယ်။ ဒီ Course အတွက် LlamaIndex မှာ Agent တွေ တည်ဆောက်ရာမှာ အထောက်အကူပြုတဲ့ အဓိက အစိတ်အပိုင်း သုံးခုကို အာရုံစိုက်သွားပါမယ်- **Components (အစိတ်အပိုင်းများ)**၊ **Agents and Tools (Agent များနှင့် ကိရိယာများ)** နဲ့ **Workflows (လုပ်ငန်းအဆင့်ဆင့်များ)** တို့ပဲ ဖြစ်ပါတယ်။ + +![LlamaIndex](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/llama-index/thumbnail.png) + +LlamaIndex ရဲ့ အဓိက အစိတ်အပိုင်းတွေနဲ့ ၎င်းတို့က Agent တွေကို ဘယ်လိုကူညီသလဲဆိုတာကို ကြည့်လိုက်ရအောင်။ + +* **Components (အစိတ်အပိုင်းများ):** ဒါတွေဟာ LlamaIndex မှာ သင်အသုံးပြုတဲ့ အခြေခံ တည်ဆောက်ရေး အုတ်ခဲတွေပဲ ဖြစ်ပါတယ်။ ၎င်းတို့မှာ Prompts (ညွှန်ကြားချက်များ)၊ Models (မော်ဒယ်များ) နဲ့ Databases (ဒေတာဘေ့စ်များ) ကဲ့သို့သော အရာများ ပါဝင်ပါတယ်။ Components တွေဟာ LlamaIndex ကို အခြား Tools တွေနဲ့ Libraries တွေနဲ့ ချိတ်ဆက်ရာမှာ မကြာခဏ ကူညီပေးပါတယ်။ +* **Tools (ကိရိယာများ):** Tools တွေဟာ ရှာဖွေခြင်း၊ တွက်ချက်ခြင်း သို့မဟုတ် ပြင်ပဝန်ဆောင်မှုများကို ဝင်ရောက်ကြည့်ရှုခြင်းကဲ့သို့သော သီးခြားစွမ်းဆောင်ရည်များကို ပေးစွမ်းတဲ့ Components တွေ ဖြစ်ပါတယ်။ ၎င်းတို့ဟာ Agent တွေကို Tasks တွေ လုပ်ဆောင်နိုင်စေဖို့အတွက် အခြေခံ တည်ဆောက်ရေး အုတ်ခဲတွေပဲ ဖြစ်ပါတယ်။ +* **Agents (ကိုယ်စားလှယ်များ):** Agents တွေဟာ Tools တွေကို အသုံးပြုနိုင်ပြီး ဆုံးဖြတ်ချက်တွေ ချမှတ်နိုင်တဲ့ ကိုယ်ပိုင်အုပ်ချုပ်ခွင့်ရ Components တွေ ဖြစ်ပါတယ်။ ၎င်းတို့ဟာ ရှုပ်ထွေးတဲ့ ရည်မှန်းချက်တွေကို ပြီးမြောက်အောင်မြင်ဖို့အတွက် Tool တွေကို စနစ်တကျ ညှိနှိုင်းဆောင်ရွက်ပေးပါတယ်။ +* **Workflows (လုပ်ငန်းအဆင့်ဆင့်များ):** ဒါတွေဟာ Logic တွေကို အတူတကွ စီမံဆောင်ရွက်ပေးတဲ့ အဆင့်ဆင့် လုပ်ငန်းစဉ်တွေပဲ ဖြစ်ပါတယ်။ Workflows သို့မဟုတ် Agentic Workflows တွေဟာ Agent တွေကို တိုက်ရိုက် အသုံးပြုခြင်းမရှိဘဲ Agent ရဲ့ အပြုအမူကို စနစ်တကျ ဖွဲ့စည်းပုံချဖို့ နည်းလမ်းတစ်ခု ဖြစ်ပါတယ်။ + +## LlamaIndex ကို ဘာက ထူးခြားစေသလဲ။ + +LlamaIndex ဟာ smolagents လိုမျိုး အခြား Framework တွေနဲ့ ဆင်တူတဲ့ အရာတချို့ကို လုပ်ဆောင်နိုင်ပေမယ့်၊ သူ့မှာ အဓိက အားသာချက်တချို့ ရှိပါတယ်။ + +* **ရှင်းလင်းသော Workflow စနစ်:** Workflows တွေဟာ Agent တွေ ဘယ်လို ဆုံးဖြတ်ချက်တွေ ချမှတ်သင့်တယ်ဆိုတာကို Event-driven နဲ့ Async-first Syntax ကို အသုံးပြုပြီး အဆင့်ဆင့် ခွဲခြမ်းစိတ်ဖြာဖို့ ကူညီပေးပါတယ်။ ဒါက သင့်ရဲ့ Logic ကို ရှင်းရှင်းလင်းလင်း ဖွဲ့စည်းပြီး စုစည်းဖို့ အထောက်အကူပြုပါတယ်။ +* **LlamaParse ဖြင့် အဆင့်မြင့် Document စစ်ဆေးခြင်း:** LlamaParse ကို LlamaIndex အတွက် သီးသန့် ဖန်တီးထားတာကြောင့် ပေါင်းစပ်မှုက ချောမွေ့ပါတယ်။ (ဒါပေမယ့် ဒါက အခပေး Feature တစ်ခု ဖြစ်ပါတယ်)။ +* **အသင့်သုံး Components များစွာ:** LlamaIndex ဟာ အချိန်အတန်ကြာ တည်ရှိနေပြီဖြစ်လို့ အခြား Framework များစွာနဲ့ အလုပ်လုပ်ပါတယ်။ ဒါကြောင့် LLMs, Retrievers, Indexes စတဲ့ စမ်းသပ်ပြီး ယုံကြည်စိတ်ချရတဲ့ Components များစွာကို ပိုင်ဆိုင်ထားပါတယ်။ +* **LlamaHub:** ဒါဟာ LlamaIndex အတွင်းမှာ သင်အသုံးပြုနိုင်တဲ့ ရာနဲ့ချီတဲ့ Components, Agents နဲ့ Tools တွေရဲ့ Registry (မှတ်ပုံတင်ဌာန) ပဲ ဖြစ်ပါတယ်။ + +အသုံးဝင်တဲ့ Agent တွေကို ဖန်တီးဖို့အတွက် ဒီ Concept တွေအားလုံးကို မတူညီတဲ့ အခြေအနေတွေမှာ လိုအပ်ပါတယ်။ + +နောက်လာမယ့် အပိုင်းတွေမှာ ဒီ Concept တစ်ခုချင်းစီကို အသေးစိတ် လေ့လာသွားပါမယ်။ Concept တွေကို ကျွမ်းကျင်ပြီးတဲ့နောက်မှာတော့ ကျွန်တော်တို့ရဲ့ သင်ယူမှုတွေကို အသုံးပြုပြီး **Alfred the Agent နဲ့အတူ လက်တွေ့ကျတဲ့ အသုံးချ ကိစ္စရပ်တွေကို ဖန်တီးသွားပါမယ်!** + +LlamaIndex ကို လက်တွေ့လုပ်ဆောင်ဖို့ စိတ်လှုပ်ရှားစရာကောင်းတယ်နော်။ ဒါဆို ဘာကို စောင့်နေဦးမှာလဲ? **LlamaHub ကို အသုံးပြုပြီး ကျွန်တော်တို့ လိုအပ်တဲ့ Integrations တွေကို ရှာဖွေပြီး Install လုပ်ခြင်းဖြင့် စတင်လိုက်ရအောင်! 🚀** \ No newline at end of file diff --git a/units/my/unit2/llama-index/llama-hub.mdx b/units/my/unit2/llama-index/llama-hub.mdx new file mode 100644 index 00000000..32f58c79 --- /dev/null +++ b/units/my/unit2/llama-index/llama-hub.mdx @@ -0,0 +1,59 @@ +# LlamaHub ကို မိတ်ဆက်ခြင်း (Introduction to the LlamaHub) + +**LlamaHub ဆိုတာဟာ LlamaIndex အတွင်းမှာ သင်အသုံးပြုနိုင်တဲ့ ရာနဲ့ချီတဲ့ Integrations (ပေါင်းစပ်မှုများ)၊ Agents နဲ့ Tools တွေရဲ့ Registry (မှတ်ပုံတင်ဌာန) ပဲ ဖြစ်ပါတယ်**။ + +![LlamaHub](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/llama-index/llama-hub.png) + +ဒီ Course မှာ ကျွန်တော်တို့ Integrations အမျိုးမျိုးကို အသုံးပြုသွားမှာဖြစ်လို့၊ LlamaHub နဲ့ ၎င်းက ကျွန်တော်တို့ကို ဘယ်လို ကူညီနိုင်မလဲဆိုတာကို အရင်ဆုံး ကြည့်လိုက်ရအောင်။ + +ကျွန်တော်တို့ လိုအပ်တဲ့ Components တွေအတွက် Dependencies တွေကို ဘယ်လိုရှာဖွေပြီး Install လုပ်ရမလဲဆိုတာကို ကြည့်လိုက်ရအောင်။ + +## Installation (တပ်ဆင်ခြင်း) + +LlamaIndex ကို Install လုပ်ဖို့ ညွှန်ကြားချက်တွေကို [LlamaHub](https://llamahub.ai/) မှာ စနစ်တကျ ဖွဲ့စည်းထားတဲ့ Overview အနေနဲ့ ရရှိနိုင်ပါတယ်။ + +အစပိုင်းမှာ ဒါက နည်းနည်း ရှုပ်ထွေးနိုင်ပေမယ့်၊ Install လုပ်တဲ့ Command တွေဟာ ယေဘုယျအားဖြင့် မှတ်ရလွယ်ကူတဲ့ ပုံစံကို လိုက်နာပါတယ်- + +```bash +pip install llama-index-{component-type}-{framework-name} +``` + +Hugging Face Inference API Integration ကို အသုံးပြုပြီး LLM နဲ့ Embedding Component အတွက် Dependencies တွေကို Install လုပ်ကြည့်ရအောင် [Hugging Face inference API integration](https://llamahub.ai/l/llms/llama-index-llms-huggingface-api?from=llms)။ + +```bash +pip install llama-index-llms-huggingface-api llama-index-embeddings-huggingface +``` + +## Usage (အသုံးပြုပုံ) + +Install လုပ်ပြီးတာနဲ့ အသုံးပြုပုံ ပုံစံတွေကို ကျွန်တော်တို့ မြင်တွေ့နိုင်ပါတယ်။ Import လုပ်တဲ့ လမ်းကြောင်းတွေဟာ Install Command ကို လိုက်နာတယ်ဆိုတာကို သတိထားမိပါလိမ့်မယ်။ + +အောက်မှာ **LLM Component အတွက် Hugging Face Inference API ကို အသုံးပြုတဲ့ ဥပမာ** ကို ကြည့်နိုင်ပါတယ်။ + +```python +from llama_index.llms.huggingface_api import HuggingFaceInferenceAPI +import os +from dotenv import load_dotenv + +# Load the .env file +load_dotenv() + +# Retrieve HF_TOKEN from the environment variables +hf_token = os.getenv("HF_TOKEN") + +llm = HuggingFaceInferenceAPI( + model_name="Qwen/Qwen2.5-Coder-32B-Instruct", + temperature=0.7, + max_tokens=100, + token=hf_token, + provider="auto" +) + +response = llm.complete("Hello, how are you?") +print(response) +# I am good, how can I help you today? +``` + +ကောင်းပါပြီ၊ ကျွန်တော်တို့ လိုအပ်တဲ့ Components တွေအတွက် Integrations တွေကို ဘယ်လိုရှာဖွေရမယ်၊ Install လုပ်ရမယ်၊ အသုံးပြုရမယ်ဆိုတာကို သိရှိသွားပါပြီ။ + +**Components တွေကို ပိုမိုနက်နက်နဲနဲ လေ့လာကြည့်ရအောင်**၊ ပြီးတော့ ကျွန်တော်တို့ရဲ့ ကိုယ်ပိုင် Agent တွေကို တည်ဆောက်ဖို့အတွက် ၎င်းတို့ကို ဘယ်လိုအသုံးပြုနိုင်မလဲဆိုတာကို ကြည့်ရအောင်။ \ No newline at end of file diff --git a/units/my/unit2/llama-index/quiz1.mdx b/units/my/unit2/llama-index/quiz1.mdx new file mode 100644 index 00000000..32b3988d --- /dev/null +++ b/units/my/unit2/llama-index/quiz1.mdx @@ -0,0 +1,129 @@ +## အသေးစား စစ်ဆေးမေးခွန်း (အမှတ်မပေးပါ) [[quiz1]] + +ခုချိန်ထိ ကျွန်တော်တို့ဟာ LlamaIndex မှာ အသုံးပြုတဲ့ အဓိက အစိတ်အပိုင်းတွေနဲ့ Tool တွေအကြောင်း ဆွေးနွေးခဲ့ပြီးပါပြီ။ + +**ကိုယ့်ကိုယ်ကိုယ် စစ်ဆေးကြည့်ခြင်း** ဟာ အကောင်းဆုံး သင်ယူနည်းဖြစ်ပြီး [အသိပညာရှိတယ်လို့ ထင်ယောင်ထင်မှားဖြစ်ခြင်း (Illusion of Competence) ကို ရှောင်ရှားနိုင်ဖို့](https://www.coursera.org/lecture/learning-how-to-learn/illusions-of-competence-BuFzf) အကောင်းဆုံး နည်းလမ်းဖြစ်တဲ့အတွက် အခု အသေးစား Quiz လေးတစ်ခု လုပ်ကြည့်ရအောင်။ + +ဒီ Quiz က **သင်ရဲ့ အသိပညာကို ဘယ်နေရာမှာ ထပ်မံအားဖြည့်ဖို့ လိုအပ်သလဲ** ဆိုတာကို ရှာဖွေရာမှာ ကူညီပေးပါလိမ့်မယ်။ + +ဒီ Quiz ဟာ မဖြစ်မနေ ဖြေဆိုရမှာ မဟုတ်ဘဲ၊ အမှတ်လည်း ပေးမှာ မဟုတ်ပါဘူး။ + +--- + +### Q1: QueryEngine ဆိုတာ ဘာလဲ? +(QueryEngine ဆိုတာ ဘာလဲ?) + +အောက်ပါတို့ထဲမှ QueryEngine အစိတ်အပိုင်းကို အကောင်းဆုံး ဖော်ပြထားသည်မှာ မည်သည့်အရာ ဖြစ်သနည်း။ + + + +--- + +### Q2: FunctionTools ရဲ့ ရည်ရွယ်ချက်က ဘာလဲ? +(FunctionTools ရဲ့ ရည်ရွယ်ချက်က ဘာလဲ?) + +FunctionTools များသည် Agent တစ်ခုအတွက် ဘာကြောင့် အရေးပါသနည်း။ + + + +--- + +### Q3: LlamaIndex ရှိ Toolspecs ဆိုတာ ဘာလဲ? +(LlamaIndex ရှိ Toolspecs ဆိုတာ ဘာလဲ?) + +Toolspecs များ၏ အဓိက ရည်ရွယ်ချက်က ဘာလဲ။ + + + +--- + +### Q4: Tool တစ်ခု ဖန်တီးရန် ဘာတွေ လိုအပ်သလဲ? +(Tool တစ်ခု ဖန်တီးရန် ဘာတွေ လိုအပ်သလဲ?) + +Tool တစ်ခု ဖန်တီးရာတွင် မည်သည့် အချက်အလက်များ ပါဝင်ရမည်နည်း။ + + + +--- + +ဒီ Quiz ကို ပြီးဆုံးသွားတဲ့အတွက် ဂုဏ်ယူပါတယ် 🥳။ အကယ်၍ အချို့အချက်တွေကို လွဲချော်သွားခဲ့ရင်၊ သင်၏ အသိပညာကို အားဖြည့်ဖို့အတွက် အခန်းကို အချိန်ယူပြီး ပြန်လည်ဖတ်ရှုပါ။ အောင်မြင်စွာ ဖြေဆိုနိုင်ခဲ့ရင်တော့ ဒီအစိတ်အပိုင်းတွေနဲ့ ပိုမိုနက်ရှိုင်းတဲ့ Agent တွေကို တည်ဆောက်ဖို့အတွက် သင် အသင့်ဖြစ်နေပါပြီ! \ No newline at end of file diff --git a/units/my/unit2/llama-index/quiz2.mdx b/units/my/unit2/llama-index/quiz2.mdx new file mode 100644 index 00000000..367af862 --- /dev/null +++ b/units/my/unit2/llama-index/quiz2.mdx @@ -0,0 +1,113 @@ +# အမြန် ကိုယ်တိုင်စစ်ဆေးခြင်း (Quick Self-Check) (အမှတ်မပေးပါ) [[quiz2]] + +ဘာလဲ?! နောက်ထပ် Quiz လား? ဟုတ်ပါတယ်၊ ကျွန်တော်တို့ သိပါတယ်။ 😅 ဒါပေမယ့် ဒီတိုတောင်းပြီး အမှတ်မပေးတဲ့ Quiz လေးက **သင် ခုနကမှ သင်ယူခဲ့တဲ့ အဓိက အယူအဆတွေကို ပိုမိုခိုင်မာစေဖို့** ကူညီပေးဖို့ ရောက်လာတာပါ။ + +ဒီ Quiz မှာ Agent ရဲ့ လုပ်ငန်းအဆင့်ဆင့် (Workflows) နဲ့ အပြန်အလှန်ဆက်သွယ်မှုများ (Interactions) ကို အဓိကထား စစ်ဆေးထားပါတယ်။ ဒါတွေဟာ ထိရောက်တဲ့ AI Agent တွေကို တည်ဆောက်ဖို့အတွက် မရှိမဖြစ် အစိတ်အပိုင်းတွေပဲ ဖြစ်ပါတယ်။ + +--- + +### Q1: LlamaIndex မှာ AgentWorkflow ရဲ့ ရည်ရွယ်ချက်က ဘာလဲ။ + + + +--- + +### Q2: Workflow ရဲ့ အခြေအနေ (State) ကို မှတ်တမ်းတင်ထားဖို့အတွက် ဘယ် Object ကို အသုံးပြုပါသလဲ။ + + + +--- + +### Q3: Agent တစ်ခုက ယခင် အပြန်အလှန် ဆက်သွယ်မှုများကို မှတ်မိစေချင်ရင် ဘယ် Method ကို အသုံးပြုသင့်ပါသလဲ။ + + + +--- + +### Q4: Agentic RAG ရဲ့ အဓိက အင်္ဂါရပ် (Key Feature) က ဘာလဲ။ + + + +--- + +နားလည်သွားပြီလား? ကောင်းပါပြီ! အခုတော့ **ဒီ Unit ရဲ့ အနှစ်ချုပ်ကို အတိုချုပ် ပြန်လည်သုံးသပ်ကြည့်ရအောင်!** \ No newline at end of file diff --git a/units/my/unit2/llama-index/tools.mdx b/units/my/unit2/llama-index/tools.mdx new file mode 100644 index 00000000..c005cf58 --- /dev/null +++ b/units/my/unit2/llama-index/tools.mdx @@ -0,0 +1,147 @@ +# LlamaIndex တွင် Tools များ အသုံးပြုခြင်း + +**Tools များကို ရှင်းလင်းပြတ်သားစွာ သတ်မှတ်ခြင်းသည် စွမ်းဆောင်ရည်အတွက် အလွန်အရေးကြီးပါတယ်။** [အခန်း ၁](../../unit1/tools) မှာ ဆွေးနွေးခဲ့သလိုပဲ၊ Tool Interface များ ရှင်းလင်းလေလေ၊ LLM များအတွက် အသုံးပြုရတာ ပိုမိုလွယ်ကူလေလေ ဖြစ်ပါတယ်။ + +လူသား Engineer များအတွက် Software API Interface များလိုပါပဲ၊ Tool တစ်ခု ဘယ်လိုအလုပ်လုပ်တယ်ဆိုတာ နားလည်ရလွယ်ကူရင်၊ ၎င်း Tool ကနေ အကျိုးကျေးဇူး ပိုမိုရရှိနိုင်ပါတယ်။ + +LlamaIndex မှာ အဓိကအားဖြင့် **Tool အမျိုးအစား (၄) မျိုး** ရှိပါတယ်။ + +![Tools](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/llama-index/tools.png) + +1. `FunctionTool`: မည်သည့် Python Function ကိုမဆို Agent တစ်ခု အသုံးပြုနိုင်သော Tool အဖြစ် ပြောင်းလဲပေးပါတယ်။ Function ဘယ်လိုအလုပ်လုပ်တယ်ဆိုတာကို သူက အလိုအလျောက် သိရှိနိုင်ပါတယ်။ +2. `QueryEngineTool`: Agent များအား Query Engine များကို အသုံးပြုနိုင်စေသော Tool ဖြစ်ပါတယ်။ Agent များသည် Query Engine များပေါ်တွင် တည်ဆောက်ထားသောကြောင့်၊ ၎င်းတို့သည် အခြား Agent များကိုလည်း Tool အဖြစ် အသုံးပြုနိုင်ပါတယ်။ +3. `Toolspecs`: Community မှ ဖန်တီးထားသော Tool များ၏ စုစည်းမှုဖြစ်ပြီး၊ Gmail ကဲ့သို့သော သီးခြားဝန်ဆောင်မှုများအတွက် Tool များ ပါဝင်လေ့ရှိပါတယ်။ +4. `Utility Tools`: အခြား Tool များမှ ရရှိလာသော ဒေတာအမြောက်အမြားကို ကိုင်တွယ်ရာတွင် အထောက်အကူပြုသော အထူး Tool များ ဖြစ်ပါတယ်။ + +အောက်မှာ ဒီ Tool တစ်ခုချင်းစီအကြောင်းကို အသေးစိတ် လေ့လာသွားပါမယ်။ + +## FunctionTool တစ်ခု ဖန်တီးခြင်း + +> [!TIP] +> သင်သည် [ဤ Notebook](https://huggingface.co/agents-course/notebooks/blob/main/unit2/llama-index/tools.ipynb) မှ Code များကို Google Colab ကို အသုံးပြု၍ လိုက်လံလုပ်ဆောင်နိုင်ပါတယ်။ + +`FunctionTool` သည် မည်သည့် Python Function ကိုမဆို ရိုးရှင်းသော နည်းလမ်းဖြင့် ထုပ်ပိုးပြီး Agent တစ်ခုအတွက် အသုံးပြုနိုင်စေရန် ပြုလုပ်ပေးပါတယ်။ + +သင်သည် Synchronous (တစ်ပြိုင်နက်တည်း လုပ်ဆောင်သော) သို့မဟုတ် Asynchronous (တစ်ပြိုင်နက်တည်း မဟုတ်ဘဲ အချိန်ယူ လုပ်ဆောင်သော) Function များကို Tool သို့ ပေးပို့နိုင်ပါတယ်။ `name` နှင့် `description` Parameter များသည် ရွေးချယ်နိုင်သော်လည်း အထူးအရေးကြီးပါတယ်။ ဘာကြောင့်လဲဆိုတော့ ၎င်းတို့က Agent ကို Tool ကို ဘယ်အချိန်မှာ ဘယ်လို ထိရောက်စွာ အသုံးပြုရမယ်ဆိုတာ နားလည်စေဖို့ ကူညီပေးလို့ပါပဲ။ + +အောက်မှာ `FunctionTool` ကို ဘယ်လိုဖန်တီးပြီး ခေါ်ဆိုရမလဲဆိုတာကို ကြည့်ကြရအောင်။ + +```python +from llama_index.core.tools import FunctionTool + +def get_weather(location: str) -> str: + """Useful for getting the weather for a given location.""" + print(f"Getting weather for {location}") + return f"The weather in {location} is sunny" + +tool = FunctionTool.from_defaults( + get_weather, + name="my_weather_tool", + description="Useful for getting the weather for a given location.", +) +tool.call("New York") +``` + +> [!TIP] +> Function Calling ကို အသုံးပြုသော Agent သို့မဟုတ် LLM ကို အသုံးပြုသည့်အခါ၊ ရွေးချယ်ထားသော Tool (နှင့် ထို Tool အတွက် ရေးသားထားသော Arguments များ) သည် Tool ၏ နာမည်နှင့် ရည်ရွယ်ချက် ဖော်ပြချက် (Description) ပေါ်တွင် များစွာ မူတည်ပါတယ်။ Function Calling အကြောင်းကို [Function Calling Guide](https://docs.llamaindex.ai/en/stable/examples/workflow/function_calling_agent/) မှာ ပိုမိုလေ့လာနိုင်ပါတယ်။ + +## QueryEngineTool တစ်ခု ဖန်တီးခြင်း + +ယခင်အခန်းမှာ ကျွန်တော်တို့ သတ်မှတ်ခဲ့တဲ့ `QueryEngine` ကို `QueryEngineTool` Class ကို အသုံးပြုပြီး Tool တစ်ခုအဖြစ် အလွယ်တကူ ပြောင်းလဲနိုင်ပါတယ်။ + +အောက်ပါ ဥပမာမှာ `QueryEngine` မှ `QueryEngineTool` ကို ဘယ်လိုဖန်တီးရမလဲဆိုတာကို ကြည့်ကြရအောင်။ + +```python +from llama_index.core import VectorStoreIndex +from llama_index.core.tools import QueryEngineTool +from llama_index.llms.huggingface_api import HuggingFaceInferenceAPI +from llama_index.embeddings.huggingface import HuggingFaceEmbedding +from llama_index.vector_stores.chroma import ChromaVectorStore + +embed_model = HuggingFaceEmbedding("BAAI/bge-small-en-v1.5") + +db = chromadb.PersistentClient(path="./alfred_chroma_db") +chroma_collection = db.get_or_create_collection("alfred") +vector_store = ChromaVectorStore(chroma_collection=chroma_collection) + +index = VectorStoreIndex.from_vector_store(vector_store, embed_model=embed_model) + +llm = HuggingFaceInferenceAPI(model_name="Qwen/Qwen2.5-Coder-32B-Instruct") +query_engine = index.as_query_engine(llm=llm) +tool = QueryEngineTool.from_defaults(query_engine, name="some useful name", description="some useful description") +``` + +## Toolspecs များ ဖန်တီးခြင်း + +`ToolSpecs` များကို သဟဇာတဖြစ်စွာ အတူတကွ အလုပ်လုပ်သော Tool များ၏ စုစည်းမှုအဖြစ် စဉ်းစားနိုင်ပါတယ်။ ဒါဟာ စနစ်တကျ စီစဉ်ထားတဲ့ Professional Toolkit တစ်ခုလိုပါပဲ။ + +စက်ပြင်ဆရာတစ်ဦးရဲ့ Toolkit မှာ ကားပြင်ဆင်မှုအတွက် အတူတကွ အလုပ်လုပ်တဲ့ ဖြည့်စွက် Tool တွေ ပါဝင်သလိုမျိုး၊ `ToolSpec` ကလည်း သီးခြားရည်ရွယ်ချက်များအတွက် ဆက်စပ် Tool များကို ပေါင်းစပ်ပေးပါတယ်။ ဥပမာအားဖြင့်၊ စာရင်းကိုင် Agent တစ်ခုရဲ့ `ToolSpec` ဟာ ငွေကြေးဆိုင်ရာ လုပ်ငန်းများကို တိကျစွာ ကိုင်တွယ်နိုင်ဖို့အတွက် Spreadsheet စွမ်းရည်များ၊ Email လုပ်ဆောင်ချက်များနှင့် တွက်ချက်မှု Tool များကို စနစ်တကျ ပေါင်းစပ်ပေးနိုင်ပါတယ်။ + +
+Google Toolspec ကို Install လုပ်ခြင်း +[LlamaHub အပိုင်း](./llama-hub) မှာ မိတ်ဆက်ခဲ့သလိုပဲ၊ Google Toolspec ကို အောက်ပါ Command ဖြင့် Install လုပ်နိုင်ပါတယ်။ + +```python +pip install llama-index-tools-google +``` +
+ +အခု Toolspec ကို Load လုပ်ပြီး Tool List အဖြစ် ပြောင်းလဲနိုင်ပါပြီ။ + +```python +from llama_index.tools.google import GmailToolSpec + +tool_spec = GmailToolSpec() +tool_spec_list = tool_spec.to_tool_list() +``` + +Tool များကို ပိုမိုအသေးစိတ် ကြည့်ရှုရန်အတွက် Tool တစ်ခုစီ၏ `metadata` ကို ကြည့်ရှုနိုင်ပါတယ်။ + +```python +[(tool.metadata.name, tool.metadata.description) for tool in tool_spec_list] +``` + +### LlamaIndex ရှိ Model Context Protocol (MCP) + +LlamaIndex သည် [LlamaHub ရှိ ToolSpec](https://llamahub.ai/l/tools/llama-index-tools-mcp?from=) မှတစ်ဆင့် MCP Tool များကို အသုံးပြုခွင့်ပေးပါတယ်။ + +သင်သည် MCP Server တစ်ခုကို Run ပြီး အောက်ပါ Implementation မှတစ်ဆင့် စတင်အသုံးပြုနိုင်ပါတယ်။ + +MCP အကြောင်းကို ပိုမိုနက်ရှိုင်းစွာ သိရှိလိုပါက၊ ကျွန်တော်တို့ရဲ့ [အခမဲ့ MCP Course](https://huggingface.co/learn/mcp-course/) ကို စစ်ဆေးကြည့်ရှုနိုင်ပါတယ်။ + +
+MCP Toolspec ကို Install လုပ်ခြင်း +[LlamaHub အပိုင်း](./llama-hub) မှာ မိတ်ဆက်ခဲ့သလိုပဲ၊ MCP Toolspec ကို အောက်ပါ Command ဖြင့် Install လုပ်နိုင်ပါတယ်။ + +```python +pip install llama-index-tools-mcp +``` +
+ +```python +from llama_index.tools.mcp import BasicMCPClient, McpToolSpec + +# We consider there is a mcp server running on 127.0.0.1:8000, or you can use the mcp client to connect to your own mcp server. +mcp_client = BasicMCPClient("http://127.0.0.1:8000/sse") +mcp_tool = McpToolSpec(client=mcp_client) + +# get the agent +agent = await get_agent(mcp_tool) + +# create the agent context +agent_context = Context(agent) +``` + +## Utility Tools များ + +များသောအားဖြင့်၊ API တစ်ခုကို တိုက်ရိုက် Query လုပ်ခြင်းသည် **အချက်အလက် အလွန်အကျွံ ပြန်ပေးနိုင်ပါတယ်**။ ထိုဒေတာများထဲမှ အချို့သည် မသက်ဆိုင်တာမျိုး၊ LLM ၏ Context Window ကို ပြည့်လျှံသွားတာမျိုး၊ သို့မဟုတ် သင်အသုံးပြုနေသော Token အရေအတွက်ကို မလိုအပ်ဘဲ တိုးလာစေတာမျိုး ဖြစ်နိုင်ပါတယ်။ + +အောက်မှာ ကျွန်တော်တို့ရဲ့ အဓိက Utility Tool နှစ်ခုကို လေ့လာကြည့်ကြရအောင်။ + +1. `OnDemandToolLoader`: ဤ Tool သည် ရှိပြီးသား LlamaIndex Data Loader (BaseReader Class) ကို Agent တစ်ခု အသုံးပြုနိုင်သော Tool အဖြစ် ပြောင်းလဲပေးပါတယ်။ Tool ကို Data Loader မှ `load_data` ကို စတင်ရန် လိုအပ်သော Parameter များအားလုံးနှင့်အတူ Natural Language Query String တစ်ခုဖြင့် ခေါ်ဆိုနိုင်ပါတယ်။ လုပ်ဆောင်နေစဉ်အတွင်း၊ ကျွန်တော်တို့သည် Data Loader မှ ဒေတာကို ဦးစွာ Load လုပ်ခြင်း၊ Index လုပ်ခြင်း (ဥပမာ - Vector Store ဖြင့်)၊ ပြီးနောက် 'On-demand' Query လုပ်ခြင်းတို့ကို လုပ်ဆောင်ပါတယ်။ ဤအဆင့် (၃) ဆင့်လုံးသည် Tool Call တစ်ခုတည်းတွင် ဖြစ်ပေါ်ပါတယ်။ +2. `LoadAndSearchToolSpec`: `LoadAndSearchToolSpec` သည် ရှိပြီးသား Tool တစ်ခုခုကို Input အဖြစ် လက်ခံပါတယ်။ Tool Spec တစ်ခုအနေဖြင့်၊ ၎င်းသည် `to_tool_list` ကို Implement လုပ်ပြီး ထို Function ကို ခေါ်ဆိုသောအခါ Tool နှစ်ခုကို ပြန်ပေးပါတယ်- Loading Tool တစ်ခုနှင့် Search Tool တစ်ခုတို့ ဖြစ်ပါတယ်။ Load Tool ကို လုပ်ဆောင်ခြင်းသည် အခြေခံ Tool ကို ခေါ်ဆိုပြီး ရလဒ်ကို Index လုပ်ပါမယ် (Default အားဖြင့် Vector Index ဖြင့်)။ Search Tool ကို လုပ်ဆောင်ခြင်းသည် Input အဖြစ် Query String တစ်ခုကို ယူပြီး အခြေခံ Index ကို ခေါ်ဆိုပါမယ်။ + +> [!TIP] +> Toolspecs များနှင့် Utility Tools များကို [LlamaHub](https://llamahub.ai/) တွင် ရှာဖွေနိုင်ပါတယ်။ + +LlamaIndex မှာ Agent တွေနဲ့ Tool တွေရဲ့ အခြေခံတွေကို နားလည်ပြီးတဲ့နောက်၊ **Configurable ဖြစ်ပြီး စီမံခန့်ခွဲနိုင်တဲ့ Workflow တွေကို ဖန်တီးဖို့အတွက် LlamaIndex ကို ဘယ်လိုအသုံးပြုနိုင်မလဲ** ဆိုတာကို ကြည့်ကြရအောင်! \ No newline at end of file diff --git a/units/my/unit2/llama-index/workflows.mdx b/units/my/unit2/llama-index/workflows.mdx new file mode 100644 index 00000000..b465686d --- /dev/null +++ b/units/my/unit2/llama-index/workflows.mdx @@ -0,0 +1,289 @@ +# LlamaIndex တွင် Agent လုပ်ငန်းအဆင့်ဆင့် (Workflows) များကို ဖန်တီးခြင်း + +LlamaIndex ရှိ **လုပ်ငန်းအဆင့်ဆင့် (Workflow)** ဆိုတာဟာ သင့်ရဲ့ Code တွေကို စနစ်တကျနဲ့ စီမံခန့်ခွဲနိုင်တဲ့ အဆင့်များအဖြစ် စုစည်းပေးတဲ့ နည်းလမ်းတစ်ခု ဖြစ်ပါတယ်။ + +ဒီလို Workflow တစ်ခုကို **`Events`** များကနေ စတင်လှုပ်ရှားပေးတဲ့ **`Steps`** တွေကို သတ်မှတ်ခြင်းဖြင့် ဖန်တီးနိုင်ပါတယ်။ ဒီ `Steps` တွေကလည်း နောက်ထပ် `Events` တွေကို ထုတ်လွှတ်ပြီး နောက်ထပ် `Steps` တွေကို ဆက်လက် လှုပ်ရှားစေပါတယ်။ + +RAG (Retrieval-Augmented Generation) လုပ်ငန်းတစ်ခုအတွက် LlamaIndex Workflow ပုံကြမ်းကို Alfred က ပြသထားတာကို ကြည့်လိုက်ရအောင်။ + +![Workflow Schematic](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/llama-index/workflows.png) + +**Workflows တွေက အဓိက အကျိုးကျေးဇူးများစွာကို ပေးပါတယ်:** + +* Code များကို သီးခြား အဆင့်များအဖြစ် ရှင်းလင်းစွာ စုစည်းပေးခြင်း။ +* ပြောင်းလွယ်ပြင်လွယ်ရှိသော ထိန်းချုပ်မှု စီးဆင်းမှုအတွက် Event-driven Architecture (ဖြစ်ရပ်ကို အခြေခံသော ဗိသုကာ)။ +* အဆင့်များအကြား Type-safe (အမျိုးအစား လုံခြုံသော) ဆက်သွယ်မှု။ +* Built-in State Management (အခြေအနေ စီမံခန့်ခွဲမှု)။ +* ရိုးရှင်းသော Agent အပြန်အလှန်ဆက်သွယ်မှုများသာမက ရှုပ်ထွေးသော Agent အပြန်အလှန်ဆက်သွယ်မှုများကိုပါ ပံ့ပိုးပေးခြင်း။ + +သင်တို့ ခန့်မှန်းမိတဲ့အတိုင်းပါပဲ၊ **Workflows တွေဟာ Agent တွေရဲ့ ကိုယ်ပိုင် ဆုံးဖြတ်ချက်ချနိုင်စွမ်း (Autonomy) နဲ့ လုပ်ငန်းအဆင့်ဆင့်တစ်ခုလုံးကို ထိန်းချုပ်နိုင်မှု (Control) အကြားမှာ ကောင်းမွန်တဲ့ ဟန်ချက်ညီမှုကို ပေးစွမ်းပါတယ်**။ + +ဒါဆိုရင် ကျွန်တော်တို့ ကိုယ်တိုင် Workflow တစ်ခုကို ဘယ်လို ဖန်တီးရမလဲဆိုတာ လေ့လာကြည့်ရအောင်! + +## Workflows များ ဖန်တီးခြင်း + +> [!TIP] +> သင်တို့အနေနဲ့ [ဒီ Notebook](https://huggingface.co/agents-course/notebooks/blob/main/unit2/llama-index/workflows.ipynb) ထဲက Code တွေကို Google Colab ကို အသုံးပြုပြီး လိုက်လံလုပ်ဆောင်နိုင်ပါတယ်။ + +### အခြေခံ Workflow ဖန်တီးခြင်း + +
+Workflow Package ကို Install လုပ်ခြင်း +[LlamaHub အပိုင်း](./llama-hub) မှာ မိတ်ဆက်ပေးခဲ့တဲ့အတိုင်း၊ Workflow Package ကို အောက်ပါ Command ဖြင့် Install လုပ်နိုင်ပါတယ်။ + +```python +pip install llama-index-utils-workflow +``` +
+ +ကျွန်တော်တို့ဟာ `Workflow` မှ အမွေဆက်ခံတဲ့ Class တစ်ခုကို သတ်မှတ်ပြီး၊ Functions တွေကို `@step` ဖြင့် အလှဆင် (Decorate) ခြင်းဖြင့် အဆင့်တစ်ခုတည်းပါဝင်တဲ့ Workflow တစ်ခုကို ဖန်တီးနိုင်ပါတယ်။ + +Workflow ရဲ့ စတင်ခြင်းနဲ့ ပြီးဆုံးခြင်းကို ဖော်ပြဖို့အတွက် အထူး Event များဖြစ်တဲ့ `StartEvent` နဲ့ `StopEvent` တွေကိုလည်း ထည့်သွင်းဖို့ လိုအပ်ပါတယ်။ + +```python +from llama_index.core.workflow import StartEvent, StopEvent, Workflow, step + +class MyWorkflow(Workflow): + @step + async def my_step(self, ev: StartEvent) -> StopEvent: + # do something here + return StopEvent(result="Hello, world!") + + +w = MyWorkflow(timeout=10, verbose=False) +result = await w.run() +``` + +သင်တို့ မြင်တဲ့အတိုင်းပါပဲ၊ `w.run()` ကို ခေါ်ဆိုခြင်းဖြင့် Workflow ကို စတင် လုပ်ဆောင်နိုင်ပါတယ်။ + +### အဆင့်များစွာကို ချိတ်ဆက်ခြင်း (Connecting Multiple Steps) + +အဆင့်များစွာကို ချိတ်ဆက်ဖို့အတွက်၊ **အဆင့်များအကြား ဒေတာများ သယ်ဆောင်ပေးမယ့် Custom Events တွေကို ဖန်တီးရပါမယ်**။ + +ဒီလိုလုပ်ဖို့အတွက်၊ ပထမအဆင့်ရဲ့ Output ကို ဒုတိယအဆင့်ဆီ လွှဲပြောင်းပေးမယ့် `Event` တစ်ခုကို အဆင့်များအကြား ထည့်သွင်းရပါမယ်။ + +```python +from llama_index.core.workflow import Event + +class ProcessingEvent(Event): + intermediate_result: str + +class MultiStepWorkflow(Workflow): + @step + async def step_one(self, ev: StartEvent) -> ProcessingEvent: + # Process initial data + return ProcessingEvent(intermediate_result="Step 1 complete") + + @step + async def step_two(self, ev: ProcessingEvent) -> StopEvent: + # Use the intermediate result + final_result = f"Finished processing: {ev.intermediate_result}" + return StopEvent(result=final_result) + +w = MultiStepWorkflow(timeout=10, verbose=False) +result = await w.run() +result +``` + +ဒီနေရာမှာ **Type Hinting** ဟာ အရေးကြီးပါတယ်။ ဘာကြောင့်လဲဆိုတော့ Workflow ကို မှန်ကန်စွာ လုပ်ဆောင်နိုင်ဖို့အတွက် အဆင့်တစ်ခုက ထုတ်ပေးတဲ့ Event အမျိုးအစားကို နောက်အဆင့်က လက်ခံရရှိကြောင်း သေချာစေလို့ပါပဲ။ ဒါဆိုရင် နည်းနည်း ပိုရှုပ်ထွေးတဲ့ အရာတွေကို ကြည့်လိုက်ရအောင်! + +### Loops နှင့် Branches (ကွင်းများနှင့် အကိုင်းအခက်များ) + +Type Hinting ဟာ Workflows တွေရဲ့ အစွမ်းထက်ဆုံး အစိတ်အပိုင်းဖြစ်ပါတယ်။ ဘာကြောင့်လဲဆိုတော့ ၎င်းက ပိုမိုရှုပ်ထွေးတဲ့ Workflows တွေအတွက် Branches (အကိုင်းအခက်များ)၊ Loops (ကွင်းများ) နဲ့ Joins (ပေါင်းစည်းမှုများ) ကို ဖန်တီးနိုင်စေလို့ပါပဲ။ + +**Loop တစ်ခု ဖန်တီးခြင်း** ဥပမာကို Union Operator (`|`) ကို အသုံးပြုပြီး ပြသပါမယ်။ အောက်ပါ ဥပမာမှာ `LoopEvent` ကို Step အတွက် Input အဖြစ် ယူနိုင်သလို Output အဖြစ်လည်း ပြန်ထုတ်ပေးနိုင်တာကို တွေ့ရပါမယ်။ + +```python +from llama_index.core.workflow import Event +import random + + +class ProcessingEvent(Event): + intermediate_result: str + + +class LoopEvent(Event): + loop_output: str + + +class MultiStepWorkflow(Workflow): + @step + async def step_one(self, ev: StartEvent | LoopEvent) -> ProcessingEvent | LoopEvent: + if random.randint(0, 1) == 0: + print("Bad thing happened") + return LoopEvent(loop_output="Back to step one.") + else: + print("Good thing happened") + return ProcessingEvent(intermediate_result="First step complete.") + + @step + async def step_two(self, ev: ProcessingEvent) -> StopEvent: + # Use the intermediate result + final_result = f"Finished processing: {ev.intermediate_result}" + return StopEvent(result=final_result) + + +w = MultiStepWorkflow(verbose=False) +result = await w.run() +result +``` + +### Workflows များကို ပုံဆွဲခြင်း (Drawing Workflows) + +ကျွန်တော်တို့ Workflows တွေကို ပုံဆွဲလို့လည်း ရပါတယ်။ Workflow ကို HTML ဖိုင်တစ်ခုအဖြစ် သိမ်းဆည်းဖို့အတွက် `draw_all_possible_flows` Function ကို အသုံးပြုနိုင်ပါတယ်။ + +```python +from llama_index.utils.workflow import draw_all_possible_flows + +w = ... # as defined in the previous section +draw_all_possible_flows(w, "flow.html") +``` + +![workflow drawing](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/llama-index/workflow-draw.png) + +Course မှာ ကျွန်တော်တို့ လေ့လာမယ့် နောက်ထပ် အမိုက်စား နည်းလမ်းတစ်ခုကတော့ Workflow မှာ **State (အခြေအနေ)** ကို ထည့်သွင်းနိုင်ခြင်းပဲ ဖြစ်ပါတယ်။ + +### State Management (အခြေအနေ စီမံခန့်ခွဲမှု) + +**State Management** ဟာ Workflow ရဲ့ အခြေအနေကို မှတ်တမ်းတင်ထားဖို့အတွက် အသုံးဝင်ပါတယ်။ ဒါမှ အဆင့်တိုင်းက အတူတူ အခြေအနေ (State) ကို ဝင်ရောက်ကြည့်ရှုနိုင်မှာ ဖြစ်ပါတယ်။ + +ဒါကို လုပ်ဆောင်ဖို့အတွက် Step Function ထဲက Parameter တစ်ခုရဲ့ အပေါ်မှာ `Context` Type Hint ကို အသုံးပြုနိုင်ပါတယ်။ + +```python +from llama_index.core.workflow import Context, StartEvent, StopEvent + + +@step +async def query(self, ctx: Context, ev: StartEvent) -> StopEvent: + # store query in the context + await ctx.store.set("query", "What is the capital of France?") + + # do something with context and event + val = ... + + # retrieve query from the context + query = await ctx.store.get("query") + + return StopEvent(result=val) +``` + +ကောင်းပါပြီ! အခုဆိုရင် LlamaIndex မှာ အခြေခံ Workflows တွေကို ဘယ်လို ဖန်တီးရမလဲဆိုတာ သင်သိသွားပါပြီ! + +> [!TIP] +> Workflows တွေမှာ ပိုမိုရှုပ်ထွေးတဲ့ အသေးစိတ်အချက်အလက်တွေ ရှိပါသေးတယ်။ [LlamaIndex Documentation](https://docs.llamaindex.ai/en/stable/understanding/workflows/) မှာ ပိုမိုလေ့လာနိုင်ပါတယ်။ + +ဒါပေမယ့် Workflows တွေ ဖန်တီးဖို့ နောက်ထပ် နည်းလမ်းတစ်ခု ရှိပါသေးတယ်။ ဒါကတော့ `AgentWorkflow` Class ကို အသုံးပြုခြင်းပဲ ဖြစ်ပါတယ်။ Multi-Agent Workflow တစ်ခုကို ဖန်တီးဖို့အတွက် ဒီ Class ကို ဘယ်လို အသုံးပြုရမလဲဆိုတာ ကြည့်လိုက်ရအောင်။ + +## Multi-Agent Workflows ဖြင့် လုပ်ငန်းအဆင့်ဆင့်များကို အလိုအလျောက် လုပ်ဆောင်ခြင်း + +ကိုယ်တိုင် Workflow ဖန်တီးမယ့်အစား၊ ကျွန်တော်တို့ဟာ **`AgentWorkflow` Class ကို အသုံးပြုပြီး Multi-Agent Workflow တစ်ခုကို ဖန်တီးနိုင်ပါတယ်**။ + +`AgentWorkflow` ဟာ Workflow Agents တွေကို အသုံးပြုပြီး Agent တစ်ခု သို့မဟုတ် တစ်ခုထက်ပိုသော စနစ်တစ်ခုကို ဖန်တီးနိုင်စေပါတယ်။ ဒီ Agent တွေဟာ သူတို့ရဲ့ သီးခြား ကျွမ်းကျင်မှုများ (Specialized Capabilities) ကို အခြေခံပြီး အချင်းချင်း ပူးပေါင်းဆောင်ရွက်နိုင်ပြီး Tasks တွေကို လွှဲပြောင်းပေးနိုင်ပါတယ်။ + +ဒါက မတူညီတဲ့ Agent တွေက Task တစ်ခုရဲ့ မတူညီတဲ့ ကဏ္ဍတွေကို ကိုင်တွယ်ဖြေရှင်းနိုင်တဲ့ ရှုပ်ထွေးတဲ့ Agent စနစ်တွေကို တည်ဆောက်နိုင်စေပါတယ်။ + +`llama_index.core.agent` ကနေ Class တွေကို Import လုပ်မယ့်အစား၊ `llama_index.core.agent.workflow` ကနေ Agent Class တွေကို Import လုပ်ပါမယ်။ + +Agent တစ်ခုကို `AgentWorkflow` Constructor မှာ **Root Agent** အဖြစ် သတ်မှတ်ရပါမယ်။ User Message တစ်ခု ဝင်လာတဲ့အခါ၊ ၎င်းကို Root Agent ဆီသို့ ဦးစွာ ပေးပို့ပါတယ်။ + +ထို့နောက် Agent တစ်ခုစီက အောက်ပါတို့ကို လုပ်ဆောင်နိုင်ပါတယ်- + +* သူတို့ရဲ့ Tools တွေကို အသုံးပြုပြီး Request ကို တိုက်ရိုက် ကိုင်တွယ်ဖြေရှင်းခြင်း။ +* Task အတွက် ပိုမိုသင့်လျော်တဲ့ အခြား Agent တစ်ခုဆီသို့ လွှဲပြောင်းပေးခြင်း (Handoff)။ +* အသုံးပြုသူထံသို့ တုံ့ပြန်မှု ပြန်ပေးခြင်း။ + +Multi-Agent Workflow တစ်ခုကို ဘယ်လို ဖန်တီးရမလဲဆိုတာ ကြည့်လိုက်ရအောင်။ + +```python +from llama_index.core.agent.workflow import AgentWorkflow, ReActAgent +from llama_index.llms.huggingface_api import HuggingFaceInferenceAPI + +# Define some tools +def add(a: int, b: int) -> int: + """Add two numbers.""" + return a + b + +def multiply(a: int, b: int) -> int: + """Multiply two numbers.""" + return a * b + +llm = HuggingFaceInferenceAPI(model_name="Qwen/Qwen2.5-Coder-32B-Instruct") + +# we can pass functions directly without FunctionTool -- the fn/docstring are parsed for the name/description +multiply_agent = ReActAgent( + name="multiply_agent", + description="Is able to multiply two integers", + system_prompt="A helpful assistant that can use a tool to multiply numbers.", + tools=[multiply], + llm=llm, +) + +addition_agent = ReActAgent( + name="add_agent", + description="Is able to add two integers", + system_prompt="A helpful assistant that can use a tool to add numbers.", + tools=[add], + llm=llm, +) + +# Create the workflow +workflow = AgentWorkflow( + agents=[multiply_agent, addition_agent], + root_agent="multiply_agent", +) + +# Run the system +response = await workflow.run(user_msg="Can you add 5 and 3?") +``` + +**မှတ်ချက်:** ဒီဥပမာမှာ `multiply_agent` ကို Root Agent အဖြစ် သတ်မှတ်ထားပါတယ်။ ဒါပေမယ့် User က "Can you add 5 and 3?" လို့ မေးတဲ့အခါ၊ `multiply_agent` က သူ့ရဲ့ Tool (multiply) ကို အသုံးမပြုနိုင်ဘူးဆိုတာ သိတဲ့အတွက်၊ Task ကို `addition_agent` ဆီသို့ အလိုအလျောက် လွှဲပြောင်းပေးပါလိမ့်မယ်။ + +Agent Tools များသည် ကျွန်တော်တို့ အစောပိုင်းက ပြောခဲ့တဲ့ Workflow State ကိုလည်း ပြောင်းလဲနိုင်ပါတယ်။ Workflow ကို မစတင်မီ၊ Agent အားလုံး ဝင်ရောက်ကြည့်ရှုနိုင်မယ့် Initial State Dictionary တစ်ခုကို ပေးနိုင်ပါတယ်။ + +State ကို Workflow Context ရဲ့ `state` Key မှာ သိမ်းဆည်းထားပါတယ်။ ၎င်းကို `state_prompt` ထဲသို့ ထည့်သွင်းပေးပြီး User Message အသစ်တိုင်းကို ဖြည့်စွက်ပေးပါတယ်။ + +ယခင် ဥပမာကို ပြင်ဆင်ပြီး Function ခေါ်ဆိုမှု အရေအတွက်ကို ရေတွက်ရန် Counter တစ်ခု ထည့်သွင်းကြည့်ရအောင်။ + +```python +from llama_index.core.workflow import Context + +# Define some tools +async def add(ctx: Context, a: int, b: int) -> int: + """Add two numbers.""" + # update our count + cur_state = await ctx.store.get("state") + cur_state["num_fn_calls"] += 1 + await ctx.store.set("state", cur_state) + + return a + b + +async def multiply(ctx: Context, a: int, b: int) -> int: + """Multiply two numbers.""" + # update our count + cur_state = await ctx.store.get("state") + cur_state["num_fn_calls"] += 1 + await ctx.store.set("state", cur_state) + + return a * b + +... + +workflow = AgentWorkflow( + agents=[multiply_agent, addition_agent], + root_agent="multiply_agent", + initial_state={"num_fn_calls": 0}, + state_prompt="Current state: {state}. User message: {msg}", +) + +# run the workflow with context +ctx = Context(workflow) +response = await workflow.run(user_msg="Can you add 5 and 3?", ctx=ctx) + +# pull out and inspect the state +state = await ctx.store.get("state") +print(state["num_fn_calls"]) +``` + +ဂုဏ်ယူပါတယ်! အခုဆိုရင် LlamaIndex မှာ Agent တွေရဲ့ အခြေခံတွေကို သင်ကျွမ်းကျင်သွားပါပြီ! 🎉 + +သင့်ရဲ့ အသိပညာတွေကို ခိုင်မာစေဖို့အတွက် နောက်ဆုံး Quiz တစ်ခုနဲ့ ဆက်လက်သွားကြရအောင်! 🚀 \ No newline at end of file diff --git a/units/my/unit2/smolagents/code_agents.mdx b/units/my/unit2/smolagents/code_agents.mdx new file mode 100644 index 00000000..672d8d78 --- /dev/null +++ b/units/my/unit2/smolagents/code_agents.mdx @@ -0,0 +1,393 @@ +## Code ကို အသုံးပြုသော Agent များ တည်ဆောက်ခြင်း + + + +# Code ကို အသုံးပြုသော Agent များ တည်ဆောက်ခြင်း + +`smolagents` မှာ Code Agent တွေဟာ မူရင်း Agent အမျိုးအစား ဖြစ်ပါတယ်။ ၎င်းတို့ဟာ လုပ်ဆောင်ချက်တွေကို လုပ်ဆောင်ဖို့အတွက် Python Tool Calls တွေကို ထုတ်ပေးပါတယ်။ ဒီလို Code ကို အသုံးပြုခြင်းက လုပ်ဆောင်ချက်တွေကို **ထိရောက်မှုရှိစေခြင်း၊ ဖော်ပြနိုင်စွမ်းရှိစေခြင်းနဲ့ တိကျမှုရှိစေခြင်း** တို့ကို ရရှိစေပါတယ်။ + +ဒီလို စနစ်တကျ ချဉ်းကပ်မှုကြောင့် လိုအပ်တဲ့ လုပ်ဆောင်ချက် အဆင့်အရေအတွက်ကို လျှော့ချပေးနိုင်ပြီး၊ ရှုပ်ထွေးတဲ့ လုပ်ငန်းတွေကို ရိုးရှင်းစေကာ၊ ရှိပြီးသား Code Functions တွေကို ပြန်လည်အသုံးပြုနိုင်စေပါတယ်။ `smolagents` ဟာ Code Agent တွေ တည်ဆောက်ဖို့အတွက် လိုင်းပေါင်း ၁,၀၀၀ ခန့်သာရှိတဲ့ ပေါ့ပါးတဲ့ Framework တစ်ခုကို ပံ့ပိုးပေးထားပါတယ်။ + +![Code vs JSON Actions](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/code_vs_json_actions.png) +*ပုံကို [Executable Code Actions Elicit Better LLM Agents](https://huggingface.co/papers/2402.01030) စာတမ်းမှ ရယူထားပါသည်။* + +> [!TIP] +> Code Agent တွေ ဘာကြောင့် ထိရောက်မှုရှိသလဲဆိုတာကို ပိုမိုသိရှိလိုပါက `smolagents` Documentation မှ ဒီလမ်းညွှန်ချက်ကို လေ့လာကြည့်ရှုနိုင်ပါတယ်။ + +## Code Agent တွေ ဘာကြောင့် အရေးပါတာလဲ။ + +အဆင့်များစွာပါဝင်တဲ့ Agent လုပ်ငန်းစဉ်တစ်ခုမှာ၊ LLM ဟာ ပြင်ပ Tool ခေါ်ဆိုမှုများ ပါဝင်တဲ့ လုပ်ဆောင်ချက်တွေကို ရေးသားပြီး လုပ်ဆောင်ပါတယ်။ ရိုးရာနည်းလမ်းတွေမှာ Tool နာမည်တွေနဲ့ Arguments တွေကို String အနေနဲ့ သတ်မှတ်ဖို့ JSON ပုံစံကို အသုံးပြုကြပြီး၊ **ဘယ် Tool ကို လုပ်ဆောင်ရမယ်ဆိုတာ ဆုံးဖြတ်ဖို့ စနစ်ကနေ စစ်ဆေးအတည်ပြု (Parse) ရပါတယ်**။ + +ဒါပေမယ့်၊ သုတေသနတွေအရ **Tool-calling LLM တွေဟာ Code ကို တိုက်ရိုက်အသုံးပြုတဲ့အခါ ပိုမိုထိရောက်စွာ အလုပ်လုပ်နိုင်တယ်** ဆိုတာကို ပြသနေပါတယ်။ ဒါဟာ `smolagents` ရဲ့ အဓိက အခြေခံမူတစ်ခုဖြစ်ပြီး၊ အပေါ်က ပုံမှာ ပြထားတဲ့အတိုင်း [Executable Code Actions Elicit Better LLM Agents](https://huggingface.co/papers/2402.01030) စာတမ်းကနေ သိရှိနိုင်ပါတယ်။ + +လုပ်ဆောင်ချက်တွေကို JSON အစား Code နဲ့ ရေးသားခြင်းက အဓိက အားသာချက်များစွာကို ပေးပါတယ်။ + +* **ပေါင်းစပ်နိုင်စွမ်း (Composability):** လုပ်ဆောင်ချက်တွေကို အလွယ်တကူ ပေါင်းစပ်ပြီး ပြန်လည်အသုံးပြုနိုင်ခြင်း။ +* **Object စီမံခန့်ခွဲမှု (Object Management):** ပုံများကဲ့သို့ ရှုပ်ထွေးသော Structure များနှင့် တိုက်ရိုက် အလုပ်လုပ်နိုင်ခြင်း။ +* **ယေဘုယျသဘော (Generality):** တွက်ချက်မှုအရ ဖြစ်နိုင်တဲ့ မည်သည့် Task ကိုမဆို ဖော်ပြနိုင်ခြင်း။ +* **LLM များအတွက် သဘာဝကျခြင်း (Natural for LLMs):** အရည်အသွေးမြင့် Code များဟာ LLM ရဲ့ လေ့ကျင့်ရေး ဒေတာတွေမှာ ရှိပြီးသားဖြစ်လို့ Code ထုတ်ပေးဖို့ ပိုမိုလွယ်ကူခြင်း။ + +## Code Agent တစ်ခု ဘယ်လို အလုပ်လုပ်သလဲ။ + +![From https://huggingface.co/docs/smolagents/conceptual_guides/react](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/smolagents/codeagent_docs.png) + +အပေါ်က ပုံမှာ `CodeAgent.run()` က Unit 1 မှာ ကျွန်တော်တို့ ပြောခဲ့တဲ့ ReAct Framework ကို လိုက်နာပြီး ဘယ်လို အလုပ်လုပ်တယ်ဆိုတာကို ဖော်ပြထားပါတယ်။ `smolagents` မှာ Agent တွေအတွက် အဓိက Abstraction ကတော့ `MultiStepAgent` ဖြစ်ပြီး၊ ဒါဟာ Core Building Block အဖြစ် ဆောင်ရွက်ပါတယ်။ `CodeAgent` ဟာ အောက်မှာ ဥပမာပြမယ့်အတိုင်း `MultiStepAgent` ရဲ့ အထူးအမျိုးအစားတစ်ခုပဲ ဖြစ်ပါတယ်။ + +`CodeAgent` ဟာ အဆင့်များစွာပါဝင်တဲ့ Cycle တစ်ခုမှတစ်ဆင့် လုပ်ဆောင်ချက်တွေကို လုပ်ဆောင်ပါတယ်။ ရှိပြီးသား Variables တွေနဲ့ Knowledge တွေကို Agent ရဲ့ Context ထဲကို ထည့်သွင်းပြီး၊ ဒါတွေကို Execution Log မှာ သိမ်းဆည်းထားပါတယ်။ + +၁။ System Prompt ကို `SystemPromptStep` မှာ သိမ်းဆည်းထားပြီး၊ User Query ကို `TaskStep` မှာ မှတ်တမ်းတင်ပါတယ်။ + +၂။ ထို့နောက်၊ အောက်ပါ While Loop ကို လုပ်ဆောင်ပါတယ်။ + +> ၂.၁။ `agent.write_memory_to_messages()` Method က Agent ရဲ့ Logs တွေကို LLM ဖတ်နိုင်တဲ့ [Chat Messages](https://huggingface.co/docs/transformers/main/en/chat_templating) စာရင်းထဲကို ရေးသားပါတယ်။ +> +> ၂.၂။ ဒီ Messages တွေကို `Model` ဆီ ပို့ပြီး၊ Model က Completion (အဖြေ) ကို ထုတ်ပေးပါတယ်။ +> +> ၂.၃။ ထုတ်ပေးလိုက်တဲ့ Completion ကို စစ်ဆေးအတည်ပြု (Parse) ပြီး Action ကို ထုတ်ယူပါတယ်။ ကျွန်တော်တို့ `CodeAgent` နဲ့ အလုပ်လုပ်နေတဲ့အတွက် ဒီ Action ဟာ Code Snippet တစ်ခု ဖြစ်ရပါမယ်။ +> +> ၂.၄။ Action ကို လုပ်ဆောင်ပါတယ်။ +> +> ၂.၅။ ရလဒ်တွေကို `ActionStep` မှာ Memory အဖြစ် မှတ်တမ်းတင်ပါတယ်။ + +အဆင့်တိုင်းရဲ့ အဆုံးမှာ၊ Agent မှာ Function Calls များ ( `agent.step_callback` ထဲမှာ) ပါဝင်နေရင် ၎င်းတို့ကို လုပ်ဆောင်ပါတယ်။ + +## ဥပမာအချို့ကို ကြည့်ကြရအောင် + +> [!TIP] +> Google Colab ကို အသုံးပြုပြီး run နိုင်တဲ့ ဒီ Notebook ထဲက Code တွေကို လိုက်နာကြည့်ရှုနိုင်ပါတယ်။ + +Alfred ဟာ Wayne မိသားစုရဲ့ ကြီးမားတဲ့ အိမ်ကြီးမှာ ပါတီပွဲတစ်ခု စီစဉ်နေပြီး အရာအားလုံး အဆင်ပြေစေဖို့ သင့်ရဲ့ အကူအညီကို လိုအပ်နေပါတယ်။ သူ့ကို ကူညီဖို့အတွက် Multi-step `CodeAgent` တစ်ခု ဘယ်လို အလုပ်လုပ်တယ်ဆိုတဲ့ ကျွန်တော်တို့ လေ့လာခဲ့တာတွေကို အသုံးချသွားပါမယ်။ + +Alfred Party + +`smolagents` ကို မတပ်ဆင်ရသေးဘူးဆိုရင် အောက်ပါ Command ကို run ပြီး တပ်ဆင်နိုင်ပါတယ်။ + +```bash +pip install smolagents -U +``` + +Serverless Inference API ကို အသုံးပြုနိုင်ဖို့ Hugging Face Hub ကိုလည်း Login ဝင်လိုက်ရအောင်။ + +```python +from huggingface_hub import login + +login() +``` + +### `smolagents` ကို အသုံးပြုပြီး ပါတီအတွက် Playlist ရွေးချယ်ခြင်း + +ဂီတဟာ အောင်မြင်တဲ့ ပါတီတစ်ခုအတွက် မရှိမဖြစ် အစိတ်အပိုင်းတစ်ခုပါပဲ! Alfred ဟာ Playlist ရွေးချယ်ဖို့ အကူအညီ လိုအပ်နေပါတယ်။ ကံကောင်းစွာနဲ့ပဲ `smolagents` က ကျွန်တော်တို့ကို ကူညီပေးနိုင်ပါတယ်။ DuckDuckGo ကို အသုံးပြုပြီး ဝက်ဘ်ရှာဖွေနိုင်တဲ့ Agent တစ်ခုကို ကျွန်တော်တို့ တည်ဆောက်နိုင်ပါတယ်။ ဒီ Tool ကို Agent အသုံးပြုနိုင်ဖို့အတွက် Agent ကို ဖန်တီးတဲ့အခါ Tool List ထဲမှာ ထည့်သွင်းပေးရပါမယ်။ + +Alfred Playlist + +Model အတွက် Hugging Face ရဲ့ [Serverless Inference API](https://huggingface.co/docs/api-inference/index) ကို အသုံးပြုနိုင်တဲ့ `InferenceClientModel` ကို အားကိုးပါမယ်။ Default Model ကတော့ `"Qwen/Qwen2.5-Coder-32B-Instruct"` ဖြစ်ပြီး၊ ဒါဟာ စွမ်းဆောင်ရည် ကောင်းမွန်ပြီး မြန်ဆန်တဲ့ Inference အတွက် အသုံးပြုနိုင်ပါတယ်။ ဒါပေမယ့် Hub ကနေ Compatible ဖြစ်တဲ့ မည်သည့် Model ကိုမဆို ရွေးချယ်နိုင်ပါတယ်။ + +Agent တစ်ခုကို Run ဖို့က အတော်လေး ရိုးရှင်းပါတယ်။ + +```python +from smolagents import CodeAgent, DuckDuckGoSearchTool, InferenceClientModel + +agent = CodeAgent(tools=[DuckDuckGoSearchTool()], model=InferenceClientModel()) + +agent.run("Search for the best music recommendations for a party at the Wayne's mansion.") +``` + +ဒီဥပမာကို Run လိုက်တဲ့အခါ၊ ထွက်ရှိလာတဲ့ ရလဒ်မှာ **Workflow အဆင့်များ လုပ်ဆောင်နေပုံကို ပြသတဲ့ Trace** ကို မြင်ရပါမယ်။ ၎င်းသည် သက်ဆိုင်ရာ Python Code ကို အောက်ပါ Message ဖြင့်လည်း Print ထုတ်ပေးပါလိမ့်မယ်။ + +```python + ─ Executing parsed code: ──────────────────────────────────────────────────────────────────────────────────────── + results = web_search(query="best music for a Batman party") + print(results) + ───────────────────────────────────────────────────────────────────────────────────────────────────────────────── +``` + +အဆင့်အနည်းငယ်ကြာပြီးနောက်၊ Alfred ပါတီအတွက် အသုံးပြုနိုင်မယ့် Playlist ကို မြင်ရပါလိမ့်မယ်။ 🎵 + +### Custom Tool ကို အသုံးပြုပြီး Menu ပြင်ဆင်ခြင်း + +Alfred Menu + +Playlist ရွေးချယ်ပြီးပြီဆိုတော့ ဧည့်သည်တွေအတွက် Menu ကို စီစဉ်ဖို့ လိုပါတယ်။ ဒီတစ်ခါလည်း Alfred ဟာ `smolagents` ကို အသုံးပြုပြီး အကျိုးယူနိုင်ပါတယ်။ ဒီနေရာမှာ Custom Function တစ်ခုကို Tool အဖြစ် သတ်မှတ်ဖို့အတွက် `@tool` Decorator ကို အသုံးပြုပါမယ်။ Tool ဖန်တီးခြင်းအကြောင်းကို နောက်ပိုင်းမှာ ပိုမိုအသေးစိတ် လေ့လာသွားမှာဖြစ်လို့၊ အခုလောလောဆယ် Code ကို Run လိုက်ရုံနဲ့ ရပါပြီ။ + +အောက်ပါ ဥပမာမှာ မြင်ရတဲ့အတိုင်း၊ `@tool` Decorator ကို အသုံးပြုပြီး Tool တစ်ခု ဖန်တီးကာ `tools` List ထဲမှာ ထည့်သွင်းပါမယ်။ + +```python +from smolagents import CodeAgent, tool, InferenceClientModel + +# Tool to suggest a menu based on the occasion +@tool +def suggest_menu(occasion: str) -> str: + """ + Suggests a menu based on the occasion. + Args: + occasion (str): The type of occasion for the party. Allowed values are: + - "casual": Menu for casual party. + - "formal": Menu for formal party. + - "superhero": Menu for superhero party. + - "custom": Custom menu. + """ + if occasion == "casual": + return "Pizza, snacks, and drinks." + elif occasion == "formal": + return "3-course dinner with wine and dessert." + elif occasion == "superhero": + return "Buffet with high-energy and healthy food." + else: + return "Custom menu for the butler." + +# Alfred, the butler, preparing the menu for the party +agent = CodeAgent(tools=[suggest_menu], model=InferenceClientModel()) + +# Preparing the menu for the party +agent.run("Prepare a formal menu for the party.") +``` + +Agent ဟာ အဖြေကို ရှာတွေ့သည်အထိ အဆင့်အနည်းငယ် လုပ်ဆောင်သွားပါမယ်။ Docstring မှာ ခွင့်ပြုထားတဲ့ တန်ဖိုးတွေကို တိကျစွာ ဖော်ပြပေးခြင်းက Agent ကို ရှိပြီးသား `occasion` Argument တန်ဖိုးတွေဆီ ဦးတည်စေပြီး Hallucination (မှားယွင်းတဲ့ အချက်အလက် ထုတ်ပေးခြင်း) ကို ကန့်သတ်ပေးပါတယ်။ + +Menu လည်း အဆင်သင့်ဖြစ်ပါပြီ! 🥗 + +### Agent အတွင်း Python Imports များကို အသုံးပြုခြင်း + +Playlist နဲ့ Menu တွေ အဆင်သင့်ဖြစ်ပြီဆိုပေမယ့်၊ နောက်ထပ် အရေးကြီးတဲ့ အသေးစိတ်အချက်တစ်ခုကို စစ်ဆေးဖို့ လိုအပ်ပါသေးတယ်- ဒါကတော့ ပြင်ဆင်ချိန် (Preparation Time) ပါပဲ! + +Alfred ဟာ အခု စတင်ပြင်ဆင်မယ်ဆိုရင် အရာအားလုံး ဘယ်အချိန်မှာ အဆင်သင့်ဖြစ်မလဲဆိုတာကို တွက်ချက်ဖို့ လိုအပ်ပါတယ်။ ဒါမှ အခြား Superhero တွေရဲ့ အကူအညီ လိုအပ်မလားဆိုတာ သိနိုင်မှာပါ။ + +`smolagents` ဟာ Python Code Snippet တွေကို ရေးသားပြီး လုပ်ဆောင်တဲ့ Agent တွေအတွက် အထူးပြုထားပြီး၊ လုံခြုံရေးအတွက် Sandboxed Execution ကို ပံ့ပိုးပေးပါတယ်။ + +**Code လုပ်ဆောင်မှုမှာ တင်းကျပ်တဲ့ လုံခြုံရေး စည်းမျဉ်းများ ရှိပါတယ်**—ကြိုတင်သတ်မှတ်ထားတဲ့ Safe List ပြင်ပက Imports တွေကို Default အားဖြင့် ပိတ်ဆို့ထားပါတယ်။ ဒါပေမယ့်၊ `additional_authorized_imports` မှာ String အနေနဲ့ ပေးပို့ခြင်းဖြင့် နောက်ထပ် Imports တွေကို ခွင့်ပြုနိုင်ပါတယ်။ လုံခြုံတဲ့ Code လုပ်ဆောင်မှုအကြောင်း ပိုမိုသိရှိလိုပါက Official [Guide](https://huggingface.co/docs/smolagents/tutorials/secure_code_execution) ကို ကြည့်ရှုနိုင်ပါတယ်။ + +Agent ကို ဖန်တီးတဲ့အခါ `datetime` Module ကို Import လုပ်ဖို့ ခွင့်ပြုဖို့အတွက် `additional_authorized_imports` ကို အသုံးပြုပါမယ်။ + +```python +from smolagents import CodeAgent, InferenceClientModel +import numpy as np +import time +import datetime + +agent = CodeAgent(tools=[], model=InferenceClientModel(), additional_authorized_imports=['datetime']) + +agent.run( + """ + Alfred needs to prepare for the party. Here are the tasks: + 1. Prepare the drinks - 30 minutes + 2. Decorate the mansion - 60 minutes + 3. Set up the menu - 45 minutes + 4. Prepare the music and playlist - 45 minutes + + If we start right now, at what time will the party be ready? + """ +) +``` + +ဒီဥပမာတွေဟာ Code Agent တွေနဲ့ သင်လုပ်ဆောင်နိုင်တဲ့ အရာတွေရဲ့ အစပဲ ရှိပါသေးတယ်။ ပါတီပြင်ဆင်ဖို့အတွက် ၎င်းတို့ရဲ့ အသုံးဝင်ပုံကို စတင်မြင်တွေ့နေရပါပြီ။ Code Agent တွေ ဘယ်လိုတည်ဆောက်ရမယ်ဆိုတာကို [smolagents documentation](https://huggingface.co/docs/smolagents) မှာ ပိုမိုလေ့လာနိုင်ပါတယ်။ + +အချုပ်အားဖြင့်၊ `smolagents` ဟာ လုံခြုံရေးအတွက် Sandboxed Execution ကို ပံ့ပိုးပေးပြီး Python Code Snippet တွေကို ရေးသားပြီး လုပ်ဆောင်တဲ့ Agent တွေအတွက် အထူးပြုထားပါတယ်။ ၎င်းသည် Local နှင့် API-based Language Model နှစ်မျိုးလုံးကို ထောက်ပံ့ပေးထားတဲ့အတွက် မတူညီတဲ့ Development Environment တွေနဲ့ လိုက်လျောညီထွေ ဖြစ်စေပါတယ်။ + +### ကျွန်တော်တို့ရဲ့ Custom Party Preparator Agent ကို Hub သို့ မျှဝေခြင်း + +ကျွန်တော်တို့ရဲ့ Alfred Agent ကို **Community နဲ့ မျှဝေနိုင်ရင် အရမ်းကောင်းမှာပဲနော်**? ဒီလိုလုပ်ခြင်းအားဖြင့်၊ ဘယ်သူမဆို Hub ကနေ Agent ကို အလွယ်တကူ Download လုပ်ပြီး ချက်ချင်း အသုံးပြုနိုင်မှာဖြစ်ပြီး Gotham ရဲ့ အကောင်းဆုံး Party Planner ကို သူတို့ရဲ့ လက်ချောင်းထိပ်မှာ ရရှိစေမှာပါ။ ဒါကို အကောင်အထည်ဖော်ကြည့်ရအောင်! 🎉 + +`smolagents` Library က Agent တစ်ခုလုံးကို Community နဲ့ မျှဝေနိုင်စေပြီး၊ အခြားသူတွေရဲ့ Agent တွေကိုလည်း ချက်ချင်း အသုံးပြုနိုင်ဖို့ Download လုပ်နိုင်စေပါတယ်။ ဒါဟာ အောက်ပါအတိုင်း ရိုးရှင်းပါတယ်။ + +```python +# Change to your username and repo name +agent.push_to_hub('sergiopaniego/AlfredAgent') +``` + +Agent ကို ပြန်လည် Download လုပ်ဖို့အတွက် အောက်ပါ Code ကို အသုံးပြုပါ။ + +```python +# Change to your username and repo name +alfred_agent = agent.from_hub('sergiopaniego/AlfredAgent', trust_remote_code=True) + +alfred_agent.run("Give me the best playlist for a party at Wayne's mansion. The party idea is a 'villain masquerade' theme") +``` + +စိတ်လှုပ်ရှားစရာကောင်းတာက မျှဝေထားတဲ့ Agent တွေဟာ Hugging Face Spaces အနေနဲ့ တိုက်ရိုက် ရရှိနိုင်ပြီး၊ Real-time မှာ ၎င်းတို့နဲ့ အပြန်အလှန် ဆက်သွယ်နိုင်ပါတယ်။ အခြား Agent တွေကို [ဒီနေရာမှာ](https://huggingface.co/spaces/davidberenstein1957/smolagents-and-tools) လေ့လာနိုင်ပါတယ်။ + +ဥပမာအားဖြင့်၊ *AlfredAgent* ကို [ဒီနေရာမှာ](https://huggingface.co/spaces/sergiopaniego/AlfredAgent) ရရှိနိုင်ပါတယ်။ အောက်မှာ တိုက်ရိုက် စမ်းသပ်ကြည့်နိုင်ပါတယ်။ + + + +Alfred ဟာ `smolagents` ကို အသုံးပြုပြီး ဒီလို Agent ကို ဘယ်လိုတည်ဆောက်ခဲ့သလဲလို့ သင်တွေးမိနိုင်ပါတယ်။ Tool များစွာကို ပေါင်းစပ်ခြင်းဖြင့် သူဟာ အောက်ပါအတိုင်း Agent တစ်ခုကို ဖန်တီးနိုင်ပါတယ်။ Tool တွေအကြောင်းကိုတော့ ဒီအခန်းရဲ့ နောက်ပိုင်းမှာ အသေးစိတ် လေ့လာသွားမှာဖြစ်လို့ အခုလောလောဆယ် စိတ်ပူစရာ မလိုပါဘူး။ + +```python +from smolagents import CodeAgent, DuckDuckGoSearchTool, FinalAnswerTool, InferenceClientModel, Tool, tool, VisitWebpageTool + +@tool +def suggest_menu(occasion: str) -> str: + """ + Suggests a menu based on the occasion. + Args: + occasion: The type of occasion for the party. + """ + if occasion == "casual": + return "Pizza, snacks, and drinks." + elif occasion == "formal": + return "3-course dinner with wine and dessert." + elif occasion == "superhero": + return "Buffet with high-energy and healthy food." + else: + return "Custom menu for the butler." + +@tool +def catering_service_tool(query: str) -> str: + """ + This tool returns the highest-rated catering service in Gotham City. + + Args: + query: A search term for finding catering services. + """ + # Example list of catering services and their ratings + services = { + "Gotham Catering Co.": 4.9, + "Wayne Manor Catering": 4.8, + "Gotham City Events": 4.7, + } + + # Find the highest rated catering service (simulating search query filtering) + best_service = max(services, key=services.get) + + return best_service + +class SuperheroPartyThemeTool(Tool): + name = "superhero_party_theme_generator" + description = """ + This tool suggests creative superhero-themed party ideas based on a category. + It returns a unique party theme idea.""" + + inputs = { + "category": { + "type": "string", + "description": "The type of superhero party (e.g., 'classic heroes', 'villain masquerade', 'futuristic Gotham').", + } + } + + output_type = "string" + + def forward(self, category: str): + themes = { + "classic heroes": "Justice League Gala: Guests come dressed as their favorite DC heroes with themed cocktails like 'The Kryptonite Punch'.", + "villain masquerade": "Gotham Rogues' Ball: A mysterious masquerade where guests dress as classic Batman villains.", + "futuristic Gotham": "Neo-Gotham Night: A cyberpunk-style party inspired by Batman Beyond, with neon decorations and futuristic gadgets." + } + + return themes.get(category.lower(), "Themed party idea not found. Try 'classic heroes', 'villain masquerade', or 'futuristic Gotham'.") + + +# Alfred, the butler, preparing the menu for the party +agent = CodeAgent( + tools=[ + DuckDuckGoSearchTool(), + VisitWebpageTool(), + suggest_menu, + catering_service_tool, + SuperheroPartyThemeTool(), + FinalAnswerTool() + ], + model=InferenceClientModel(), + max_steps=10, + verbosity_level=2 +) + +agent.run("Give me the best playlist for a party at the Wayne's mansion. The party idea is a 'villain masquerade' theme") +``` + +မြင်တဲ့အတိုင်းပါပဲ၊ ကျွန်တော်တို့ဟာ Agent ရဲ့ လုပ်ဆောင်နိုင်စွမ်းကို မြှင့်တင်ပေးတဲ့ Tools များစွာနဲ့ `CodeAgent` တစ်ခုကို ဖန်တီးခဲ့ပြီး၊ Community နဲ့ မျှဝေဖို့ အသင့်ဖြစ်နေတဲ့ အကောင်းဆုံး Party Planner အဖြစ် ပြောင်းလဲလိုက်ပါပြီ! 🎉 + +ကဲ၊ သင့်အလှည့်ပါပဲ- သင်ခုနက လေ့လာခဲ့တဲ့ အသိပညာတွေကို အသုံးပြုပြီး သင့်ကိုယ်ပိုင် Agent ကို တည်ဆောက်ကာ Community နဲ့ မျှဝေလိုက်ပါ! 🕵️‍♂️💡 + +> [!TIP] +> သင့်ရဲ့ Agent Project ကို မျှဝေချင်တယ်ဆိုရင် Hugging Face Hub မှာ Space တစ်ခု ဖန်တီးပြီး agents-course ကို Tag လုပ်လိုက်ပါ။ သင်ဖန်တီးထားတာတွေကို မြင်တွေ့ရဖို့ ကျွန်တော်တို့ စိတ်အားထက်သန်နေပါတယ်။ + +### OpenTelemetry နှင့် Langfuse ဖြင့် ကျွန်တော်တို့ရဲ့ Party Preparator Agent ကို စစ်ဆေးခြင်း 📡 + +Alfred ဟာ Party Preparator Agent ကို Fine-tune လုပ်နေချိန်မှာ၊ Run နေတာတွေကို Debug လုပ်ရတာ ပင်ပန်းလာပါတယ်။ Agent တွေဟာ သဘာဝအားဖြင့် ခန့်မှန်းရခက်ပြီး စစ်ဆေးဖို့ ခက်ခဲပါတယ်။ ဒါပေမယ့် သူဟာ အကောင်းဆုံး Party Preparator Agent ကို တည်ဆောက်ပြီး Production မှာ အသုံးပြုဖို့ ရည်ရွယ်ထားတဲ့အတွက် အနာဂတ် Monitoring နဲ့ Analysis အတွက် ခိုင်မာတဲ့ Traceability (ခြေရာခံနိုင်မှု) လိုအပ်ပါတယ်။ + +ဒီတစ်ခါလည်း `smolagents` က ကူညီပေးပါပြီ! ၎င်းသည် Agent Runs တွေကို Instrument လုပ်ဖို့အတွက် [OpenTelemetry](https://opentelemetry.io/) စံနှုန်းကို လက်ခံကျင့်သုံးထားပြီး၊ ချောမွေ့စွာ စစ်ဆေးခြင်းနှင့် Log မှတ်တမ်းတင်ခြင်းတို့ကို ခွင့်ပြုပါတယ်။ [Langfuse](https://langfuse.com/) နဲ့ `SmolagentsInstrumentor` ရဲ့ အကူအညီနဲ့ Alfred ဟာ သူ့ရဲ့ Agent ရဲ့ အပြုအမူကို အလွယ်တကူ ခြေရာခံပြီး ခွဲခြမ်းစိတ်ဖြာနိုင်ပါတယ်။ + +ဒါကို Setup လုပ်ဖို့က ရိုးရှင်းပါတယ်။ + +ပထမဆုံး၊ လိုအပ်တဲ့ Dependencies တွေကို Install လုပ်ဖို့ လိုပါတယ်။ + +```bash +pip install opentelemetry-sdk opentelemetry-exporter-otlp openinference-instrumentation-smolagents langfuse +``` + +နောက်တစ်ခုကတော့ Alfred ဟာ Langfuse မှာ Account ဖွင့်ထားပြီး API Key တွေ အဆင်သင့်ရှိနေပါပြီ။ သင်မလုပ်ရသေးဘူးဆိုရင် Langfuse Cloud မှာ [ဒီနေရာမှာ](https://cloud.langfuse.com/) Sign Up လုပ်နိုင်ပါတယ် သို့မဟုတ် [အခြားရွေးချယ်စရာများ](https://huggingface.co/docs/smolagents/tutorials/inspect_runs) ကို လေ့လာနိုင်ပါတယ်။ + +API Key တွေ ရပြီဆိုရင် အောက်ပါအတိုင်း စနစ်တကျ Configure လုပ်ဖို့ လိုပါတယ်။ + +```python +import os + +# Get keys for your project from the project settings page: https://cloud.langfuse.com +os.environ["LANGFUSE_PUBLIC_KEY"] = "pk-lf-..." +os.environ["LANGFUSE_SECRET_KEY"] = "sk-lf-..." +os.environ["LANGFUSE_HOST"] = "https://cloud.langfuse.com" # 🇪🇺 EU region +# os.environ["LANGFUSE_HOST"] = "https://us.cloud.langfuse.com" # 🇺🇸 US region +``` + +Environment Variables တွေ သတ်မှတ်ပြီးတာနဲ့ Langfuse Client ကို Initialize လုပ်နိုင်ပါပြီ။ `get_client()` က Environment Variables မှာ ပေးထားတဲ့ Credentials တွေကို အသုံးပြုပြီး Langfuse Client ကို စတင်ပေးပါတယ်။ + +```python +from langfuse import get_client + +langfuse = get_client() + +# Verify connection +if langfuse.auth_check(): + print("Langfuse client is authenticated and ready!") +else: + print("Authentication failed. Please check your credentials and host.") +``` + +နောက်ဆုံးအနေနဲ့ Alfred ဟာ `SmolagentsInstrumentor` ကို Initialize လုပ်ပြီး သူ့ရဲ့ Agent ရဲ့ စွမ်းဆောင်ရည်ကို စတင်ခြေရာခံဖို့ အသင့်ဖြစ်ပါပြီ။ + +```python +from openinference.instrumentation.smolagents import SmolagentsInstrumentor + +SmolagentsInstrumentor().instrument() +``` + +Alfred အခု ချိတ်ဆက်ပြီးပါပြီ 🔌! `smolagents` ကနေ Run တဲ့ Logs တွေဟာ Langfuse မှာ မှတ်တမ်းတင်နေပြီး၊ သူ့ရဲ့ Agent ရဲ့ အပြုအမူကို အပြည့်အဝ မြင်နိုင်စွမ်း ပေးပါတယ်။ ဒီ Setup နဲ့ဆိုရင် သူဟာ ယခင် Runs တွေကို ပြန်လည်သုံးသပ်ပြီး Party Preparator Agent ကို ပိုမိုကောင်းမွန်အောင် ပြုပြင်နိုင်ပါပြီ။ + +> [!TIP] +> သင့် Agent တွေကို Trace လုပ်ခြင်းနဲ့ စုဆောင်းထားတဲ့ ဒေတာတွေကို အသုံးပြုပြီး စွမ်းဆောင်ရည်ကို အကဲဖြတ်ခြင်းအကြောင်း ပိုမိုသိရှိလိုပါက Bonus Unit 2 ကို လေ့လာကြည့်ရှုနိုင်ပါတယ်။ + +```python +from smolagents import CodeAgent, InferenceClientModel + +agent = CodeAgent(tools=[], model=InferenceClientModel()) +alfred_agent = agent.from_hub('sergiopaniego/AlfredAgent', trust_remote_code=True) +alfred_agent.run("Give me the best playlist for a party at Wayne's mansion. The party idea is a 'villain masquerade' theme") +``` + +Alfred ဟာ အခု [ဒီ Logs တွေကို ဒီနေရာမှာ](https://cloud.langfuse.com/project/cm7bq0abj025rad078ak3luwi/traces/995fc019255528e4f48cf6770b0ce27b?timestamp=2025-02-19T10%3A28%3A36.929Z) ဝင်ရောက်ကြည့်ရှုပြီး ပြန်လည်သုံးသပ်နိုင်ပါပြီ။ + +> [!TIP] +> တကယ်တော့ လုပ်ဆောင်မှုအတွင်း အမှားသေးသေးလေးတစ်ခု ဖြစ်ခဲ့ပါတယ်။ Logs တွေထဲမှာ သင်ရှာတွေ့နိုင်မလား? Agent က အဲဒီအမှားကို ဘယ်လို ကိုင်တွယ်ပြီး မှန်ကန်တဲ့ အဖြေကို ပြန်ပေးခဲ့သလဲဆိုတာကို ခြေရာခံကြည့်ပါ။ သင့်အဖြေကို စစ်ဆေးချင်တယ်ဆိုရင် [ဒီနေရာမှာ](https://cloud.langfuse.com/project/cm7bq0abj025rad078ak3luwi/traces/995fc019255528e4f48cf6770b0ce27b?timestamp=2025-02-19T10%3A28%3A36.929Z&observation=80ca57ace4f69b52) Error ကို တိုက်ရိုက်ကြည့်ရှုနိုင်ပါတယ်။ (ဟုတ်ပါတယ်၊ အဲဒီ Error ကို အခုအချိန်မှာ ပြင်ဆင်ပြီးပါပြီ။ အသေးစိတ်ကို [ဒီ Issue](https://github.com/huggingface/smolagents/issues/838) မှာ ကြည့်ရှုနိုင်ပါတယ်။) + +တစ်ချိန်တည်းမှာပဲ၊ [အကြံပြုထားတဲ့ Playlist](https://open.spotify.com/playlist/0gZMMHjuxMrrybQ7wTMTpw) က ပါတီပြင်ဆင်မှုအတွက် အကောင်းဆုံး Vibe ကို ပေးနေပါတယ်။ မိုက်တယ်နော်? 🎶 + +--- + +ကျွန်တော်တို့ ပထမဆုံး Code Agent ကို ဖန်တီးပြီးပြီဆိုတော့၊ `smolagents` မှာ ရရှိနိုင်တဲ့ ဒုတိယ Agent အမျိုးအစားဖြစ်တဲ့ **Tool Calling Agent တွေကို ဘယ်လို ဖန်တီးရမလဲ** ဆိုတာကို လေ့လာကြပါစို့။ + +## အရင်းအမြစ်များ (Resources) + +* [smolagents Blog](https://huggingface.co/blog/smolagents) - smolagents နှင့် Code Interactions များ မိတ်ဆက် +* [smolagents: Building Good Agents](https://huggingface.co/docs/smolagents/tutorials/building_good_agents) - ယုံကြည်စိတ်ချရသော Agent များအတွက် အကောင်းဆုံး အလေ့အကျင့်များ +* [Building Effective Agents - Anthropic](https://www.anthropic.com/research/building-effective-agents) - Agent ဒီဇိုင်း အခြေခံမူများ +* [Sharing runs with OpenTelemetry](https://huggingface.co/docs/smolagents/tutorials/inspect_runs) - သင့် Agent များကို ခြေရာခံရန် OpenTelemetry ကို Setup လုပ်နည်း အသေးစိတ် \ No newline at end of file diff --git a/units/my/unit2/smolagents/conclusion.mdx b/units/my/unit2/smolagents/conclusion.mdx new file mode 100644 index 00000000..8ae10573 --- /dev/null +++ b/units/my/unit2/smolagents/conclusion.mdx @@ -0,0 +1,14 @@ +# နိဂုံးချုပ် (Conclusion) + +ဒီ ဒုတိယမြောက် Unit ရဲ့ `smolagents` Module ကို အောင်မြင်စွာ ပြီးဆုံးသွားတဲ့အတွက် ဂုဏ်ယူပါတယ် 🥳 + +သင်ဟာ `smolagents` ရဲ့ အခြေခံသဘောတရားတွေကို ကျွမ်းကျင်ပိုင်နိုင်သွားပြီဖြစ်သလို၊ ကိုယ်ပိုင် Agent တစ်ခုကိုလည်း တည်ဆောက်နိုင်ခဲ့ပါပြီ။ အခု `smolagents` မှာ ကျွမ်းကျင်မှုတွေ ရရှိထားပြီဆိုတော့၊ သင်စိတ်ဝင်စားတဲ့ လုပ်ငန်းဆောင်တာတွေကို ဖြေရှင်းပေးမယ့် Agent တွေကို စတင်ဖန်တီးနိုင်ပါပြီ။ + +> [!NOTE] +> **Agent တည်ဆောက်ခြင်း၏ အရေးပါပုံ:** သင်ဟာ AI နည်းပညာကို အသုံးပြုပြီး ကိုယ်ပိုင် Project တွေ ဖန်တီးချင်တယ်ဆိုရင်၊ ဒီလို Agent Framework တွေကို နားလည်ထားခြင်းက သင့်ရဲ့ စွမ်းဆောင်ရည်ကို အများကြီး မြှင့်တင်ပေးပါလိမ့်မယ်။ `smolagents` လို Framework တွေက LLM တွေရဲ့ စွမ်းအားကို လက်တွေ့ကျတဲ့ လုပ်ဆောင်ချက်တွေ (Actions) အဖြစ် ပြောင်းလဲပေးနိုင်တာကို သင်တွေ့ခဲ့ရပါပြီ။ + +နောက်လာမယ့် Module မှာတော့ **LlamaIndex ကို အသုံးပြုပြီး Agent တွေကို ဘယ်လို တည်ဆောက်ရမလဲ** ဆိုတာကို ဆက်လက်လေ့လာသွားရမှာ ဖြစ်ပါတယ်။ + +နောက်ဆုံးအနေနဲ့၊ ကျွန်တော်တို့ရဲ့ Course အပေါ် **သင်ရဲ့ အမြင်တွေကို နားထောင်ချင်ပါတယ်**။ ဒီ Course ကို ဘယ်လို ပိုမိုကောင်းမွန်အောင် လုပ်ဆောင်နိုင်မလဲဆိုတဲ့ တုံ့ပြန်ချက် (Feedback) များ ရှိခဲ့ရင်၊ ကျေးဇူးပြုပြီး 👉 [ဒီ Form ကို ဖြည့်ပေးပါ](https://docs.google.com/forms/d/e/1FAIpQLSe9VaONn0eglax0uTwi29rIn4tM7H2sYmmybmG5jJNlE5v0xA/viewform?usp=dialog) + +### ဆက်လက်လေ့လာပါ၊ အမြဲတမ်း အမိုက်စား ဖြစ်နေပါစေ 🤗 \ No newline at end of file diff --git a/units/my/unit2/smolagents/final_quiz.mdx b/units/my/unit2/smolagents/final_quiz.mdx new file mode 100644 index 00000000..48034a84 --- /dev/null +++ b/units/my/unit2/smolagents/final_quiz.mdx @@ -0,0 +1,26 @@ +# စာမေးပွဲ ဖြေဆိုချိန်! (Exam Time!) + +`smolagents` နဲ့ ပတ်သက်တဲ့ အကြောင်းအရာတွေကို ကြိုးစားလေ့လာခဲ့တဲ့အတွက် ချီးကျူးပါတယ်! သင်ဟာ အခုဆိုရင် အများကြီး တတ်မြောက်ပြီးသား ဖြစ်နေပါပြီ။ အခုတော့ သင်ရဲ့ အသိပညာတွေကို စစ်ဆေးဖို့အတွက် Quiz ဖြေဆိုရမယ့် အချိန်ရောက်ပါပြီ။ 🧠 + +## ညွှန်ကြားချက်များ (Instructions) + +* ဒီ Quiz မှာ Code မေးခွန်းများ ပါဝင်ပါတယ်။ +* Code Snippet များကို ပြီးမြောက်အောင် လုပ်ဆောင်ဖို့အတွက် ညွှန်ကြားချက်များ ပေးထားပါလိမ့်မယ်။ +* ညွှန်ကြားချက်များကို သေချာဖတ်ပြီး Code Snippet များကို ပြည့်စုံအောင် ဖြည့်စွက်ပါ။ +* မေးခွန်းတစ်ခုစီအတွက် ရလဒ်နှင့်အတူ တုံ့ပြန်ချက်အချို့ကိုလည်း ပေးထားပါလိမ့်မယ်။ + +> [!IMPORTANT] +> **အရေးကြီးမှတ်ချက်:** 🧘 **ဒီ Quiz ဟာ အမှတ်ပေးခြင်း သို့မဟုတ် Certificate ပေးအပ်ခြင်း မရှိပါဘူး**။ ဒါဟာ သင် `smolagents` Library ကို ဘယ်လောက် နားလည်သလဲ၊ စာသားတွေကို ထပ်ပြီး အချိန်ပေးလေ့လာသင့်သလားဆိုတာကို ကိုယ်တိုင်သိရှိနိုင်ဖို့အတွက်ပဲ ဖြစ်ပါတယ်။ နောက်လာမယ့် Unit တွေမှာတော့ ဒီအသိပညာတွေကို လက်တွေ့ကျတဲ့ Use Cases တွေနဲ့ Project တွေမှာ အသုံးပြုရမှာ ဖြစ်ပါတယ်။ + +ကဲ... စတင်လိုက်ရအောင်! + +## Quiz 🚀 + + + +Quiz ကို 👉 [ဒီနေရာမှာလည်း](https://huggingface.co/spaces/agents-course/unit2_smolagents_quiz) ဝင်ရောက်ဖြေဆိုနိုင်ပါတယ်။ \ No newline at end of file diff --git a/units/my/unit2/smolagents/introduction.mdx b/units/my/unit2/smolagents/introduction.mdx new file mode 100644 index 00000000..f5a9b8d3 --- /dev/null +++ b/units/my/unit2/smolagents/introduction.mdx @@ -0,0 +1,67 @@ +# `smolagents` ကို မိတ်ဆက်ခြင်း + +Unit 2.1 Thumbnail + +ဒီ Module ကို ကြိုဆိုပါတယ်။ ဒီနေရာမှာ သင်ဟာ စွမ်းဆောင်ရည်ရှိတဲ့ AI Agent တွေကို ဘယ်လိုတည်ဆောက်ရမလဲဆိုတာကို [`smolagents`](https://github.com/huggingface/smolagents) Library ကို အသုံးပြုပြီး လေ့လာသွားရမှာ ဖြစ်ပါတယ်။ `smolagents` ဟာ စွမ်းဆောင်ရည်မြင့် AI Agent တွေ ဖန်တီးဖို့အတွက် ပေါ့ပါးတဲ့ Framework တစ်ခုကို ပံ့ပိုးပေးထားပါတယ်။ + +`smolagents` ဟာ Hugging Face ရဲ့ Library တစ်ခုဖြစ်တဲ့အတွက်၊ `smolagents` ရဲ့ [`repository`](https://github.com/huggingface/smolagents) ကို **Star ပေးခြင်း** ဖြင့် ကျွန်တော်တို့ကို ကူညီပံ့ပိုးပေးနိုင်ပါတယ်ခင်ဗျာ။ + +staring smolagents + +## Module ခြုံငုံသုံးသပ်ချက် (Module Overview) + +ဒီ Module ဟာ `smolagents` ကို အသုံးပြုပြီး အသိဉာဏ်ရှိတဲ့ Agent တွေ တည်ဆောက်ဖို့အတွက် အဓိက သဘောတရားတွေနဲ့ လက်တွေ့ကျတဲ့ နည်းဗျူဟာတွေကို ပြည့်စုံစွာ ခြုံငုံသုံးသပ်ပေးထားပါတယ်။ + +Open-source Framework တွေ အများကြီးရှိတဲ့အထဲက `smolagents` ကို ဘာကြောင့် ရွေးချယ်သင့်သလဲ၊ ဘယ်လို အစိတ်အပိုင်းတွေနဲ့ စွမ်းဆောင်ရည်တွေက `smolagents` ကို အသုံးဝင်တဲ့ ရွေးချယ်မှုတစ်ခု ဖြစ်စေသလဲ၊ ဒါမှမဟုတ် ဘယ်အချိန်မှာ တခြား Framework တွေက ပိုသင့်တော်မလဲဆိုတာကို နားလည်ဖို့ အရေးကြီးပါတယ်။ + +ကျွန်တော်တို့ဟာ အဓိက Agent အမျိုးအစားတွေကို လေ့လာသွားပါမယ်။ ဥပမာအားဖြင့်၊ Software Development လုပ်ငန်းများအတွက် ဒီဇိုင်းထုတ်ထားတဲ့ **Code Agent** များ၊ Modular (စနစ်တကျ ဖွဲ့စည်းထားသော) Function-driven Workflow များ ဖန်တီးရန်အတွက် **Tool Calling Agent** များ၊ နှင့် အချက်အလက်များကို ရှာဖွေပြီး ပေါင်းစပ်ပေးနိုင်တဲ့ **Retrieval Agent** များ ပါဝင်ပါတယ်။ + +ဒါ့အပြင်၊ Agent အများအပြားကို စနစ်တကျ စီမံခန့်ခွဲခြင်း (Orchestration)၊ Vision စွမ်းဆောင်ရည်များ (ပုံရိပ်များကို နားလည်နိုင်ခြင်း) နှင့် Web Browsing (အင်တာနက် ရှာဖွေခြင်း) တို့ကို ပေါင်းစပ်ခြင်းဖြင့် Dynamic ဖြစ်ပြီး Context ကို သိရှိနိုင်တဲ့ Application တွေအတွက် ဖြစ်နိုင်ခြေအသစ်တွေကို ဖွင့်ပေးပါမယ်။ + +ဒီ Unit မှာတော့ Unit 1 က Agent ဖြစ်တဲ့ Alfred ပြန်ရောက်လာပါပြီ။ ဒီတစ်ခါတော့ သူဟာ သူ့ရဲ့ အတွင်းပိုင်း လုပ်ဆောင်ချက်တွေအတွက် `smolagents` Framework ကို အသုံးပြုနေပါတယ်။ Alfred ဟာ Wayne မိသားစု 🦇 ခရီးထွက်နေချိန်မှာ Wayne Manor မှာ ပါတီပွဲတစ်ခု စီစဉ်နေပြီး၊ သူလုပ်စရာတွေ အများကြီးရှိပါတယ်။ Alfred ရဲ့ ခရီးစဉ်နဲ့ `smolagents` ကို အသုံးပြုပြီး သူဘယ်လို အလုပ်တွေကို ကိုင်တွယ်ဖြေရှင်းသလဲဆိုတာကို လေ့လာကြည့်ကြပါစို့! + +> [!TIP] +> ဒီ Unit မှာ၊ သင်ဟာ `smolagents` Library ကို အသုံးပြုပြီး AI Agent တွေကို တည်ဆောက်တတ်လာပါမယ်။ သင့် Agent တွေဟာ ဒေတာ ရှာဖွေနိုင်ခြင်း၊ Code များကို လုပ်ဆောင်နိုင်ခြင်း၊ နှင့် Web Page များနှင့် ထိတွေ့ဆက်ဆံနိုင်ခြင်း စတဲ့ စွမ်းရည်တွေ ရှိလာပါမယ်။ ဒါ့အပြင်၊ ပိုမိုစွမ်းအားကြီးတဲ့ စနစ်တွေ ဖန်တီးဖို့အတွက် Agent အများအပြားကို ဘယ်လို ပေါင်းစပ်ရမလဲဆိုတာကိုလည်း သင်ယူရပါမယ်။ + +![Alfred the agent](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit1/this-is-alfred.jpg) + +## ပါဝင်သော အကြောင်းအရာများ (Contents) + +`smolagents` နှင့် ပတ်သက်သော ဤ Unit အတွင်းတွင် ကျွန်တော်တို့ အောက်ပါ အကြောင်းအရာများကို လေ့လာသွားပါမယ်။ + +### 1️⃣ [smolagents ကို ဘာကြောင့် အသုံးပြုသင့်သလဲ](./why_use_smolagents) + +`smolagents` ဟာ Application Development အတွက် ရရှိနိုင်တဲ့ Open-source Agent Framework များစွာထဲက တစ်ခုဖြစ်ပါတယ်။ အခြား ရွေးချယ်စရာများမှာ `LlamaIndex` နှင့် `LangGraph` တို့ ပါဝင်ပြီး၊ ၎င်းတို့ကိုလည်း ဒီ Course ရဲ့ အခြား Module များမှာ ထည့်သွင်းထားပါတယ်။ `smolagents` ဟာ သီးခြား Use Case များအတွက် အလွန်သင့်တော်စေမယ့် အဓိက Features များစွာကို ပေးစွမ်းနိုင်ပါတယ်။ ဒါပေမယ့် Framework တစ်ခုကို ရွေးချယ်တဲ့အခါ ရွေးချယ်စရာအားလုံးကို အမြဲတမ်း ထည့်သွင်းစဉ်းစားသင့်ပါတယ်။ သင့် Project ရဲ့ လိုအပ်ချက်များအပေါ် အခြေခံပြီး အသိဉာဏ်ရှိတဲ့ ဆုံးဖြတ်ချက် ချနိုင်ဖို့အတွက် `smolagents` ကို အသုံးပြုခြင်းရဲ့ အားသာချက်များနှင့် အားနည်းချက်များကို လေ့လာသွားပါမယ်။ + +### 2️⃣ [CodeAgents များ](./code_agents) + +`CodeAgents` များဟာ `smolagents` မှာ အဓိကကျတဲ့ Agent အမျိုးအစား ဖြစ်ပါတယ်။ ၎င်းတို့ဟာ JSON သို့မဟုတ် စာသား ထုတ်ပေးမယ့်အစား၊ လုပ်ဆောင်ချက်များ လုပ်ဆောင်ဖို့အတွက် Python Code များကို ထုတ်ပေးပါတယ်။ ဒီ Module မှာ ၎င်းတို့ရဲ့ ရည်ရွယ်ချက်၊ လုပ်ဆောင်နိုင်စွမ်းနှင့် ၎င်းတို့ ဘယ်လို အလုပ်လုပ်သလဲဆိုတာကို လက်တွေ့ဥပမာများနဲ့အတူ လေ့လာသွားပါမယ်။ + +### 3️⃣ [ToolCallingAgents များ](./tool_calling_agents) + +`ToolCallingAgents` များဟာ `smolagents` မှ ပံ့ပိုးပေးထားတဲ့ ဒုတိယ Agent အမျိုးအစား ဖြစ်ပါတယ်။ Python Code ထုတ်ပေးတဲ့ `CodeAgents` တွေနဲ့ မတူဘဲ၊ ဒီ Agent တွေဟာ စနစ်က စစ်ဆေးအတည်ပြုပြီး လုပ်ဆောင်ချက်များ လုပ်ဆောင်ဖို့အတွက် JSON/Text Blob များအပေါ် မှီခိုပါတယ်။ ဒီ Module မှာ ၎င်းတို့ရဲ့ လုပ်ဆောင်နိုင်စွမ်း၊ `CodeAgents` တွေနဲ့ အဓိက ကွာခြားချက်များ၊ နှင့် ၎င်းတို့ရဲ့ အသုံးပြုပုံကို သရုပ်ဖော်ထားတဲ့ ဥပမာတစ်ခုကို ဖော်ပြပေးထားပါတယ်။ + +### 4️⃣ [Tools များ](./tools) + +Unit 1 မှာ ကျွန်တော်တို့ မြင်ခဲ့ရတဲ့အတိုင်း Tools တွေဟာ LLM တစ်ခုက Agent စနစ်အတွင်းမှာ အသုံးပြုနိုင်တဲ့ Functions တွေဖြစ်ပြီး၊ Agent ရဲ့ အပြုအမူအတွက် မရှိမဖြစ် အခြေခံအုတ်မြစ်များအဖြစ် လုပ်ဆောင်ပါတယ်။ ဒီ Module မှာ Tool တွေကို ဘယ်လို ဖန်တီးရမယ်၊ ၎င်းတို့ရဲ့ ဖွဲ့စည်းပုံနှင့် `Tool` Class သို့မဟုတ် `@tool` Decorator ကို အသုံးပြုပြီး မတူညီတဲ့ အကောင်အထည်ဖော်မှု နည်းလမ်းတွေကို လေ့လာသွားပါမယ်။ ဒါ့အပြင် Default Toolbox အကြောင်း၊ Community နဲ့ Tools တွေကို ဘယ်လို မျှဝေရမယ်၊ နှင့် သင့် Agent တွေမှာ အသုံးပြုဖို့ Community မှ ပံ့ပိုးထားတဲ့ Tools တွေကို ဘယ်လို Load လုပ်ရမယ်ဆိုတာကိုလည်း သင်ယူရပါမယ်။ + +### 5️⃣ [Retrieval Agents များ](./retrieval_agents) + +Retrieval Agent များက Model များကို Knowledge Base များသို့ ဝင်ရောက်ခွင့်ပေးပြီး၊ အချက်အလက်များကို အရင်းအမြစ်များစွာမှ ရှာဖွေခြင်း၊ ပေါင်းစပ်ခြင်းနှင့် ပြန်လည်ရယူခြင်းတို့ကို ဖြစ်နိုင်စေပါတယ်။ ၎င်းတို့သည် ထိရောက်စွာ ပြန်လည်ရယူနိုင်ရန် Vector Store များကို အသုံးပြုပြီး **Retrieval-Augmented Generation (RAG)** ပုံစံများကို အကောင်အထည်ဖော်ပါတယ်။ ဒီ Agent တွေဟာ Web Search ကို Custom Knowledge Base တွေနဲ့ ပေါင်းစပ်ရာမှာ အထူးအသုံးဝင်ပြီး၊ Memory စနစ်များမှတစ်ဆင့် စကားပြောဆိုမှု Context ကို ထိန်းသိမ်းထားပါတယ်။ ဒီ Module မှာ ခိုင်မာတဲ့ အချက်အလက် ပြန်လည်ရယူမှုအတွက် Fallback ယန္တရားများ အပါအဝင် အကောင်အထည်ဖော်မှု နည်းဗျူဟာများကို လေ့လာသွားပါမယ်။ + +### 6️⃣ [Multi-Agent Systems များ](./multi_agent_systems) + +စွမ်းအားကြီးတဲ့ Multi-Agent System တွေ တည်ဆောက်ဖို့အတွက် Agent အများအပြားကို ထိရောက်စွာ စီမံခန့်ခွဲခြင်း (Orchestrating) ဟာ အရေးကြီးပါတယ်။ မတူညီတဲ့ စွမ်းဆောင်ရည်များရှိတဲ့ Agent တွေကို ပေါင်းစပ်ခြင်းဖြင့် (ဥပမာ - Web Search Agent ကို Code Execution Agent နဲ့ ပေါင်းစပ်ခြင်း) ပိုမိုရှုပ်ထွေးတဲ့ ဖြေရှင်းနည်းများကို ဖန်တီးနိုင်ပါတယ်။ ဒီ Module ဟာ ထိရောက်မှုနှင့် ယုံကြည်စိတ်ချရမှုကို အမြင့်ဆုံးဖြစ်စေရန် Multi-Agent System များကို ဒီဇိုင်းဆွဲခြင်း၊ အကောင်အထည်ဖော်ခြင်းနှင့် စီမံခန့်ခွဲခြင်းတို့အပေါ် အာရုံစိုက်ထားပါတယ်။ + +### 7️⃣ [Vision နှင့် Browser Agent များ](./vision_agents) + +Vision Agent များက **Vision-Language Model (VLM)** များကို ပေါင်းစပ်ခြင်းဖြင့် ရိုးရာ Agent စွမ်းရည်များကို ချဲ့ထွင်ပေးပြီး၊ ပုံရိပ်ဆိုင်ရာ အချက်အလက်များကို စီမံဆောင်ရွက်ခြင်းနှင့် အဓိပ္ပာယ်ဖွင့်ဆိုခြင်းတို့ကို လုပ်ဆောင်နိုင်စေပါတယ်။ ဒီ Module မှာ VLM-powered Agent များကို ဘယ်လို ဒီဇိုင်းဆွဲပြီး ပေါင်းစပ်ရမယ်ဆိုတာကို လေ့လာသွားပါမယ်။ ဒါက ပုံရိပ်အခြေခံ ဆင်ခြင်သုံးသပ်ခြင်း၊ Visual Data Analysis နှင့် Multimodal Interaction များကဲ့သို့သော အဆင့်မြင့် လုပ်ဆောင်ချက်များကို ဖွင့်ပေးပါတယ်။ ကျွန်တော်တို့ဟာ Web ကို ရှာဖွေပြီး အချက်အလက်များ ထုတ်ယူနိုင်တဲ့ Browser Agent တစ်ခု တည်ဆောက်ဖို့အတွက် Vision Agent များကိုလည်း အသုံးပြုသွားပါမယ်။ + +## အရင်းအမြစ်များ (Resources) + +* [smolagents Documentation](https://huggingface.co/docs/smolagents) - smolagents Library အတွက် တရားဝင် Document များ +* [Building Effective Agents](https://www.anthropic.com/research/building-effective-agents) - Agent Architecture များဆိုင်ရာ သုတေသန စာတမ်း +* [Agent Guidelines](https://huggingface.co/docs/smolagents/tutorials/building_good_agents) - ယုံကြည်စိတ်ချရသော Agent များ တည်ဆောက်ရန်အတွက် အကောင်းဆုံး လုပ်ဆောင်မှုများ +* [LangGraph Agents](https://langchain-ai.github.io/langgraph/) - Agent အကောင်အထည်ဖော်မှုများ၏ နောက်ထပ် ဥပမာများ +* [Function Calling Guide](https://platform.openai.com/docs/guides/function-calling) - LLM များတွင် Function Calling ကို နားလည်ခြင်း +* [RAG Best Practices](https://www.pinecone.io/learn/retrieval-augmented-generation/) - ထိရောက်သော RAG ကို အကောင်အထည်ဖော်ရန် လမ်းညွှန် \ No newline at end of file diff --git a/units/my/unit2/smolagents/multi_agent_systems.mdx b/units/my/unit2/smolagents/multi_agent_systems.mdx new file mode 100644 index 00000000..799e8c5f --- /dev/null +++ b/units/my/unit2/smolagents/multi_agent_systems.mdx @@ -0,0 +1,414 @@ + + +## Multi-Agent စနစ်များ (Multi-Agent Systems) + +Multi-Agent စနစ်များဆိုတာဟာ **အထူးပြု Agent တွေက ရှုပ်ထွေးတဲ့ လုပ်ငန်းတွေကို ပူးပေါင်းလုပ်ဆောင်နိုင်ဖို့** စီစဉ်ပေးတဲ့ နည်းလမ်းပဲ ဖြစ်ပါတယ်။ ဒီစနစ်တွေက စနစ်ရဲ့ ဖွဲ့စည်းပုံကို ပိုမိုစနစ်ကျစေခြင်း (Modularity)၊ ချဲ့ထွင်နိုင်စွမ်း (Scalability) နဲ့ ခံနိုင်ရည်ရှိမှု (Robustness) တွေကို တိုးတက်စေပါတယ်။ Agent တစ်ခုတည်းကို အားကိုးမယ့်အစား၊ လုပ်ငန်းတွေကို မတူညီတဲ့ စွမ်းဆောင်ရည်ရှိတဲ့ Agent တွေကြားမှာ ခွဲဝေပေးလိုက်တာ ဖြစ်ပါတယ်။ + +**smolagents** Framework မှာဆိုရင်၊ မတူညီတဲ့ Agent တွေကို ပေါင်းစပ်ပြီး Python Code တွေ ထုတ်ပေးတာ၊ ပြင်ပ Tool တွေကို ခေါ်ဆိုတာ၊ ဝက်ဘ်ရှာဖွေမှုတွေ လုပ်ဆောင်တာ စတဲ့ လုပ်ငန်းတွေကို လုပ်ဆောင်နိုင်ပါတယ်။ ဒီ Agent တွေကို စနစ်တကျ စီမံခန့်ခွဲခြင်းအားဖြင့် ကျွန်တော်တို့ဟာ အစွမ်းထက်တဲ့ လုပ်ငန်းအဆင့်ဆင့် (Workflows) တွေကို ဖန်တီးနိုင်ပါတယ်။ + +ပုံမှန်အားဖြင့် Multi-Agent စနစ်တစ်ခုမှာ အောက်ပါ Agent တွေ ပါဝင်နိုင်ပါတယ်။ + +* **Manager Agent:** လုပ်ငန်းခွဲတွေကို တာဝန်ခွဲဝေပေးဖို့အတွက်။ +* **Code Interpreter Agent:** Code တွေကို လုပ်ဆောင်ပေးဖို့အတွက်။ +* **Web Search Agent:** အချက်အလက် ရှာဖွေဖို့အတွက်။ + +အောက်ပါ ပုံကြမ်းက ရိုးရှင်းတဲ့ Multi-Agent ဖွဲ့စည်းပုံကို ဖော်ပြထားပါတယ်။ **Manager Agent** က **Code Interpreter Tool** နဲ့ **Web Search Agent** ကို စီမံခန့်ခွဲပါတယ်။ Web Search Agent ကတော့ သက်ဆိုင်ရာ အချက်အလက်တွေ စုဆောင်းဖို့အတွက် `DuckDuckGoSearchTool` နဲ့ `VisitWebpageTool` လိုမျိုး Tool တွေကို အသုံးပြုပါတယ်။ + + + +## လက်တွေ့လုပ်ဆောင်နေသော Multi-Agent စနစ်များ (Multi-Agent Systems in Action) + +Multi-Agent စနစ်တစ်ခုဟာ **Orchestrator Agent** ရဲ့ စီမံခန့်ခွဲမှုအောက်မှာ အထူးပြု Agent အများအပြား ပူးပေါင်းလုပ်ဆောင်နေတဲ့ စနစ်တစ်ခု ဖြစ်ပါတယ်။ ဒီနည်းလမ်းက လုပ်ငန်းခွဲတွေကို မတူညီတဲ့ တာဝန်ရှိတဲ့ Agent တွေကြားမှာ ခွဲဝေပေးခြင်းအားဖြင့် ရှုပ်ထွေးတဲ့ လုပ်ငန်းအဆင့်ဆင့်တွေကို လုပ်ဆောင်နိုင်စေပါတယ်။ + +ဥပမာအားဖြင့်၊ **Multi-Agent RAG (Retrieval-Augmented Generation) စနစ်** တစ်ခုမှာ အောက်ပါ Agent တွေကို ပေါင်းစပ်နိုင်ပါတယ်။ + +* **Web Agent:** အင်တာနက် ရှာဖွေဖို့အတွက်။ +* **Retriever Agent:** အသိပညာ အခြေခံ (Knowledge Bases) တွေကနေ အချက်အလက်တွေ ပြန်ယူဖို့အတွက်။ +* **Image Generation Agent:** ပုံရိပ်တွေ ဖန်တီးပေးဖို့အတွက်။ + +ဒီ Agent တွေအားလုံးဟာ လုပ်ငန်းခွဲဝေမှုနဲ့ အပြန်အလှန် ဆက်သွယ်မှုကို စီမံခန့်ခွဲတဲ့ Orchestrator ရဲ့ အောက်မှာ လုပ်ဆောင်ကြပါတယ်။ + +## Multi-Agent အဆင့်ဆင့်ဖြင့် ရှုပ်ထွေးသော လုပ်ငန်းတစ်ခုကို ဖြေရှင်းခြင်း + +> [!TIP] +> သင်ဟာ Google Colab ကို အသုံးပြုပြီး [ဒီ Notebook](https://huggingface.co/agents-course/notebooks/blob/main/unit2/smolagents/multiagent_notebook.ipynb) ထဲက Code တွေကို လိုက်လံလေ့လာနိုင်ပါတယ်။ + +ဧည့်ခံပွဲက နီးလာပါပြီ! သင့်ရဲ့ အကူအညီနဲ့ Alfred ဟာ ပြင်ဆင်မှုတွေ ပြီးခါနီးပါပြီ။ + +ဒါပေမယ့် အခု ပြဿနာတစ်ခု ရှိလာပါပြီ- Batmobile ပျောက်သွားပါပြီ။ Alfred ဟာ အစားထိုးကားတစ်စီးကို အမြန်ဆုံး ရှာဖွေဖို့ လိုအပ်နေပါတယ်။ + +ကံကောင်းစွာနဲ့ပဲ Bruce Wayne ရဲ့ ဘဝဇာတ်ကြောင်းရုပ်ရှင်တွေ အနည်းငယ် ရိုက်ကူးခဲ့ဖူးတာကြောင့်၊ Alfred ဟာ ရုပ်ရှင်ရိုက်ကွင်းတွေမှာ ကျန်ခဲ့တဲ့ ကားတစ်စီးကို ရယူပြီး ခေတ်မီတဲ့ စံနှုန်းတွေနဲ့ ပြန်လည်ပြုပြင်နိုင်ပါတယ်။ ဒီပြုပြင်မှုမှာ Full Self-Driving (အပြည့်အဝ ကိုယ်တိုင်မောင်းနှင်နိုင်သော) စနစ်ကို ထည့်သွင်းဖို့လည်း သေချာပေါက် ပါဝင်ပါလိမ့်မယ်။ + +ဒါပေမယ့် ဒီရိုက်ကူးရေး နေရာတွေဟာ ကမ္ဘာတစ်ဝန်းမှာ ရှိနိုင်ပြီး အရေအတွက်လည်း များပြားနိုင်ပါတယ်။ + +ဒါကြောင့် Alfred က သင့်ရဲ့ အကူအညီကို လိုအပ်နေပါတယ်။ ဒီလုပ်ငန်းကို ဖြေရှင်းနိုင်မယ့် Agent တစ်ခုကို သင်တည်ဆောက်ပေးနိုင်မလား? + +> 👉 ကမ္ဘာပေါ်ရှိ Batman ရုပ်ရှင်ရိုက်ကူးရေး နေရာအားလုံးကို ရှာဖွေပါ၊ ထိုနေရာများသို့ ကုန်တင်လေယာဉ်ဖြင့် သွားရောက်မည့် အချိန်ကို တွက်ချက်ပါ (ကျွန်တော်တို့က Gotham မှာ ရှိပါတယ်၊ 40.7128° N, 74.0060° W)၊ ပြီးနောက် မြေပုံပေါ်တွင် ဖော်ပြပါ။ မြေပုံပေါ်ရှိ အမှတ်များ၏ အရောင်သည် ကုန်တင်လေယာဉ်ဖြင့် သွားရမည့် အချိန်ပေါ် မူတည်၍ ကွဲပြားရပါမယ်။ ထို့အပြင်၊ အလားတူ ကုန်တင်လေယာဉ် သွားလာချိန်ရှိသော Supercar စက်ရုံအချို့ကိုလည်း မြေပုံပေါ်တွင် ဖော်ပြပါ။ + +ဒါကို စတင်တည်ဆောက်ကြပါစို့! + +ဒီဥပမာအတွက် နောက်ထပ် Packages အချို့ လိုအပ်တာကြောင့်၊ အရင်ဆုံး Install လုပ်ရပါမယ်။ + +```bash +pip install 'smolagents[litellm]' plotly geopandas shapely kaleido -q +``` + +### ပထမဆုံးအနေနဲ့ ကုန်တင်လေယာဉ် သွားလာချိန်ကို တွက်ချက်ဖို့ Tool တစ်ခု ဖန်တီးပါမယ်။ + +```python +import math +from typing import Optional, Tuple + +from smolagents import tool + + +@tool +def calculate_cargo_travel_time( + origin_coords: Tuple[float, float], + destination_coords: Tuple[float, float], + cruising_speed_kmh: Optional[float] = 750.0, # Average speed for cargo planes +) -> float: + """ + ကမ္ဘာပေါ်ရှိ နေရာနှစ်ခုကြား ကုန်တင်လေယာဉ် သွားလာချိန်ကို Great-circle distance ကို အသုံးပြု၍ တွက်ချက်ပါ။ + + Args: + origin_coords: စတင်ရာနေရာ၏ (Latitude, Longitude) Tuple + destination_coords: ဦးတည်ရာနေရာ၏ (Latitude, Longitude) Tuple + cruising_speed_kmh: Optional အပျံနှုန်း (km/h ဖြင့်) (ပုံမှန် ကုန်တင်လေယာဉ်များအတွက် 750 km/h) + + Returns: + float: ခန့်မှန်းခြေ သွားလာချိန် (နာရီဖြင့်) + + Example: + >>> # Chicago (41.8781° N, 87.6298° W) မှ Sydney (33.8688° S, 151.2093° E) သို့ + >>> result = calculate_cargo_travel_time((41.8781, -87.6298), (-33.8688, 151.2093)) + """ + + def to_radians(degrees: float) -> float: + return degrees * (math.pi / 180) + + # Coordinates များကို ထုတ်ယူခြင်း + lat1, lon1 = map(to_radians, origin_coords) + lat2, lon2 = map(to_radians, destination_coords) + + # ကမ္ဘာမြေ၏ အချင်းဝက် (ကီလိုမီတာဖြင့်) + EARTH_RADIUS_KM = 6371.0 + + # Haversine ဖော်မြူလာကို အသုံးပြု၍ Great-circle distance ကို တွက်ချက်ခြင်း + dlon = lon2 - lon1 + dlat = lat2 - lat1 + + a = ( + math.sin(dlat / 2) ** 2 + + math.cos(lat1) * math.cos(lat2) * math.sin(dlon / 2) ** 2 + ) + c = 2 * math.asin(math.sqrt(a)) + distance = EARTH_RADIUS_KM * c + + # တိုက်ရိုက်မဟုတ်သော လမ်းကြောင်းများနှင့် လေကြောင်းထိန်းချုပ်မှုများအတွက် ၁၀% ထပ်ပေါင်းခြင်း + actual_distance = distance * 1.1 + + # လေယာဉ်ပျံသန်းချိန် တွက်ချက်ခြင်း + # လေယာဉ်တက်ခြင်းနှင့် ဆင်းသက်ခြင်း လုပ်ငန်းစဉ်များအတွက် ၁ နာရီ ထပ်ပေါင်းခြင်း + flight_time = (actual_distance / cruising_speed_kmh) + 1.0 + + # ရလဒ်ကို ဒသမနှစ်နေရာဖြင့် ပုံစံချခြင်း + return round(flight_time, 2) + + +print(calculate_cargo_travel_time((41.8781, -87.6298), (-33.8688, 151.2093))) +``` + +### Agent ကို စနစ်တကျ တည်ဆောက်ခြင်း + +Model Provider အတွက် Hugging Face Hub ပေါ်ရှိ [Inference Providers](https://huggingface.co/blog/inference-providers) အသစ်များထဲမှ Together AI ကို အသုံးပြုပါမယ်။ + +GoogleSearchTool သည် ဝက်ဘ်ရှာဖွေရန် [Serper API](https://serper.dev) ကို အသုံးပြုပါတယ်။ ဒါကြောင့် `SERPAPI_API_KEY` ကို Environment Variable အဖြစ် သတ်မှတ်ပြီး `provider="serpapi"` ကို ပေးပို့ရပါမယ်၊ သို့မဟုတ် `SERPER_API_KEY` ကို သတ်မှတ်ပြီး `provider=serper` ကို ပေးပို့ရပါမယ်။ + +သင့်မှာ Serp API Provider မရှိဘူးဆိုရင် `DuckDuckGoSearchTool` ကို အသုံးပြုနိုင်ပါတယ်၊ ဒါပေမယ့် ၎င်းမှာ Rate Limit (အသုံးပြုမှု ကန့်သတ်ချက်) ရှိတယ်ဆိုတာ သတိပြုပါ။ + +```python +import os +from PIL import Image +from smolagents import CodeAgent, GoogleSearchTool, InferenceClientModel, VisitWebpageTool + +model = InferenceClientModel(model_id="Qwen/Qwen2.5-Coder-32B-Instruct", provider="together") +``` + +ရိုးရှင်းတဲ့ Report တစ်ခု ပေးနိုင်ဖို့အတွက် အခြေခံ Agent တစ်ခုကို စတင်ဖန်တီးနိုင်ပါတယ်။ + +```python +task = """Find all Batman filming locations in the world, calculate the time to transfer via cargo plane to here (we're in Gotham, 40.7128° N, 74.0060° W), and return them to me as a pandas dataframe. +Also give me some supercar factories with the same cargo plane transfer time.""" +``` + +```python +agent = CodeAgent( + model=model, + tools=[GoogleSearchTool("serper"), VisitWebpageTool(), calculate_cargo_travel_time], + additional_authorized_imports=["pandas"], + max_steps=20, +) +``` + +```python +result = agent.run(task) +``` + +```python +result +``` + +ကျွန်တော်တို့ရဲ့ စမ်းသပ်မှုမှာတော့ ဒီလို ရလဒ် ထွက်လာပါတယ်။ + +```python +| | Location | Travel Time to Gotham (hours) | +|--|------------------------------------------------------|------------------------------| +| 0 | Necropolis Cemetery, Glasgow, Scotland, UK | 8.60 | +| 1 | St. George's Hall, Liverpool, England, UK | 8.81 | +| 2 | Two Temple Place, London, England, UK | 9.17 | +| 3 | Wollaton Hall, Nottingham, England, UK | 9.00 | +| 4 | Knebworth House, Knebworth, Hertfordshire, UK | 9.15 | +| 5 | Acton Lane Power Station, Acton Lane, Acton, UK | 9.16 | +| 6 | Queensboro Bridge, New York City, USA | 1.01 | +| 7 | Wall Street, New York City, USA | 1.00 | +| 8 | Mehrangarh Fort, Jodhpur, Rajasthan, India | 18.34 | +| 9 | Turda Gorge, Turda, Romania | 11.89 | +| 10 | Chicago, USA | 2.68 | +| 11 | Hong Kong, China | 19.99 | +| 12 | Cardington Studios, Northamptonshire, UK | 9.10 | +| 13 | Warner Bros. Leavesden Studios, Hertfordshire, UK | 9.13 | +| 14 | Westwood, Los Angeles, CA, USA | 6.79 | +| 15 | Woking, UK (McLaren) | 9.13 | +``` + +ဒီရလဒ်ကို ပိုမိုကောင်းမွန်အောင် လုပ်ဆောင်နိုင်ဖို့အတွက် သီးခြား စီမံကိန်းဆွဲခြင်း အဆင့်တွေကို ထည့်သွင်းပြီး Prompt တွေကို ပိုမိုအသေးစိတ် ပေးနိုင်ပါတယ်။ + +စီမံကိန်းဆွဲခြင်း အဆင့်တွေက Agent ကို ရှေ့ကို တွေးခေါ်ပြီး နောက်ထပ် လုပ်ဆောင်ရမယ့် အဆင့်တွေကို ကြိုတင်စီစဉ်နိုင်စေပါတယ်။ ဒါက ရှုပ်ထွေးတဲ့ Tasks တွေအတွက် အသုံးဝင်ပါတယ်။ + +```python +agent.planning_interval = 4 + +detailed_report = agent.run(f""" +You're an expert analyst. You make comprehensive reports after visiting many websites. +Don't hesitate to search for many queries at once in a for loop. +For each data point that you find, visit the source url to confirm numbers. + +{task} +""") + +print(detailed_report) +``` + +```python +detailed_report +``` + +ကျွန်တော်တို့ရဲ့ စမ်းသပ်မှုမှာတော့ ဒီလို ပိုမိုကျစ်လျစ်တဲ့ ရလဒ် ထွက်လာပါတယ်။ + +```python +| | Location | Travel Time (hours) | +|--|--------------------------------------------------|---------------------| +| 0 | Bridge of Sighs, Glasgow Necropolis, Glasgow, UK | 8.6 | +| 1 | Wishart Street, Glasgow, Scotland, UK | 8.6 | +``` + +ဒီလို လျင်မြန်တဲ့ ပြောင်းလဲမှုတွေကြောင့်၊ ကျွန်တော်တို့ရဲ့ Agent ကို အသေးစိတ် Prompt ပေးခြင်းနဲ့ စီမံကိန်းဆွဲနိုင်စွမ်း ပေးခြင်းအားဖြင့် ပိုမိုကျစ်လျစ်တဲ့ Report တစ်ခုကို ရရှိခဲ့ပါတယ်။ + +Model ရဲ့ Context Window ဟာ လျင်မြန်စွာ ပြည့်လာနိုင်ပါတယ်။ ဒါကြောင့် **ကျွန်တော်တို့ရဲ့ Agent ကို အသေးစိတ် ရှာဖွေမှု ရလဒ်တွေကို အခြား ရလဒ်တစ်ခုနဲ့ ပေါင်းစပ်ခိုင်းမယ်ဆိုရင် ပိုမိုနှေးကွေးလာပြီး Token တွေနဲ့ ကုန်ကျစရိတ်တွေ လျင်မြန်စွာ မြင့်တက်လာပါလိမ့်မယ်**။ + +➡️ ဒါကြောင့် ကျွန်တော်တို့ရဲ့ စနစ်ဖွဲ့စည်းပုံကို ပိုမိုကောင်းမွန်အောင် လုပ်ဆောင်ဖို့ လိုအပ်ပါတယ်။ + +### ✌️ လုပ်ငန်းကို Agent နှစ်ခုကြား ခွဲဝေခြင်း + +Multi-Agent ဖွဲ့စည်းပုံတွေက မတူညီတဲ့ လုပ်ငန်းခွဲတွေကြားမှာ မှတ်ဉာဏ်တွေကို ခွဲခြားနိုင်စေပြီး အကျိုးကျေးဇူး နှစ်ခုကို ပေးပါတယ်။ + +* Agent တစ်ခုစီဟာ သူ့ရဲ့ အဓိက လုပ်ငန်းအပေါ် ပိုမိုအာရုံစိုက်နိုင်တာကြောင့် စွမ်းဆောင်ရည် ပိုကောင်းလာပါတယ်။ +* မှတ်ဉာဏ်တွေကို ခွဲခြားထားခြင်းက အဆင့်တိုင်းမှာ ထည့်သွင်းရမယ့် Token အရေအတွက်ကို လျှော့ချပေးတာကြောင့် Latency (နှောင့်နှေးမှု) နဲ့ ကုန်ကျစရိတ်ကို လျှော့ချပေးပါတယ်။ + +Manager Agent တစ်ခုက စီမံခန့်ခွဲမယ့် သီးသန့် Web Search Agent ပါဝင်တဲ့ Team တစ်ခုကို ဖန်တီးကြပါစို့။ + +Manager Agent ဟာ နောက်ဆုံး Report ကို ရေးသားဖို့အတွက် Plotting လုပ်နိုင်စွမ်း လိုအပ်တာကြောင့်၊ `plotly`၊ `geopandas` နဲ့ `shapely` တို့လို Imports တွေကို ဝင်ရောက်ခွင့် ပေးရပါမယ်။ + +```python +model = InferenceClientModel( + "Qwen/Qwen2.5-Coder-32B-Instruct", provider="together", max_tokens=8096 +) + +web_agent = CodeAgent( + model=model, + tools=[ + GoogleSearchTool(provider="serper"), + VisitWebpageTool(), + calculate_cargo_travel_time, + ], + name="web_agent", + description="Browses the web to find information", + verbosity_level=0, + max_steps=10, +) +``` + +Manager Agent ကတော့ စိတ်ပိုင်းဆိုင်ရာ အလုပ်တွေကို ပိုမိုလုပ်ဆောင်ရပါမယ်။ + +ဒါကြောင့် ကျွန်တော်တို့ဟာ ပိုမိုအားကောင်းတဲ့ Model ဖြစ်တဲ့ [DeepSeek-R1](https://huggingface.co/deepseek-ai/DeepSeek-R1) ကို ပေးပြီး `planning_interval` ကိုပါ ထည့်သွင်းပေးပါမယ်။ + +```python +from smolagents.utils import encode_image_base64, make_image_url +from smolagents import OpenAIServerModel + + +def check_reasoning_and_plot(final_answer, agent_memory): + multimodal_model = OpenAIServerModel("gpt-4o", max_tokens=8096) + filepath = "saved_map.png" + assert os.path.exists(filepath), "Make sure to save the plot under saved_map.png!" + image = Image.open(filepath) + prompt = ( + f"Here is a user-given task and the agent steps: {agent_memory.get_succinct_steps()}. Now here is the plot that was made." + "Please check that the reasoning process and plot are correct: do they correctly answer the given task?" + "First list reasons why yes/no, then write your final decision: PASS in caps lock if it is satisfactory, FAIL if it is not." + "Don't be harsh: if the plot mostly solves the task, it should pass." + "To pass, a plot should be made using px.scatter_map and not any other method (scatter_map looks nicer)." + ) + messages = [ + { + "role": "user", + "content": [ + { + "type": "text", + "text": prompt, + }, + { + "type": "image_url", + "image_url": {"url": make_image_url(encode_image_base64(image))}, + }, + ], + } + ] + output = multimodal_model(messages).content + print("Feedback: ", output) + if "FAIL" in output: + raise Exception(output) + return True + + +manager_agent = CodeAgent( + model=InferenceClientModel("deepseek-ai/DeepSeek-R1", provider="together", max_tokens=8096), + tools=[calculate_cargo_travel_time], + managed_agents=[web_agent], + additional_authorized_imports=[ + "geopandas", + "plotly", + "shapely", + "json", + "pandas", + "numpy", + ], + planning_interval=5, + verbosity_level=2, + final_answer_checks=[check_reasoning_and_plot], + max_steps=15, +) +``` + +ဒီ Team ရဲ့ ဖွဲ့စည်းပုံကို ကြည့်ကြပါစို့။ + +```python +manager_agent.visualize() +``` + +ဒါက Agent တွေနဲ့ Tools တွေကြားက ဖွဲ့စည်းပုံနဲ့ ဆက်နွှယ်မှုကို နားလည်စေဖို့ အောက်ပါပုံစံမျိုးကို ထုတ်ပေးပါလိမ့်မယ်။ + +```python +CodeAgent | deepseek-ai/DeepSeek-R1 +├── ✅ Authorized imports: ['geopandas', 'plotly', 'shapely', 'json', 'pandas', 'numpy'] +├── 🛠️ Tools: +│ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +│ ┃ Name ┃ Description ┃ Arguments ┃ +│ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ +│ │ calculate_cargo_travel_time │ Calculate the travel time for a cargo │ origin_coords (`array`): Tuple of │ +│ │ │ plane between two points on Earth │ (latitude, longitude) for the │ +│ │ │ using great-circle distance. │ starting point │ +│ │ │ │ destination_coords (`array`): Tuple │ +│ │ │ │ of (latitude, longitude) for the │ +│ │ │ │ destination │ +│ │ │ │ cruising_speed_kmh (`number`): │ +│ │ │ │ Optional cruising speed in km/h │ +│ │ │ │ (defaults to 750 km/h for typical │ +│ │ │ │ cargo planes) │ +│ │ final_answer │ Provides a final answer to the given │ answer (`any`): The final answer to │ +│ │ │ problem. │ the problem │ +│ └─────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┘ +└── 🤖 Managed agents: + └── web_agent | CodeAgent | Qwen/Qwen2.5-Coder-32B-Instruct + ├── ✅ Authorized imports: [] + ├── 📝 Description: Browses the web to find information + └── 🛠️ Tools: + ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ + ┃ Name ┃ Description ┃ Arguments ┃ + ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ + │ web_search │ Performs a google web search for │ query (`string`): The search │ + │ │ your query then returns a string │ query to perform. │ + │ │ of the top search results. │ filter_year (`integer`): │ + │ │ │ Optionally restrict results to a │ + │ │ │ certain year │ + │ visit_webpage │ Visits a webpage at the given url │ url (`string`): The url of the │ + │ │ and reads its content as a │ webpage to visit. │ + │ │ markdown string. Use this to │ │ + │ │ browse webpages. │ │ + │ calculate_cargo_travel_time │ Calculate the travel time for a │ origin_coords (`array`): Tuple of │ + │ │ cargo plane between two points on │ (latitude, longitude) for the │ + │ │ Earth using great-circle │ starting point │ + │ │ distance. │ destination_coords (`array`): │ + │ │ │ Tuple of (latitude, longitude) │ + │ │ │ for the destination │ + │ │ │ cruising_speed_kmh (`number`): │ + │ │ │ Optional cruising speed in km/h │ + │ │ │ (defaults to 750 km/h for typical │ + │ │ │ cargo planes) │ + │ final_answer │ Provides a final answer to the │ answer (`any`): The final answer │ + │ │ given problem. │ to the problem │ + └─────────────────────────────┴───────────────────────────────────┴───────────────────────────────────┘ +``` + +```python +manager_agent.run(""" +Find all Batman filming locations in the world, calculate the time to transfer via cargo plane to here (we're in Gotham, 40.7128° N, 74.0060° W). +Also give me some supercar factories with the same cargo plane transfer time. You need at least 6 points in total. +Represent this as spatial map of the world, with the locations represented as scatter points with a color that depends on the travel time, and save it to saved_map.png! + +Here's an example of how to plot and return a map: +import plotly.express as px +df = px.data.carshare() +fig = px.scatter_map(df, lat="centroid_lat", lon="centroid_lon", text="name", color="peak_hour", size=100, + color_continuous_scale=px.colors.sequential.Magma, size_max=15, zoom=1) +fig.show() +fig.write_image("saved_image.png") +final_answer(fig) + +Never try to process strings using code: when you have a string to read, just print it and you'll see it. +""") +``` + +သင့်ရဲ့ စမ်းသပ်မှုမှာ ဘယ်လိုဖြစ်သွားလဲတော့ မသိဘူး၊ ဒါပေမယ့် ကျွန်တော့်ရဲ့ စမ်းသပ်မှုမှာတော့ Manager Agent ဟာ လုပ်ငန်းတွေကို ကျွမ်းကျင်စွာ ခွဲဝေပေးခဲ့ပါတယ်။ ပထမဆုံး `1. Batman ရုပ်ရှင်ရိုက်ကူးရေး နေရာများ ရှာဖွေခြင်း`၊ ပြီးနောက် `2. Supercar စက်ရုံများ ရှာဖွေခြင်း` တို့ကို Web Agent ကို တာဝန်ပေးခဲ့ပြီး၊ ရလဒ်စာရင်းများကို စုစည်းကာ မြေပုံကို Plot လုပ်ခဲ့ပါတယ်။ + +Agent ရဲ့ State ကနေ တိုက်ရိုက် စစ်ဆေးခြင်းဖြင့် မြေပုံက ဘယ်လိုပုံစံလဲဆိုတာ ကြည့်ကြပါစို့။ + +```python +manager_agent.python_executor.state["fig"] +``` + +ဒါက အောက်ပါ မြေပုံကို ထုတ်ပေးပါလိမ့်မယ်။ + +![Multiagent system example output map](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/smolagents/output_map.png) + +## အရင်းအမြစ်များ (Resources) + +* [Multi-Agent Systems](https://huggingface.co/docs/smolagents/main/en/examples/multiagents) – Multi-Agent စနစ်များ၏ ခြုံငုံသုံးသပ်ချက်။ +* [What is Agentic RAG?](https://weaviate.io/blog/what-is-agentic-rag) – Agentic RAG ကို မိတ်ဆက်ခြင်း။ +* [Multi-Agent RAG System 🤖🤝🤖 Recipe](https://huggingface.co/learn/cookbook/multiagent_rag_system) – Multi-Agent RAG စနစ်တစ်ခု တည်ဆောက်ရန် အဆင့်ဆင့် လမ်းညွှန်ချက်။ \ No newline at end of file diff --git a/units/my/unit2/smolagents/quiz1.mdx b/units/my/unit2/smolagents/quiz1.mdx new file mode 100644 index 00000000..924b8fed --- /dev/null +++ b/units/my/unit2/smolagents/quiz1.mdx @@ -0,0 +1,142 @@ +# အမြန် စစ်ဆေးမေးခွန်း (Small Quiz) (အမှတ်မပေးပါ) [[quiz1]] + +`smolagents` ကို သင်ဘယ်လောက် နားလည်သလဲဆိုတာကို ဒီအမြန် စစ်ဆေးမေးခွန်းလေးနဲ့ စမ်းသပ်ကြည့်ရအောင်! ကိုယ့်ကိုယ်ကိုယ် စမ်းသပ်ခြင်းက သင်ယူမှုကို ပိုမိုခိုင်မာစေပြီး ပြန်လည်လေ့လာဖို့ လိုအပ်တဲ့ အပိုင်းတွေကို သိရှိစေနိုင်တယ်ဆိုတာ သတိရပါ။ + +ဒီ Quiz ဟာ မဖြစ်မနေ ဖြေဆိုရမှာ မဟုတ်ဘဲ၊ အမှတ်လည်း ပေးမှာ မဟုတ်ပါဘူး။ + +### Q1: အခြား Framework များထက် `smolagents` ကို ရွေးချယ်ခြင်းရဲ့ အဓိက အားသာချက်များထဲမှ တစ်ခုက ဘာလဲ။ +`smolagents` ရဲ့ အဓိက အားသာချက်ကို အကောင်းဆုံး ဖော်ပြတဲ့ အချက်က ဘာလဲ။ + + + +--- + +### Q2: ဘယ်လို အခြေအနေမျိုးမှာ smolagents ကို အသုံးပြုခြင်းက အကျိုးအရှိဆုံး ဖြစ်မလဲ။ +ဘယ်အခြေအနေက smolagents ရဲ့ အကောင်းဆုံး လုပ်ဆောင်နိုင်စွမ်းနဲ့ ကိုက်ညီပါသလဲ။ + + + +--- + +### Q3: smolagents သည် Model ပေါင်းစပ်မှုတွင် ပြောင်းလွယ်ပြင်လွယ်ရှိမှုကို ပေးပါသည်။ ၎င်း၏ ချဉ်းကပ်ပုံကို အကောင်းဆုံး ဖော်ပြသည့် အချက်က ဘာလဲ။ +smolagents က LLM များနှင့် မည်သို့ ပူးပေါင်းဆောင်ရွက်သည်ကို အတိကျဆုံး ဖော်ပြချက်ကို ရွေးချယ်ပါ။ + + + +--- + +### Q4: Code-based Actions နှင့် JSON-based Actions များအကြား အငြင်းပွားမှုကို smolagents က မည်သို့ ကိုင်တွယ်ဖြေရှင်းသနည်း။ +Actions ပုံစံများနှင့် ပတ်သက်၍ smolagents ၏ အတွေးအခေါ်ကို မှန်ကန်စွာ ဖော်ပြသည့် အချက်က ဘာလဲ။ + + + +--- + +### Q5: smolagents သည် Hugging Face Hub နှင့် မည်သို့ ပေါင်းစပ်ပြီး အကျိုးကျေးဇူးများ ပေးသနည်း။ +Hub ပေါင်းစပ်မှု၏ အဓိက အားသာချက်များထဲမှ တစ်ခုကို တိကျစွာ ဖော်ပြသည့် အချက်က ဘာလဲ။ + + + +--- + +ဒီ Quiz ကို ပြီးဆုံးသွားတဲ့အတွက် ဂုဏ်ယူပါတယ်! 🎉 အကယ်၍ မေးခွန်းတစ်ချို့ လွဲချော်သွားခဲ့ရင် *Why use smolagents* အပိုင်းကို ပြန်လည်လေ့လာဖို့ စဉ်းစားပါ။ ကောင်းကောင်းဖြေဆိုနိုင်ခဲ့ရင်တော့ smolagents ရဲ့ ပိုမိုအဆင့်မြင့်တဲ့ အကြောင်းအရာတွေကို လေ့လာဖို့ အသင့်ဖြစ်နေပါပြီ! \ No newline at end of file diff --git a/units/my/unit2/smolagents/quiz2.mdx b/units/my/unit2/smolagents/quiz2.mdx new file mode 100644 index 00000000..0a4f81e9 --- /dev/null +++ b/units/my/unit2/smolagents/quiz2.mdx @@ -0,0 +1,147 @@ +# အသေးစား စစ်ဆေးမေးခွန်း (အမှတ်မပေးပါ) [[quiz2]] + +*Code Agents*, *Tool Calling Agents*, နဲ့ *Tools* အခန်းတွေကို သင်ဘယ်လောက် နားလည်သွားပြီလဲဆိုတာ စစ်ဆေးဖို့ အချိန်ရောက်ပါပြီ။ ဒီ Quiz က စိတ်ကြိုက်ဖြေဆိုနိုင်ပြီး အမှတ်ပေးမှာ မဟုတ်ပါဘူး။ + +--- + +### Q1: smolagents မှာ Tool တစ်ခုကို `@tool` decorator နဲ့ ဖန်တီးတာနဲ့ `Tool` ရဲ့ Subclass အနေနဲ့ ဖန်တီးတာကြားက အဓိက ကွာခြားချက်က ဘာလဲ။ + +Tool တွေကို သတ်မှတ်ဖို့အတွက် ဒီချဉ်းကပ်မှုနှစ်ခုကြားက ကွာခြားချက်ကို အကောင်းဆုံး ဖော်ပြတဲ့ အချက်က ဘာလဲ။ + +@tool decorator ကို အသုံးပြုတာက Retrieval-based Tools တွေအတွက် မဖြစ်မနေ လိုအပ်ပြီး၊ Tool ရဲ့ Subclass တွေကတော့ Text-generation Tasks တွေအတွက်သာ ဖြစ်ပါတယ်။", + explain: "ချဉ်းကပ်မှုနှစ်ခုစလုံးကို Retrieval-based သို့မဟုတ် Text-generation Tools အပါအဝင် မည်သည့် Tool အမျိုးအစားအတွက်မဆို အသုံးပြုနိုင်ပါတယ်။", + }, + { + text: "@tool decorator ကို ရိုးရှင်းတဲ့ Function-based Tools တွေအတွက် အကြံပြုထားပြီး၊ Tool ရဲ့ Subclass တွေကတော့ ပိုမိုရှုပ်ထွေးတဲ့ လုပ်ဆောင်ချက်တွေ ဒါမှမဟုတ် Custom Metadata တွေအတွက် ပိုမိုပြောင်းလွယ်ပြင်လွယ် ပေးပါတယ်။", + explain: "ဒါက မှန်ပါတယ်။ Decorator ချဉ်းကပ်မှုက ပိုရိုးရှင်းပေမယ့်၊ Subclass လုပ်ခြင်းက ပိုမိုစိတ်ကြိုက်ပြင်ဆင်နိုင်တဲ့ အပြုအမူတွေကို ခွင့်ပြုပါတယ်။", + correct: true + }, + { + text: "@tool ကို Multi-agent Systems တွေမှာသာ အသုံးပြုနိုင်ပြီး၊ Tool Subclass ကို ဖန်တီးတာက Single-agent အခြေအနေတွေအတွက် ဖြစ်ပါတယ်။", + explain: "Agent အားလုံး (Single သို့မဟုတ် Multi) ဟာ Tool တွေကို သတ်မှတ်ဖို့အတွက် ချဉ်းကပ်မှုနှစ်ခုစလုံးကို အသုံးပြုနိုင်ပါတယ်။ ဒီလို ကန့်သတ်ချက် မရှိပါဘူး။", + }, + { + text: "Function တစ်ခုကို @tool နဲ့ Decorate လုပ်ခြင်းက Docstring ရဲ့ လိုအပ်ချက်ကို အစားထိုးပေးပြီး၊ Subclass တွေမှာတော့ Docstring မပါဝင်ရပါဘူး။", + explain: "နည်းလမ်းနှစ်ခုစလုံးဟာ ရှင်းလင်းတဲ့ Docstring တွေကနေ အကျိုးကျေးဇူး ရရှိပါတယ်။ Decorator က Docstring တွေကို အစားမထိုးပါဘူး၊ Subclass မှာလည်း Docstring တွေ ပါဝင်နိုင်ပါတယ်။", + } +]} +/> + +--- + +### Q2: CodeAgent ဟာ ReAct (Reason + Act) ချဉ်းကပ်မှုကို အသုံးပြုပြီး Multi-step Tasks တွေကို ဘယ်လို ကိုင်တွယ်ဖြေရှင်းသလဲ။ + +Task တစ်ခုကို ဖြေရှင်းဖို့အတွက် CodeAgent က အဆင့်များစွာကို ဘယ်လို လုပ်ဆောင်တယ်ဆိုတာကို မှန်ကန်စွာ ဖော်ပြတဲ့ အချက်က ဘာလဲ။ + + + +--- + +### Q3: Hugging Face Hub မှာ Tool တစ်ခုကို မျှဝေခြင်းရဲ့ အဓိက အားသာချက်က ဘာလဲ။ + +Developer တစ်ဦးက သူတို့ရဲ့ Custom Tool ကို ဘာကြောင့် Upload လုပ်ပြီး မျှဝေနိုင်သလဲဆိုတဲ့ အကောင်းဆုံး အကြောင်းပြချက်ကို ရွေးချယ်ပါ။ + + + +--- + +### Q4: ToolCallingAgent ဟာ လုပ်ဆောင်ချက်တွေကို လုပ်ဆောင်ပုံမှာ CodeAgent နဲ့ ကွာခြားပါတယ်။ ဘယ်အချက်က မှန်ကန်သလဲ။ + +ToolCallingAgent ဘယ်လို အလုပ်လုပ်တယ်ဆိုတာကို တိကျစွာ ဖော်ပြတဲ့ ရွေးချယ်မှုကို ရွေးပါ။ + + + +--- + +### Q5: smolagents ရဲ့ Default Toolbox မှာ ဘာတွေ ပါဝင်သလဲ၊ ဘာကြောင့် အဲဒါကို အသုံးပြုသင့်သလဲ။ + +smolagents ရဲ့ Default Toolbox ရဲ့ ရည်ရွယ်ချက်နဲ့ ပါဝင်တဲ့ အကြောင်းအရာတွေကို အကောင်းဆုံး ဖော်ပြတဲ့ အချက်က ဘာလဲ။ + + + +--- + +ဒီ Quiz ကို ပြီးဆုံးသွားတဲ့အတွက် ဂုဏ်ယူပါတယ်။ 🎉 မေးခွန်းတစ်ခုခု အခက်အခဲရှိခဲ့ရင် *Code Agents*, *Tool Calling Agents*, ဒါမှမဟုတ် *Tools* အခန်းတွေကို ပြန်လည်လေ့လာပြီး သင့်ရဲ့ နားလည်မှုကို ခိုင်မာအောင် လုပ်ဆောင်ပါ။ အကယ်၍ အားလုံးကို မှန်ကန်စွာ ဖြေဆိုနိုင်ခဲ့ရင်တော့ သင်ဟာ ခိုင်မာတဲ့ smolagents Application တွေကို တည်ဆောက်ဖို့ လမ်းကြောင်းပေါ်မှာ ရှိနေပါပြီ! \ No newline at end of file diff --git a/units/my/unit2/smolagents/retrieval_agents.mdx b/units/my/unit2/smolagents/retrieval_agents.mdx new file mode 100644 index 00000000..7496da32 --- /dev/null +++ b/units/my/unit2/smolagents/retrieval_agents.mdx @@ -0,0 +1,169 @@ + + +# Agentic RAG စနစ်များ တည်ဆောက်ခြင်း (Building Agentic RAG Systems) + +> [!TIP] +> ဒီအပိုင်းမှာပါတဲ့ Code တွေကို ဒီ Notebook မှာ လိုက်လံလေ့လာနိုင်ပြီး Google Colab ကို အသုံးပြုပြီး Run ကြည့်နိုင်ပါတယ်။ + +**Retrieval Augmented Generation (RAG)** စနစ်တွေဆိုတာ ဒေတာ ရှာဖွေခြင်း (Data Retrieval) နဲ့ အဖြေထုတ်ပေးခြင်း (Generation) စွမ်းရည်တွေကို ပေါင်းစပ်ထားတဲ့ စနစ်တွေ ဖြစ်ပါတယ်။ ဒီစနစ်တွေက အကြောင်းအရာကို နားလည်ပြီး ဆီလျော်တဲ့ တုံ့ပြန်မှုတွေကို ပေးနိုင်ပါတယ်။ ဥပမာအားဖြင့်၊ အသုံးပြုသူရဲ့ မေးခွန်းကို Search Engine တစ်ခုဆီ ပို့လိုက်ပြီး၊ ရှာဖွေတွေ့ရှိတဲ့ ရလဒ်တွေကို မေးခွန်းနဲ့အတူ မော်ဒယ်ဆီ ပြန်ပေးပါတယ်။ အဲဒီအခါ မော်ဒယ်က မေးခွန်းနဲ့ ရှာဖွေတွေ့ရှိတဲ့ အချက်အလက်တွေကို အခြေခံပြီး အဖြေတစ်ခုကို ထုတ်ပေးပါတယ်။ + +**Agentic RAG (Retrieval-Augmented Generation)** ဆိုတာကတော့ ရိုးရာ RAG စနစ်တွေကို ကျော်လွန်ပြီး **ကိုယ်ပိုင်အုပ်ချုပ်ခွင့်ရှိတဲ့ Agent တွေနဲ့ ပြောင်းလဲနေတဲ့ အသိပညာ ရှာဖွေမှု (Dynamic Knowledge Retrieval) ကို ပေါင်းစပ်ထားခြင်း** ဖြစ်ပါတယ်။ + +ရိုးရာ RAG စနစ်တွေမှာ LLM က ရှာဖွေထားတဲ့ ဒေတာကို အခြေခံပြီး မေးခွန်းတွေကို ဖြေဖို့ပဲ အသုံးပြုပါတယ်။ ဒါပေမယ့် Agentic RAG ကတော့ **ရှာဖွေခြင်းနဲ့ အဖြေထုတ်ပေးခြင်း လုပ်ငန်းစဉ် နှစ်ခုလုံးကို ဉာဏ်ရည်ရှိရှိ ထိန်းချုပ်နိုင်စေပါတယ်**။ ဒါကြောင့် စွမ်းဆောင်ရည်နဲ့ တိကျမှု ပိုမိုကောင်းမွန်လာပါတယ်။ + +ရိုးရာ RAG စနစ်တွေမှာ အဓိက ကန့်သတ်ချက်တွေ ရှိပါတယ်။ ဥပမာအားဖြင့် **တစ်ကြိမ်တည်း ရှာဖွေမှုအပေါ် မှီခိုနေရခြင်း** နဲ့ အသုံးပြုသူရဲ့ မေးခွန်းနဲ့ တိုက်ရိုက် အဓိပ္ပာယ်တူညီမှု (Semantic Similarity) ကိုသာ အာရုံစိုက်ခြင်းတို့ကြောင့် ဆီလျော်တဲ့ အချက်အလက်တွေကို လွဲချော်သွားနိုင်ပါတယ်။ + +Agentic RAG ကတော့ ဒီပြဿနာတွေကို ဖြေရှင်းပေးပါတယ်။ Agent က ကိုယ်ပိုင် ဆုံးဖြတ်ချက်နဲ့ ရှာဖွေမေးခွန်းတွေကို ဖော်ထုတ်တာ၊ ရှာဖွေတွေ့ရှိတဲ့ ရလဒ်တွေကို ဝေဖန်သုံးသပ်တာ၊ ပြီးတော့ ပိုမိုတိကျပြီး ပြည့်စုံတဲ့ အဖြေတစ်ခုရဖို့အတွက် ရှာဖွေမှု အဆင့်များစွာကို လုပ်ဆောင်နိုင်ပါတယ်။ + +## DuckDuckGo ဖြင့် အခြေခံ ရှာဖွေခြင်း (Basic Retrieval with DuckDuckGo) + +DuckDuckGo ကို အသုံးပြုပြီး ဝက်ဘ်ကို ရှာဖွေနိုင်တဲ့ ရိုးရှင်းတဲ့ Agent တစ်ခုကို တည်ဆောက်ကြည့်ရအောင်။ ဒီ Agent က အချက်အလက်တွေကို ရှာဖွေပြီး မေးခွန်းတွေကို ဖြေဖို့အတွက် အဖြေတွေကို ပေါင်းစပ်ပေးပါလိမ့်မယ်။ Agentic RAG ကို အသုံးပြုခြင်းအားဖြင့် Alfred ရဲ့ Agent က အောက်ပါတို့ကို လုပ်ဆောင်နိုင်ပါတယ်။ + +* နောက်ဆုံးပေါ် စူပါဟီးရိုး ပါတီခေတ်ရေစီးကြောင်းတွေကို ရှာဖွေခြင်း +* ဇိမ်ခံပစ္စည်းတွေ ပါဝင်အောင် ရလဒ်တွေကို ချိန်ညှိခြင်း +* အချက်အလက်တွေကို စုစည်းပြီး ပြည့်စုံတဲ့ အစီအစဉ်တစ်ခုအဖြစ် ပေါင်းစပ်ပေးခြင်း + +Alfred ရဲ့ Agent က ဒီအရာတွေကို ဘယ်လိုလုပ်ဆောင်နိုင်မလဲဆိုတာ ကြည့်ရအောင်။ + +```python +from smolagents import CodeAgent, DuckDuckGoSearchTool, InferenceClientModel + +# ရှာဖွေရေး Tool ကို စတင်သတ်မှတ်ခြင်း +search_tool = DuckDuckGoSearchTool() + +# Model ကို စတင်သတ်မှတ်ခြင်း +model = InferenceClientModel() + +agent = CodeAgent( + model=model, + tools=[search_tool], +) + +# ဥပမာ အသုံးပြုပုံ +response = agent.run( + "Search for luxury superhero-themed party ideas, including decorations, entertainment, and catering." +) +print(response) +``` + +ဒီ Agent က အောက်ပါ လုပ်ငန်းစဉ်အတိုင်း လုပ်ဆောင်ပါတယ်။ + +1. **တောင်းဆိုချက်ကို ခွဲခြမ်းစိတ်ဖြာခြင်း (Analyzes the Request):** Alfred ရဲ့ Agent က မေးခွန်းရဲ့ အဓိက အစိတ်အပိုင်းတွေကို ဖော်ထုတ်ပါတယ်။ (ဇိမ်ခံ စူပါဟီးရိုး ပါတီစီစဉ်ခြင်း၊ အလှဆင်မှု၊ ဖျော်ဖြေရေးနဲ့ စားသောက်မှုတို့ကို အာရုံစိုက်ခြင်း)။ +2. **ရှာဖွေမှု လုပ်ဆောင်ခြင်း (Performs Retrieval):** Agent က DuckDuckGo ကို အသုံးပြုပြီး Alfred ရဲ့ ဇိမ်ခံပွဲအတွက် လိုအပ်တဲ့ အချက်အလက်တွေကို ရှာဖွေပါတယ်။ +3. **အချက်အလက် ပေါင်းစပ်ခြင်း (Synthesizes Information):** ရလဒ်တွေကို စုဆောင်းပြီးနောက်၊ Agent က ပါတီရဲ့ ကဏ္ဍအားလုံးကို ခြုံငုံမိတဲ့၊ လက်တွေ့ကျတဲ့ အစီအစဉ်တစ်ခုအဖြစ် စုစည်းပေးပါတယ်။ +4. **အနာဂတ်အတွက် သိမ်းဆည်းခြင်း (Stores for Future Reference):** Agent က ရှာဖွေတွေ့ရှိတဲ့ အချက်အလက်တွေကို နောက်ပိုင်း ပွဲစီစဉ်မှုတွေမှာ လွယ်ကူစွာ ပြန်လည်ရယူနိုင်ဖို့ သိမ်းဆည်းထားပြီး စွမ်းဆောင်ရည်ကို မြှင့်တင်ပေးပါတယ်။ + +## စိတ်ကြိုက် အသိပညာ အခြေခံ Tool (Custom Knowledge Base Tool) + +အထူးပြု လုပ်ငန်းတွေအတွက် စိတ်ကြိုက် အသိပညာ အခြေခံ (Custom Knowledge Base) တစ်ခုရှိတာဟာ အလွန်တန်ဖိုးရှိပါတယ်။ နည်းပညာဆိုင်ရာ Document တွေ ဒါမှမဟုတ် အထူးပြု အသိပညာတွေကို Vector Database ကနေ မေးမြန်းနိုင်တဲ့ Tool တစ်ခုကို ဖန်တီးကြည့်ရအောင်။ Semantic Search ကို အသုံးပြုပြီး Agent က Alfred ရဲ့ လိုအပ်ချက်အတွက် အသင့်တော်ဆုံး အချက်အလက်တွေကို ရှာဖွေနိုင်ပါတယ်။ + +> **Vector Database ဆိုတာ ဘာလဲ?** +> Vector Database ဆိုတာ Machine Learning Model တွေကနေ ဖန်တီးထားတဲ့ စာသား ဒါမှမဟုတ် အခြားဒေတာတွေရဲ့ ကိန်းဂဏန်းဆိုင်ရာ ဖော်ပြချက်များ (Embeddings) ကို သိမ်းဆည်းထားတဲ့ Database တစ်ခုပါ။ ၎င်းက High-dimensional Space မှာ အဓိပ္ပာယ်တူညီမှုတွေကို ဖော်ထုတ်ခြင်းဖြင့် Semantic Search ကို လုပ်ဆောင်နိုင်စေပါတယ်။ + +ဒီနည်းလမ်းက ကြိုတင်သတ်မှတ်ထားတဲ့ အသိပညာနဲ့ Semantic Search ကို ပေါင်းစပ်ပြီး ပွဲစီစဉ်မှုအတွက် အကြောင်းအရာကို နားလည်တဲ့ ဖြေရှင်းနည်းတွေကို ပေးနိုင်ပါတယ်။ အထူးပြု အသိပညာကို ရယူနိုင်ခြင်းအားဖြင့် Alfred ဟာ ပါတီရဲ့ အသေးစိတ်အချက်အလက်တိုင်းကို ပြီးပြည့်စုံအောင် လုပ်ဆောင်နိုင်ပါလိမ့်မယ်။ + +ဒီဥပမာမှာ၊ ကျွန်တော်တို့ဟာ စိတ်ကြိုက် Knowledge Base ကနေ ပါတီစီစဉ်မှု Idea တွေကို ပြန်လည်ရယူတဲ့ Tool တစ်ခုကို ဖန်တီးပါမယ်။ Knowledge Base ကို ရှာဖွေပြီး အကောင်းဆုံး ရလဒ်တွေကို ပြန်ပေးဖို့အတွက် **BM25 Retriever** ကို အသုံးပြုပါမယ်။ ပိုမိုထိရောက်တဲ့ ရှာဖွေမှုအတွက် Document တွေကို သေးငယ်တဲ့ အပိုင်းလေးတွေအဖြစ် ခွဲဖို့ **`RecursiveCharacterTextSplitter`** ကို အသုံးပြုပါမယ်။ + +```python +from langchain_community.docstore.document import Document +from langchain_text_splitters import RecursiveCharacterTextSplitter +from smolagents import Tool +from langchain_community.retrievers import BM25Retriever +from smolagents import CodeAgent, InferenceClientModel + +class PartyPlanningRetrieverTool(Tool): + name = "party_planning_retriever" + description = "Uses semantic search to retrieve relevant party planning ideas for Alfred’s superhero-themed party at Wayne Manor." + inputs = { + "query": { + "type": "string", + "description": "The query to perform. This should be a query related to party planning or superhero themes.", + } + } + output_type = "string" + + def __init__(self, docs, **kwargs): + super().__init__(**kwargs) + self.retriever = BM25Retriever.from_documents( + docs, k=5 # အကောင်းဆုံး Document ၅ ခုကို ပြန်ယူပါ + ) + + def forward(self, query: str) -> str: + assert isinstance(query, str), "Your search query must be a string" + + docs = self.retriever.invoke( + query, + ) + return "\nRetrieved ideas:\n" + "".join( + [ + f"\n\n===== Idea {str(i)} =====\n" + doc.page_content + for i, doc in enumerate(docs) + ] + ) + +# ပါတီစီစဉ်မှုဆိုင်ရာ Knowledge Base ကို ပုံဖော်ခြင်း +party_ideas = [ + {"text": "A superhero-themed masquerade ball with luxury decor, including gold accents and velvet curtains.", "source": "Party Ideas 1"}, + {"text": "Hire a professional DJ who can play themed music for superheroes like Batman and Wonder Woman.", "source": "Entertainment Ideas"}, + {"text": "For catering, serve dishes named after superheroes, like 'The Hulk's Green Smoothie' and 'Iron Man's Power Steak.'", "source": "Catering Ideas"}, + {"text": "Decorate with iconic superhero logos and projections of Gotham and other superhero cities around the venue.", "source": "Decoration Ideas"}, + {"text": "Interactive experiences with VR where guests can engage in superhero simulations or compete in themed games.", "source": "Entertainment Ideas"} +] + +source_docs = [ + Document(page_content=doc["text"], metadata={"source": doc["source"]}) + for doc in party_ideas +] + +# ပိုမိုထိရောက်သော ရှာဖွေမှုအတွက် Document များကို သေးငယ်သော အပိုင်းများအဖြစ် ခွဲခြင်း +text_splitter = RecursiveCharacterTextSplitter( + chunk_size=500, + chunk_overlap=50, + add_start_index=True, + strip_whitespace=True, + separators=["\n\n", "\n", ".", " ", ""], +) +docs_processed = text_splitter.split_documents(source_docs) + +# Retriever Tool ကို ဖန်တီးခြင်း +party_planning_retriever = PartyPlanningRetrieverTool(docs_processed) + +# Agent ကို စတင်သတ်မှတ်ခြင်း +agent = CodeAgent(tools=[party_planning_retriever], model=InferenceClientModel()) + +# ဥပမာ အသုံးပြုပုံ +response = agent.run( + "Find ideas for a luxury superhero-themed party, including entertainment, catering, and decoration options." +) + +print(response) +``` + +ဒီ မြှင့်တင်ထားတဲ့ Agent က အောက်ပါတို့ကို လုပ်ဆောင်နိုင်ပါတယ်။ + +1. ပထမဆုံးအနေနဲ့ ဆီလျော်တဲ့ အချက်အလက်တွေအတွက် Document တွေကို စစ်ဆေးခြင်း +2. Knowledge Base မှ အချက်အလက်များကို ပေါင်းစပ်ခြင်း +3. စကားပြောဆိုမှု အကြောင်းအရာ (Conversation Context) ကို Memory ထဲမှာ ထိန်းသိမ်းထားခြင်း + +## မြှင့်တင်ထားသော ရှာဖွေမှု စွမ်းရည်များ (Enhanced Retrieval Capabilities) + +Agentic RAG စနစ်တွေကို တည်ဆောက်တဲ့အခါ Agent က ပိုမိုရှုပ်ထွေးတဲ့ နည်းဗျူဟာတွေကို အသုံးပြုနိုင်ပါတယ်။ + +1. **မေးခွန်း ပြန်လည်ဖွဲ့စည်းခြင်း (Query Reformulation):** အသုံးပြုသူရဲ့ မူရင်းမေးခွန်းကို တိုက်ရိုက် အသုံးမပြုဘဲ၊ ပစ်မှတ်ထားတဲ့ Document တွေနဲ့ ပိုမိုကိုက်ညီစေဖို့အတွက် ပိုမိုကောင်းမွန်အောင် ပြုပြင်ထားတဲ့ ရှာဖွေရေး စကားလုံးတွေကို Agent က ဖန်တီးနိုင်ပါတယ်။ +2. **မေးခွန်း ခွဲခြမ်းခြင်း (Query Decomposition):** အသုံးပြုသူရဲ့ မေးခွန်းမှာ ရှာဖွေရမယ့် အချက်အလက်များစွာ ပါဝင်နေရင်၊ Agent က မေးခွန်းတစ်ခုတည်းကို မေးခွန်းများစွာအဖြစ် ခွဲခြမ်းပြီး ရှာဖွေနိုင်ပါတယ်။ +3. **မေးခွန်း ချဲ့ထွင်ခြင်း (Query Expansion):** Query Reformulation နဲ့ ဆင်တူပေမယ့်၊ မေးခွန်းကို မတူညီတဲ့ စကားလုံး အသုံးအနှုန်းများစွာနဲ့ အကြိမ်များစွာ ပြုလုပ်ပြီး ရှာဖွေခြင်း။ +4. **ပြန်လည် အဆင့်သတ်မှတ်ခြင်း (Reranking):** ရှာဖွေတွေ့ရှိတဲ့ Document တွေနဲ့ မေးခွန်းကြားက ဆက်စပ်မှုကို ပိုမိုပြည့်စုံစွာ တိုင်းတာဖို့ Cross-Encoders တွေကို အသုံးပြုပြီး အဆင့်သတ်မှတ်ခြင်း။ +5. **အဆင့်များစွာ ရှာဖွေခြင်း (Multi-Step Retrieval):** Agent က ရှာဖွေမှု အကြိမ်များစွာ လုပ်ဆောင်နိုင်ပြီး၊ ပထမအကြိမ် ရလဒ်တွေကို အသုံးပြုပြီး နောက်ဆက်တွဲ ရှာဖွေမှုတွေကို ပိုမိုတိကျအောင် လုပ်ဆောင်နိုင်ပါတယ်။ +6. **ရင်းမြစ် ပေါင်းစပ်ခြင်း (Source Integration):** ဝက်ဘ်ရှာဖွေမှုနဲ့ Local Document များကဲ့သို့ မတူညီတဲ့ ရင်းမြစ်များမှ အချက်အလက်တွေကို ပေါင်းစပ်နိုင်ခြင်း။ +7. **ရလဒ် စစ်ဆေးအတည်ပြုခြင်း (Result Validation):** ရှာဖွေတွေ့ရှိတဲ့ Content တွေကို အဖြေထဲမှာ မထည့်သွင်းခင် ဆီလျော်မှုနဲ့ တိကျမှု ရှိမရှိ ခွဲခြမ်းစိတ်ဖြာခြင်း။ + +ထိရောက်တဲ့ Agentic RAG စနစ်တွေဟာ အဓိက အချက်အလက်များစွာကို ဂရုတစိုက် ထည့်သွင်းစဉ်းစားဖို့ လိုအပ်ပါတယ်။ Agent က **မေးခွန်းအမျိုးအစားနဲ့ အကြောင်းအရာ (Context) ကို အခြေခံပြီး ရရှိနိုင်တဲ့ Tool တွေထဲကနေ ရွေးချယ်နိုင်ရပါမယ်**။ Memory စနစ်တွေက စကားပြောဆိုမှု မှတ်တမ်းကို ထိန်းသိမ်းထားပြီး ထပ်ခါတလဲလဲ ရှာဖွေမှုတွေကို ရှောင်ရှားဖို့ ကူညီပေးပါတယ်။ အဓိက ရှာဖွေမှု နည်းလမ်းတွေ အလုပ်မလုပ်တဲ့အခါမှာတောင် စနစ်က တန်ဖိုးရှိတဲ့ အဖြေကို ပေးနိုင်ဖို့အတွက် Fallback နည်းဗျူဟာတွေ ရှိထားဖို့ လိုအပ်ပါတယ်။ ဒါ့အပြင်၊ စစ်ဆေးအတည်ပြုခြင်း အဆင့်တွေကို ထည့်သွင်းခြင်းက ရှာဖွေတွေ့ရှိတဲ့ အချက်အလက်တွေရဲ့ တိကျမှုနဲ့ ဆီလျော်မှုကို သေချာစေပါတယ်။ + +## အရင်းအမြစ်များ (Resources) + +- [Agentic RAG: turbocharge your RAG with query reformulation and self-query! 🚀](https://huggingface.co/learn/cookbook/agent_rag) - smolagents ကို အသုံးပြုပြီး Agentic RAG စနစ်တစ်ခု တည်ဆောက်ဖို့အတွက် လမ်းညွှန်ချက်။ \ No newline at end of file diff --git a/units/my/unit2/smolagents/tool_calling_agents.mdx b/units/my/unit2/smolagents/tool_calling_agents.mdx new file mode 100644 index 00000000..46a4fe46 --- /dev/null +++ b/units/my/unit2/smolagents/tool_calling_agents.mdx @@ -0,0 +1,73 @@ + + +# လုပ်ဆောင်ချက်များကို Code Snippets သို့မဟုတ် JSON Blobs များအဖြစ် ရေးသားခြင်း + +> [!TIP] +> ဒီအပိုင်းမှာပါတဲ့ Code တွေကို ဒီ Notebook မှာ လိုက်လံလေ့လာနိုင်ပြီး Google Colab ကို အသုံးပြုပြီး ကိုယ်တိုင် run ကြည့်နိုင်ပါတယ်။ + +**Tool Calling Agents** တွေဟာ `smolagents` မှာ ရရှိနိုင်တဲ့ ဒုတိယမြောက် Agent အမျိုးအစား ဖြစ်ပါတယ်။ Python Code Snippets တွေကို အသုံးပြုတဲ့ **Code Agents** တွေနဲ့ မတူဘဲ၊ ဒီ Agent တွေဟာ **LLM Providers တွေရဲ့ Built-in Tool-calling စွမ်းရည်** ကို အသုံးပြုပြီး Tool Calls တွေကို **JSON ပုံစံ** နဲ့ ထုတ်ပေးပါတယ်။ ဒါဟာ OpenAI, Anthropic နဲ့ အခြားသော Provider များစွာက အသုံးပြုတဲ့ စံနည်းလမ်းပဲ ဖြစ်ပါတယ်။ + +ဥပမာတစ်ခုကို ကြည့်ရအောင်။ Alfred က Catering ဝန်ဆောင်မှုတွေနဲ့ ပါတီ Idea တွေကို ရှာဖွေချင်တယ်ဆိုပါစို့။ **CodeAgent** တစ်ခုဆိုရင် အောက်ပါအတိုင်း Python Code ကို ထုတ်ပေးပြီး run ပါလိမ့်မယ်။ + +```python +for query in [ + "Best catering services in Gotham City", + "Party theme ideas for superheroes" +]: + print(web_search(f"Search for: {query}")) +``` + +ဒါပေမယ့် **ToolCallingAgent** တစ်ခုဆိုရင်တော့ အဲဒီအစား JSON ပုံစံကို ဖန်တီးပေးပါလိမ့်မယ်။ + +```json +[ + {"name": "web_search", "arguments": "Best catering services in Gotham City"}, + {"name": "web_search", "arguments": "Party theme ideas for superheroes"} +] +``` + +ဒီ JSON အစုအဝေး (Blob) ကို အသုံးပြုပြီး Tool Calls တွေကို လုပ်ဆောင်သွားမှာ ဖြစ်ပါတယ်။ + +`smolagents` ဟာ **CodeAgents** တွေကို အဓိကထား အာရုံစိုက်ထားပါတယ် (ဘာကြောင့်လဲဆိုတော့ [သူတို့က စွမ်းဆောင်ရည် ပိုကောင်းလို့ပါ](https://huggingface.co/papers/2402.01030))။ ဒါပေမယ့် **ToolCallingAgents** တွေဟာ Variable တွေကို ကိုင်တွယ်ဖို့ ဒါမှမဟုတ် ရှုပ်ထွေးတဲ့ Tool Calls တွေ မလိုအပ်တဲ့ ရိုးရှင်းတဲ့ စနစ်တွေအတွက်တော့ အလွန်ထိရောက်မှု ရှိပါတယ်။ + +![Code vs JSON Actions](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/code_vs_json_actions.png) + +## Tool Calling Agents တွေ ဘယ်လို အလုပ်လုပ်သလဲ။ + +Tool Calling Agents တွေဟာ Code Agents တွေလိုပဲ အဆင့်များစွာပါဝင်တဲ့ လုပ်ငန်းအဆင့်ဆင့် (Multi-step Workflow) ကို လိုက်နာပါတယ် (အသေးစိတ်ကို [အရင်အပိုင်း](./code_agents) မှာ ကြည့်နိုင်ပါတယ်)။ + +အဓိက ကွာခြားချက်ကတော့ **သူတို့ရဲ့ လုပ်ဆောင်ချက်တွေကို ပုံစံချပုံ** ပဲ ဖြစ်ပါတယ်။ လုပ်ဆောင်နိုင်တဲ့ Code အစား၊ သူတို့ဟာ **Tool နာမည်တွေနဲ့ Arguments တွေကို သတ်မှတ်ပေးတဲ့ JSON Objects တွေကို ထုတ်ပေးပါတယ်**။ ထို့နောက် စနစ်က သင့်လျော်တဲ့ Tool တွေကို လုပ်ဆောင်နိုင်ဖို့အတွက် **ဒီညွှန်ကြားချက်တွေကို စစ်ဆေးအတည်ပြု (Parse) ပါတယ်**။ + +## ဥပမာ: Tool Calling Agent ကို Run ကြည့်ခြင်း + +Alfred ပါတီပြင်ဆင်မှု စတင်ခဲ့တဲ့ အရင်ဥပမာကို ပြန်ကြည့်ရအောင်။ ဒီတစ်ခါတော့ ကွာခြားချက်ကို မီးမောင်းထိုးပြနိုင်ဖို့ **ToolCallingAgent** ကို အသုံးပြုပါမယ်။ ကျွန်တော်တို့ရဲ့ Code Agent ဥပမာအတိုင်း DuckDuckGo ကို အသုံးပြုပြီး ဝက်ဘ်ရှာဖွေနိုင်တဲ့ Agent တစ်ခုကို တည်ဆောက်ပါမယ်။ ကွာခြားချက်က Agent အမျိုးအစားပဲ ဖြစ်ပြီး၊ ကျန်တာအားလုံးကို Framework က ကိုင်တွယ်ပေးပါတယ်။ + +```python +from smolagents import ToolCallingAgent, WebSearchTool, InferenceClientModel + +agent = ToolCallingAgent(tools=[WebSearchTool()], model=InferenceClientModel()) + +agent.run("Search for the best music recommendations for a party at the Wayne's mansion.") +``` + +သင် Agent ရဲ့ Trace (လုပ်ဆောင်မှု မှတ်တမ်း) ကို စစ်ဆေးကြည့်တဲ့အခါ၊ `Executing parsed code:` ကို မြင်ရမယ့်အစား အောက်ပါအတိုင်း မြင်ရပါလိမ့်မယ်။ + +```text +╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ +│ Calling tool: 'web_search' with arguments: {'query': "best music recommendations for a party at Wayne's │ +│ mansion"} │ +╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ +``` + +Agent ဟာ စနစ်ကနေ Output ထုတ်ပေးဖို့ စီမံဆောင်ရွက်တဲ့ စနစ်တကျ Tool Call ကို ထုတ်ပေးတာ ဖြစ်ပြီး၊ **CodeAgent** လိုမျိုး Code ကို တိုက်ရိုက် လုပ်ဆောင်တာ မဟုတ်ပါဘူး။ + +အခုဆိုရင် Agent အမျိုးအစား နှစ်ခုလုံးကို နားလည်သွားပြီဖြစ်လို့၊ ကျွန်တော်တို့ရဲ့ လိုအပ်ချက်အတွက် မှန်ကန်တဲ့ Agent ကို ရွေးချယ်နိုင်ပါပြီ။ Alfred ရဲ့ ပါတီကို အောင်မြင်အောင် လုပ်ဆောင်ဖို့ `smolagents` ကို ဆက်လက်လေ့လာကြပါစို့! 🎉 + +## အရင်းအမြစ်များ (Resources) + +* [ToolCallingAgent documentation](https://huggingface.co/docs/smolagents/v1.8.1/en/reference/agents#smolagents.ToolCallingAgent) - ToolCallingAgent အတွက် တရားဝင် စာရွက်စာတမ်း။ \ No newline at end of file diff --git a/units/my/unit2/smolagents/tools.mdx b/units/my/unit2/smolagents/tools.mdx new file mode 100644 index 00000000..ec61491f --- /dev/null +++ b/units/my/unit2/smolagents/tools.mdx @@ -0,0 +1,318 @@ +## Tools (ကိရိယာများ) + + + +[Unit 1](https://huggingface.co/learn/agents-course/unit1/tools) မှာ ကျွန်တော်တို့ လေ့လာခဲ့ရတဲ့အတိုင်း၊ Agent တွေဟာ လုပ်ဆောင်ချက်အမျိုးမျိုးကို လုပ်ဆောင်ဖို့အတွက် **Tools (ကိရိယာများ)** ကို အသုံးပြုကြပါတယ်။ `smolagents` Framework မှာတော့ Tools တွေကို **LLM (Large Language Model) က Agent စနစ်အတွင်းမှာ ခေါ်ဆိုနိုင်တဲ့ Functions များ** အဖြစ် သတ်မှတ်ထားပါတယ်။ + +Tool တစ်ခုနဲ့ အပြန်အလှန် ဆက်သွယ်ဖို့အတွက် LLM ဟာ အောက်ပါ အဓိက အစိတ်အပိုင်းများ ပါဝင်တဲ့ **Interface ဖော်ပြချက်** ကို လိုအပ်ပါတယ်။ + +* **Name (အမည်):** Tool ကို ဘယ်လို ခေါ်ဆိုသလဲ။ +* **Tool description (Tool ဖော်ပြချက်):** Tool က ဘာတွေ လုပ်ဆောင်ပေးနိုင်သလဲ။ +* **Input types and descriptions (ထည့်သွင်းဒေတာ အမျိုးအစားနှင့် ဖော်ပြချက်):** Tool က ဘယ်လို Arguments တွေကို လက်ခံသလဲ။ +* **Output type (ထွက်ရှိဒေတာ အမျိုးအစား):** Tool က ဘာကို ပြန်ပေးမလဲ။ + +ဥပမာအားဖြင့်၊ Wayne Manor မှာ ပါတီပွဲတစ်ခုအတွက် ပြင်ဆင်နေတဲ့ Alfred ဟာ Catering ဝန်ဆောင်မှုတွေ ရှာဖွေတာကနေ ပါတီ Theme Idea တွေ ရှာဖွေတာအထိ အချက်အလက် စုဆောင်းဖို့အတွက် Tool အမျိုးမျိုး လိုအပ်ပါတယ်။ ရိုးရှင်းတဲ့ Search Tool ရဲ့ Interface ပုံစံက အောက်ပါအတိုင်း ဖြစ်နိုင်ပါတယ်။ + +* **Name:** `web_search` +* **Tool description:** သတ်မှတ်ထားသော မေးမြန်းချက်များအတွက် ဝက်ဘ်ကို ရှာဖွေပေးသည်။ +* **Input:** `query` (string) - ရှာဖွေရမည့် စကားလုံး သို့မဟုတ် ဝါကျ။ +* **Output:** ရှာဖွေမှု ရလဒ်များ ပါဝင်သော String။ + +ဒီ Tool တွေကို အသုံးပြုခြင်းအားဖြင့် Alfred ဟာ အချက်အလက် အားလုံးကို စုဆောင်းပြီး ပြီးပြည့်စုံတဲ့ ပါတီပွဲကို စီစဉ်ဖို့အတွက် အသိဉာဏ်ရှိရှိ ဆုံးဖြတ်ချက်တွေ ချနိုင်မှာ ဖြစ်ပါတယ်။ + +အောက်မှာ Tool ခေါ်ဆိုမှုကို ဘယ်လို စီမံခန့်ခွဲသလဲဆိုတာကို သရုပ်ဖော်ထားတဲ့ Animation ကို ကြည့်ရှုနိုင်ပါတယ်။ + +![Agentic pipeline from https://huggingface.co/docs/smolagents/conceptual_guides/react](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/Agent_ManimCE.gif) + +## Tool ဖန်တီးနည်းများ (Tool Creation Methods) + +`smolagents` မှာ Tools တွေကို နည်းလမ်း (၂) မျိုးနဲ့ သတ်မှတ်နိုင်ပါတယ်။ + +1. ရိုးရှင်းတဲ့ Function-based Tools တွေအတွက် **`@tool` decorator ကို အသုံးပြုခြင်း**။ +2. ပိုမိုရှုပ်ထွေးတဲ့ လုပ်ဆောင်ချက်တွေအတွက် **`Tool` ရဲ့ Subclass တစ်ခုကို ဖန်တီးခြင်း**။ + +### `@tool` Decorator ကို အသုံးပြုခြင်း + +`@tool` decorator ဟာ **ရိုးရှင်းတဲ့ Tools တွေကို သတ်မှတ်ဖို့အတွက် အကြံပြုထားတဲ့ နည်းလမ်း** ဖြစ်ပါတယ်။ အတွင်းပိုင်းမှာ `smolagents` က Python Function ထဲက အခြေခံ အချက်အလက်တွေကို စစ်ဆေးအတည်ပြု (Parse) ယူပါတယ်။ ဒါကြောင့် သင်ဟာ Function ကို ရှင်းလင်းတဲ့ နာမည်ပေးပြီး ကောင်းမွန်တဲ့ Docstring (ရှင်းလင်းချက်) ရေးသားထားမယ်ဆိုရင် LLM အတွက် အသုံးပြုရ ပိုမိုလွယ်ကူစေမှာပါ။ + +ဒီနည်းလမ်းကို အသုံးပြုတဲ့အခါ၊ ကျွန်တော်တို့ဟာ Function တစ်ခုကို အောက်ပါအတိုင်း သတ်မှတ်ပါတယ်။ + +* **ရှင်းလင်းပြီး ဖော်ပြချက်ပါတဲ့ Function Name** (LLM က ရည်ရွယ်ချက်ကို နားလည်စေဖို့ ကူညီပေးပါတယ်)။ +* **Inputs နဲ့ Outputs နှစ်ခုလုံးအတွက် Type Hints များ** (မှန်ကန်စွာ အသုံးပြုနိုင်ဖို့ သေချာစေပါတယ်)။ +* **အသေးစိတ် ဖော်ပြချက်**၊ အထူးသဖြင့် `Args:` ကဏ္ဍမှာ Argument တစ်ခုချင်းစီကို ရှင်းရှင်းလင်းလင်း ဖော်ပြထားရပါမယ်။ ဒီဖော်ပြချက်တွေဟာ LLM အတွက် အဖိုးတန်တဲ့ Context တွေကို ပေးစွမ်းတာကြောင့် သေသေချာချာ ရေးသားဖို့ အရေးကြီးပါတယ်။ + +#### အမြင့်ဆုံး Rating ရရှိထားသော Catering ကို ရှာဖွေပေးမည့် Tool ကို ဖန်တီးခြင်း + +Alfred Catering + +> [!TIP] +> သင်ဟာ Google Colab ကို အသုံးပြုပြီး [ဒီ Notebook](https://huggingface.co/agents-course/notebooks/blob/main/unit2/smolagents/tools.ipynb) ထဲက Code တွေကို လိုက်လံလုပ်ဆောင်နိုင်ပါတယ်။ + +Alfred ဟာ ပါတီပွဲအတွက် Menu ကို ဆုံးဖြတ်ပြီးပြီလို့ စိတ်ကူးကြည့်ရအောင်။ ဒါပေမယ့် ဧည့်သည် အများအပြားအတွက် အစားအသောက် ပြင်ဆင်ဖို့ အကူအညီ လိုအပ်ပါတယ်။ ဒါကြောင့် သူဟာ Catering ဝန်ဆောင်မှုကို ငှားရမ်းချင်ပြီး အမြင့်ဆုံး Rating ရရှိထားတဲ့ ရွေးချယ်စရာတွေကို ရှာဖွေဖို့ လိုအပ်ပါတယ်။ Alfred ဟာ သူ့ပတ်ဝန်းကျင်မှာ အကောင်းဆုံး Catering ဝန်ဆောင်မှုတွေကို ရှာဖွေဖို့ Tool တစ်ခုကို အသုံးပြုနိုင်ပါတယ်။ + +အောက်ပါ ဥပမာက Alfred ဟာ `@tool` decorator ကို အသုံးပြုပြီး ဒီလိုလုပ်ဆောင်ချက်ကို ဘယ်လို ဖန်တီးနိုင်သလဲဆိုတာကို ပြသထားပါတယ်။ + +```python +from smolagents import CodeAgent, InferenceClientModel, tool + +# အမြင့်ဆုံး Rating ရရှိထားသော Catering ဝန်ဆောင်မှုများကို ရှာဖွေပေးသည့် Function တစ်ခုရှိသည်ဟု ယူဆပါစို့။ +@tool +def catering_service_tool(query: str) -> str: + """ + ဒီ Tool က Gotham City မှာ အမြင့်ဆုံး Rating ရရှိထားတဲ့ Catering ဝန်ဆောင်မှုကို ပြန်ပေးပါတယ်။ + + Args: + query: Catering ဝန်ဆောင်မှုများ ရှာဖွေရန်အတွက် ရှာဖွေမှု စကားလုံး။ + """ + # Catering ဝန်ဆောင်မှုများနှင့် ၎င်းတို့၏ Rating များ၏ ဥပမာ စာရင်း + services = { + "Gotham Catering Co.": 4.9, + "Wayne Manor Catering": 4.8, + "Gotham City Events": 4.7, + } + + # အမြင့်ဆုံး Rating ရရှိထားသော Catering ဝန်ဆောင်မှုကို ရှာဖွေခြင်း (Search Query Filtering ကို အတုယူခြင်း) + best_service = max(services, key=services.get) + + return best_service + + +agent = CodeAgent(tools=[catering_service_tool], model=InferenceClientModel()) + +# အကောင်းဆုံး Catering ဝန်ဆောင်မှုကို ရှာဖွေရန် Agent ကို Run ခြင်း +result = agent.run( + "Can you give me the name of the highest-rated catering service in Gotham City?" +) + +print(result) # Output: Gotham Catering Co. +``` + +### Python Class အဖြစ် Tool တစ်ခုကို သတ်မှတ်ခြင်း + +ဒီနည်းလမ်းကတော့ [`Tool`](https://huggingface.co/docs/smolagents/v1.8.1/en/reference/tools#smolagents.Tool) ရဲ့ Subclass တစ်ခုကို ဖန်တီးခြင်း ပါဝင်ပါတယ်။ ပိုမိုရှုပ်ထွေးတဲ့ Tools တွေအတွက်၊ ကျွန်တော်တို့ဟာ Python Function အစား Class တစ်ခုကို အကောင်အထည်ဖော်နိုင်ပါတယ်။ ဒီ Class က Function ကို Metadata များဖြင့် ထုပ်ပိုးပေးပြီး LLM က ထိရောက်စွာ အသုံးပြုနိုင်ဖို့ ကူညီပေးပါတယ်။ ဒီ Class မှာ ကျွန်တော်တို့ အောက်ပါတို့ကို သတ်မှတ်ပါတယ်။ + +* `name`: Tool ရဲ့ အမည်။ +* `description`: Agent ရဲ့ System Prompt ကို ဖြည့်စွက်ဖို့ အသုံးပြုတဲ့ ဖော်ပြချက်။ +* `inputs`: `type` နဲ့ `description` Key များပါဝင်တဲ့ Dictionary တစ်ခု (Python Interpreter က Input တွေကို စီမံဆောင်ရွက်ဖို့ ကူညီပေးတဲ့ အချက်အလက်များ)။ +* `output_type`: မျှော်မှန်းထားတဲ့ Output အမျိုးအစားကို သတ်မှတ်ခြင်း။ +* `forward`: လုပ်ဆောင်ရမည့် Inference Logic ပါဝင်တဲ့ Method။ + +အောက်မှာ `Tool` ကို အသုံးပြုပြီး တည်ဆောက်ထားတဲ့ Tool ဥပမာတစ်ခုနဲ့ ၎င်းကို `CodeAgent` ထဲမှာ ဘယ်လို ပေါင်းစပ်ထားသလဲဆိုတာကို ကြည့်ရှုနိုင်ပါတယ်။ + +#### Superhero-themed Party Idea များ ဖန်တီးပေးမည့် Tool ကို ဖန်တီးခြင်း + +Alfred ရဲ့ Mansion မှာလုပ်မယ့် ပါတီပွဲက **Superhero-themed Event** ဖြစ်ပေမယ့်၊ တကယ်ကို ထူးခြားတဲ့ Idea တွေ လိုအပ်နေပါတယ်။ အကောင်းဆုံး Host တစ်ဦးအနေနဲ့ သူဟာ ဧည့်သည်တွေကို ထူးခြားတဲ့ Theme တစ်ခုနဲ့ အံ့အားသင့်စေချင်ပါတယ်။ + +ဒီလိုလုပ်ဖို့အတွက်၊ သူဟာ ပေးထားတဲ့ Category ကို အခြေခံပြီး Superhero-themed Party Idea တွေကို ဖန်တီးပေးမယ့် Agent တစ်ခုကို အသုံးပြုနိုင်ပါတယ်။ ဒီနည်းနဲ့ Alfred ဟာ ဧည့်သည်တွေကို အံ့အားသင့်စေမယ့် ပြီးပြည့်စုံတဲ့ Party Theme ကို ရှာတွေ့နိုင်မှာပါ။ + +```python +from smolagents import Tool, CodeAgent, InferenceClientModel + +class SuperheroPartyThemeTool(Tool): + name = "superhero_party_theme_generator" + description = """ + ဒီ Tool က Category ကို အခြေခံပြီး စိတ်ကူးကောင်းတဲ့ Superhero-themed Party Idea တွေကို အကြံပြုပေးပါတယ်။ + ထူးခြားတဲ့ Party Theme Idea တစ်ခုကို ပြန်ပေးပါတယ်။""" + + inputs = { + "category": { + "type": "string", + "description": "Superhero Party အမျိုးအစား (ဥပမာ - 'classic heroes', 'villain masquerade', 'futuristic Gotham')။", + } + } + + output_type = "string" + + def forward(self, category: str): + themes = { + "classic heroes": "Justice League Gala: ဧည့်သည်များက ၎င်းတို့ အကြိုက်ဆုံး DC Heroes များအဖြစ် ဝတ်ဆင်လာပြီး 'The Kryptonite Punch' ကဲ့သို့သော Theme ပါသော Cocktails များဖြင့် ဧည့်ခံခြင်း။", + "villain masquerade": "Gotham Rogues' Ball: ဧည့်သည်များက Classic Batman Villains များအဖြစ် ဝတ်ဆင်လာသော လျှို့ဝှက်ဆန်းကြယ်သော မျက်နှာဖုံးစွပ် ပါတီ။", + "futuristic gotham": "Neo-Gotham Night: Neon မီးအလှဆင်မှုများနှင့် Futuristic Gadgets များဖြင့် Batman Beyond ကို အတုယူထားသော Cyberpunk ပုံစံ ပါတီ။" + } + + return themes.get(category.lower(), "Theme ပါတီ Idea ကို ရှာမတွေ့ပါ။ 'classic heroes', 'villain masquerade', သို့မဟုတ် 'futuristic Gotham' ကို စမ်းကြည့်ပါ။") + +# Tool ကို စတင်အသုံးပြုခြင်း +party_theme_tool = SuperheroPartyThemeTool() +agent = CodeAgent(tools=[party_theme_tool], model=InferenceClientModel()) + +# Party Theme Idea ကို ဖန်တီးရန် Agent ကို Run ခြင်း +result = agent.run( + "What would be a good superhero party idea for a 'villain masquerade' theme?" +) + +print(result) # Output: "Gotham Rogues' Ball: ဧည့်သည်များက Classic Batman Villains များအဖြစ် ဝတ်ဆင်လာသော လျှို့ဝှက်ဆန်းကြယ်သော မျက်နှာဖုံးစွပ် ပါတီ။" +``` + +ဒီ Tool ကြောင့် Alfred ဟာ ဧည့်သည်တွေကို မမေ့နိုင်စရာ Superhero-themed Party နဲ့ အထင်ကြီးစေမယ့် အကောင်းဆုံး Super Host ဖြစ်လာမှာပါ။ 🦸‍♂️🦸‍♀️ + +## မူရင်း Toolbox (Default Toolbox) + +`smolagents` မှာ သင့် Agent ထဲကို တိုက်ရိုက် ထည့်သွင်းနိုင်တဲ့ ကြိုတင်တည်ဆောက်ထားသော Tools အစုအဝေး ပါဝင်ပါတယ်။ [Default Toolbox](https://huggingface.co/docs/smolagents/guided_tour?build-a-tool=Decorate+a+function+with+%40tool#default-toolbox) မှာ အောက်ပါတို့ ပါဝင်ပါတယ်။ + +* **PythonInterpreterTool** (Python Code များကို လုပ်ဆောင်ရန်) +* **FinalAnswerTool** (နောက်ဆုံးအဖြေကို ထုတ်ပေးရန်) +* **UserInputTool** (အသုံးပြုသူထံမှ Input ရယူရန်) +* **DuckDuckGoSearchTool** (ဝက်ဘ်ရှာဖွေရန်) +* **GoogleSearchTool** (Google ဖြင့် ရှာဖွေရန်) +* **VisitWebpageTool** (ဝက်ဘ်စာမျက်နှာတစ်ခုကို ဝင်ရောက်ကြည့်ရှုရန်) + +Alfred ဟာ Wayne Manor မှာ အပြစ်အနာအဆာကင်းတဲ့ ပါတီပွဲတစ်ခု ဖြစ်စေဖို့အတွက် Tool အမျိုးမျိုးကို အသုံးပြုနိုင်ပါတယ်။ + +* ပထမဆုံး၊ သူဟာ စိတ်ကူးကောင်းတဲ့ Superhero-themed Party Idea တွေကို ရှာဖွေဖို့ **`DuckDuckGoSearchTool`** ကို အသုံးပြုနိုင်ပါတယ်။ +* Catering အတွက်၊ Gotham မှာ အမြင့်ဆုံး Rating ရရှိထားတဲ့ ဝန်ဆောင်မှုတွေကို ရှာဖွေဖို့ **`GoogleSearchTool`** ကို အားကိုးပါလိမ့်မယ်။ +* ထိုင်ခုံစီစဉ်မှုတွေကို စီမံခန့်ခွဲဖို့အတွက် **`PythonInterpreterTool`** နဲ့ တွက်ချက်မှုတွေ လုပ်ဆောင်နိုင်ပါတယ်။ +* အရာအားလုံး စုဆောင်းပြီးတာနဲ့၊ သူဟာ **`FinalAnswerTool`** ကို အသုံးပြုပြီး စီမံကိန်းကို စုစည်းပါလိမ့်မယ်။ + +ဒီ Tool တွေကြောင့် Alfred ဟာ ပါတီပွဲကို ထူးခြားပြီး ချောမွေ့စွာ ကျင်းပနိုင်ဖို့ အာမခံနိုင်ပါတယ်။ 🦇💡 + +## Tools များကို မျှဝေခြင်းနှင့် ထည့်သွင်းခြင်း (Sharing and Importing Tools) + +**smolagents** ရဲ့ အစွမ်းထက်ဆုံး လုပ်ဆောင်ချက်တွေထဲက တစ်ခုကတော့ Custom Tools တွေကို Hub မှာ မျှဝေနိုင်ခြင်းနဲ့ Community မှ ဖန်တီးထားတဲ့ Tools တွေကို ချောမွေ့စွာ ပေါင်းစပ်နိုင်ခြင်းပဲ ဖြစ်ပါတယ်။ ဒါဟာ **HF Spaces** နဲ့ **LangChain Tools** တွေနဲ့ ချိတ်ဆက်ခြင်းကိုပါ ဆိုလိုပြီး၊ Alfred ဟာ Wayne Manor မှာ မမေ့နိုင်စရာ ပါတီပွဲတစ်ခုကို စီစဉ်ဖို့အတွက် သိသိသာသာ အထောက်အကူ ဖြစ်စေပါတယ်။ 🎭 + +ဒီပေါင်းစပ်မှုတွေကြောင့် Alfred ဟာ အဆင့်မြင့် Event-planning Tools တွေကို အသုံးပြုနိုင်ပါတယ်။ ဥပမာ - ပြီးပြည့်စုံတဲ့ အငွေ့အသက်အတွက် မီးရောင်ကို ချိန်ညှိတာ၊ ပါတီအတွက် အကောင်းဆုံး Playlist ကို စီစဉ်တာ၊ ဒါမှမဟုတ် Gotham ရဲ့ အကောင်းဆုံး Caterers တွေနဲ့ ပူးပေါင်းဆောင်ရွက်တာမျိုးတွေ လုပ်ဆောင်နိုင်ပါတယ်။ + +ဒီလုပ်ဆောင်ချက်တွေက ပါတီပွဲ အတွေ့အကြုံကို ဘယ်လို မြှင့်တင်ပေးနိုင်သလဲဆိုတဲ့ ဥပမာတွေကို အောက်မှာ ဖော်ပြထားပါတယ်။ + +### Tool တစ်ခုကို Hub သို့ မျှဝေခြင်း + +သင်၏ Custom Tool ကို Community နဲ့ မျှဝေဖို့က လွယ်ကူပါတယ်။ `push_to_hub()` Method ကို အသုံးပြုပြီး Hugging Face Account သို့ Upload လုပ်ရုံပါပဲ။ + +ဥပမာအားဖြင့်၊ Alfred ဟာ Gotham မှာ အကောင်းဆုံး Catering ဝန်ဆောင်မှုတွေကို ရှာဖွေဖို့အတွက် သူ့ရဲ့ `party_theme_tool` ကို အခြားသူတွေကို ကူညီဖို့ မျှဝေနိုင်ပါတယ်။ ဒီလိုလုပ်ဆောင်ပုံက အောက်ပါအတိုင်း ဖြစ်ပါတယ်။ + +```python +party_theme_tool.push_to_hub("{your_username}/party_theme_tool", token="") +``` + +### Hub မှ Tool တစ်ခုကို ထည့်သွင်းခြင်း (Importing) + +အခြားအသုံးပြုသူများ ဖန်တီးထားသော Tools များကို `load_tool()` Function ကို အသုံးပြုပြီး အလွယ်တကူ ထည့်သွင်းနိုင်ပါတယ်။ ဥပမာ - Alfred ဟာ ပါတီပွဲအတွက် ကြော်ငြာပုံရိပ်တစ်ခုကို AI အသုံးပြုပြီး ဖန်တီးချင်တယ်ဆိုပါစို့။ Tool ကို အစကနေ တည်ဆောက်မယ့်အစား၊ Community မှ ကြိုတင်သတ်မှတ်ထားသော Tool တစ်ခုကို အသုံးပြုနိုင်ပါတယ်။ + +```python +from smolagents import load_tool, CodeAgent, InferenceClientModel + +image_generation_tool = load_tool( + "m-ric/text-to-image", + trust_remote_code=True +) + +agent = CodeAgent( + tools=[image_generation_tool], + model=InferenceClientModel() +) + +agent.run("Generate an image of a luxurious superhero-themed party at Wayne Manor with made-up superheros.") +``` + +### Hugging Face Space တစ်ခုကို Tool အဖြစ် ထည့်သွင်းခြင်း + +သင်ဟာ `Tool.from_space()` ကို အသုံးပြုပြီး HF Space တစ်ခုကို Tool အဖြစ် ထည့်သွင်းနိုင်ပါတယ်။ ဒါက Image Generation ကနေ Data Analysis အထိ Tasks များအတွက် Community မှ ထောင်ပေါင်းများစွာသော Spaces များနှင့် ပေါင်းစပ်နိုင်မယ့် အခွင့်အလမ်းတွေကို ဖွင့်ပေးပါတယ်။ + +ဒီ Tool ဟာ `gradio_client` ကို အသုံးပြုပြီး Space ရဲ့ Gradio Backend နဲ့ ချိတ်ဆက်မှာ ဖြစ်တဲ့အတွက်၊ သင့်မှာ မရှိသေးရင် `pip` ကနေတစ်ဆင့် Install လုပ်ဖို့ သေချာပါစေ။ + +ပါတီပွဲအတွက်၊ Alfred ဟာ ကြိုတင်တည်ဆောက်ထားတဲ့ Tool အစား ကြေညာချက်မှာ အသုံးပြုမယ့် AI-generated Image ကို ဖန်တီးဖို့အတွက် ရှိပြီးသား HF Space တစ်ခုကို အသုံးပြုနိုင်ပါတယ်။ ဒါကို တည်ဆောက်ကြည့်ရအောင်! + +```python +from smolagents import CodeAgent, InferenceClientModel, Tool + +image_generation_tool = Tool.from_space( + "black-forest-labs/FLUX.1-schnell", + name="image_generator", + description="Generate an image from a prompt" +) + +model = InferenceClientModel("Qwen/Qwen2.5-Coder-32B-Instruct") + +agent = CodeAgent(tools=[image_generation_tool], model=model) + +agent.run( + "Improve this prompt, then generate an image of it.", + additional_args={'user_prompt': 'A grand superhero-themed party at Wayne Manor, with Alfred overseeing a luxurious gala'} +) +``` + +### LangChain Tool တစ်ခုကို ထည့်သွင်းခြင်း + +လာမယ့် အခန်းတွေမှာ `LangChain` Framework အကြောင်း ဆွေးနွေးပါမယ်။ အခုတော့ LangChain Tools တွေကို သင့်ရဲ့ `smolagents` Workflow မှာ ပြန်လည်အသုံးပြုနိုင်တယ်ဆိုတာကို မှတ်သားထားပါ။ + +`Tool.from_langchain()` Method ကို အသုံးပြုပြီး LangChain Tools တွေကို အလွယ်တကူ Load လုပ်နိုင်ပါတယ်။ Alfred ဟာ Waynes တွေ မရှိတဲ့အချိန်မှာ Wayne Manor မှာ ခမ်းနားတဲ့ Superhero Night အတွက် ပြင်ဆင်နေတဲ့ စုံလင်သူတစ်ဦးပါ။ အသေးစိတ်တိုင်း မျှော်မှန်းထားတာထက် ပိုကောင်းစေဖို့အတွက်၊ သူဟာ ထိပ်တန်း ဖျော်ဖြေရေး Idea တွေကို ရှာဖွေဖို့ LangChain Tools တွေကို အသုံးပြုပါတယ်။ + +`Tool.from_langchain()` ကို အသုံးပြုခြင်းအားဖြင့် Alfred ဟာ သူ့ရဲ့ `smolagent` ထဲကို အဆင့်မြင့် Search လုပ်ဆောင်ချက်တွေကို အလွယ်တကူ ထည့်သွင်းနိုင်ပြီး၊ Command အနည်းငယ်နဲ့သာ သီးသန့် ပါတီ Idea တွေနဲ့ ဝန်ဆောင်မှုတွေကို ရှာဖွေနိုင်ပါတယ်။ + +သူဘယ်လိုလုပ်သလဲဆိုတာ အောက်မှာ ဖော်ပြထားပါတယ်။ + +ပထမဆုံး၊ `smolagents` အတွက် `langchain` Integration ကို Install လုပ်ဖို့ လိုပါတယ်။ + +```bash +pip install -U langchain-community +``` + +LangChain Integration ကို Install လုပ်ပြီးနောက်၊ သင်၏ SerpAPI Key ကို သတ်မှတ်ဖို့ သေချာပါစေ။ Search-based Tools များ (ဥပမာ - `SerpAPITool`) အတွက် ဒါက လိုအပ်ပါတယ်။ + +```python +os.environ['SERPAPI_API_KEY'] = '...' +``` + +SerpAPI Key ကို [ဒီနေရာမှာ](https://serpapi.com/) ဖန်တီးနိုင်ပါတယ်။ + +```python +from langchain.agents import load_tools +from smolagents import CodeAgent, InferenceClientModel, Tool + +search_tool = Tool.from_langchain(load_tools(["serpapi"])[0]) + +agent = CodeAgent(tools=[search_tool], model=model) + +agent.run("Search for luxury entertainment ideas for a superhero-themed event, such as live performances and interactive experiences.") +``` + +### မည်သည့် MCP Server မှမဆို Tool Collection တစ်ခုကို ထည့်သွင်းခြင်း + +`smolagents` သည် [glama.ai](https://glama.ai/mcp/servers) သို့မဟုတ် [smithery.ai](https://smithery.ai) တွင် ရရှိနိုင်သော ရာနှင့်ချီသော MCP Servers များမှ Tools များကို ထည့်သွင်းနိုင်ပါတယ်။ MCP အကြောင်း ပိုမိုနက်ရှိုင်းစွာ သိရှိလိုပါက၊ ကျွန်တော်တို့ရဲ့ [အခမဲ့ MCP Course](https://huggingface.co/learn/mcp-course/) ကို စစ်ဆေးကြည့်ရှုနိုင်ပါတယ်။ + +
+mcp client ကို Install လုပ်ခြင်း + +ပထမဆုံး၊ `smolagents` အတွက် `mcp` Integration ကို Install လုပ်ဖို့ လိုပါတယ်။ + +```bash +pip install "smolagents[mcp]" +``` +
+ +MCP Servers Tools များကို အောက်ပါအတိုင်း ToolCollection Object ထဲသို့ Load လုပ်နိုင်ပါတယ်။ + +```python +import os +from smolagents import ToolCollection, CodeAgent +from mcp import StdioServerParameters +from smolagents import InferenceClientModel + + +model = InferenceClientModel("Qwen/Qwen2.5-Coder-32B-Instruct") + + +server_parameters = StdioServerParameters( + command="uvx", + args=["--quiet", "pubmedmcp@0.1.3"], + env={"UV_PYTHON": "3.12", **os.environ}, +) + +with ToolCollection.from_mcp(server_parameters, trust_remote_code=True) as tool_collection: + agent = CodeAgent(tools=[*tool_collection.tools], model=model, add_base_tools=True) + agent.run("Please find a remedy for hangover.") +``` + +ဒီ Setup ကြောင့် Alfred ဟာ ဇိမ်ခံ ဖျော်ဖြေရေး ရွေးချယ်စရာတွေကို လျင်မြန်စွာ ရှာဖွေနိုင်ပြီး၊ Gotham ရဲ့ ထိပ်တန်း ဧည့်သည်တွေအတွက် မမေ့နိုင်စရာ အတွေ့အကြုံကို သေချာစေပါတယ်။ ဒီ Tool က Wayne Manor အတွက် ပြီးပြည့်စုံတဲ့ Superhero-themed Event ကို စီစဉ်ရာမှာ ကူညီပေးပါတယ်။ 🎉 + +## အရင်းအမြစ်များ (Resources) + +* [Tools Tutorial](https://huggingface.co/docs/smolagents/tutorials/tools) - Tools များကို ထိရောက်စွာ အသုံးပြုနည်းကို လေ့လာရန် ဤ Tutorial ကို ကြည့်ရှုပါ။ +* [Tools Documentation](https://huggingface.co/docs/smolagents/v1.8.1/en/reference/tools) - Tools များဆိုင်ရာ ပြည့်စုံသော Reference Documentation။ +* [Tools Guided Tour](https://huggingface.co/docs/smolagents/v1.8.1/en/guided_tour#tools) - Tools များကို ထိရောက်စွာ တည်ဆောက်ပြီး အသုံးပြုနိုင်ရန် အဆင့်ဆင့် လမ်းညွှန်ထားသော Tour။ +* [Building Effective Agents](https://huggingface.co/docs/smolagents/tutorials/building_good_agents) - ယုံကြည်စိတ်ချရပြီး စွမ်းဆောင်ရည်မြင့် Custom Function Agent များ တည်ဆောက်ရန်အတွက် အကောင်းဆုံး အလေ့အကျင့်များဆိုင်ရာ အသေးစိတ် လမ်းညွှန်။ \ No newline at end of file diff --git a/units/my/unit2/smolagents/vision_agents.mdx b/units/my/unit2/smolagents/vision_agents.mdx new file mode 100644 index 00000000..fa399ec1 --- /dev/null +++ b/units/my/unit2/smolagents/vision_agents.mdx @@ -0,0 +1,224 @@ +# Vision Agents များကို smolagents ဖြင့် အသုံးပြုခြင်း + +> [!TIP] +> သင်ဟာ ဒီသင်ခန်းစာကို လေ့လာနေတဲ့သူတစ်ယောက်ဆိုရင်၊ ကျွန်တော်တို့ရဲ့ Organization ရဲ့ Style Guide ကို အသုံးပြုပြီး ဘာသာပြန်ထားတာဖြစ်တဲ့အတွက် ဝေါဟာရတွေကို တစ်သမတ်တည်း တွေ့ရပါလိမ့်မယ်။ + + + +# Vision Agents များကို smolagents ဖြင့် အသုံးပြုခြင်း + +> [!WARNING] +> ဒီအပိုင်းက ဥပမာတွေကို လုပ်ဆောင်ဖို့အတွက် စွမ်းဆောင်ရည်မြင့် VLM (Vision-Language Model) ကို အသုံးပြုဖို့ လိုအပ်ပါတယ်။ ကျွန်တော်တို့ကတော့ GPT-4o API ကို အသုံးပြုပြီး စမ်းသပ်ထားပါတယ်။ +> သို့သော်လည်း၊ `smolagents` နဲ့ Hugging Face က ပံ့ပိုးပေးထားတဲ့ အခြားရွေးချယ်စရာ နည်းလမ်းတွေကို [Why use smolagents](./why_use_smolagents) အခန်းမှာ ဆွေးနွေးထားပါတယ်။ တခြားနည်းလမ်းတွေကို လေ့လာချင်တယ်ဆိုရင် အဲဒီအပိုင်းကို ကြည့်ရှုဖို့ မမေ့ပါနဲ့။ + +Agent တွေကို မြင်နိုင်စွမ်း (Visual Capabilities) တွေ ပေးအပ်ခြင်းဟာ စာသားစီမံဆောင်ရွက်ခြင်းထက် ကျော်လွန်တဲ့ လုပ်ငန်းတွေကို ဖြေရှင်းဖို့အတွက် အရေးကြီးပါတယ်။ ဝက်ဘ်ဘရောက်ဆာ အသုံးပြုခြင်း (Web Browsing) သို့မဟုတ် Document များကို နားလည်ခြင်းကဲ့သို့သော လက်တွေ့ကမ္ဘာ ပြဿနာများစွာဟာ မြင်ကွင်းဆိုင်ရာ ကြွယ်ဝတဲ့ Content တွေကို ခွဲခြမ်းစိတ်ဖြာဖို့ လိုအပ်ပါတယ်။ ကံကောင်းစွာနဲ့ပဲ၊ `smolagents` ဟာ VLM (Vision-Language Models) တွေအတွက် Built-in Support ကို ပံ့ပိုးပေးထားပါတယ်။ ဒါကြောင့် Agent တွေဟာ ပုံရိပ်တွေကို ထိရောက်စွာ စီမံဆောင်ရွက်ပြီး အဓိပ္ပာယ်ပြန်ဆိုနိုင်ပါတယ်။ + +ဒီဥပမာမှာ၊ Wayne Manor က အိမ်တော်ထိန်း Alfred ကို စိတ်ကူးကြည့်ရအောင်။ သူဟာ ပါတီပွဲကို လာရောက်တဲ့ ဧည့်သည်တွေရဲ့ ကိုယ်ရေးအချက်အလက်တွေကို စစ်ဆေးအတည်ပြုဖို့ တာဝန်ပေးခံထားရပါတယ်။ Alfred ဟာ ရောက်လာတဲ့ လူတိုင်းကို ရင်းနှီးချင်မှ ရင်းနှီးပါလိမ့်မယ်။ သူ့ကို ကူညီဖို့အတွက်၊ ကျွန်တော်တို့ဟာ VLM ကို အသုံးပြုပြီး ဧည့်သည်တွေရဲ့ ပုံပန်းသဏ္ဌာန်ဆိုင်ရာ မြင်ကွင်းအချက်အလက်တွေကို ရှာဖွေခြင်းဖြင့် သူတို့ရဲ့ ကိုယ်ရေးအချက်အလက်ကို စစ်ဆေးအတည်ပြုပေးမယ့် Agent တစ်ခုကို အသုံးပြုနိုင်ပါတယ်။ ဒါက Alfred ကို ဘယ်သူဝင်ခွင့်ပြုရမယ်ဆိုတဲ့ ဆုံးဖြတ်ချက်တွေကို ပိုမိုတိကျစွာ ချမှတ်နိုင်စေပါလိမ့်မယ်။ ဒီဥပမာကို စတင်တည်ဆောက်ကြည့်ရအောင်! + +## Agent စတင် လုပ်ဆောင်ချိန်တွင် ပုံရိပ်များ ထည့်သွင်းပေးခြင်း + +> [!TIP] +> သင်ဟာ Google Colab ကို အသုံးပြုပြီး [ဒီ Notebook](https://huggingface.co/agents-course/notebooks/blob/main/unit2/smolagents/vision_agents.ipynb) ထဲက Code တွေကို လိုက်လံလုပ်ဆောင်နိုင်ပါတယ်။ + +ဒီနည်းလမ်းမှာတော့ ပုံရိပ်တွေကို Agent စတင်လုပ်ဆောင်တဲ့ အချိန်မှာပဲ **`task_images`** အဖြစ် Task Prompt နဲ့အတူ ပေးပို့ပြီး သိမ်းဆည်းထားပါတယ်။ ထို့နောက် Agent ဟာ သူ့ရဲ့ လုပ်ဆောင်မှုတစ်လျှောက်လုံးမှာ ဒီပုံရိပ်တွေကို စီမံဆောင်ရွက်သွားပါမယ်။ + +Alfred က ပါတီပွဲကို လာရောက်တဲ့ Superheroes တွေရဲ့ ကိုယ်ရေးအချက်အလက်တွေကို စစ်ဆေးအတည်ပြုချင်တဲ့ ကိစ္စကို စဉ်းစားကြည့်ပါ။ သူ့မှာ အရင်ပါတီပွဲတွေက ဧည့်သည်တွေရဲ့ နာမည်တွေနဲ့ ပုံရိပ်တွေပါတဲ့ ဒေတာအစုအဝေး (Dataset) ရှိပြီးသားပါ။ ဧည့်သည်အသစ်တစ်ဦးရဲ့ ပုံရိပ်ကို ပေးလိုက်တဲ့အခါ၊ Agent ဟာ ရှိပြီးသား ဒေတာအစုအဝေးနဲ့ နှိုင်းယှဉ်ပြီး ဝင်ခွင့်ပြုသင့်၊ မပြုသင့် ဆုံးဖြတ်ချက်ချနိုင်ပါတယ်။ + +ဒီကိစ္စမှာ၊ ဧည့်သည်တစ်ဦးက ဝင်ဖို့ ကြိုးစားနေပြီး Alfred က ဒီဧည့်သည်ဟာ Wonder Woman အယောင်ဆောင်ထားတဲ့ The Joker ဖြစ်နိုင်တယ်လို့ သံသယရှိနေပါတယ်။ မလိုလားအပ်တဲ့သူတွေ ဝင်ရောက်လာခြင်းကို တားဆီးဖို့အတွက် Alfred ဟာ သူတို့ရဲ့ ကိုယ်ရေးအချက်အလက်ကို စစ်ဆေးအတည်ပြုဖို့ လိုအပ်ပါတယ်။ + +ဒီဥပမာကို စတင်တည်ဆောက်ကြည့်ရအောင်။ ပထမဆုံးအနေနဲ့ ပုံရိပ်တွေကို Load လုပ်ရပါမယ်။ ဒီဥပမာကို ရိုးရှင်းစေဖို့အတွက် Wikipedia က ပုံရိပ်တွေကို အသုံးပြုထားပေမယ့်၊ လက်တွေ့အသုံးချ ကိစ္စရပ် (Use-case) တွေကို စဉ်းစားကြည့်နိုင်ပါတယ်။ + +```python +from PIL import Image +import requests +from io import BytesIO + +image_urls = [ + "https://upload.wikimedia.org/wikipedia/commons/e/e8/The_Joker_at_Wax_Museum_Plus.jpg", # Joker image + "https://upload.wikimedia.org/wikipedia/en/9/98/Joker_%28DC_Comics_character%29.jpg" # Joker image +] + +images = [] +for url in image_urls: + headers = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" + } + response = requests.get(url,headers=headers) + image = Image.open(BytesIO(response.content)).convert("RGB") + images.append(image) +``` + +ပုံရိပ်တွေ ရရှိပြီးတဲ့နောက်၊ Agent ဟာ ဒီဧည့်သည်ဟာ တကယ်ပဲ Superhero (Wonder Woman) လား၊ ဒါမှမဟုတ် ဗီလိန် (The Joker) လားဆိုတာကို ပြောပြပါလိမ့်မယ်။ + +```python +from smolagents import CodeAgent, OpenAIServerModel + +model = OpenAIServerModel(model_id="gpt-4o") + +# Agent ကို စတင်တည်ဆောက်ခြင်း (Instantiate the agent) +agent = CodeAgent( + tools=[], + model=model, + max_steps=20, + verbosity_level=2 +) + +response = agent.run( + """ + Describe the costume and makeup that the comic character in these photos is wearing and return the description. + Tell me if the guest is The Joker or Wonder Woman. + """, + images=images +) +``` + +ကျွန်တော် စမ်းသပ်လုပ်ဆောင်ခဲ့တဲ့ ရလဒ်ကတော့ အောက်ပါအတိုင်း ထွက်ပေါ်လာပါတယ်။ သင့်ရဲ့ ရလဒ်ကတော့ အနည်းငယ် ကွဲပြားနိုင်ပါတယ်။ + +```python + { + 'Costume and Makeup - First Image': ( + 'Purple coat and a purple silk-like cravat or tie over a mustard-yellow shirt.', + 'White face paint with exaggerated features, dark eyebrows, blue eye makeup, red lips forming a wide smile.' + ), + 'Costume and Makeup - Second Image': ( + 'Dark suit with a flower on the lapel, holding a playing card.', + 'Pale skin, green hair, very red lips with an exaggerated grin.' + ), + 'Character Identity': 'This character resembles known depictions of The Joker from comic book media.' + } +``` + +ဒီကိစ္စမှာ၊ ရလဒ်က ဒီလူဟာ တခြားတစ်ယောက်ကို အယောင်ဆောင်နေတယ်ဆိုတာကို ဖော်ပြနေတဲ့အတွက် The Joker ကို ပါတီပွဲထဲ ဝင်ရောက်ခြင်းမှ တားဆီးနိုင်ပါပြီ! + +## Dynamic Retrieval ဖြင့် ပုံရိပ်များ ထည့်သွင်းပေးခြင်း + +> [!TIP] +> သင်ဟာ [ဒီ Python file](https://huggingface.co/agents-course/notebooks/blob/main/unit2/smolagents/vision_web_browser.py) ထဲက Code တွေကို လိုက်လံလုပ်ဆောင်နိုင်ပါတယ်။ + +အရင်နည်းလမ်းက အသုံးဝင်ပြီး အလားအလာရှိတဲ့ အသုံးချ ကိစ္စရပ်များစွာ ရှိပါတယ်။ သို့သော်လည်း၊ ဧည့်သည်ဟာ ဒေတာဘေ့စ်ထဲမှာ မရှိတဲ့ အခြေအနေမျိုးမှာ၊ သူတို့ကို ဖော်ထုတ်ဖို့အတွက် တခြားနည်းလမ်းတွေကို ရှာဖွေဖို့ လိုအပ်ပါတယ်။ ဖြစ်နိုင်တဲ့ ဖြေရှင်းနည်းတစ်ခုကတော့ ပြင်ပ အရင်းအမြစ်တွေကနေ ပုံရိပ်တွေနဲ့ အချက်အလက်တွေကို **Dynamic (ပြောင်းလဲနေသော)** ပုံစံဖြင့် ရယူခြင်းပဲ ဖြစ်ပါတယ်။ ဥပမာအားဖြင့်၊ အသေးစိတ်အချက်အလက်တွေအတွက် ဝက်ဘ်ဘရောက်ဆာကို အသုံးပြုပြီး ရှာဖွေခြင်းမျိုးပါ။ + +ဒီနည်းလမ်းမှာတော့ ပုံရိပ်တွေကို Agent ရဲ့ လုပ်ဆောင်မှုအတွင်းမှာပဲ သူ့ရဲ့ Memory ထဲကို Dynamic ပုံစံဖြင့် ထည့်သွင်းပါတယ်။ ကျွန်တော်တို့ သိထားတဲ့အတိုင်း `smolagents` ထဲက Agent တွေဟာ ReAct Framework ကို အခြေခံထားတဲ့ `MultiStepAgent` Class ကို အခြေခံထားပါတယ်။ ဒီ Class ဟာ အမျိုးမျိုးသော Variables တွေနဲ့ Knowledge တွေကို အဆင့်အမျိုးမျိုးမှာ မှတ်တမ်းတင်ထားတဲ့ စနစ်တကျ Cycle တစ်ခုနဲ့ လုပ်ဆောင်ပါတယ်။ + +1. **SystemPromptStep:** System Prompt ကို သိမ်းဆည်းထားပါတယ်။ +2. **TaskStep:** အသုံးပြုသူရဲ့ မေးမြန်းချက် (Query) နဲ့ ပေးထားတဲ့ Input တွေကို မှတ်တမ်းတင်ပါတယ်။ +3. **ActionStep:** Agent ရဲ့ လုပ်ဆောင်ချက်တွေနဲ့ ရလဒ်တွေကနေ မှတ်တမ်းများကို ဖမ်းယူပါတယ်။ + +ဒီလို စနစ်တကျ ချဉ်းကပ်မှုက Agent တွေဟာ မြင်ကွင်းဆိုင်ရာ အချက်အလက်တွေကို Dynamic ပုံစံဖြင့် ပေါင်းစပ်နိုင်ပြီး၊ ပြောင်းလဲလာတဲ့ Tasks တွေကို လိုက်လျောညီထွေ တုံ့ပြန်နိုင်စေပါတယ်။ အောက်မှာ ဖော်ပြထားတဲ့ Diagram ဟာ Dynamic Workflow လုပ်ငန်းစဉ်နဲ့ မတူညီတဲ့ အဆင့်တွေဟာ Agent ရဲ့ Lifecycle ထဲမှာ ဘယ်လို ပေါင်းစပ်ထားတယ်ဆိုတာကို သရုပ်ဖော်ထားပါတယ်။ ဝက်ဘ်ဘရောက်ဆာကို အသုံးပြုတဲ့အခါ၊ Agent ဟာ Screenshots တွေ ရိုက်ယူပြီး ၎င်းတို့ကို `ActionStep` ထဲမှာ **`observation_images`** အဖြစ် သိမ်းဆည်းနိုင်ပါတယ်။ + +![Dynamic image retrieval](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/blog/smolagents-can-see/diagram_adding_vlms_smolagents.png) + +လိုအပ်ချက်ကို နားလည်ပြီးတဲ့နောက်၊ ကျွန်တော်တို့ရဲ့ ဥပမာကို အပြည့်အစုံ တည်ဆောက်ကြည့်ရအောင်။ ဒီကိစ္စမှာ Alfred က ဧည့်သည် စစ်ဆေးအတည်ပြုခြင်း လုပ်ငန်းစဉ်ကို အပြည့်အဝ ထိန်းချုပ်ချင်တဲ့အတွက်၊ အသေးစိတ်အချက်အလက်တွေအတွက် Browsing လုပ်ခြင်းဟာ အကောင်းဆုံး ဖြေရှင်းနည်း ဖြစ်လာပါတယ်။ ဒီဥပမာကို ပြီးမြောက်ဖို့အတွက် Agent အတွက် Tool အသစ်တွေ လိုအပ်ပါတယ်။ ဒါ့အပြင်၊ Browser Automation Tool တွေဖြစ်တဲ့ Selenium နဲ့ Helium ကို အသုံးပြုပါမယ်။ ဒါက ကျွန်တော်တို့ကို ဝက်ဘ်ကို စူးစမ်းလေ့လာပြီး၊ ဖြစ်နိုင်ချေရှိတဲ့ ဧည့်သည်တစ်ဦးအကြောင်း အသေးစိတ်အချက်အလက်တွေ ရှာဖွေကာ၊ မြင်ကွင်းဆိုင်ရာ စစ်ဆေးအတည်ပြုခြင်း အချက်အလက်တွေကို ရယူမယ့် Agent တစ်ခုကို တည်ဆောက်နိုင်စေပါလိမ့်မယ်။ လိုအပ်တဲ့ Tool တွေကို Install လုပ်ရအောင်။ + +```bash +pip install "smolagents[all]" helium selenium python-dotenv +``` + +ကျွန်တော်တို့ဟာ Browsing အတွက် အထူးဒီဇိုင်းထုတ်ထားတဲ့ `search_item_ctrl_f`၊ `go_back` နဲ့ `close_popups` ကဲ့သို့သော Agent Tool အစုအဝေးတစ်ခု လိုအပ်ပါတယ်။ ဒီ Tool တွေက Agent ကို ဝက်ဘ်ကို သွားလာနေတဲ့ လူတစ်ဦးလို လုပ်ဆောင်နိုင်စေပါတယ်။ + +```python +@tool +def search_item_ctrl_f(text: str, nth_result: int = 1) -> str: + """ + Ctrl + F မှတစ်ဆင့် လက်ရှိ Page ပေါ်ရှိ စာသားကို ရှာဖွေပြီး nth ရလဒ်သို့ ခုန်သွားသည်။ + Args: + text: ရှာဖွေရန် စာသား + nth_result: မည်သည့် အကြိမ်မြောက် ရလဒ်သို့ ခုန်သွားမည် (default: 1) + """ + elements = driver.find_elements(By.XPATH, f"//*[contains(text(), '{text}')]") + if nth_result > len(elements): + raise Exception(f"Match n°{nth_result} not found (only {len(elements)} matches found)") + result = f"Found {len(elements)} matches for '{text}'." + elem = elements[nth_result - 1] + driver.execute_script("arguments[0].scrollIntoView(true);", elem) + result += f"Focused on element {nth_result} of {len(elements)}" + return result + + +@tool +def go_back() -> None: + """ယခင် Page သို့ ပြန်သွားသည်။""" + driver.back() + + +@tool +def close_popups() -> str: + """ + Page ပေါ်ရှိ မြင်နိုင်သော Modal သို့မဟုတ် Pop-up များကို ပိတ်သည်။ Pop-up Window များကို ဖယ်ရှားရန် ၎င်းကို အသုံးပြုပါ။ (Cookie Consent Banner များတွင် အလုပ်မလုပ်ပါ)။ + """ + webdriver.ActionChains(driver).send_keys(Keys.ESCAPE).perform() +``` + +ဒါ့အပြင်၊ Screenshots တွေ သိမ်းဆည်းဖို့အတွက် Functionality လည်း လိုအပ်ပါတယ်။ ဒါဟာ ကျွန်တော်တို့ရဲ့ VLM Agent က Task ကို ပြီးမြောက်ဖို့အတွက် အသုံးပြုမယ့် အရေးပါတဲ့ အစိတ်အပိုင်း ဖြစ်လာပါလိမ့်မယ်။ ဒီ Functionality ဟာ Screenshot ကို ဖမ်းယူပြီး `step_log.observations_images = [image.copy()]` ထဲမှာ သိမ်းဆည်းပါတယ်။ ဒါက Agent ကို ပုံရိပ်တွေကို Dynamic ပုံစံဖြင့် သိမ်းဆည်းပြီး စီမံဆောင်ရွက်နိုင်စေပါတယ်။ + +```python +def save_screenshot(step_log: ActionStep, agent: CodeAgent) -> None: + sleep(1.0) # JavaScript animations များ လုပ်ဆောင်ရန် အချိန်ပေးခြင်း + driver = helium.get_driver() + current_step = step_log.step_number + if driver is not None: + for step_logs in agent.logs: # ပိုမိုရှင်းလင်းသော စီမံဆောင်ရွက်မှုအတွက် ယခင် Screenshots များကို Logs မှ ဖယ်ရှားခြင်း + if isinstance(step_log, ActionStep) and step_log.step_number <= current_step - 2: + step_logs.observations_images = None + png_bytes = driver.get_screenshot_as_png() + image = Image.open(BytesIO(png_bytes)) + print(f"Captured a browser screenshot: {image.size} pixels") + step_log.observations_images = [image.copy()] # ဆက်လက်တည်ရှိစေရန် Copy တစ်ခု ဖန်တီးခြင်း၊ အရေးကြီးသည်! + + # လက်ရှိ URL ဖြင့် Observations များကို Update လုပ်ခြင်း + url_info = f"Current url: {driver.current_url}" + step_log.observations = url_info if step_logs.observations is None else step_log.observations + "\n" + url_info + return +``` + +ဒီ Function ကို Agent သို့ `step_callback` အဖြစ် ပေးပို့ပါတယ်။ ဒါက Agent ရဲ့ လုပ်ဆောင်မှုအတွင်း အဆင့်တိုင်းရဲ့ အဆုံးမှာ အစပျိုးစေပါတယ်။ ဒါက Agent ကို သူ့ရဲ့ လုပ်ငန်းစဉ်တစ်လျှောက်လုံးမှာ Screenshots တွေကို Dynamic ပုံစံဖြင့် ဖမ်းယူပြီး သိမ်းဆည်းနိုင်စေပါတယ်။ + +အခုဆိုရင် ကျွန်တော်တို့ရဲ့ Vision Agent ကို ဝက်ဘ်ဘရောက်ဆာ အသုံးပြုဖို့အတွက် ဖန်တီးနိုင်ပါပြီ။ ကျွန်တော်တို့ ဖန်တီးထားတဲ့ Tool တွေအပြင် ဝက်ဘ်ကို စူးစမ်းလေ့လာဖို့အတွက် `DuckDuckGoSearchTool` ကိုလည်း ထည့်သွင်းပေးရပါမယ်။ ဒီ Tool က ဧည့်သည်တွေရဲ့ ကိုယ်ရေးအချက်အလက်ကို မြင်ကွင်းဆိုင်ရာ အချက်အလက်တွေအပေါ် အခြေခံပြီး စစ်ဆေးအတည်ပြုဖို့ လိုအပ်တဲ့ အချက်အလက်တွေကို Agent ကို ရယူနိုင်အောင် ကူညီပေးပါလိမ့်မယ်။ + +```python +from smolagents import CodeAgent, OpenAIServerModel, DuckDuckGoSearchTool +model = OpenAIServerModel(model_id="gpt-4o") + +agent = CodeAgent( + tools=[DuckDuckGoSearchTool(), go_back, close_popups, search_item_ctrl_f], + model=model, + additional_authorized_imports=["helium"], + step_callbacks=[save_screenshot], + max_steps=20, + verbosity_level=2, +) +``` + +ဒီလိုပြင်ဆင်ပြီးတဲ့နောက်၊ Alfred ဟာ ဧည့်သည်တွေရဲ့ ကိုယ်ရေးအချက်အလက်တွေကို စစ်ဆေးပြီး ပါတီပွဲထဲ ဝင်ခွင့်ပြုသင့်၊ မပြုသင့် ဆုံးဖြတ်ချက်ချဖို့ အသင့်ဖြစ်ပါပြီ။ + +```python +agent.run(""" +I am Alfred, the butler of Wayne Manor, responsible for verifying the identity of guests at party. A superhero has arrived at the entrance claiming to be Wonder Woman, but I need to confirm if she is who she says she is. + +Please search for images of Wonder Woman and generate a detailed visual description based on those images. Additionally, navigate to Wikipedia to gather key details about her appearance. With this information, I can determine whether to grant her access to the event. +""" + helium_instructions) +``` + +Task ရဲ့ တစ်စိတ်တစ်ပိုင်းအဖြစ် `helium_instructions` ကို ထည့်သွင်းထားတာကို တွေ့ရပါလိမ့်မယ်။ ဒီအထူး Prompt ဟာ Agent ရဲ့ Navigation ကို ထိန်းချုပ်ဖို့ ရည်ရွယ်ပြီး၊ ဝက်ဘ်ဘရောက်ဆာ အသုံးပြုနေစဉ်မှာ မှန်ကန်တဲ့ အဆင့်တွေကို လိုက်နာစေဖို့ သေချာစေပါတယ်။ + +အောက်ပါ ဗီဒီယိုမှာ ဒါတွေ ဘယ်လို အလုပ်လုပ်လဲဆိုတာကို ကြည့်ရှုနိုင်ပါတယ်။ + + + +ဒါကတော့ နောက်ဆုံး ထွက်ရှိလာတဲ့ ရလဒ်ပါ။ + +```python +Final answer: Wonder Woman is typically depicted wearing a red and gold bustier, blue shorts or skirt with white stars, a golden tiara, silver bracelets, and a golden Lasso of Truth. She is Princess Diana of Themyscira, known as Diana Prince in the world of men. +``` + +ဒီအချက်အလက်တွေ အားလုံးနဲ့အတူ၊ ကျွန်တော်တို့ဟာ ပါတီပွဲအတွက် ကိုယ်ရေးအချက်အလက် စစ်ဆေးအတည်ပြုသူကို အောင်မြင်စွာ ဖန်တီးနိုင်ခဲ့ပါပြီ! Alfred ဟာ မှန်ကန်တဲ့ ဧည့်သည်တွေသာ ဝင်ခွင့်ရဖို့အတွက် လိုအပ်တဲ့ Tool တွေ ရရှိသွားပါပြီ။ Wayne Manor မှာ ပျော်ရွှင်စရာ အချိန်လေးတွေ ပိုင်ဆိုင်ဖို့ အားလုံး အဆင်သင့်ဖြစ်ပါပြီ! + +## ထပ်မံလေ့လာရန် + +* [We just gave sight to smolagents](https://huggingface.co/blog/smolagents-can-see) - Vision Agent Functionality ကို ဖော်ပြထားသော Blog။ +* [Web Browser Automation with Agents 🤖🌐](https://huggingface.co/docs/smolagents/examples/web_browser) - Vision Agent ကို အသုံးပြု၍ Web Browsing အတွက် ဥပမာ။ +* [Web Browser Vision Agent Example](https://github.com/huggingface/smolagents/blob/main/src/smolagents/vision_web_browser.py) - Vision Agent ကို အသုံးပြု၍ Web Browsing အတွက် ဥပမာ။ \ No newline at end of file diff --git a/units/my/unit2/smolagents/why_use_smolagents.mdx b/units/my/unit2/smolagents/why_use_smolagents.mdx new file mode 100644 index 00000000..b6c6c88f --- /dev/null +++ b/units/my/unit2/smolagents/why_use_smolagents.mdx @@ -0,0 +1,72 @@ +![smolagents banner](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/smolagents/license_to_call.png) + +# `smolagents` ကို ဘာကြောင့် အသုံးပြုသင့်သလဲ + +ဒီ Module မှာတော့ ကျွန်တော်တို့ဟာ **`smolagents`** Framework ကို အသုံးပြုခြင်းရဲ့ အားသာချက်တွေနဲ့ အားနည်းချက်တွေကို လေ့လာသွားပါမယ်။ ဒါမှ သင့်ရဲ့ လိုအပ်ချက်တွေအတွက် ဒီ Framework ဟာ သင့်တော်ရဲ့လားဆိုတာကို ဆုံးဖြတ်နိုင်မှာ ဖြစ်ပါတယ်။ + +## `smolagents` ဆိုတာ ဘာလဲ? + +`smolagents` ဟာ AI Agent တွေကို တည်ဆောက်ဖို့အတွက် ရိုးရှင်းပြီး စွမ်းအားရှိတဲ့ Framework တစ်ခု ဖြစ်ပါတယ်။ ၎င်းဟာ LLM (Large Language Model) တွေကို အင်တာနက် ရှာဖွေတာ ဒါမှမဟုတ် ပုံတွေ ဖန်တီးတာမျိုးလိုမျိုး **ပြင်ပကမ္ဘာနဲ့ ထိတွေ့ဆက်ဆံနိုင်တဲ့ စွမ်းရည် (Agency)** ကို ပေးအပ်ပါတယ်။ + +Unit 1 မှာ ကျွန်တော်တို့ လေ့လာခဲ့ရသလိုပဲ၊ AI Agent တွေဆိုတာဟာ **'Observations' (လေ့လာတွေ့ရှိချက်များ)** ကို အခြေခံပြီး **'Thoughts' (စဉ်းစားသုံးသပ်ချက်များ)** ကို ထုတ်ပေးကာ **'Actions' (လုပ်ဆောင်ချက်များ)** ကို လုပ်ဆောင်ဖို့အတွက် LLM တွေကို အသုံးပြုတဲ့ Program တွေပဲ ဖြစ်ပါတယ်။ `smolagents` မှာ ဒါတွေကို ဘယ်လို အကောင်အထည်ဖော်ထားသလဲဆိုတာကို လေ့လာကြည့်ရအောင်။ + +### `smolagents` ရဲ့ အဓိက အားသာချက်များ + +* **ရိုးရှင်းမှု (Simplicity):** Code ရဲ့ ရှုပ်ထွေးမှုနဲ့ Abstractions တွေကို အနည်းဆုံးဖြစ်အောင် လျှော့ချထားပါတယ်။ ဒါကြောင့် Framework ကို နားလည်ရလွယ်ကူပြီး၊ အသုံးပြုရတာ၊ ချဲ့ထွင်ရတာ လွယ်ကူပါတယ်။ +* **ပြောင်းလွယ်ပြင်လွယ်ရှိသော LLM ပံ့ပိုးမှု (Flexible LLM Support):** Hugging Face Tools တွေနဲ့ ပြင်ပ API တွေနဲ့ ပေါင်းစပ်ထားတဲ့အတွက် မည်သည့် LLM နဲ့မဆို အလုပ်လုပ်နိုင်ပါတယ်။ +* **Code-First ချဉ်းကပ်မှု (Code-First Approach):** Code Agent တွေအတွက် အဓိက ပံ့ပိုးပေးထားပါတယ်။ ၎င်းတို့ဟာ လုပ်ဆောင်ချက်တွေကို Code နဲ့ တိုက်ရိုက်ရေးသားတဲ့အတွက် JSON ကို စစ်ဆေးအတည်ပြု (Parsing) ရန် မလိုအပ်တော့ဘဲ Tool ခေါ်ဆိုမှုကို ရိုးရှင်းစေပါတယ်။ +* **HF Hub ပေါင်းစပ်မှု (HF Hub Integration):** Hugging Face Hub နဲ့ ချောမွေ့စွာ ပေါင်းစပ်ထားတဲ့အတွက် Gradio Spaces တွေကို Tool အဖြစ် အသုံးပြုနိုင်ပါတယ်။ + +### `smolagents` ကို ဘယ်အချိန်မှာ အသုံးပြုသင့်သလဲ? + +ဒီအားသာချက်တွေကို စဉ်းစားပြီးရင်၊ တခြား Framework တွေထက် `smolagents` ကို ဘယ်အချိန်မှာ အသုံးပြုသင့်သလဲ? + +`smolagents` ဟာ အောက်ပါအခြေအနေတွေအတွက် အကောင်းဆုံး ဖြစ်ပါတယ်- + +* **ပေါ့ပါးပြီး အနည်းဆုံး Solution** ကို လိုအပ်တဲ့အခါ။ +* ရှုပ်ထွေးတဲ့ Configuration တွေမပါဘဲ **လျင်မြန်စွာ စမ်းသပ်လိုတဲ့အခါ**။ +* သင့်ရဲ့ **Application Logic က ရိုးရှင်းတဲ့အခါ**။ + +### Code Actions နှင့် JSON Actions တို့၏ ကွာခြားချက် + +အခြား Framework များတွင် Agent များက Actions များကို JSON ဖြင့် ရေးသားလေ့ရှိသော်လည်း၊ `smolagents` သည် **Code အတွင်းရှိ Tool ခေါ်ဆိုမှုများ** ကို အဓိကထား အာရုံစိုက်ပါတယ်။ ဒါက လုပ်ဆောင်ချက်ကို ပိုမိုရိုးရှင်းစေပါတယ်။ ဘာကြောင့်လဲဆိုတော့ Tool တွေကို ခေါ်ဆိုမယ့် Code ကို တည်ဆောက်ဖို့အတွက် JSON ကို စစ်ဆေးအတည်ပြုဖို့ မလိုအပ်တော့ပါဘူး—ထုတ်ပေးလိုက်တဲ့ Code ကို တိုက်ရိုက် လုပ်ဆောင်နိုင်လို့ပဲ ဖြစ်ပါတယ်။ + +အောက်ပါ ပုံတွင် Code Actions နှင့် JSON Actions တို့၏ ကွာခြားချက်ကို ရှင်းလင်းစွာ ဖော်ပြထားပါတယ်။ + +![Code vs. JSON actions](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/code_vs_json_actions.png) + +Code Actions နှင့် JSON Actions တို့၏ ကွာခြားချက်ကို ပြန်လည်သုံးသပ်လိုပါက [Unit 1 ရှိ Actions အပိုင်း](https://huggingface.co/learn/agents-course/unit1/actions#actions-enabling-the-agent-to-engage-with-its-environment) ကို ပြန်လည်လေ့လာနိုင်ပါတယ်။ + +### `smolagents` ရှိ Agent အမျိုးအစားများ + +`smolagents` အတွင်းရှိ Agent များသည် **အဆင့်များစွာ လုပ်ဆောင်နိုင်သော Agent များ (Multi-step Agents)** အဖြစ် လုပ်ဆောင်ပါတယ်။ + +[`MultiStepAgent`](https://huggingface.co/docs/smolagents/main/en/reference/agents#smolagents.MultiStepAgent) တစ်ခုစီသည် အောက်ပါတို့ကို လုပ်ဆောင်ပါတယ်- + +* စဉ်းစားသုံးသပ်ချက် (Thought) တစ်ခု၊ +* Tool ခေါ်ဆိုမှုနှင့် လုပ်ဆောင်ချက် (Tool call and execution) တစ်ခု။ + +**[CodeAgent](https://huggingface.co/docs/smolagents/main/en/reference/agents#smolagents.CodeAgent)** ကို အဓိက Agent အမျိုးအစားအဖြစ် အသုံးပြုခြင်းအပြင်၊ `smolagents` သည် **[ToolCallingAgent](https://huggingface.co/docs/smolagents/main/en/reference/agents#smolagents.ToolCallingAgent)** ကိုလည်း ပံ့ပိုးပေးပါတယ်။ ၎င်းသည် Tool ခေါ်ဆိုမှုများကို JSON ဖြင့် ရေးသားပါတယ်။ + +နောက်လာမည့် အပိုင်းများတွင် Agent အမျိုးအစားတစ်ခုချင်းစီကို ပိုမိုအသေးစိတ် လေ့လာသွားပါမယ်။ + +> [!TIP] +> `smolagents` မှာ Tool တွေကို Python Function တွေကို @tool decorator နဲ့ ထုပ်ပိုးခြင်း (Wrapping) သို့မဟုတ် Tool Class ကို အသုံးပြုခြင်းဖြင့် သတ်မှတ်နိုင်ပါတယ်။ + +### `smolagents` တွင် Model ပေါင်းစပ်မှု + +`smolagents` သည် ပြောင်းလွယ်ပြင်လွယ်ရှိသော LLM ပေါင်းစပ်မှုကို ပံ့ပိုးပေးပြီး [သတ်မှတ်ထားသော စံနှုန်းများ](https://huggingface.co/docs/smolagents/main/en/reference/models) နှင့် ကိုက်ညီသော မည်သည့် Callable Model ကိုမဆို အသုံးပြုနိုင်ပါတယ်။ Framework သည် Model ချိတ်ဆက်မှုများကို ရိုးရှင်းစေရန် ကြိုတင်သတ်မှတ်ထားသော Class များစွာကို ပေးထားပါတယ်- + +* **[TransformersModel](https://huggingface.co/docs/smolagents/main/en/reference/models#smolagents.TransformersModel):** ချောမွေ့စွာ ပေါင်းစပ်နိုင်ရန် Local `transformers` Pipeline ကို အကောင်အထည်ဖော်ထားပါတယ်။ +* **[InferenceClientModel](https://huggingface.co/docs/smolagents/main/en/reference/models#smolagents.InferenceClientModel):** [Hugging Face ရဲ့ Infrastructure](https://huggingface.co/docs/api-inference/index) မှတစ်ဆင့် [Serverless Inference](https://huggingface.co/docs/huggingface_hub/main/en/guides/inference) ခေါ်ဆိုမှုများကို ပံ့ပိုးပေးပါတယ်။ ဒါ့အပြင် [တတိယပါတီ Inference Providers](https://huggingface.co/docs/huggingface_hub/main/en/guides/inference#supported-providers-and-tasks) များစွာမှတစ်ဆင့်လည်း အသုံးပြုနိုင်ပါတယ်။ +* **[LiteLLMModel](https://huggingface.co/docs/smolagents/main/en/reference/models#smolagents.LiteLLMModel):** ပေါ့ပါးသော Model ထိတွေ့ဆက်ဆံမှုများအတွက် [LiteLLM](https://www.litellm.ai/) ကို အသုံးပြုပါတယ်။ +* **[OpenAIServerModel](https://huggingface.co/docs/smolagents/main/en/reference/models#smolagents.OpenAIServerModel):** OpenAI API Interface ကို ပေးသော မည်သည့် Service နှင့်မဆို ချိတ်ဆက်နိုင်ပါတယ်။ +* **[AzureOpenAIServerModel](https://huggingface.co/docs/smolagents/main/en/reference/models#smolagents.AzureOpenAIServerModel):** မည်သည့် Azure OpenAI Deployment နှင့်မဆို ပေါင်းစပ်မှုကို ပံ့ပိုးပေးပါတယ်။ + +ဒီလို ပြောင်းလွယ်ပြင်လွယ်ရှိမှုက Developer တွေအနေနဲ့ သူတို့ရဲ့ သီးခြား Use Case တွေအတွက် အသင့်တော်ဆုံး Model နဲ့ Service ကို ရွေးချယ်နိုင်စေပြီး၊ စမ်းသပ်မှုတွေကို လွယ်ကူစွာ လုပ်ဆောင်နိုင်စေပါတယ်။ + +`smolagents` ကို ဘာကြောင့်နဲ့ ဘယ်အချိန်မှာ အသုံးပြုသင့်တယ်ဆိုတာ နားလည်ပြီးတဲ့နောက်၊ ဒီစွမ်းအားရှိတဲ့ Library ကို ပိုမိုနက်ရှိုင်းစွာ လေ့လာကြည့်ရအောင်! + +## အရင်းအမြစ်များ (Resources) + +* [smolagents Blog](https://huggingface.co/blog/smolagents) - smolagents နှင့် Code ထိတွေ့ဆက်ဆံမှုများ မိတ်ဆက် \ No newline at end of file diff --git a/units/my/unit3/README.md b/units/my/unit3/README.md new file mode 100644 index 00000000..e69de29b diff --git a/units/my/unit3/agentic-rag/agent.mdx b/units/my/unit3/agentic-rag/agent.mdx new file mode 100644 index 00000000..63fd77bc --- /dev/null +++ b/units/my/unit3/agentic-rag/agent.mdx @@ -0,0 +1,507 @@ +# သင်၏ Gala Agent ကို ဖန်တီးခြင်း (Creating Your Gala Agent) + +Alfred အတွက် လိုအပ်တဲ့ အစိတ်အပိုင်းတွေ အားလုံးကို တည်ဆောက်ပြီးပြီဆိုတော့၊ အခုအခါမှာ ကျွန်တော်တို့ရဲ့ ခမ်းနားကြီးကျယ်တဲ့ Gala ပွဲကို ကူညီစီစဉ်ပေးမယ့် Agent အပြည့်အစုံတစ်ခုအဖြစ် အားလုံးကို ပေါင်းစပ်ဖို့ အချိန်တန်ပါပြီ။ + +ဒီအပိုင်းမှာ ဧည့်သည်အချက်အလက် ရှာဖွေခြင်း၊ ဝက်ဘ်ရှာဖွေခြင်း၊ ရာသီဥတု အချက်အလက်နှင့် Hub Stats Tool များကို စွမ်းအားမြင့် Agent တစ်ခုတည်းအဖြစ် ပေါင်းစပ်သွားပါမယ်။ + +## Alfred ကို စုစည်းခြင်း- Agent အပြည့်အစုံ (Assembling Alfred: The Complete Agent) + +အရင်အပိုင်းတွေမှာ ဖန်တီးခဲ့တဲ့ Tool တွေအားလုံးကို အစကနေ ပြန်လည်ရေးသားမယ့်အစား၊ ကျွန်တော်တို့ သိမ်းဆည်းထားတဲ့ `tools.py` နဲ့ `retriever.py` ဖိုင်တွေကနေ လိုအပ်တဲ့ Module တွေကို Import လုပ်ပြီး အသုံးပြုသွားပါမယ်။ + +> [!TIP] +> အကယ်၍ သင်ဟာ Tool တွေကို မဖန်တီးရသေးဘူးဆိုရင်၊ [tools](tools) နဲ့ [retriever](invitees) အပိုင်းတွေကို ပြန်သွားပြီး Tool တွေကို အကောင်အထည်ဖော်ကာ ၎င်းတို့ကို `tools.py` နဲ့ `retriever.py` ဖိုင်တွေထဲမှာ ထည့်သွင်းထားဖို့ လိုအပ်ပါတယ်။ + +အရင်အပိုင်းတွေကနေ လိုအပ်တဲ့ Library တွေနဲ့ Tool တွေကို Import လုပ်ရအောင်။ + + + + +```python +# Import necessary libraries +import random +from smolagents import CodeAgent, InferenceClientModel + +# Import our custom tools from their modules +from tools import DuckDuckGoSearchTool, WeatherInfoTool, HubStatsTool +from retriever import load_guest_dataset +``` + +အခု၊ ဒီ Tool တွေအားလုံးကို Agent တစ်ခုတည်းအဖြစ် ပေါင်းစပ်လိုက်ရအောင်။ + +```python +# Hugging Face မော်ဒယ်ကို စတင်သတ်မှတ်ခြင်း +model = InferenceClientModel() + +# ဝက်ဘ်ရှာဖွေရေး Tool ကို စတင်သတ်မှတ်ခြင်း +search_tool = DuckDuckGoSearchTool() + +# ရာသီဥတု Tool ကို စတင်သတ်မှတ်ခြင်း +weather_info_tool = WeatherInfoTool() + +# Hub Stats Tool ကို စတင်သတ်မှတ်ခြင်း +hub_stats_tool = HubStatsTool() + +# ဧည့်သည်ဒေတာအစုအဝေးကို တင်ပြီး ဧည့်သည်အချက်အလက် Tool ကို စတင်သတ်မှတ်ခြင်း +guest_info_tool = load_guest_dataset() + +# Tool များအားလုံးဖြင့် Alfred ကို ဖန်တီးခြင်း +alfred = CodeAgent( + tools=[guest_info_tool, weather_info_tool, hub_stats_tool, search_tool], + model=model, + add_base_tools=True, # အခြေခံ Tool များ ထပ်ထည့်ခြင်း + planning_interval=3 # ၃ ဆင့်တိုင်းတွင် စီမံကိန်းရေးဆွဲခြင်းကို ဖွင့်ခြင်း +) +``` + + + + +```python +# Import necessary libraries +from llama_index.core.agent.workflow import AgentWorkflow +from llama_index.llms.huggingface_api import HuggingFaceInferenceAPI + +from tools import search_tool, weather_info_tool, hub_stats_tool +from retriever import guest_info_tool +``` + +အခု၊ ဒီ Tool တွေအားလုံးကို Agent တစ်ခုတည်းအဖြစ် ပေါင်းစပ်လိုက်ရအောင်။ + +```python +# Hugging Face မော်ဒယ်ကို စတင်သတ်မှတ်ခြင်း +llm = HuggingFaceInferenceAPI(model_name="Qwen/Qwen2.5-Coder-32B-Instruct") + +# Tool များအားလုံးဖြင့် Alfred ကို ဖန်တီးခြင်း +alfred = AgentWorkflow.from_tools_or_functions( + [guest_info_tool, search_tool, weather_info_tool, hub_stats_tool], + llm=llm, +) +``` + + + + +```python +from typing import TypedDict, Annotated +from langgraph.graph.message import add_messages +from langchain_core.messages import AnyMessage, HumanMessage, AIMessage +from langgraph.prebuilt import ToolNode +from langgraph.graph import START, StateGraph +from langgraph.prebuilt import tools_condition +from langchain_huggingface import HuggingFaceEndpoint, ChatHuggingFace + +from tools import DuckDuckGoSearchRun, weather_info_tool, hub_stats_tool +from retriever import guest_info_tool +``` + +အခု၊ ဒီ Tool တွေအားလုံးကို Agent တစ်ခုတည်းအဖြစ် ပေါင်းစပ်လိုက်ရအောင်။ + +```python +# ဝက်ဘ်ရှာဖွေရေး Tool ကို စတင်သတ်မှတ်ခြင်း +search_tool = DuckDuckGoSearchRun() + +# Tool များပါဝင်သော Chat Interface ကို ဖန်တီးခြင်း +llm = HuggingFaceEndpoint( + repo_id="Qwen/Qwen2.5-Coder-32B-Instruct", + huggingfacehub_api_token=HUGGINGFACEHUB_API_TOKEN, +) + +chat = ChatHuggingFace(llm=llm, verbose=True) +tools = [guest_info_tool, search_tool, weather_info_tool, hub_stats_tool] +chat_with_tools = chat.bind_tools(tools) + +# AgentState နှင့် Agent Graph ကို ဖန်တီးခြင်း +class AgentState(TypedDict): + messages: Annotated[list[AnyMessage], add_messages] + +def assistant(state: AgentState): + return { + "messages": [chat_with_tools.invoke(state["messages"])], + } + +## The graph +builder = StateGraph(AgentState) + +# Node များကို သတ်မှတ်ခြင်း- ၎င်းတို့သည် အလုပ်များကို လုပ်ဆောင်သည် +builder.add_node("assistant", assistant) +builder.add_node("tools", ToolNode(tools)) + +# Edge များကို သတ်မှတ်ခြင်း- ၎င်းတို့သည် ထိန်းချုပ်မှု စီးဆင်းမှုကို ဆုံးဖြတ်သည် +builder.add_edge(START, "assistant") +builder.add_conditional_edges( + "assistant", + # နောက်ဆုံး Message က Tool လိုအပ်ပါက Tools သို့ လမ်းကြောင်းပြောင်းပါ + # မဟုတ်ပါက တိုက်ရိုက် တုံ့ပြန်မှု ပေးပါ + tools_condition, +) +builder.add_edge("tools", "assistant") +alfred = builder.compile() +``` + + + +သင်၏ Agent သည် အသုံးပြုရန် အသင့်ဖြစ်ပါပြီ! + +## Alfred ကို အသုံးပြုခြင်း- အစမှအဆုံး ဥပမာများ (Using Alfred: End-to-End Examples) + +Alfred မှာ လိုအပ်တဲ့ Tool တွေ အားလုံး တပ်ဆင်ပြီးပြီဆိုတော့၊ Gala ပွဲအတွင်းမှာ သူက ဘယ်လို အလုပ်အမျိုးမျိုးကို ကူညီပေးနိုင်မလဲဆိုတာ ကြည့်လိုက်ရအောင်။ + +### ဥပမာ ၁: ဧည့်သည် အချက်အလက် ရှာဖွေခြင်း + +ဧည့်သည် အချက်အလက်နဲ့ ပတ်သက်ပြီး Alfred က ဘယ်လို ကူညီပေးနိုင်မလဲ ကြည့်ရအောင်။ + + + + +```python +query = "Tell me about 'Lady Ada Lovelace'" +response = alfred.run(query) + +print("🎩 Alfred's Response:") +print(response) +``` + +မျှော်မှန်းထားသော ရလဒ်: + +``` +🎩 Alfred's Response: +ကျွန်တော် ရှာဖွေရရှိခဲ့တဲ့ အချက်အလက်တွေအရ၊ Lady Ada Lovelace ဟာ ဂုဏ်သရေရှိ သင်္ချာပညာရှင်တစ်ဦးဖြစ်ပြီး မိတ်ဆွေဟောင်းတစ်ဦးလည်း ဖြစ်ပါတယ်။ သူမဟာ သင်္ချာနဲ့ ကွန်ပျူတာ နယ်ပယ်မှာ ရှေ့ဆောင်လမ်းပြ လုပ်ဆောင်ခဲ့တဲ့အတွက် နာမည်ကျော်ကြားပါတယ်။ Charles Babbage ရဲ့ Analytical Engine အတွက် သူမရဲ့ လုပ်ဆောင်ချက်တွေကြောင့် ပထမဆုံး ကွန်ပျူတာ ပရိုဂရမ်မာအဖြစ်လည်း ချီးကျူးခံရပါတယ်။ သူမရဲ့ Email လိပ်စာကတော့ ada.lovelace@example.com ဖြစ်ပါတယ်။ +``` + + + + +```python +query = "Tell me about Lady Ada Lovelace. What's her background?" +response = await alfred.run(query) + +print("🎩 Alfred's Response:") +print(response.response.blocks[0].text) +``` + +မျှော်မှန်းထားသော ရလဒ်: + +``` +🎩 Alfred's Response: +Lady Ada Lovelace ဟာ အင်္ဂလိပ် သင်္ချာပညာရှင်နဲ့ စာရေးဆရာတစ်ဦးဖြစ်ပြီး Charles Babbage ရဲ့ Analytical Engine အတွက် လုပ်ဆောင်ခဲ့တဲ့အတွက် အထူးလူသိများပါတယ်။ သူမဟာ စက်ကိရိယာကို ရိုးရှင်းတဲ့ တွက်ချက်မှုထက် ပိုမိုကျယ်ပြန့်တဲ့ အသုံးချမှုတွေအတွက် အသုံးပြုနိုင်တယ်ဆိုတာကို ပထမဆုံး အသိအမှတ်ပြုခဲ့သူ ဖြစ်ပါတယ်။ +``` + + + + +```python +response = alfred.invoke({"messages": "Tell me about 'Lady Ada Lovelace'"}) + +print("🎩 Alfred's Response:") +print(response['messages'][-1].content) +``` + +မျှော်မှန်းထားသော ရလဒ်: + +``` +🎩 Alfred's Response: +Ada Lovelace ကို Augusta Ada King, Countess of Lovelace လို့လည်း သိကြပြီး အင်္ဂလိပ် သင်္ချာပညာရှင်နဲ့ စာရေးဆရာတစ်ဦး ဖြစ်ပါတယ်။ ၁၈၁၅ ခုနှစ် ဒီဇင်ဘာလ ၁၀ ရက်နေ့မှာ မွေးဖွားခဲ့ပြီး ၁၈၅၂ ခုနှစ် နိုဝင်ဘာလ ၂၇ ရက်နေ့မှာ ကွယ်လွန်ခဲ့ပါတယ်။ သူမဟာ စက်မှုဆိုင်ရာ ရည်ရွယ်ချက်အမျိုးမျိုးအတွက် အသုံးပြုနိုင်ဖို့ အဆိုပြုထားတဲ့ Charles Babbage ရဲ့ Analytical Engine အတွက် လုပ်ဆောင်ခဲ့တဲ့အတွက် နာမည်ကျော်ကြားပါတယ်။ Ada Lovelace ဟာ ၁၈၄၃ ခုနှစ်မှာ Analytical Engine အတွက် ပရိုဂရမ်တစ်ခုကို ဖန်တီးခဲ့တဲ့အတွက် ပထမဆုံး ကွန်ပျူတာ ပရိုဂရမ်မာတွေထဲက တစ်ဦးအဖြစ် ချီးကျူးခံရပါတယ်။ သူမဟာ အဲဒီစက်ကို ရိုးရှင်းတဲ့ တွက်ချက်မှုသက်သက်ထက် ပိုပြီး အသုံးပြုနိုင်တယ်ဆိုတာကို အဲဒီအချိန်က လူအနည်းငယ်သာ မြင်နိုင်တဲ့ ပုံစံမျိုးနဲ့ မြင်ခဲ့ပါတယ်။ ကွန်ပျူတာ သိပ္ပံနယ်ပယ်မှာ သူမရဲ့ ပံ့ပိုးမှုတွေဟာ အနာဂတ် ဖွံ့ဖြိုးတိုးတက်မှုတွေအတွက် အခြေခံအုတ်မြစ်ကို ချပေးခဲ့ပါတယ်။ အောက်တိုဘာလမှာ သတ်မှတ်ထားတဲ့ Ada Lovelace Day ဟာ Lovelace ရဲ့ ရှေ့ဆောင်လမ်းပြ လုပ်ဆောင်ချက်တွေကို စိတ်အားတက်ကြွမှုယူပြီး သိပ္ပံနဲ့ နည်းပညာနယ်ပယ်မှာ အမျိုးသမီးတွေရဲ့ ပံ့ပိုးမှုတွေကို ဂုဏ်ပြုတဲ့နေ့ ဖြစ်ပါတယ်။ +``` + + + + +### ဥပမာ ၂: မီးရှူးမီးပန်းအတွက် ရာသီဥတု စစ်ဆေးခြင်း + +ရာသီဥတုနဲ့ ပတ်သက်ပြီး Alfred က ဘယ်လို ကူညီပေးနိုင်မလဲ ကြည့်ရအောင်။ + + + + +```python +query = "What's the weather like in Paris tonight? Will it be suitable for our fireworks display?" +response = alfred.run(query) + +print("🎩 Alfred's Response:") +print(response) +``` + +မျှော်မှန်းထားသော ရလဒ် (ကျပန်းဖြစ်သောကြောင့် ကွဲပြားနိုင်သည်): +``` +🎩 Alfred's Response: +ကျွန်တော် ပါရီမြို့ရဲ့ ဒီည ရာသီဥတုကို စစ်ဆေးပြီးပါပြီ။ လက်ရှိမှာတော့ ကောင်းကင် ကြည်လင်နေပြီး အပူချိန် ၂၅°C ရှိပါတယ်။ ဒီအခြေအနေတွေဟာ ဒီည မီးရှူးမီးပန်းပွဲအတွက် အလွန်သင့်လျော်ပါတယ်။ ကောင်းကင် ကြည်လင်နေတာကြောင့် ခမ်းနားတဲ့ ရှိုးပွဲကို ကောင်းမွန်စွာ မြင်နိုင်မှာဖြစ်ပြီး၊ သက်သောင့်သက်သာရှိတဲ့ အပူချိန်က ဧည့်သည်တွေ အပြင်ပွဲကို အေးအေးဆေးဆေး ပျော်ရွှင်နိုင်စေမှာပါ။ +``` + + + + +```python +query = "What's the weather like in Paris tonight? Will it be suitable for our fireworks display?" +response = await alfred.run(query) + +print("🎩 Alfred's Response:") +print(response) +``` + +မျှော်မှန်းထားသော ရလဒ်: + +``` +🎩 Alfred's Response: +ပါရီမြို့ရဲ့ ဒီည ရာသီဥတုက မိုးရွာနေပြီး အပူချိန် ၁၅°C ရှိပါတယ်။ မိုးရွာနေတာကြောင့် မီးရှူးမီးပန်းပွဲအတွက် သင့်လျော်မှာ မဟုတ်ပါဘူး။ +``` + + + + +```python +response = alfred.invoke({"messages": "What's the weather like in Paris tonight? Will it be suitable for our fireworks display?"}) + +print("🎩 Alfred's Response:") +print(response['messages'][-1].content) +``` + +မျှော်မှန်းထားသော ရလဒ်: + +``` +🎩 Alfred's Response: +ပါရီမြို့ရဲ့ ဒီည ရာသီဥတုက မိုးရွာနေပြီး အပူချိန် ၁၅°C ရှိပါတယ်။ ဒါကြောင့် သင့်ရဲ့ မီးရှူးမီးပန်းပွဲအတွက် သင့်လျော်မှာ မဟုတ်ပါဘူး။ +``` + + + +### ဥပမာ ၃: AI သုတေသီများကို အထင်ကြီးစေခြင်း + +AI သုတေသီများကို စကားပြောဆိုရာတွင် အထင်ကြီးစေဖို့ Alfred က ဘယ်လို ကူညီပေးနိုင်မလဲ ကြည့်ရအောင်။ + + + + +```python +query = "One of our guests is from Qwen. What can you tell me about their most popular model?" +response = alfred.run(query) + +print("🎩 Alfred's Response:") +print(response) +``` + +မျှော်မှန်းထားသော ရလဒ်: + +``` +🎩 Alfred's Response: +Qwen ရဲ့ လူကြိုက်အများဆုံး မော်ဒယ်ကတော့ Qwen/Qwen2.5-VL-7B-Instruct ဖြစ်ပြီး Downloads ပေါင်း ၃,၃၁၃,၃၄၅ ရှိပါတယ်။ +``` + + + +```python +query = "One of our guests is from Google. What can you tell me about their most popular model?" +response = await alfred.run(query) + +print("🎩 Alfred's Response:") +print(response) +``` + +မျှော်မှန်းထားသော ရလဒ်: + +``` +🎩 Alfred's Response: +Hugging Face Hub မှာ Google ရဲ့ လူကြိုက်အများဆုံး မော်ဒယ်ကတော့ google/electra-base-discriminator ဖြစ်ပြီး Downloads ပေါင်း ၂၈,၅၄၆,၇၅၂ ရှိပါတယ်။ +``` + + + + +```python +response = alfred.invoke({"messages": "One of our guests is from Qwen. What can you tell me about their most popular model?"}) + +print("🎩 Alfred's Response:") +print(response['messages'][-1].content) +``` + +မျှော်မှန်းထားသော ရလဒ်: + +``` +🎩 Alfred's Response: +Qwen မှ အများဆုံး Download လုပ်ထားသော မော်ဒယ်မှာ Qwen/Qwen2.5-VL-7B-Instruct ဖြစ်ပြီး Downloads ပေါင်း ၃,၃၁၃,၃၄၅ ရှိပါတယ်။ +``` + + + +### ဥပမာ ၄: Tool များစွာကို ပေါင်းစပ်အသုံးပြုခြင်း + +Dr. Nikola Tesla နဲ့ စကားပြောဖို့အတွက် Alfred က ဘယ်လို ကူညီပေးနိုင်မလဲ ကြည့်ရအောင်။ + + + + +```python +query = "I need to speak with Dr. Nikola Tesla about recent advancements in wireless energy. Can you help me prepare for this conversation?" +response = alfred.run(query) + +print("🎩 Alfred's Response:") +print(response) +``` + +မျှော်မှန်းထားသော ရလဒ်: + +``` +🎩 Alfred's Response: +Dr. Nikola Tesla နဲ့ စကားပြောဖို့အတွက် ပြင်ဆင်နိုင်အောင် ကျွန်တော် အချက်အလက်တွေ စုဆောင်းပေးထားပါတယ်။ + +ဧည့်သည် အချက်အလက်: +အမည်: Dr. Nikola Tesla +ဆက်ဆံရေး: တက္ကသိုလ်တုန်းက မိတ်ဆွေဟောင်း +ဖော်ပြချက်: Dr. Nikola Tesla ဟာ သင့်ရဲ့ တက္ကသိုလ်တုန်းက မိတ်ဆွေဟောင်းတစ်ဦးပါ။ သူဟာ မကြာသေးမီက Wireless Energy Transmission စနစ်အသစ်တစ်ခုကို မူပိုင်ခွင့် မှတ်ပုံတင်ထားပြီး၊ ဒီအကြောင်းကို သင့်နဲ့ ဆွေးနွေးရရင် ဝမ်းသာမှာပါ။ သူဟာ ခိုတွေကို စိတ်အားထက်သန်တယ်ဆိုတာကို သတိရပါ၊ ဒါက စကားစမြည်ပြောဖို့ ကောင်းမွန်တဲ့ အကြောင်းအရာ ဖြစ်နိုင်ပါတယ်။ +Email: nikola.tesla@gmail.com + +Wireless Energy နယ်ပယ်မှ မကြာသေးမီက တိုးတက်မှုများ: +ကျွန်တော် ဝက်ဘ်ရှာဖွေမှုအရ၊ Wireless Energy Transmission မှာ မကြာသေးမီက ဖွံ့ဖြိုးတိုးတက်မှုများကတော့- +၁။ သုတေသီတွေဟာ Focused Electromagnetic Waves တွေကို အသုံးပြုပြီး Long-range Wireless Power Transmission မှာ တိုးတက်မှုတွေ ရရှိခဲ့ပါတယ်။ +၂။ ကုမ္ပဏီများစွာဟာ Consumer Electronics တွေအတွက် Resonant Inductive Coupling နည်းပညာတွေကို တီထွင်နေကြပါတယ်။ +၃။ Physical Connection မပါဘဲ Electric Vehicle Charging အတွက် အသုံးချမှုအသစ်တွေ ရှိလာပါတယ်။ + +စကားစမြည် စတင်ရန် အချက်များ: +၁။ "ခင်ဗျားရဲ့ Wireless Energy Transmission မူပိုင်ခွင့်အသစ်အကြောင်းကို ကြားချင်ပါတယ်။ ကျွန်တော်တို့ တက္ကသိုလ်တုန်းက မူလ အယူအဆတွေနဲ့ ဘယ်လို ကွာခြားပါသလဲ?" +၂။ "Consumer Electronics တွေအတွက် Resonant Inductive Coupling မှာ မကြာသေးမီက ဖွံ့ဖြိုးတိုးတက်မှုတွေကို ခင်ဗျား မြင်ဖူးပါသလား? သူတို့ရဲ့ ချဉ်းကပ်ပုံကို ဘယ်လိုထင်ပါသလဲ?" +၃။ "ခင်ဗျားရဲ့ ခိုတွေ အခြေအနေ ဘယ်လိုရှိပါသလဲ? ခင်ဗျား ခိုတွေကို စိတ်ဝင်စားတာကို ကျွန်တော် မှတ်မိနေပါတယ်။" + +ဒီအချက်တွေက Dr. Tesla ရဲ့ စိတ်ဝင်စားမှုတွေနဲ့ သူ့နယ်ပယ်က မကြာသေးမီက တိုးတက်မှုတွေကို သင်သိကြောင်း ပြသရင်း စကားပြောဖို့အတွက် အကြောင်းအရာများစွာကို ပေးနိုင်ပါလိမ့်မယ်။ +``` + + + + +```python +query = "I need to speak with Dr. Nikola Tesla about recent advancements in wireless energy. Can you help me prepare for this conversation?" +response = await alfred.run(query) + +print("🎩 Alfred's Response:") +print(response) +``` + +မျှော်မှန်းထားသော ရလဒ်: + +``` +🎩 Alfred's Response: +Dr. Nikola Tesla နဲ့ စကားပြောဖို့အတွက် အသုံးဝင်မယ့် Wireless Energy နယ်ပယ်မှ မကြာသေးမီက တိုးတက်မှုများကတော့- + +၁။ **Wireless Power Transfer (WPT) ၏ တိုးတက်မှုများနှင့် စိန်ခေါ်မှုများ:** ဤဆောင်းပါးသည် Wireless Power Transfer (WPT) ၏ ရိုးရာ ဝါယာကြိုးသုံး နည်းလမ်းများမှသည် Solar Space Power Stations များအထိ ခေတ်မီ အသုံးချမှုများအထိ တိုးတက်ပြောင်းလဲလာပုံကို ဆွေးနွေးထားပါတယ်။ Microwave နည်းပညာအပေါ် အစောပိုင်း အာရုံစိုက်မှုနှင့် Electric Devices များ တိုးပွားလာမှုကြောင့် WPT အတွက် လက်ရှိ လိုအပ်ချက်ကို မီးမောင်းထိုးပြထားပါတယ်။ + +၂။ **Body-Interfaced Electronics များအတွက် Wireless Energy Transfer နည်းပညာများ၏ မကြာသေးမီက တိုးတက်မှုများ:** ဤဆောင်းပါးသည် ဘက်ထရီ သို့မဟုတ် ဝါယာကြိုးများ မလိုအပ်ဘဲ ခန္ဓာကိုယ်နှင့် ချိတ်ဆက်ထားသော Electronics များကို ပါဝါပေးရန်အတွက် Wireless Energy Transfer (WET) ကို ဖြေရှင်းချက်အဖြစ် ရှာဖွေထားပါတယ်။ ဤ Context တွင် WET ၏ အားသာချက်များနှင့် ဖြစ်နိုင်ခြေရှိသော အသုံးချမှုများကို ဆွေးနွေးထားပါတယ်။ + +၃။ **Wireless Power Transfer နှင့် Energy Harvesting: လက်ရှိ အခြေအနေနှင့် အနာဂတ် လမ်းကြောင်းများ:** ဤဆောင်းပါးသည် Energy Harvesting နှင့် Wireless Power Transfer အပါအဝင် Wireless Power Supply နည်းလမ်းများ၏ မကြာသေးမီက တိုးတက်မှုများကို ခြုံငုံသုံးသပ်ထားပါတယ်။ အလားအလာရှိသော အသုံးချမှုများစွာနှင့် နယ်ပယ်၏ အနာဂတ် လမ်းကြောင်းများကို ဆွေးနွေးထားပါတယ်။ + +၄။ **Wireless Power Transfer: Applications, Challenges, Barriers, and the** +``` + + + + +```python +response = alfred.invoke({"messages":"I need to speak with 'Dr. Nikola Tesla' about recent advancements in wireless energy. Can you help me prepare for this conversation?"}) + +print("🎩 Alfred's Response:") +print(response['messages'][-1].content) +``` + +မျှော်မှန်းထားသော ရလဒ်: + +``` +🎩 Alfred's Response: +ပေးထားသော အချက်အလက်များအပေါ် အခြေခံ၍ Dr. Nikola Tesla နဲ့ Wireless Energy နယ်ပယ်မှ မကြာသေးမီက တိုးတက်မှုများအကြောင်း စကားပြောဖို့အတွက် ပြင်ဆင်ရန် အဓိက အချက်များကတော့- +၁။ **Wireless Power Transmission (WPT):** WPT ဟာ ကြိုးများ မလိုအပ်ဘဲ စွမ်းအင်လွှဲပြောင်းမှုကို ဘယ်လို တော်လှန်ပြောင်းလဲစေသလဲ၊ Inductive နှင့် Resonant Coupling ကဲ့သို့သော ယန္တရားများကို ဘယ်လို အသုံးချသလဲဆိုတာကို ဆွေးနွေးပါ။ +၂။ **Wireless Charging ၏ တိုးတက်မှုများ:** စွမ်းဆောင်ရည် တိုးတက်မှုများ၊ ပိုမိုမြန်ဆန်သော အားသွင်းနှုန်းများနှင့် Qi/Qi2 Certified Wireless Charging Solutions များ ပေါ်ပေါက်လာခြင်းကို မီးမောင်းထိုးပြပါ။ +၃။ **5G-Advanced Innovations နှင့် NearLink Wireless Protocol:** ဤအရာများသည် Wireless Network များ၏ အမြန်နှုန်း၊ လုံခြုံရေးနှင့် စွမ်းဆောင်ရည်ကို မြှင့်တင်ပေးပြီး၊ Advanced Wireless Energy နည်းပညာများကို ပံ့ပိုးပေးနိုင်ကြောင်း ဖော်ပြပါ။ +၄။ **AI နှင့် ML at the Edge:** AI နှင့် Machine Learning တို့သည် Wireless Network များကို အားကိုးပြီး Smart Home နှင့် Buildings များတွင် Automation နှင့် Intelligence ကို မြှင့်တင်ပေးပုံကို ဆွေးနွေးပါ။ +၅။ **Matter, Thread, နှင့် Security Advancements:** ဤအရာများသည် IoT Devices နှင့် Systems များတွင် ချိတ်ဆက်မှု၊ စွမ်းဆောင်ရည်နှင့် လုံခြုံရေးကို မောင်းနှင်ပေးသော အဓိက တီထွင်ဆန်းသစ်မှုများအဖြစ် ဆွေးနွေးပါ။ +၆။ **Wireless Charging နည်းပညာတွင် ထူးခြားသော တိုးတက်မှုများ:** Wireless Charging ၏ တိုးတက်မှုများကို အတည်ပြုရန် Incheon National University မှ လေ့လာမှုကဲ့သို့သော မကြာသေးမီက ထူးခြားသော တိုးတက်မှုများ သို့မဟုတ် လေ့လာမှုများကို ထည့်သွင်းပါ။ +``` + + + +## အဆင့်မြင့် လုပ်ဆောင်ချက်များ- စကားပြော မှတ်ဉာဏ် (Conversation Memory) + +Gala ပွဲအတွင်းမှာ Alfred ကို ပိုမို အထောက်အကူပြုစေဖို့အတွက်၊ သူက အရင်က ပြောဆိုခဲ့တဲ့ အပြန်အလှန် ဆက်ဆံမှုတွေကို မှတ်မိနေစေဖို့ **Conversation Memory** ကို ဖွင့်ပေးနိုင်ပါတယ်။ + + + + +```python +# Conversation Memory ပါဝင်သော Alfred ကို ဖန်တီးခြင်း +alfred_with_memory = CodeAgent( + tools=[guest_info_tool, weather_info_tool, hub_stats_tool, search_tool], + model=model, + add_base_tools=True, + planning_interval=3 +) + +# ပထမဆုံး အပြန်အလှန် ဆက်ဆံမှု +response1 = alfred_with_memory.run("Tell me about Lady Ada Lovelace.") +print("🎩 Alfred's First Response:") +print(response1) + +# ဒုတိယ အပြန်အလှန် ဆက်ဆံမှု (ပထမအကြိမ်ကို ကိုးကားခြင်း) +response2 = alfred_with_memory.run("What projects is she currently working on?", reset=False) +print("🎩 Alfred's Second Response:") +print(response2) +``` + + + + +```python +from llama_index.core.workflow import Context + +alfred = AgentWorkflow.from_tools_or_functions( + [guest_info_tool, search_tool, weather_info_tool, hub_stats_tool], + llm=llm +) + +# State ကို မှတ်မိစေခြင်း +ctx = Context(alfred) + +# ပထမဆုံး အပြန်အလှန် ဆက်ဆံမှု +response1 = await alfred.run("Tell me about Lady Ada Lovelace.", ctx=ctx) +print("🎩 Alfred's First Response:") +print(response1) + +# ဒုတိယ အပြန်အလှန် ဆက်ဆံမှု (ပထမအကြိမ်ကို ကိုးကားခြင်း) +response2 = await alfred.run("What projects is she currently working on?", ctx=ctx) +print("🎩 Alfred's Second Response:") +print(response2) +``` + + + + +```python +# ပထမဆုံး အပြန်အလှန် ဆက်ဆံမှု +response = alfred.invoke({"messages": [HumanMessage(content="Tell me about 'Lady Ada Lovelace'. What's her background and how is she related to me?")]}) + + +print("🎩 Alfred's Response:") +print(response['messages'][-1].content) +print() + +# ဒုတိယ အပြန်အလှန် ဆက်ဆံမှု (ပထမအကြိမ်ကို ကိုးကားခြင်း) +response = alfred.invoke({"messages": response["messages"] + [HumanMessage(content="What projects is she currently working on?")]}) + +print("🎩 Alfred's Response:") +print(response['messages'][-1].content) +``` + + + + +ဒီ Agent နည်းလမ်း (၃) ခုစလုံးဟာ Memory ကို Agent နဲ့ တိုက်ရိုက် ချိတ်ဆက်ထားခြင်း မရှိဘူးဆိုတာ သတိထားမိပါသလား 🧐? ဒီလို ဒီဇိုင်းရွေးချယ်မှုအတွက် သီးခြား အကြောင်းပြချက် ရှိပါသလား? + +* **smolagents:** Memory ကို မတူညီသော Execution Runs များတွင် ထိန်းသိမ်းထားခြင်း မရှိပါ။ `reset=False` ကို အသုံးပြု၍ ရှင်းရှင်းလင်းလင်း ဖော်ပြရပါမယ်။ +* **LlamaIndex:** Run တစ်ခုအတွင်း Memory စီမံခန့်ခွဲမှုအတွက် Context Object ကို ရှင်းရှင်းလင်းလင်း ထည့်သွင်းရန် လိုအပ်ပါတယ်။ +* **LangGraph:** ယခင် Messages များကို ပြန်လည်ရယူရန် သို့မဟုတ် သီးသန့် [MemorySaver](https://langchain-ai.github.io/langgraph/tutorials/introduction/#part-3-adding-memory-to-the-chatbot) Component ကို အသုံးပြုရန် ရွေးချယ်စရာများ ပေးထားပါတယ်။ + +## နိဂုံးချုပ် (Conclusion) + +ဂုဏ်ယူပါတယ်! သင်ဟာ ရာစုနှစ်ရဲ့ အခမ်းနားဆုံး Gala ပွဲကို ကူညီစီစဉ်ပေးမယ့် Tool များစွာ တပ်ဆင်ထားတဲ့ အဆင့်မြင့် Agent တစ်ခုဖြစ်တဲ့ Alfred ကို အောင်မြင်စွာ တည်ဆောက်နိုင်ခဲ့ပါပြီ။ Alfred ဟာ အခုဆိုရင်- + +1. ဧည့်သည်များအကြောင်း အသေးစိတ် အချက်အလက်များကို ရှာဖွေနိုင်ခြင်း +2. ပြင်ပလှုပ်ရှားမှုများ စီစဉ်ရန် ရာသီဥတု အခြေအနေများကို စစ်ဆေးနိုင်ခြင်း +3. ဩဇာရှိသော AI Builder များနှင့် ၎င်းတို့၏ မော်ဒယ်များအကြောင်း ထိုးထွင်းသိမြင်မှုများ ပေးနိုင်ခြင်း +4. နောက်ဆုံးပေါ် အချက်အလက်များအတွက် ဝက်ဘ်ကို ရှာဖွေနိုင်ခြင်း +5. စကားပြောဆိုမှု၏ Context ကို မှတ်ဉာဏ်ဖြင့် ထိန်းသိမ်းထားနိုင်ခြင်း + +ဒီစွမ်းရည်တွေနဲ့အတူ Alfred ဟာ သင့်ရဲ့ Gala ပွဲကို အောင်မြင်စေဖို့၊ ဧည့်သည်တွေကို ပုဂ္ဂိုလ်ရေးဆန်တဲ့ ဂရုစိုက်မှုနဲ့ နောက်ဆုံးပေါ် အချက်အလက်တွေနဲ့ အထင်ကြီးစေဖို့ အသင့်ဖြစ်နေပါပြီ။ \ No newline at end of file diff --git a/units/my/unit3/agentic-rag/agentic-rag.mdx b/units/my/unit3/agentic-rag/agentic-rag.mdx new file mode 100644 index 00000000..380f69a0 --- /dev/null +++ b/units/my/unit3/agentic-rag/agentic-rag.mdx @@ -0,0 +1,43 @@ +# Agentic RAG (Agentic Retrieval Augmented Generation) + +ဒီအခန်းမှာတော့ **Agentic RAG** ကို အသုံးပြုပြီး Alfred (ကျွန်တော်တို့ရဲ့ Agent) ကို ခမ်းနားတဲ့ ဧည့်ခံပွဲ (Gala) အတွက် ပြင်ဆင်ရာမှာ ဘယ်လို ကူညီပေးနိုင်မလဲဆိုတာကို လေ့လာသွားပါမယ်။ + +> [!TIP] +> Retrieval Augmented Generation (RAG) နဲ့ Agentic RAG အကြောင်းကို အရင်အခန်းမှာ ဆွေးနွေးပြီးသား ဖြစ်တဲ့အတွက်၊ ဒီအယူအဆတွေကို ရင်းနှီးပြီးသားဆိုရင်တော့ ရှေ့ကို ကျော်သွားနိုင်ပါတယ်။ + +LLM (Large Language Models) တွေကို အထွေထွေ ဗဟုသုတတွေ သင်ယူနိုင်ဖို့အတွက် အချက်အလက် အမြောက်အမြားနဲ့ လေ့ကျင့်ထားပါတယ်။ + +ဒါပေမယ့် LLM တွေရဲ့ ကမ္ဘာ့အသိပညာ မော်ဒယ်ဟာ အမြဲတမ်း နောက်ဆုံးပေါ် ဖြစ်ချင်မှ ဖြစ်နေပါမယ်။ ဥပမာအားဖြင့်၊ LLM ကို လေ့ကျင့်ပြီးနောက် ဖြစ်ပေါ်ခဲ့တဲ့ အဖြစ်အပျက်တွေ၊ ဒါမှမဟုတ် အင်တာနက်ပေါ်က နောက်ဆုံးသတင်းတွေကို သူတို့ မသိနိုင်ပါဘူး။ + +**RAG နည်းလမ်းကတော့ ဒီပြဿနာကို ဖြေရှင်းပေးပါတယ်။ RAG ဟာ သင့်ရဲ့ ဒေတာတွေထဲကနေ သက်ဆိုင်ရာ အချက်အလက်တွေကို ရှာဖွေပြီး ပြန်လည်ရယူကာ၊ အဲဒီအချက်အလက်တွေကို LLM ဆီ ပေးပို့ပေးပါတယ်**။ + +![RAG](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/llama-index/rag.png) + +**RAG ရဲ့ အလုပ်လုပ်ပုံ အကျဉ်းချုပ်:** + +1. **မေးခွန်းမေးခြင်း:** အသုံးပြုသူက မေးခွန်းတစ်ခု မေးပါတယ်။ +2. **ရှာဖွေခြင်း (Retrieval):** စနစ်က သင့်ရဲ့ ကိုယ်ပိုင် ဒေတာဘေ့စ် (ဥပမာ - ကုမ္ပဏီရဲ့ စာရွက်စာတမ်းများ) ထဲမှာ မေးခွန်းနဲ့ သက်ဆိုင်တဲ့ အချက်အလက်တွေကို ရှာဖွေပါတယ်။ +3. **ဖြည့်စွက်ခြင်း (Augmentation):** ရှာဖွေတွေ့ရှိတဲ့ အချက်အလက်တွေကို မူရင်းမေးခွန်းနဲ့ ပေါင်းစပ်ပြီး LLM ဆီ ပေးပို့ပါတယ်။ +4. **အဖြေထုတ်ပေးခြင်း (Generation):** LLM က အဲဒီအချက်အလက်အသစ်တွေကို အခြေခံပြီး ပိုမိုတိကျတဲ့ အဖြေကို ထုတ်ပေးပါတယ်။ + +အခု Alfred ဘယ်လို အလုပ်လုပ်ရမလဲဆိုတာကို စဉ်းစားကြည့်ရအောင်။ + +1. ကျွန်တော်တို့က Alfred ကို ဧည့်ခံပွဲတစ်ခု စီစဉ်ဖို့ တောင်းဆိုထားပါတယ်။ +2. Alfred ဟာ နောက်ဆုံးပေါ် သတင်းအချက်အလက်တွေနဲ့ ရာသီဥတု အခြေအနေတွေကို ရှာဖွေဖို့ လိုအပ်ပါတယ်။ +3. Alfred ဟာ ဧည့်သည်တွေရဲ့ အချက်အလက်တွေကို စနစ်တကျ ဖွဲ့စည်းပြီး ရှာဖွေဖို့ လိုအပ်ပါတယ်။ + +Alfred ဟာ အိမ်တွင်းအချက်အလက်တွေကို ရှာဖွေမှသာ အထောက်အကူပြုနိုင်သလို၊ Agent တိုင်းဟာလည်း သက်ဆိုင်ရာ ဒေတာတွေကို ရှာဖွေပြီး နားလည်ဖို့ နည်းလမ်းတစ်ခု လိုအပ်ပါတယ်။ + +**Agentic RAG** ဆိုတာကတော့ **Agent တွေကို အသုံးပြုပြီး သင့်ရဲ့ ဒေတာတွေနဲ့ ပတ်သက်တဲ့ မေးခွန်းတွေကို ဖြေဆိုနိုင်ဖို့အတွက် အစွမ်းထက်တဲ့ နည်းလမ်း** တစ်ခုပဲ ဖြစ်ပါတယ်။ ကျွန်တော်တို့ဟာ Alfred ကို မေးခွန်းတွေ ဖြေဆိုနိုင်ဖို့အတွက် Tool အမျိုးမျိုးကို ပေးအပ်နိုင်ပါတယ်။ + +ဒါပေမယ့် Agentic RAG မှာ ထူးခြားတာက၊ Alfred ဟာ Document တွေပေါ်ကနေ အဖြေကို အလိုအလျောက် ဖြေဆိုမယ့်အစား၊ **မေးခွန်းကို ဖြေဆိုဖို့အတွက် အခြား Tool သို့မဟုတ် လုပ်ငန်းအဆင့်ဆင့် (Flow) တွေကို အသုံးပြုဖို့ သူကိုယ်တိုင် ဆုံးဖြတ်နိုင်ပါတယ်**။ + +![Agentic RAG](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/llama-index/agentic-rag.png) + +**Agentic RAG ရဲ့ အားသာချက်:** + +ရိုးရိုး RAG က သင့်ဒေတာကို အလိုအလျောက် ရှာဖွေပြီး LLM ကို ပေးပို့ပေမယ့်၊ Agentic RAG မှာ Agent ဟာ **ဆင်ခြင်သုံးသပ်နိုင်စွမ်း (Reasoning)** ရှိပါတယ်။ ဥပမာ- "ဒီမေးခွန်းကို ဖြေဖို့ ဒေတာဘေ့စ်ကို ရှာရုံနဲ့ မပြီးဘူး၊ အရင်ဆုံး ရာသီဥတုကို စစ်ဆေးဖို့ API ကို ခေါ်ရမယ်" လို့ Agent က ဆုံးဖြတ်နိုင်ပါတယ်။ ဒါက ပိုမိုရှုပ်ထွေးတဲ့ Tasks တွေကို လုပ်ဆောင်နိုင်စေပါတယ်။ + +ကဲ... **ကျွန်တော်တို့ရဲ့ Agentic RAG လုပ်ငန်းအဆင့်ဆင့်ကို စတင်တည်ဆောက်ကြပါစို့!** + +ပထမဆုံးအနေနဲ့၊ ဖိတ်ကြားထားသူတွေရဲ့ နောက်ဆုံးပေါ် အချက်အလက်တွေကို ပြန်လည်ရယူနိုင်ဖို့အတွက် RAG Tool တစ်ခုကို ဖန်တီးပါမယ်။ ပြီးရင်တော့ Web Search (အင်တာနက် ရှာဖွေခြင်း)၊ ရာသီဥတု အချက်အလက် အသစ်များ ရယူခြင်းနဲ့ Hugging Face Hub မှ မော်ဒယ် ဒေါင်းလုတ်လုပ်မှု စာရင်းဇယားများအတွက် Tool များကို တီထွင်ပါမယ်။ နောက်ဆုံးမှာတော့ ကျွန်တော်တို့ရဲ့ Agentic RAG Agent ကို အသက်သွင်းဖို့အတွက် အရာအားလုံးကို ပေါင်းစပ်ထည့်သွင်းသွားပါမယ်။ \ No newline at end of file diff --git a/units/my/unit3/agentic-rag/conclusion.mdx b/units/my/unit3/agentic-rag/conclusion.mdx new file mode 100644 index 00000000..c99ab987 --- /dev/null +++ b/units/my/unit3/agentic-rag/conclusion.mdx @@ -0,0 +1,23 @@ +# နိဂုံးချုပ် (Conclusion) + +ဒီအခန်းမှာတော့၊ ကျွန်တော်တို့ရဲ့ ဖော်ရွေတဲ့ အိမ်နီးချင်း Agent ဖြစ်တဲ့ Alfred ကို ခမ်းနားထည်ဝါတဲ့ ဧည့်ခံပွဲ (Gala) တစ်ခုအတွက် ပြင်ဆင်ဖို့နဲ့ စီမံခန့်ခွဲဖို့အတွက် **Agentic RAG စနစ်** တစ်ခုကို ဘယ်လို ဖန်တီးရမလဲဆိုတာကို လေ့လာခဲ့ရပါတယ်။ + +RAG (Retrieval-Augmented Generation) ကို Agent ရဲ့ စွမ်းဆောင်ရည်တွေနဲ့ ပေါင်းစပ်လိုက်တဲ့အခါ AI Assistant တွေဟာ ဘယ်လောက်အထိ အစွမ်းထက်လာနိုင်သလဲဆိုတာကို ပြသနေပါတယ်။ သူတို့မှာ အောက်ပါ စွမ်းရည်တွေ ရှိလာတဲ့အခါ ပိုမို အစွမ်းထက်လာပါတယ်။ + +* **စနစ်တကျ ဖွဲ့စည်းထားသော အသိပညာများကို ရယူနိုင်ခြင်း** (ဥပမာ - ဧည့်သည်များရဲ့ အချက်အလက်များ) +* **အချိန်နှင့်တပြေးညီ အချက်အလက်များကို ပြန်လည်ရယူနိုင်ခြင်း** (ဥပမာ - Web Search ပြုလုပ်ခြင်း) +* **နယ်ပယ်အလိုက် သီးသန့် Tools များ** (ဥပမာ - ရာသီဥတု အချက်အလက်၊ Hub Stats များ) +* **အတိတ်က ဆက်သွယ်ပြောဆိုမှုများကို မှတ်ဉာဏ်ရှိခြင်း** (Memory of past interactions) + +> **[Learner အတွက် ထပ်ဆောင်းအချက်]** +> **RAG (Retrieval-Augmented Generation)** ဆိုတာဟာ LLM တွေကို သူတို့ မူရင်း လေ့ကျင့်ထားတဲ့ ဒေတာအပြင်၊ ပြင်ပက အချက်အလက်အသစ်တွေ (ဥပမာ - ကုမ္ပဏီရဲ့ နောက်ဆုံးပေါ် စာရွက်စာတမ်းတွေ၊ လက်ရှိ အင်တာနက်ပေါ်က သတင်းတွေ) ကိုပါ ရှာဖွေပြီးမှ အဖြေထုတ်စေတဲ့ နည်းလမ်းဖြစ်ပါတယ်။ ဒါကြောင့် Agent တွေဟာ အမြဲတမ်း **နောက်ဆုံးပေါ်နဲ့ တိကျတဲ့ အဖြေတွေ** ကို ပေးနိုင်တာ ဖြစ်ပါတယ်။ + +ဒီလို စွမ်းဆောင်ရည်တွေနဲ့ဆိုရင် Alfred ဟာ ပြီးပြည့်စုံတဲ့ အိမ်ရှင်တစ်ဦး ဖြစ်လာဖို့ အသင့်ဖြစ်နေပါပြီ။ ဧည့်သည်တွေနဲ့ ပတ်သက်တဲ့ မေးခွန်းတွေကို ဖြေဆိုနိုင်ခြင်း၊ နောက်ဆုံးပေါ် အချက်အလက်တွေကို ပေးနိုင်ခြင်းနဲ့ ဧည့်ခံပွဲကို ချောမွေ့စွာ လည်ပတ်စေခြင်း—မီးရှူးမီးပန်း ပစ်ဖောက်မယ့် အချိန်ကိုတောင် အတိအကျ စီမံခန့်ခွဲပေးနိုင်မှာ ဖြစ်ပါတယ်။ + +> [!TIP] +> အခုဆိုရင် သင်ဟာ Agent တစ်ခုလုံးကို အောင်မြင်စွာ တည်ဆောက်ပြီးသွားပါပြီ။ နောက်ထပ် လေ့လာစူးစမ်းသင့်တဲ့ အရာတွေကတော့- +> +> * **သင့်ရဲ့ သီးသန့် အသုံးချကိစ္စရပ်များ (Use Cases)** အတွက် ပိုမို အထူးပြုထားတဲ့ Tools များကို ဖန်တီးခြင်း။ (ဥပမာ - မြန်မာလို စာသားတွေကို ခွဲခြမ်းစိတ်ဖြာပေးနိုင်တဲ့ Tool) +> * **Embeddings** များကို အသုံးပြုပြီး ပိုမို ရှုပ်ထွေးတဲ့ RAG စနစ်များကို အကောင်အထည်ဖော်ခြင်း။ (Embeddings တွေက စာသားတွေရဲ့ အဓိပ္ပာယ်ကို ကိန်းဂဏန်းပုံစံနဲ့ ကိုယ်စားပြုပေးတာမို့ ရှာဖွေမှု ပိုမိုတိကျစေပါတယ်) +> * Agent များ အချင်းချင်း ပူးပေါင်းဆောင်ရွက်နိုင်တဲ့ **Multi-agent စနစ်များ** ကို တည်ဆောက်ခြင်း။ (ဥပမာ - Data Agent က အချက်အလက်ရှာ၊ Planning Agent က အစီအစဉ်ဆွဲတာမျိုး) +> * သင်ဖန်တီးထားတဲ့ Agent ကို အခြားသူများ အသုံးပြုနိုင်ဖို့ **Service တစ်ခုအနေနဲ့ Deploy** လုပ်ခြင်း။ \ No newline at end of file diff --git a/units/my/unit3/agentic-rag/introduction.mdx b/units/my/unit3/agentic-rag/introduction.mdx new file mode 100644 index 00000000..198487b6 --- /dev/null +++ b/units/my/unit3/agentic-rag/introduction.mdx @@ -0,0 +1,42 @@ +# Agentic RAG အတွက် အသုံးချ ကိစ္စရပ်များ မိတ်ဆက် (Introduction to Use Case for Agentic RAG) + +![Agentic RAG banner](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit3/agentic-rag/thumbnail.jpg) + +ဒီအခန်းမှာတော့ ကျွန်တော်တို့ရဲ့ ဖော်ရွေတဲ့ Agent ဖြစ်တဲ့ **Alfred** ကို ကူညီပေးသွားပါမယ်။ Alfred ဟာ ဧည့်ခံပွဲ (Gala) တစ်ခုကို စီစဉ်ကျင်းပနေသူပါ။ ကျွန်တော်တို့က **Agentic RAG** နည်းပညာကို အသုံးပြုပြီး ဧည့်ခံပွဲလာ ဧည့်သည်တွေနဲ့ ပတ်သက်တဲ့ မေးခွန်းတွေကို ဖြေဆိုနိုင်မယ့် Tool တစ်ခုကို ဖန်တီးပေးသွားမှာ ဖြစ်ပါတယ်။ + +> [!TIP] +> ဒါဟာ Agentic RAG အတွက် **"လက်တွေ့ကမ္ဘာ"** မှာ အသုံးပြုနိုင်တဲ့ ဥပမာတစ်ခု ဖြစ်ပါတယ်။ ဒီလိုမျိုး Project တွေကို သင့်ရဲ့ ကိုယ်ပိုင် Project တွေ ဒါမှမဟုတ် လုပ်ငန်းခွင်တွေမှာ အသုံးပြုနိုင်ပါတယ်။ ဒီ Project ကနေ ပိုမိုအကျိုးရှိစေချင်တယ်ဆိုရင်၊ သင့်ရဲ့ ကိုယ်ပိုင် အသုံးချကိစ္စရပ် (Use Case) တွေမှာ စမ်းသပ်ပြီး Discord မှာ မျှဝေကြည့်ဖို့ ဘာလို့ မကြိုးစားကြည့်တာလဲ။ + +ဒီ Use Case အတွက် Course မှာ ဆွေးနွေးခဲ့တဲ့ Framework တွေထဲက ကြိုက်နှစ်သက်ရာကို သင်ရွေးချယ်နိုင်ပါတယ်။ Framework တစ်ခုချင်းစီအတွက် Code ဥပမာတွေကို သီးခြား Tab တွေမှာ ကျွန်တော်တို့ ပေးထားပါတယ်။ + +## မမေ့နိုင်စရာ ဧည့်ခံပွဲ (A Gala to Remember) + +ကဲ... အခုဆိုရင် လက်တွေ့ကျတဲ့ အသုံးချကိစ္စရပ်တစ်ခုနဲ့ လက်တွေ့လုပ်ဆောင်ဖို့ အချိန်ရောက်ပါပြီ။ အခြေအနေကို စတင်ဖန်တီးကြည့်ရအောင်! + +**သင်ဟာ ဒီရာစုနှစ်ရဲ့ အခမ်းနားဆုံးနဲ့ အကောင်းဆုံး ပါတီပွဲကို စီစဉ်ကျင်းပဖို့ ဆုံးဖြတ်လိုက်ပါပြီ။** ဆိုလိုတာကတော့ ခမ်းနားတဲ့ စားသောက်ပွဲတွေ၊ ဆွဲဆောင်မှုရှိတဲ့ အကသမားတွေ၊ နာမည်ကြီး DJ တွေ၊ အကောင်းဆုံး အဖျော်ယမကာတွေ၊ ရင်သပ်ရှုမောဖွယ် မီးရှူးမီးပန်းတွေနဲ့ အခြားအရာများစွာ ပါဝင်ရပါမယ်။ + +သင့်ရဲ့ ဖော်ရွေတဲ့ အိမ်နီးချင်း Agent ဖြစ်တဲ့ **Alfred** ဟာ ဒီပါတီအတွက် သင့်ရဲ့ လိုအပ်ချက်အားလုံးကို စောင့်ကြည့်ဖို့ အသင့်ဖြစ်နေပါပြီ။ **Alfred ဟာ အရာအားလုံးကို သူကိုယ်တိုင် စီမံခန့်ခွဲသွားမှာ ဖြစ်ပါတယ်**။ ဒီလိုလုပ်ဆောင်နိုင်ဖို့အတွက် ပါတီနဲ့ပတ်သက်တဲ့ အချက်အလက်အားလုံးကို သူရရှိဖို့ လိုအပ်ပါတယ်။ ဥပမာ- Menu၊ ဧည့်သည်များ၊ အစီအစဉ်၊ ရာသီဥတု ခန့်မှန်းချက်များ စတာတွေပေါ့။ + +ဒါ့အပြင်၊ ပါတီဟာ အောင်မြင်မှုရဖို့အတွက်လည်း သူသေချာလုပ်ဆောင်ရပါမယ်။ ဒါကြောင့် **ပါတီကျင်းပနေစဉ်အတွင်း ပါတီနဲ့ပတ်သက်တဲ့ မေးခွန်းမှန်သမျှကို သူဖြေဆိုနိုင်ဖို့** လိုအပ်သလို၊ မမျှော်လင့်ထားတဲ့ အခြေအနေတွေ ပေါ်ပေါက်လာရင်လည်း ကိုင်တွယ်ဖြေရှင်းနိုင်ဖို့ လိုပါတယ်။ + +Alfred တစ်ယောက်တည်းတော့ ဒါတွေအားလုံးကို မလုပ်နိုင်ပါဘူး။ ဒါကြောင့် Alfred ဟာ လိုအပ်တဲ့ အချက်အလက်နဲ့ Tool တွေအားလုံးကို ရရှိနိုင်ဖို့ ကျွန်တော်တို့ သေချာလုပ်ဆောင်ပေးရပါမယ်။ + +ပထမဆုံးအနေနဲ့၊ ဧည့်ခံပွဲအတွက် မဖြစ်မနေ လိုအပ်တဲ့ အချက်အလက်တွေကို Alfred ကို ပေးလိုက်ရအောင်။ + +## ဧည့်ခံပွဲ လိုအပ်ချက်များ (The Gala Requirements) + +**Renaissance (ဉာဏ်သစ်အရေးတော်ပုံ)** ခေတ်က စနစ်တကျ ပညာတတ်မြောက်ထားသူတစ်ဦးမှာ အဓိက အရည်အချင်း (၃) ခု ရှိဖို့ လိုအပ်ပါတယ်။ ၎င်းတို့ဟာ **အားကစား၊ ယဉ်ကျေးမှုနဲ့ သိပ္ပံပညာ** တို့မှာ နက်နဲတဲ့ အသိပညာရှိဖို့ လိုအပ်ပါတယ်။ ဒါကြောင့် ကျွန်တော်တို့ရဲ့ ဧည့်သည်တွေကို ကျွန်တော်တို့ရဲ့ အသိပညာတွေနဲ့ အထင်ကြီးစေပြီး တကယ်ကို မမေ့နိုင်စရာ ဧည့်ခံပွဲတစ်ခုကို ပေးစွမ်းနိုင်ဖို့ သေချာလုပ်ဆောင်ရပါမယ်။ + +သို့သော်လည်း၊ ပဋိပက္ခတွေ မဖြစ်ပွားစေဖို့အတွက် **နိုင်ငံရေးနဲ့ ဘာသာရေးလိုမျိုး အကြောင်းအရာတွေကို ဧည့်ခံပွဲမှာ ရှောင်ရှားရပါမယ်**။ ယုံကြည်ချက်နဲ့ စံနှုန်းတွေနဲ့ ပတ်သက်တဲ့ ပဋိပက္ခတွေ မရှိဘဲ ပျော်စရာကောင်းတဲ့ ပါတီတစ်ခု ဖြစ်ဖို့ လိုပါတယ်။ + +> **[Learner အတွက် ထပ်ဆောင်းအချက်]** Agent များကို ဒီလိုမျိုး ရှောင်ရန်/ဆောင်ရန် စည်းမျဉ်းများ (Constraints) ပေးခြင်းဟာ **Alignment** လုပ်ဆောင်ခြင်းရဲ့ အစိတ်အပိုင်းတစ်ခု ဖြစ်ပါတယ်။ ဒါမှ Agent ဟာ လူသားတို့ရဲ့ တန်ဖိုးများ (ဥပမာ - ပဋိပက္ခရှောင်ရှားခြင်း) နဲ့ ကိုက်ညီတဲ့ အဖြေတွေကိုသာ ထုတ်ပေးမှာ ဖြစ်ပါတယ်။ + +နောက်ဆုံးအနေနဲ့၊ ဧည့်ခံပွဲရဲ့ ဓလေ့ထုံးတမ်းအရ၊ **ကောင်းမွန်တဲ့ အိမ်ရှင်တစ်ဦးဟာ ဧည့်သည်တွေရဲ့ နောက်ခံအချက်အလက်တွေကို သိရှိထားဖို့ လိုအပ်ပါတယ်**။ ၎င်းတို့ရဲ့ စိတ်ဝင်စားမှုတွေနဲ့ ကြိုးပမ်းဆောင်ရွက်မှုတွေ အပါအဝင်ပေါ့။ ကောင်းမွန်တဲ့ အိမ်ရှင်တစ်ဦးဟာ ဧည့်သည်တွေအကြောင်း စကားပြောဆိုခြင်းနဲ့ ဇာတ်လမ်းလေးတွေ မျှဝေခြင်းကိုလည်း လုပ်ဆောင်ပါတယ်။ + +နောက်ဆုံးတစ်ခုကတော့၊ မီးရှူးမီးပန်းတွေကို အချိန်ကိုက် ဖောက်နိုင်ဖို့နဲ့ ဧည့်ခံပွဲကို အောင်မြင်စွာ အဆုံးသတ်နိုင်ဖို့အတွက် **ရာသီဥတုနဲ့ ပတ်သက်တဲ့ ယေဘုယျ အသိပညာအချို့** ရှိဖို့ လိုအပ်ပြီး၊ Real-time အချက်အလက်တွေကိုလည်း အဆက်မပြတ် ရှာဖွေနိုင်ဖို့ လိုအပ်ပါတယ်။ 🎆 + +သင်တွေ့မြင်ရတဲ့အတိုင်း Alfred ဟာ ဧည့်ခံပွဲကို စီစဉ်ကျင်းပဖို့အတွက် အချက်အလက်များစွာ လိုအပ်ပါတယ်။ + +ကံကောင်းစွာနဲ့ပဲ၊ ကျွန်တော်တို့ဟာ Alfred ကို **Retrieval Augmented Generation (RAG) Training** ပေးခြင်းဖြင့် ကူညီပေးနိုင်ပါတယ်။ + +ကဲ... Alfred ဧည့်ခံပွဲကို စီစဉ်ကျင်းပနိုင်ဖို့ လိုအပ်တဲ့ Tool တွေကို စတင်ဖန်တီးကြပါစို့! \ No newline at end of file diff --git a/units/my/unit3/agentic-rag/invitees.mdx b/units/my/unit3/agentic-rag/invitees.mdx new file mode 100644 index 00000000..067f84c2 --- /dev/null +++ b/units/my/unit3/agentic-rag/invitees.mdx @@ -0,0 +1,455 @@ +# ဧည့်သည်များ၏ အကြောင်းအရာများအတွက် RAG Tool တစ်ခု ဖန်တီးခြင်း + +သင့်ရဲ့ ယုံကြည်ရတဲ့ Agent ဖြစ်တဲ့ Alfred ဟာ ရာစုနှစ်ရဲ့ အခမ်းနားဆုံး ဧည့်ခံပွဲ (Gala) အတွက် ပြင်ဆင်နေပါတယ်။ ပွဲကို ချောမွေ့စွာ ကျင်းပနိုင်ဖို့အတွက် Alfred ဟာ ဧည့်သည်တစ်ဦးချင်းစီရဲ့ နောက်ဆုံးပေါ် အချက်အလက်တွေကို လျင်မြန်စွာ ရယူနိုင်ဖို့ လိုအပ်ပါတယ်။ ဒါကြောင့် ကျွန်တော်တို့ရဲ့ ကိုယ်ပိုင် ဒေတာအစုအဝေး (Custom Dataset) ကို အသုံးပြုပြီး **Retrieval-Augmented Generation (RAG)** Tool တစ်ခုကို Alfred အတွက် ဖန်တီးပေးကြပါစို့။ + +## ဧည့်ခံပွဲအတွက် RAG ကို ဘာကြောင့် အသုံးပြုသင့်သလဲ။ + +Alfred ဟာ ဧည့်သည်တွေကြားမှာ လှည့်လည်ရင်း လူတစ်ဦးချင်းစီရဲ့ အသေးစိတ်အချက်အလက်တွေကို ချက်ချင်းမှတ်မိဖို့ လိုအပ်တယ်လို့ မြင်ယောင်ကြည့်ပါ။ သမားရိုးကျ LLM (Large Language Model) တစ်ခုအနေနဲ့ ဒီလိုအလုပ်မျိုးကို လုပ်ဆောင်ဖို့ ခက်ခဲနိုင်ပါတယ်။ ဘာကြောင့်လဲဆိုတော့- + +1. ဧည့်သည်စာရင်းဟာ သင့်ပွဲအတွက် သီးသန့်ဖြစ်ပြီး မော်ဒယ်ရဲ့ လေ့ကျင့်ရေး ဒေတာထဲမှာ မပါဝင်ခြင်း။ +2. ဧည့်သည်အချက်အလက်တွေဟာ မကြာခဏ ပြောင်းလဲနိုင်ခြင်း သို့မဟုတ် အပ်ဒိတ်လုပ်နိုင်ခြင်း။ +3. Alfred ဟာ Email Address ကဲ့သို့ တိကျတဲ့ အသေးစိတ်အချက်အလက်တွေကို ပြန်လည်ရယူဖို့ လိုအပ်ခြင်း။ + +ဒီလိုအခြေအနေမျိုးမှာ **Retrieval Augmented Generation (RAG)** ဟာ အလွန်အသုံးဝင်ပါတယ်။ ပြန်လည်ရယူရေး စနစ် (Retrieval System) ကို LLM နဲ့ ပေါင်းစပ်ခြင်းအားဖြင့် Alfred ဟာ သင့်ဧည့်သည်တွေရဲ့ တိကျပြီး နောက်ဆုံးပေါ် အချက်အလက်တွေကို လိုအပ်သလို ချက်ချင်း ရယူနိုင်မှာ ဖြစ်ပါတယ်။ + +> [!TIP] +> ဒီအသုံးချကိစ္စအတွက် Course မှာ ပါဝင်တဲ့ Framework တွေထဲက ကြိုက်နှစ်သက်ရာကို ရွေးချယ်နိုင်ပါတယ်။ Code Tabs တွေကနေ သင်နှစ်သက်ရာ Option ကို ရွေးချယ်ပါ။ + +## ကျွန်ုပ်တို့၏ Application ကို စနစ်တကျ တည်ဆောက်ခြင်း + +ဒီအခန်းမှာတော့ ကျွန်တော်တို့ရဲ့ Agent ကို HF Space အတွင်းမှာ စနစ်တကျ ဖွဲ့စည်းထားတဲ့ Python Project တစ်ခုအနေနဲ့ ဖော်ဆောင်သွားပါမယ်။ ဒီနည်းလမ်းက လုပ်ဆောင်ချက်အမျိုးမျိုးကို သီးခြားဖိုင်တွေအဖြစ် စုစည်းထားခြင်းဖြင့် Code တွေကို သန့်ရှင်းပြီး စနစ်တကျ ဖြစ်စေဖို့ ကူညီပေးပါတယ်။ ဒါ့အပြင်၊ ဒါဟာ Application ကို လူအများသုံးဖို့ Deploy လုပ်တဲ့အခါ ပိုမိုလက်တွေ့ကျတဲ့ အသုံးချကိစ္စတစ်ခုလည်း ဖြစ်ပါတယ်။ + +### Project ဖွဲ့စည်းပုံ (Project Structure) + +* **`tools.py`** – Agent အတွက် အရန် Tool များကို ပံ့ပိုးပေးပါတယ်။ +* **`retriever.py`** – အသိပညာ ရယူခြင်းကို ပံ့ပိုးရန်အတွက် ပြန်လည်ရယူရေး Functions များကို အကောင်အထည်ဖော်ပါတယ်။ +* **`app.py`** – အစိတ်အပိုင်းအားလုံးကို အပြည့်အဝ လုပ်ဆောင်နိုင်သော Agent တစ်ခုအဖြစ် ပေါင်းစပ်ပေးပြီး၊ ဒီအခန်းရဲ့ နောက်ဆုံးအပိုင်းမှာ အပြီးသတ်သွားပါမယ်။ + +လက်တွေ့ကျကျ ကိုးကားလိုပါက၊ ဒီအခန်းမှာ ဖော်ဆောင်ထားတဲ့ Agentic RAG ကို တိုက်ရိုက်ကြည့်ရှုနိုင်တဲ့ [ဒီ HF Space](https://huggingface.co/spaces/agents-course/Unit_3_Agentic_RAG) ကို ကြည့်ရှုနိုင်ပါတယ်။ Clone လုပ်ပြီး စမ်းသပ်ကြည့်ဖို့ ဖိတ်ခေါ်ပါတယ်။ + +Agent ကို အောက်မှာ တိုက်ရိုက် စမ်းသပ်နိုင်ပါတယ်။ + + + +## ဒေတာအစုအဝေး ခြုံငုံသုံးသပ်ချက် (Dataset Overview) + +ကျွန်တော်တို့ရဲ့ ဒေတာအစုအဝေး [`agents-course/unit3-invitees`](https://huggingface.co/datasets/agents-course/unit3-invitees/) မှာ ဧည့်သည်တစ်ဦးချင်းစီအတွက် အောက်ပါ အချက်အလက်များ ပါဝင်ပါတယ်။ + +* **Name**: ဧည့်သည်၏ အမည်အပြည့်အစုံ +* **Relation**: ဧည့်သည်သည် အိမ်ရှင်နှင့် မည်သို့ ဆက်စပ်မှုရှိသလဲ +* **Description**: ဧည့်သည်၏ အတ္ထုပ္ပတ္တိ အကျဉ်းချုပ် သို့မဟုတ် စိတ်ဝင်စားဖွယ် အချက်အလက်များ +* **Email Address**: ဖိတ်စာများ ပေးပို့ရန် သို့မဟုတ် နောက်ဆက်တွဲ ဆက်သွယ်ရန် အချက်အလက် + +အောက်တွင် ဒေတာအစုအဝေး၏ အကြိုကြည့်ရှုမှုကို ဖော်ပြထားပါတယ်။ + + +> [!TIP] +> လက်တွေ့ကမ္ဘာ အခြေအနေမှာ၊ ဒီဒေတာအစုအဝေးကို အစားအသောက် နှစ်သက်မှုများ၊ လက်ဆောင် စိတ်ဝင်စားမှုများ၊ စကားပြောဆိုရာတွင် ရှောင်ရန် အကြောင်းအရာများနှင့် အိမ်ရှင်အတွက် အထောက်အကူဖြစ်စေမည့် အခြားအသေးစိတ်အချက်အလက်များ ထည့်သွင်းပြီး ချဲ့ထွင်နိုင်ပါတယ်။ + +## Guestbook Tool ကို တည်ဆောက်ခြင်း + +ဧည့်ခံပွဲအတွင်း Alfred က ဧည့်သည်အချက်အလက်တွေကို လျင်မြန်စွာ ပြန်လည်ရယူနိုင်ဖို့အတွက် Custom Tool တစ်ခုကို ဖန်တီးပါမယ်။ ဒီလုပ်ငန်းစဉ်ကို စီမံခန့်ခွဲနိုင်တဲ့ အဆင့် (၃) ဆင့် ခွဲခြားပြီး လုပ်ဆောင်ပါမယ်။ + +1. ဒေတာအစုအဝေးကို တင်သွင်းပြီး ပြင်ဆင်ခြင်း +2. Retriever Tool ကို ဖန်တီးခြင်း +3. Tool ကို Alfred နှင့် ပေါင်းစပ်ခြင်း + +ဒေတာအစုအဝေးကို တင်သွင်းပြီး ပြင်ဆင်ခြင်းဖြင့် စတင်ကြပါစို့။ + +### အဆင့် ၁: ဒေတာအစုအဝေးကို တင်သွင်းပြီး ပြင်ဆင်ခြင်း + +ပထမဆုံးအနေနဲ့၊ ကျွန်တော်တို့ရဲ့ မူရင်းဧည့်သည်ဒေတာကို ပြန်လည်ရယူရေးအတွက် အကောင်းဆုံးဖြစ်အောင် ပုံစံပြောင်းလဲဖို့ လိုအပ်ပါတယ်။ + + + + +ကျွန်တော်တို့ Hugging Face `datasets` Library ကို အသုံးပြုပြီး ဒေတာအစုအဝေးကို တင်သွင်းကာ `langchain.docstore.document` Module မှ `Document` Object များအဖြစ် ပြောင်းလဲပါမယ်။ + +```python +import datasets +from langchain_core.documents import Document + +# Load the dataset +guest_dataset = datasets.load_dataset("agents-course/unit3-invitees", split="train") + +# Convert dataset entries into Document objects +docs = [ + Document( + page_content="\n".join([ + f"Name: {guest['name']}", + f"Relation: {guest['relation']}", + f"Description: {guest['description']}", + f"Email: {guest['email']}" + ]), + metadata={"name": guest["name"]} + ) + for guest in guest_dataset +] + +``` + + + + +ကျွန်တော်တို့ Hugging Face `datasets` Library ကို အသုံးပြုပြီး ဒေတာအစုအဝေးကို တင်သွင်းကာ `llama_index.core.schema` Module မှ `Document` Object များအဖြစ် ပြောင်းလဲပါမယ်။ + +```python +import datasets +from llama_index.core.schema import Document + +# Load the dataset +guest_dataset = datasets.load_dataset("agents-course/unit3-invitees", split="train") + +# Convert dataset entries into Document objects +docs = [ + Document( + text="\n".join([ + f"Name: {guest_dataset['name'][i]}", + f"Relation: {guest_dataset['relation'][i]}", + f"Description: {guest_dataset['description'][i]}", + f"Email: {guest_dataset['email'][i]}" + ]), + metadata={"name": guest_dataset['name'][i]} + ) + for i in range(len(guest_dataset)) +] +``` + + + + +ကျွန်တော်တို့ Hugging Face `datasets` Library ကို အသုံးပြုပြီး ဒေတာအစုအဝေးကို တင်သွင်းကာ `langchain.docstore.document` Module မှ `Document` Object များအဖြစ် ပြောင်းလဲပါမယ်။ + +```python +import datasets +from langchain_core.documents import Document + +# Load the dataset +guest_dataset = datasets.load_dataset("agents-course/unit3-invitees", split="train") + +# Convert dataset entries into Document objects +docs = [ + Document( + page_content="\n".join([ + f"Name: {guest['name']}", + f"Relation: {guest['relation']}", + f"Description: {guest['description']}", + f"Email: {guest['email']}" + ]), + metadata={"name": guest["name"]} + ) + for guest in guest_dataset +] +``` + + + + +အထက်ပါ Code မှာ ကျွန်တော်တို့- +* ဒေတာအစုအဝေးကို တင်သွင်းခြင်း +* ဧည့်သည်တစ်ဦးချင်းစီရဲ့ အချက်အလက်ကို ပုံစံချထားတဲ့ `Document` Object အဖြစ် ပြောင်းလဲခြင်း +* `Document` Object များကို List တစ်ခုထဲမှာ သိမ်းဆည်းခြင်း + +ဒါဆိုရင် ကျွန်တော်တို့ရဲ့ ဒေတာအားလုံးကို ပြန်လည်ရယူရေး စနစ်အတွက် ကောင်းမွန်စွာ ပြင်ဆင်ပြီးပါပြီ။ + +### အဆင့် ၂: Retriever Tool ကို ဖန်တီးခြင်း + +အခုဆိုရင် Alfred က ဧည့်သည်အချက်အလက်တွေကို ရှာဖွေဖို့ အသုံးပြုနိုင်မယ့် Custom Tool တစ်ခုကို ဖန်တီးကြပါစို့။ + + + + +ကျွန်တော်တို့ `langchain_community.retrievers` Module မှ `BM25Retriever` ကို အသုံးပြုပြီး Retriever Tool တစ်ခုကို ဖန်တီးပါမယ်။ + +> [!TIP] +> `BM25Retriever` ဟာ ပြန်လည်ရယူရေးအတွက် အလွန်ကောင်းမွန်တဲ့ စတင်ရာနေရာတစ်ခု ဖြစ်ပါတယ်။ ဒါပေမယ့် ပိုမိုအဆင့်မြင့်တဲ့ Semantic Search အတွက်ဆိုရင် [sentence-transformers](https://www.sbert.net/) ကဲ့သို့သော Embedding-based Retriever များကို အသုံးပြုဖို့ စဉ်းစားနိုင်ပါတယ်။ + +```python +from smolagents import Tool +from langchain_community.retrievers import BM25Retriever + +class GuestInfoRetrieverTool(Tool): + name = "guest_info_retriever" + description = "Retrieves detailed information about gala guests based on their name or relation." + inputs = { + "query": { + "type": "string", + "description": "The name or relation of the guest you want information about." + } + } + output_type = "string" + + def __init__(self, docs): + self.is_initialized = False + self.retriever = BM25Retriever.from_documents(docs) + + def forward(self, query: str): + results = self.retriever.get_relevant_documents(query) + if results: + return "\n\n".join([doc.page_content for doc in results[:3]]) + else: + return "No matching guest information found." + +# Initialize the tool +guest_info_tool = GuestInfoRetrieverTool(docs) +``` + +ဒီ Tool ကို အဆင့်ဆင့် နားလည်ကြည့်ရအောင်- +* `name` နဲ့ `description` တွေက Agent ကို ဒီ Tool ကို ဘယ်အချိန်မှာ ဘယ်လို အသုံးပြုရမယ်ဆိုတာ နားလည်စေဖို့ ကူညီပေးပါတယ်။ +* `inputs` က Tool က ဘယ်လို Parameter တွေကို မျှော်လင့်သလဲဆိုတာကို သတ်မှတ်ပေးပါတယ်။ (ဒီကိစ္စမှာ Search Query တစ်ခုပါ) +* ကျွန်တော်တို့ `BM25Retriever` ကို အသုံးပြုထားပါတယ်။ ဒါဟာ Embedding တွေ မလိုအပ်ဘဲ အစွမ်းထက်တဲ့ Text Retrieval Algorithm တစ်ခု ဖြစ်ပါတယ်။ +* `forward` Method က Query ကို စီမံဆောင်ရွက်ပြီး အသင့်တော်ဆုံး ဧည့်သည်အချက်အလက်တွေကို ပြန်ပေးပါတယ်။ + + + + +ကျွန်တော်တို့ `llama_index.retrievers.bm25` Module မှ `BM25Retriever` ကို အသုံးပြုပြီး Retriever Tool တစ်ခုကို ဖန်တီးပါမယ်။ + +> [!TIP] +> `BM25Retriever` ဟာ ပြန်လည်ရယူရေးအတွက် အလွန်ကောင်းမွန်တဲ့ စတင်ရာနေရာတစ်ခု ဖြစ်ပါတယ်။ ဒါပေမယ့် ပိုမိုအဆင့်မြင့်တဲ့ Semantic Search အတွက်ဆိုရင် [sentence-transformers](https://www.sbert.net/) ကဲ့သို့သော Embedding-based Retriever များကို အသုံးပြုဖို့ စဉ်းစားနိုင်ပါတယ်။ + +```python +from llama_index.core.tools import FunctionTool +from llama_index.retrievers.bm25 import BM25Retriever + +bm25_retriever = BM25Retriever.from_defaults(nodes=docs) + +def get_guest_info_retriever(query: str) -> str: + """Retrieves detailed information about gala guests based on their name or relation.""" + results = bm25_retriever.retrieve(query) + if results: + return "\n\n".join([doc.text for doc in results[:3]]) + else: + return "No matching guest information found." + +# Initialize the tool +guest_info_tool = FunctionTool.from_defaults(get_guest_info_retriever) +``` + +ဒီ Tool ကို အဆင့်ဆင့် နားလည်ကြည့်ရအောင်- +* Docstring က Agent ကို ဒီ Tool ကို ဘယ်အချိန်မှာ ဘယ်လို အသုံးပြုရမယ်ဆိုတာ နားလည်စေဖို့ ကူညီပေးပါတယ်။ +* Type Decorators တွေက Tool က ဘယ်လို Parameter တွေကို မျှော်လင့်သလဲဆိုတာကို သတ်မှတ်ပေးပါတယ်။ (ဒီကိစ္စမှာ Search Query တစ်ခုပါ) +* ကျွန်တော်တို့ `BM25Retriever` ကို အသုံးပြုထားပါတယ်။ ဒါဟာ Embedding တွေ မလိုအပ်ဘဲ အစွမ်းထက်တဲ့ Text Retrieval Algorithm တစ်ခု ဖြစ်ပါတယ်။ +* Method က Query ကို စီမံဆောင်ရွက်ပြီး အသင့်တော်ဆုံး ဧည့်သည်အချက်အလက်တွေကို ပြန်ပေးပါတယ်။ + + + + +ကျွန်တော်တို့ `langchain_community.retrievers` Module မှ `BM25Retriever` ကို အသုံးပြုပြီး Retriever Tool တစ်ခုကို ဖန်တီးပါမယ်။ + +> [!TIP] +> `BM25Retriever` ဟာ ပြန်လည်ရယူရေးအတွက် အလွန်ကောင်းမွန်တဲ့ စတင်ရာနေရာတစ်ခု ဖြစ်ပါတယ်။ ဒါပေမယ့် ပိုမိုအဆင့်မြင့်တဲ့ Semantic Search အတွက်ဆိုရင် [sentence-transformers](https://www.sbert.net/) ကဲ့သို့သော Embedding-based Retriever များကို အသုံးပြုဖို့ စဉ်းစားနိုင်ပါတယ်။ + +```python +from langchain_community.retrievers import BM25Retriever +from langchain.tools import Tool + +bm25_retriever = BM25Retriever.from_documents(docs) + +def extract_text(query: str) -> str: + """Retrieves detailed information about gala guests based on their name or relation.""" + results = bm25_retriever.invoke(query) + if results: + return "\n\n".join([doc.page_content for doc in results[:3]]) + else: + return "No matching guest information found." + +guest_info_tool = Tool( + name="guest_info_retriever", + func=extract_text, + description="Retrieves detailed information about gala guests based on their name or relation." +) +``` + +ဒီ Tool ကို အဆင့်ဆင့် နားလည်ကြည့်ရအောင်- +* `name` နဲ့ `description` တွေက Agent ကို ဒီ Tool ကို ဘယ်အချိန်မှာ ဘယ်လို အသုံးပြုရမယ်ဆိုတာ နားလည်စေဖို့ ကူညီပေးပါတယ်။ +* Type Decorators တွေက Tool က ဘယ်လို Parameter တွေကို မျှော်လင့်သလဲဆိုတာကို သတ်မှတ်ပေးပါတယ်။ (ဒီကိစ္စမှာ Search Query တစ်ခုပါ) +* ကျွန်တော်တို့ `BM25Retriever` ကို အသုံးပြုထားပါတယ်။ ဒါဟာ Embedding တွေ မလိုအပ်ဘဲ အစွမ်းထက်တဲ့ Text Retrieval Algorithm တစ်ခု ဖြစ်ပါတယ်။ +* Method က Query ကို စီမံဆောင်ရွက်ပြီး အသင့်တော်ဆုံး ဧည့်သည်အချက်အလက်တွေကို ပြန်ပေးပါတယ်။ + + + + +### အဆင့် ၃: Tool ကို Alfred နှင့် ပေါင်းစပ်ခြင်း + +နောက်ဆုံးအနေနဲ့၊ ကျွန်တော်တို့ရဲ့ Agent ကို ဖန်တီးပြီး Custom Tool ကို ထည့်သွင်းပေးခြင်းဖြင့် အရာအားလုံးကို ပေါင်းစပ်လိုက်ကြပါစို့။ + + + + +```python +from smolagents import CodeAgent, InferenceClientModel + +# Initialize the Hugging Face model +model = InferenceClientModel() + +# Create Alfred, our gala agent, with the guest info tool +alfred = CodeAgent(tools=[guest_info_tool], model=model) + +# Example query Alfred might receive during the gala +response = alfred.run("Tell me about our guest named 'Lady Ada Lovelace'.") + +print("🎩 Alfred's Response:") +print(response) +``` + +မျှော်မှန်းထားသော ရလဒ်- + +``` +🎩 Alfred's Response: +Based on the information I retrieved, Lady Ada Lovelace is an esteemed mathematician and friend. She is renowned for her pioneering work in mathematics and computing, often celebrated as the first computer programmer due to her work on Charles Babbage's Analytical Engine. Her email address is ada.lovelace@example.com. +``` + +ဒီနောက်ဆုံးအဆင့်မှာ ဘာတွေဖြစ်သွားသလဲ- +* `InferenceClientModel` Class ကို အသုံးပြုပြီး Hugging Face Model တစ်ခုကို စတင်အသုံးပြုခြင်း။ +* ပြဿနာများကို ဖြေရှင်းရန် Python Code ကို လုပ်ဆောင်နိုင်သော `CodeAgent` အဖြစ် ကျွန်တော်တို့ရဲ့ Agent (Alfred) ကို ဖန်တီးခြင်း။ +* Alfred ကို "Lady Ada Lovelace" အမည်ရှိ ဧည့်သည်အကြောင်း အချက်အလက်များ ပြန်လည်ရယူရန် တောင်းဆိုခြင်း။ + + + + +```python +from llama_index.core.agent.workflow import AgentWorkflow +from llama_index.llms.huggingface_api import HuggingFaceInferenceAPI + +# Initialize the Hugging Face model +llm = HuggingFaceInferenceAPI(model_name="Qwen/Qwen2.5-Coder-32B-Instruct") + +# Create Alfred, our gala agent, with the guest info tool +alfred = AgentWorkflow.from_tools_or_functions( + [guest_info_tool], + llm=llm, +) + +# Example query Alfred might receive during the gala +response = await alfred.run("Tell me about our guest named 'Lady Ada Lovelace'.") + +print("🎩 Alfred's Response:") +print(response) +``` + +မျှော်မှန်းထားသော ရလဒ်- + +``` +🎩 Alfred's Response: +Lady Ada Lovelace is an esteemed mathematician and friend, renowned for her pioneering work in mathematics and computing. She is celebrated as the first computer programmer due to her work on Charles Babbage's Analytical Engine. Her email is ada.lovelace@example.com. +``` + +ဒီနောက်ဆုံးအဆင့်မှာ ဘာတွေဖြစ်သွားသလဲ- +* `HuggingFaceInferenceAPI` Class ကို အသုံးပြုပြီး Hugging Face Model တစ်ခုကို စတင်အသုံးပြုခြင်း။ +* ကျွန်တော်တို့ ဖန်တီးထားတဲ့ Tool ကို ထည့်သွင်းပြီး `AgentWorkflow` အဖြစ် Alfred ကို ဖန်တီးခြင်း။ +* Alfred ကို "Lady Ada Lovelace" အမည်ရှိ ဧည့်သည်အကြောင်း အချက်အလက်များ ပြန်လည်ရယူရန် တောင်းဆိုခြင်း။ + + + + +```python +from typing import TypedDict, Annotated +from langgraph.graph.message import add_messages +from langchain_core.messages import AnyMessage, HumanMessage, AIMessage +from langgraph.prebuilt import ToolNode +from langgraph.graph import START, StateGraph +from langgraph.prebuilt import tools_condition +from langchain_huggingface import HuggingFaceEndpoint, ChatHuggingFace + +# Generate the chat interface, including the tools +llm = HuggingFaceEndpoint( + repo_id="Qwen/Qwen2.5-Coder-32B-Instruct", + huggingfacehub_api_token=HUGGINGFACEHUB_API_TOKEN, +) + +chat = ChatHuggingFace(llm=llm, verbose=True) +tools = [guest_info_tool] +chat_with_tools = chat.bind_tools(tools) + +# Generate the AgentState and Agent graph +class AgentState(TypedDict): + messages: Annotated[list[AnyMessage], add_messages] + +def assistant(state: AgentState): + return { + "messages": [chat_with_tools.invoke(state["messages"])], + } + +## The graph +builder = StateGraph(AgentState) + +# Define nodes: these do the work +builder.add_node("assistant", assistant) +builder.add_node("tools", ToolNode(tools)) + +# Define edges: these determine how the control flow moves +builder.add_edge(START, "assistant") +builder.add_conditional_edges( + "assistant", + # If the latest message requires a tool, route to tools + # Otherwise, provide a direct response + tools_condition, +) +builder.add_edge("tools", "assistant") +alfred = builder.compile() + +messages = [HumanMessage(content="Tell me about our guest named 'Lady Ada Lovelace'.")] +response = alfred.invoke({"messages": messages}) + +print("🎩 Alfred's Response:") +print(response['messages'][-1].content) +``` + +မျှော်မှန်းထားသော ရလဒ်- + +``` +🎩 Alfred's Response: +Lady Ada Lovelace is an esteemed mathematician and pioneer in computing, often celebrated as the first computer programmer due to her work on Charles Babbage's Analytical Engine. +``` + +ဒီနောက်ဆုံးအဆင့်မှာ ဘာတွေဖြစ်သွားသလဲ- +* `HuggingFaceEndpoint` Class ကို အသုံးပြုပြီး Hugging Face Model တစ်ခုကို စတင်အသုံးပြုခြင်း။ Chat Interface ကို ဖန်တီးပြီး Tools များကို ထည့်သွင်းခြင်း။ +* `StateGraph` အဖြစ် Alfred ကို ဖန်တီးခြင်း။ ၎င်းသည် `assistant` နှင့် `tools` Nodes နှစ်ခုကို Edge များဖြင့် ပေါင်းစပ်ထားပါတယ်။ +* Alfred ကို "Lady Ada Lovelace" အမည်ရှိ ဧည့်သည်အကြောင်း အချက်အလက်များ ပြန်လည်ရယူရန် တောင်းဆိုခြင်း။ + + + + +## ဥပမာ ဆက်သွယ်ပြောဆိုမှု (Example Interaction) + +ဧည့်ခံပွဲအတွင်း စကားပြောဆိုမှုတစ်ခုက အောက်ပါအတိုင်း ဖြစ်နိုင်ပါတယ်။ + +**သင်:** "Alfred၊ သံအမတ်ကြီးနဲ့ စကားပြောနေတဲ့ လူကြီးမင်းက ဘယ်သူလဲ။" + +**Alfred:** *ဧည့်သည်ဒေတာဘေ့စ်ကို လျင်မြန်စွာ ရှာဖွေသည်* "သူကတော့ Dr. Nikola Tesla ပါခင်ဗျာ။ သူဟာ သခင်ရဲ့ တက္ကသိုလ်တက်စဉ်ကတည်းက မိတ်ဆွေဟောင်းတစ်ဦးပါ။ သူဟာ မကြာသေးခင်က Wireless Energy Transmission System အသစ်တစ်ခုကို မူပိုင်ခွင့် မှတ်ပုံတင်ထားပြီး၊ သခင်နဲ့ ဆွေးနွေးရရင် ဝမ်းသာပါလိမ့်မယ်။ သူဟာ ခိုတွေကို အရမ်းစိတ်အားထက်သန်သူဖြစ်လို့၊ အဲဒါက စကားစမြည်ပြောဖို့ ကောင်းမွန်တဲ့ အကြောင်းအရာတစ်ခု ဖြစ်နိုင်ပါတယ်ခင်ဗျာ။" + +```json +{ + "name": "Dr. Nikola Tesla", + "relation": "old friend from university days", + "description": "Dr. Nikola Tesla is an old friend from your university days. He's recently patented a new wireless energy transmission system and would be delighted to discuss it with you. Just remember he's passionate about pigeons, so that might make for good small talk.", + "email": "nikola.tesla@gmail.com" +} +``` + +## ပိုမို အဆင့်မြှင့်တင်ခြင်း (Taking It Further) + +Alfred ဟာ ဧည့်သည်အချက်အလက်တွေကို ပြန်လည်ရယူနိုင်ပြီဆိုတော့၊ ဒီစနစ်ကို ဘယ်လို ပိုမိုကောင်းမွန်အောင် လုပ်ဆောင်နိုင်မလဲဆိုတာ စဉ်းစားကြည့်ပါ။ + +1. **Retriever ကို ပိုမိုကောင်းမွန်အောင် လုပ်ဆောင်ခြင်း:** [sentence-transformers](https://www.sbert.net/) ကဲ့သို့ ပိုမိုရှုပ်ထွေးတဲ့ Algorithm များကို အသုံးပြုပြီး Retriever ကို အဆင့်မြှင့်တင်ပါ။ +2. **Conversation Memory ထည့်သွင်းခြင်း:** Alfred က ယခင် ဆက်သွယ်ပြောဆိုမှုများကို မှတ်မိစေရန်အတွက် Memory စနစ်တစ်ခုကို အကောင်အထည်ဖော်ပါ။ +3. **Web Search နှင့် ပေါင်းစပ်ခြင်း:** မရင်းနှီးသေးသော ဧည့်သည်များအတွက် နောက်ဆုံးပေါ် အချက်အလက်များကို ရယူရန် Web Search နှင့် ပေါင်းစပ်ပါ။ +4. **Multiple Indexes များ ပေါင်းစပ်ခြင်း:** စစ်ဆေးပြီးသော ရင်းမြစ်များမှ ပိုမိုပြည့်စုံသော အချက်အလက်များ ရရှိရန် Index များစွာကို ပေါင်းစပ်ပါ။ + +အခုဆိုရင် Alfred ဟာ ဧည့်သည်များရဲ့ မေးမြန်းမှုများကို အလွယ်တကူ ကိုင်တွယ်ဖြေရှင်းနိုင်ဖို့ အပြည့်အဝ ပြင်ဆင်ပြီးပါပြီ။ ဒါဟာ သင့်ရဲ့ ဧည့်ခံပွဲကို ရာစုနှစ်ရဲ့ အခမ်းနားဆုံးနှင့် အပျော်ရွှင်ဆုံး ပွဲတစ်ခုအဖြစ် မှတ်မှတ်ရရ ဖြစ်စေမှာ သေချာပါတယ်။ + +> [!TIP] +> ဧည့်သည်တစ်ဦးချင်းစီရဲ့ စိတ်ဝင်စားမှု သို့မဟုတ် နောက်ခံအချက်အလက်များအပေါ် အခြေခံပြီး စကားစမြည်ပြောဆိုရန် အကြောင်းအရာများကိုပါ ပြန်လည်ပေးပို့နိုင်ဖို့ Retriever Tool ကို ချဲ့ထွင်ကြည့်ပါ။ ဒီလိုလုပ်ဆောင်ဖို့အတွက် Tool ကို ဘယ်လို ပြင်ဆင်မလဲ။ +> +> ပြီးသွားတဲ့အခါ၊ သင်၏ Guest Retriever Tool ကို `retriever.py` ဖိုင်ထဲမှာ အကောင်အထည်ဖော်ကြည့်ပါ။ \ No newline at end of file diff --git a/units/my/unit3/agentic-rag/tools.mdx b/units/my/unit3/agentic-rag/tools.mdx new file mode 100644 index 00000000..1281443a --- /dev/null +++ b/units/my/unit3/agentic-rag/tools.mdx @@ -0,0 +1,431 @@ +# Agent အတွက် Tools များ တည်ဆောက်ခြင်းနှင့် ပေါင်းစပ်ခြင်း + +ဒီအပိုင်းမှာတော့ ကျွန်တော်တို့ရဲ့ Agent ဖြစ်တဲ့ Alfred ကို အင်တာနက်ကို ဝင်ရောက်ခွင့် ပေးလိုက်ပါမယ်။ ဒါမှ သူဟာ နောက်ဆုံးပေါ် သတင်းတွေနဲ့ ကမ္ဘာ့အခြေအနေတွေကို ရှာဖွေနိုင်မှာပါ။ ဒါ့အပြင်၊ Alfred ဟာ ရာသီဥတု ဒေတာတွေနဲ့ Hugging Face Hub က Model Download စာရင်းဇယားတွေကိုပါ ရယူနိုင်မှာဖြစ်လို့၊ ခေတ်မီတဲ့ အကြောင်းအရာတွေနဲ့ ပတ်သက်ပြီး စကားဝိုင်းတွေကို စိတ်ဝင်စားစရာ ဖြစ်အောင် ဖန်တီးနိုင်ပါလိမ့်မယ်။ + +## သင့် Agent ကို အင်တာနက် ဝင်ရောက်ခွင့် ပေးခြင်း + +Alfred ကို ကမ္ဘာကြီးအကြောင်း နက်နက်နဲနဲ သိတဲ့ ဧည့်ခံသူ (Renaissance Host) အဖြစ် ရပ်တည်စေချင်တယ်ဆိုတာ သတိရပါ။ + +ဒီလိုလုပ်ဖို့အတွက် Alfred ဟာ ကမ္ဘာပေါ်က နောက်ဆုံးပေါ် သတင်းအချက်အလက်တွေကို ရယူနိုင်ဖို့ လိုအပ်ပါတယ်။ + +ဒါကြောင့် Alfred အတွက် Web Search Tool တစ်ခုကို စတင်ဖန်တီးကြပါစို့! + + + + +```python +from smolagents import DuckDuckGoSearchTool + +# DuckDuckGo ရှာဖွေရေး Tool ကို စတင်သတ်မှတ်ခြင်း +search_tool = DuckDuckGoSearchTool() + +# ဥပမာ အသုံးပြုပုံ +results = search_tool("Who's the current President of France?") +print(results) +``` + +မျှော်မှန်းထားသော ရလဒ်: + +``` +The current President of France in Emmanuel Macron. +``` + + + + + +```python +from llama_index.tools.duckduckgo import DuckDuckGoSearchToolSpec +from llama_index.core.tools import FunctionTool + +# DuckDuckGo ရှာဖွေရေး Tool ကို စတင်သတ်မှတ်ခြင်း +tool_spec = DuckDuckGoSearchToolSpec() + +search_tool = FunctionTool.from_defaults(tool_spec.duckduckgo_full_search) +# ဥပမာ အသုံးပြုပုံ +response = search_tool("Who's the current President of France?") +print(response.raw_output[-1]['body']) +``` + +မျှော်မှန်းထားသော ရလဒ်: + +``` +The President of the French Republic is the head of state of France. The current President is Emmanuel Macron since 14 May 2017 defeating Marine Le Pen in the second round of the presidential election on 7 May 2017. List of French presidents (Fifth Republic) N° Portrait Name ... +``` + + + + +```python +from langchain_community.tools import DuckDuckGoSearchRun + +search_tool = DuckDuckGoSearchRun() +results = search_tool.invoke("Who's the current President of France?") +print(results) +``` + +မျှော်မှန်းထားသော ရလဒ်: + +``` +Emmanuel Macron (born December 21, 1977, Amiens, France) is a French banker and politician who was elected president of France in 2017... +``` + + + + +## မီးရှူးမီးပန်းပွဲ စီစဉ်ရန်အတွက် ရာသီဥတု အချက်အလက် Tool တစ်ခု ဖန်တီးခြင်း + +ပြီးပြည့်စုံတဲ့ ဧည့်ခံပွဲတစ်ခုမှာ ကောင်းကင်ရှင်းလင်းနေတဲ့ အပေါ်ကနေ မီးရှူးမီးပန်းတွေ ပစ်ဖောက်နိုင်ဖို့ လိုပါတယ်။ ဒါကြောင့် ရာသီဥတု ဆိုးရွားမှုကြောင့် မီးရှူးမီးပန်းပွဲ ဖျက်သိမ်းရတာမျိုး မဖြစ်အောင် သေချာလုပ်ရပါမယ်။ + +ပြင်ပ ရာသီဥတု API ကို ခေါ်ဆိုပြီး သတ်မှတ်ထားတဲ့ နေရာတစ်ခုအတွက် ရာသီဥတု အချက်အလက် ရယူနိုင်မယ့် Custom Tool တစ်ခုကို ဖန်တီးကြပါစို့။ + +> [!TIP] +> ရိုးရှင်းစေရန်အတွက်၊ ကျွန်တော်တို့ ဒီဥပမာမှာ **အစမ်းသဘော ရာသီဥတု API (Dummy Weather API)** ကို အသုံးပြုထားပါတယ်။ အကယ်၍ သင်ဟာ တကယ့် ရာသီဥတု API ကို အသုံးပြုချင်တယ်ဆိုရင်၊ [အခန်း ၁](../../unit1/tutorial) မှာလိုမျိုး OpenWeatherMap API ကို အသုံးပြုတဲ့ Tool တစ်ခုကို အကောင်အထည်ဖော်နိုင်ပါတယ်။ + + + + +```python +from smolagents import Tool +import random + +class WeatherInfoTool(Tool): + name = "weather_info" + description = "Fetches dummy weather information for a given location." + inputs = { + "location": { + "type": "string", + "description": "The location to get weather information for." + } + } + output_type = "string" + + def forward(self, location: str): + # အစမ်းသဘော ရာသီဥတု ဒေတာ + weather_conditions = [ + {"condition": "Rainy", "temp_c": 15}, + {"condition": "Clear", "temp_c": 25}, + {"condition": "Windy", "temp_c": 20} + ] + # ရာသီဥတု အခြေအနေတစ်ခုကို ကျပန်း ရွေးချယ်ခြင်း + data = random.choice(weather_conditions) + return f"Weather in {location}: {data['condition']}, {data['temp_c']}°C" + +# Tool ကို စတင်သတ်မှတ်ခြင်း +weather_info_tool = WeatherInfoTool() +``` + + + + +```python +import random +from llama_index.core.tools import FunctionTool + +def get_weather_info(location: str) -> str: + """Fetches dummy weather information for a given location.""" + # အစမ်းသဘော ရာသီဥတု ဒေတာ + weather_conditions = [ + {"condition": "Rainy", "temp_c": 15}, + {"condition": "Clear", "temp_c": 25}, + {"condition": "Windy", "temp_c": 20} + ] + # ရာသီဥတု အခြေအနေတစ်ခုကို ကျပန်း ရွေးချယ်ခြင်း + data = random.choice(weather_conditions) + return f"Weather in {location}: {data['condition']}, {data['temp_c']}°C" + +# Tool ကို စတင်သတ်မှတ်ခြင်း +weather_info_tool = FunctionTool.from_defaults(get_weather_info) +``` + + + + +```python +from langchain.tools import Tool +import random + +def get_weather_info(location: str) -> str: + """Fetches dummy weather information for a given location.""" + # အစမ်းသဘော ရာသီဥတု ဒေတာ + weather_conditions = [ + {"condition": "Rainy", "temp_c": 15}, + {"condition": "Clear", "temp_c": 25}, + {"condition": "Windy", "temp_c": 20} + ] + # ရာသီဥတု အခြေအနေတစ်ခုကို ကျပန်း ရွေးချယ်ခြင်း + data = random.choice(weather_conditions) + return f"Weather in {location}: {data['condition']}, {data['temp_c']}°C" + +# Tool ကို စတင်သတ်မှတ်ခြင်း +weather_info_tool = Tool( + name="get_weather_info", + func=get_weather_info, + description="Fetches dummy weather information for a given location." +) +``` + + + + +## သြဇာရှိသော AI တည်ဆောက်သူများအတွက် Hub Stats Tool တစ်ခု ဖန်တီးခြင်း + +ဧည့်ခံပွဲကို AI နယ်ပယ်မှ ထိပ်တန်း ပုဂ္ဂိုလ်များ တက်ရောက်ကြပါတယ်။ Alfred က သူတို့ရဲ့ လူကြိုက်အများဆုံး Models, Datasets နဲ့ Spaces တွေအကြောင်း ဆွေးနွေးခြင်းဖြင့် သူတို့ကို အထင်ကြီးစေချင်ပါတယ်။ ဒါကြောင့် Username ကို အခြေခံပြီး Hugging Face Hub မှ Model စာရင်းဇယားများကို ရယူနိုင်မယ့် Tool တစ်ခုကို ဖန်တီးပါမယ်။ + + + + +```python +from smolagents import Tool +from huggingface_hub import list_models + +class HubStatsTool(Tool): + name = "hub_stats" + description = "Fetches the most downloaded model from a specific author on the Hugging Face Hub." + inputs = { + "author": { + "type": "string", + "description": "The username of the model author/organization to find models from." + } + } + output_type = "string" + + def forward(self, author: str): + try: + # သတ်မှတ်ထားသော Author မှ Models များကို Downloads အရေအတွက်အလိုက် စီစဉ်ပြီး စာရင်းပြုစုခြင်း + models = list(list_models(author=author, sort="downloads", direction=-1, limit=1)) + + if models: + model = models[0] + return f"The most downloaded model by {author} is {model.id} with {model.downloads:,} downloads." + else: + return f"No models found for author {author}." + except Exception as e: + return f"Error fetching models for {author}: {str(e)}" + +# Tool ကို စတင်သတ်မှတ်ခြင်း +hub_stats_tool = HubStatsTool() + +# ဥပမာ အသုံးပြုပုံ +print(hub_stats_tool("facebook")) # ဥပမာ: Facebook မှ အများဆုံး download လုပ်ထားသော model ကို ရယူခြင်း +``` + +မျှော်မှန်းထားသော ရလဒ်: + +``` +The most downloaded model by facebook is facebook/esmfold_v1 with 12,544,550 downloads. +``` + + + + +```python +import random +from llama_index.core.tools import FunctionTool +from huggingface_hub import list_models + +def get_hub_stats(author: str) -> str: + """Fetches the most downloaded model from a specific author on the Hugging Face Hub.""" + try: + # သတ်မှတ်ထားသော Author မှ Models များကို Downloads အရေအတွက်အလိုက် စီစဉ်ပြီး စာရင်းပြုစုခြင်း + models = list(list_models(author=author, sort="downloads", direction=-1, limit=1)) + + if models: + model = models[0] + return f"The most downloaded model by {author} is {model.id} with {model.downloads:,} downloads." + else: + return f"No models found for author {author}." + except Exception as e: + return f"Error fetching models for {author}: {str(e)}" + +# Tool ကို စတင်သတ်မှတ်ခြင်း +hub_stats_tool = FunctionTool.from_defaults(get_hub_stats) + +# ဥပမာ အသုံးပြုပုံ +print(hub_stats_tool("facebook")) # ဥပမာ: Facebook မှ အများဆုံး download လုပ်ထားသော model ကို ရယူခြင်း +``` + +မျှော်မှန်းထားသော ရလဒ်: + +``` +The most downloaded model by facebook is facebook/esmfold_v1 with 12,544,550 downloads. +``` + + + + +```python +from langchain.tools import Tool +from huggingface_hub import list_models + +def get_hub_stats(author: str) -> str: + """Fetches the most downloaded model from a specific author on the Hugging Face Hub.""" + try: + # သတ်မှတ်ထားသော Author မှ Models များကို Downloads အရေအတွက်အလိုက် စီစဉ်ပြီး စာရင်းပြုစုခြင်း + models = list(list_models(author=author, sort="downloads", direction=-1, limit=1)) + + if models: + model = models[0] + return f"The most downloaded model by {author} is {model.id} with {model.downloads:,} downloads." + else: + return f"No models found for author {author}." + except Exception as e: + return f"Error fetching models for {author}: {str(e)}" + +# Tool ကို စတင်သတ်မှတ်ခြင်း +hub_stats_tool = Tool( + name="get_hub_stats", + func=get_hub_stats, + description="Fetches the most downloaded model from a specific author on the Hugging Face Hub." +) + +# ဥပမာ အသုံးပြုပုံ +print(hub_stats_tool.invoke("facebook")) # ဥပမာ: Facebook မှ အများဆုံး download လုပ်ထားသော model ကို ရယူခြင်း +``` + +မျှော်မှန်းထားသော ရလဒ်: + +``` +The most downloaded model by facebook is facebook/esmfold_v1 with 13,109,861 downloads. +``` + + + + +Hub Stats Tool ကြောင့် Alfred ဟာ သြဇာရှိတဲ့ AI တည်ဆောက်သူတွေရဲ့ လူကြိုက်အများဆုံး Models တွေအကြောင်း ဆွေးနွေးခြင်းဖြင့် သူတို့ကို အထင်ကြီးစေနိုင်ပါပြီ။ + +## Tools များကို Alfred နှင့် ပေါင်းစပ်ခြင်း + +အခု Tools တွေ အားလုံး ရရှိပြီဆိုတော့၊ ၎င်းတို့ကို Alfred ရဲ့ Agent ထဲမှာ ပေါင်းစပ်ကြပါစို့။ + + + + +```python +from smolagents import CodeAgent, InferenceClientModel + +# Hugging Face Model ကို စတင်သတ်မှတ်ခြင်း +model = InferenceClientModel() + +# Tools အားလုံးဖြင့် Alfred ကို ဖန်တီးခြင်း +alfred = CodeAgent( + tools=[search_tool, weather_info_tool, hub_stats_tool], + model=model +) + +# ဧည့်ခံပွဲအတွင်း Alfred လက်ခံရရှိနိုင်သော ဥပမာ မေးခွန်း +response = alfred.run("What is Facebook and what's their most popular model?") + +print("🎩 Alfred's Response:") +print(response) +``` + +မျှော်မှန်းထားသော ရလဒ်: + +``` +🎩 Alfred's Response: +Facebook is a social networking website where users can connect, share information, and interact with others. The most downloaded model by Facebook on the Hugging Face Hub is ESMFold_v1. +``` + + + + +```python +from llama_index.core.agent.workflow import AgentWorkflow +from llama_index.llms.huggingface_api import HuggingFaceInferenceAPI + +# Hugging Face Model ကို စတင်သတ်မှတ်ခြင်း +llm = HuggingFaceInferenceAPI(model_name="Qwen/Qwen2.5-Coder-32B-Instruct") +# Tools အားလုံးဖြင့် Alfred ကို ဖန်တီးခြင်း +alfred = AgentWorkflow.from_tools_or_functions( + [search_tool, weather_info_tool, hub_stats_tool], + llm=llm +) + +# ဧည့်ခံပွဲအတွင်း Alfred လက်ခံရရှိနိုင်သော ဥပမာ မေးခွန်း +response = await alfred.run("What is Facebook and what's their most popular model?") + +print("🎩 Alfred's Response:") +print(response) +``` + +မျှော်မှန်းထားသော ရလဒ်: + +``` +🎩 Alfred's Response: +Facebook is a social networking service and technology company based in Menlo Park, California. It was founded by Mark Zuckerberg and allows people to create profiles, connect with friends and family, share photos and videos, and join groups based on shared interests. The most popular model by Facebook on the Hugging Face Hub is `facebook/esmfold_v1` with 13,109,861 downloads. +``` + + + + +```python +from typing import TypedDict, Annotated +from langgraph.graph.message import add_messages +from langchain_core.messages import AnyMessage, HumanMessage, AIMessage +from langgraph.prebuilt import ToolNode +from langgraph.graph import START, StateGraph +from langgraph.prebuilt import tools_condition +from langchain_huggingface import HuggingFaceEndpoint, ChatHuggingFace + +# Tools များပါဝင်သော Chat Interface ကို ဖန်တီးခြင်း +llm = HuggingFaceEndpoint( + repo_id="Qwen/Qwen2.5-Coder-32B-Instruct", + huggingfacehub_api_token=HUGGINGFACEHUB_API_TOKEN, +) + +chat = ChatHuggingFace(llm=llm, verbose=True) +tools = [search_tool, weather_info_tool, hub_stats_tool] +chat_with_tools = chat.bind_tools(tools) + +# AgentState နှင့် Agent Graph ကို ဖန်တီးခြင်း +class AgentState(TypedDict): + messages: Annotated[list[AnyMessage], add_messages] + +def assistant(state: AgentState): + return { + "messages": [chat_with_tools.invoke(state["messages"])], + } + +## Graph +builder = StateGraph(AgentState) + +# Node များကို သတ်မှတ်ခြင်း: ၎င်းတို့သည် အလုပ်များကို လုပ်ဆောင်သည် +builder.add_node("assistant", assistant) +builder.add_node("tools", ToolNode(tools)) + +# Edge များကို သတ်မှတ်ခြင်း: ၎င်းတို့သည် ထိန်းချုပ်မှု စီးဆင်းမှုကို ဆုံးဖြတ်သည် +builder.add_edge(START, "assistant") +builder.add_conditional_edges( + "assistant", + # နောက်ဆုံး message က Tool လိုအပ်ရင် Tools ဆီ လမ်းကြောင်းပြောင်း + # မဟုတ်ရင် တိုက်ရိုက် တုံ့ပြန်မှု ပေး + tools_condition, +) +builder.add_edge("tools", "assistant") +alfred = builder.compile() + +messages = [HumanMessage(content="Who is Facebook and what's their most popular model?")] +response = alfred.invoke({"messages": messages}) + +print("🎩 Alfred's Response:") +print(response['messages'][-1].content) +``` + +မျှော်မှန်းထားသော ရလဒ်: + +``` +🎩 Alfred's Response: +Facebook is a social media company known for its social networking site, Facebook, as well as other services like Instagram and WhatsApp. The most downloaded model by Facebook on the Hugging Face Hub is facebook/esmfold_v1 with 13,202,321 downloads. +``` + + + +## နိဂုံးချုပ် + +ဤ Tools များကို ပေါင်းစပ်ခြင်းဖြင့် Alfred သည် Web Search များမှသည် ရာသီဥတု အချက်အလက်များနှင့် Model စာရင်းဇယားများအထိ အမျိုးမျိုးသော Tasks များကို ကိုင်တွယ်ဖြေရှင်းနိုင်ပါပြီ။ ဒါက သူဟာ ဧည့်ခံပွဲမှာ အသိပညာအရှိဆုံးနဲ့ စိတ်ဝင်စားစရာအကောင်းဆုံး ဧည့်ခံသူအဖြစ် ဆက်လက်တည်ရှိနေစေဖို့ သေချာစေပါတယ်။ + +> [!TIP] +> သီးခြား အကြောင်းအရာတစ်ခုနဲ့ ပတ်သက်တဲ့ နောက်ဆုံးပေါ် သတင်းတွေကို ရယူနိုင်မယ့် Tool တစ်ခုကို သင်ကိုယ်တိုင် အကောင်အထည်ဖော်ကြည့်ပါ။ +> +> ပြီးသွားတဲ့အခါ၊ သင်ဖန်တီးထားတဲ့ Custom Tools တွေကို `tools.py` ဖိုင်ထဲမှာ ထည့်သွင်းလိုက်ပါ။ \ No newline at end of file diff --git a/units/my/unit4/additional-readings.mdx b/units/my/unit4/additional-readings.mdx new file mode 100644 index 00000000..27ff81a6 --- /dev/null +++ b/units/my/unit4/additional-readings.mdx @@ -0,0 +1,38 @@ +# နောက်ထပ် ဘာတွေ လေ့လာသင့်သလဲ? + +Agentic AI နယ်ပယ်ဟာ အလွန်လျင်မြန်စွာ တိုးတက်ပြောင်းလဲနေတဲ့ နယ်ပယ်တစ်ခု ဖြစ်ပါတယ်။ ဉာဏ်ရည်မြင့်မားပြီး ကိုယ်ပိုင်အုပ်ချုပ်ခွင့်ရှိတဲ့ စနစ်တွေကို တည်ဆောက်နိုင်ဖို့အတွက် အခြေခံကျတဲ့ Protocol တွေကို နားလည်ထားဖို့က မရှိမဖြစ် လိုအပ်ပါတယ်။ + +သင် မဖြစ်မနေ လေ့လာထားသင့်တဲ့ အရေးကြီးတဲ့ စံနှုန်း (Standard) နှစ်ခု ရှိပါတယ်။ ၎င်းတို့မှာ- + +- **Model Context Protocol (MCP)** +- **Agent-to-Agent Protocol (A2A)** + +--- + +## 🔌 Model Context Protocol (MCP) + +Anthropic မှ ဖန်တီးထားတဲ့ **Model Context Protocol (MCP)** ဟာ AI မော်ဒယ်များအား ပြင်ပ Tool များ၊ ဒေတာရင်းမြစ်များနှင့် Application များနှင့် လုံခြုံစွာနှင့် ချောမွေ့စွာ **ချိတ်ဆက်နိုင်စေရန်** ဖန်တီးထားတဲ့ Open Standard တစ်ခု ဖြစ်ပါတယ်။ ဒီ Protocol ကြောင့် Agent တွေဟာ ပိုမိုစွမ်းဆောင်နိုင်ပြီး ကိုယ်ပိုင်အုပ်ချုပ်ခွင့် ပိုရှိလာပါတယ်။ + +MCP ကို **Universal Adapter** တစ်ခုလို စဉ်းစားကြည့်နိုင်ပါတယ်။ ဥပမာအားဖြင့်၊ USB-C Port တစ်ခုလိုပေါ့။ ဒီ Port က AI မော်ဒယ်တွေကို မတူညီတဲ့ Digital ပတ်ဝန်းကျင် အမျိုးမျိုးနဲ့ **တစ်ခုချင်းစီအတွက် သီးသန့် ပေါင်းစပ်မှု (Custom Integration) မလိုအပ်ဘဲ** ချိတ်ဆက်နိုင်စေပါတယ်။ + +> **[ထပ်ဆောင်းအချက်အလက်]** MCP ရဲ့ အဓိက အားသာချက်ကတော့ **Interoperability (အပြန်အလှန် အလုပ်လုပ်နိုင်စွမ်း)** ကို မြှင့်တင်ပေးတာပဲ ဖြစ်ပါတယ်။ ဆိုလိုတာက မတူညီတဲ့ AI ကုမ္ပဏီတွေက မော်ဒယ်တွေဟာ MCP ကို အသုံးပြုပြီး တူညီတဲ့ Tool တွေကို စံနှုန်းတစ်ခုတည်းနဲ့ အသုံးပြုနိုင်မှာ ဖြစ်ပါတယ်။ + +MCP ဟာ စက်မှုလုပ်ငန်းနယ်ပယ်မှာ လျင်မြန်စွာ နေရာယူလာနေပြီး၊ OpenAI နဲ့ Google လိုမျိုး နည်းပညာ ကုမ္ပဏီကြီးတွေကပါ စတင်အသုံးပြုလာနေပြီ ဖြစ်ပါတယ်။ + +📚 **ပိုမိုလေ့လာရန်:** +* [Anthropic ရဲ့ တရားဝင် ကြေညာချက်နှင့် Documentation](https://www.anthropic.com/news/model-context-protocol) +* [Wikipedia ရှိ MCP အကြောင်း](https://en.wikipedia.org/wiki/Model_Context_Protocol) +* [MCP အကြောင်း Blog](https://huggingface.co/blog/Kseniase/mcp) + +--- + +## 🤝 Agent-to-Agent (A2A) Protocol + +Google မှ ဖန်တီးထားတဲ့ **Agent-to-Agent (A2A) Protocol** ဟာ Anthropic ရဲ့ Model Context Protocol (MCP) ကို ဖြည့်ဆည်းပေးတဲ့ Protocol တစ်ခု ဖြစ်ပါတယ်။ + +MCP က Agent တွေကို ပြင်ပ Tool တွေနဲ့ ချိတ်ဆက်ပေးသလို၊ **A2A ကတော့ Agent တွေကို အချင်းချင်း ချိတ်ဆက်ပေးပါတယ်**။ ဒီ Protocol ဟာ ရှုပ်ထွေးတဲ့ ပြဿနာတွေကို အတူတကွ ဖြေရှင်းနိုင်ဖို့အတွက် ပူးပေါင်းဆောင်ရွက်တဲ့ Multi-Agent စနစ်များ (Agent အများအပြားပါဝင်သော စနစ်များ) အတွက် လမ်းဖွင့်ပေးလိုက်တာပဲ ဖြစ်ပါတယ်။ + +> **[ထပ်ဆောင်းအချက်အလက်]** A2A ဟာ Agent တွေကြားမှာ **တာဝန်ခွဲဝေခြင်း (Task Delegation)** နဲ့ **သတင်းအချက်အလက် ဖလှယ်ခြင်း (Information Exchange)** ကို စံနှုန်းသတ်မှတ်ပေးပါတယ်။ ဥပမာအားဖြင့်၊ Agent တစ်ခုက အချက်အလက် ရှာဖွေတဲ့ တာဝန်ယူပြီး၊ နောက် Agent တစ်ခုက အဲဒီအချက်အလက်တွေကို အခြေခံပြီး ဆုံးဖြတ်ချက်ချတဲ့ တာဝန်ယူတာမျိုးကို A2A က စနစ်တကျ လုပ်ဆောင်နိုင်စေပါတယ်။ + +📚 **A2A ကို ပိုမိုနက်ရှိုင်းစွာ လေ့လာရန်:** +* [Google ရဲ့ A2A ကြေညာချက်](https://developers.googleblog.com/en/a2a-a-new-era-of-agent-interoperability/) \ No newline at end of file diff --git a/units/my/unit4/conclusion.mdx b/units/my/unit4/conclusion.mdx new file mode 100644 index 00000000..fcce7afe --- /dev/null +++ b/units/my/unit4/conclusion.mdx @@ -0,0 +1,15 @@ +# နိဂုံးချုပ် (Conclusion) + +**Agent Course ကို အောင်မြင်စွာ ပြီးဆုံးတဲ့အတွက် ဂုဏ်ယူပါတယ်!** + +ဇွဲလုံ့လနဲ့ စိတ်အားထက်သန်မှုတွေကြောင့် သင်ဟာ AI Agent လောကမှာ ခိုင်မာတဲ့ အခြေခံအုတ်မြစ်တစ်ခုကို တည်ဆောက်နိုင်ခဲ့ပါပြီ။ + +ဒါပေမယ့် ဒီ Course ကို ပြီးဆုံးသွားတာဟာ **သင့်ရဲ့ ခရီးရဲ့ အဆုံးသတ်တော့ မဟုတ်ပါဘူး**။ ဒါဟာ အစပဲ ရှိပါသေးတယ်။ သင်ဆက်လက်လေ့လာနိုင်ဖို့အတွက် ကျွန်တော်တို့ စီစဉ်ပေးထားတဲ့ အရင်းအမြစ်များ (Resources) ကို နောက်အပိုင်းမှာ ဆက်လက်လေ့လာဖို့ မမေ့ပါနဲ့။ အဲဒီမှာ **MCPs (Multi-Agent Communication Protocols)** လိုမျိုး အဆင့်မြင့် အကြောင်းအရာတွေနဲ့ အခြား နည်းပညာတွေကိုပါ ထည့်သွင်းပေးထားပါတယ်။ + +> **[Learner အတွက် ထပ်ဆောင်းအချက်အလက်]** +> +> သင်ဟာ ဒီ Course မှာ Agent တွေရဲ့ အဓိက အစိတ်အပိုင်းသုံးခုဖြစ်တဲ့ **Reasoning (ဆင်ခြင်သုံးသပ်မှု)**၊ **Actions (လုပ်ဆောင်ချက်)** နဲ့ **Observations (လေ့လာတွေ့ရှိချက်)** တွေကို ဘယ်လို ပေါင်းစပ်ပြီး အလုပ်လုပ်ရသလဲဆိုတာကို နားလည်ခဲ့ပြီးပါပြီ။ ဒီအခြေခံ သဘောတရားတွေဟာ AI နယ်ပယ်မှာ အနာဂတ်မှာ ပေါ်ပေါက်လာမယ့် ပိုမိုရှုပ်ထွေးတဲ့ Agent စနစ်တွေကို နားလည်ဖို့အတွက် အရေးကြီးဆုံးသော အသိပညာတွေပဲ ဖြစ်ပါတယ်။ သင်ရရှိထားတဲ့ ဒီအခြေခံကို အသုံးပြုပြီး လက်တွေ့ Project တွေမှာ စတင်အသုံးချဖို့ အချိန်တန်ပါပြီ။ + +ဒီ Course မှာ ပါဝင်ခဲ့တဲ့အတွက် **ကျေးဇူးတင်ပါတယ်**။ **ကျွန်တော်တို့ ဒီ Course ကို ရေးသားရတာ နှစ်သက်သလောက် သင်တို့လည်း လေ့လာရတာ နှစ်သက်လိမ့်မယ်လို့ မျှော်လင့်ပါတယ်**။ + +ပြီးတော့ မမေ့ပါနဲ့- **ဆက်လက်လေ့လာပါ၊ အမြဲတမ်း အကောင်းဆုံးဖြစ်ပါစေ 🤗** \ No newline at end of file diff --git a/units/my/unit4/get-your-certificate.mdx b/units/my/unit4/get-your-certificate.mdx new file mode 100644 index 00000000..0629ca93 --- /dev/null +++ b/units/my/unit4/get-your-certificate.mdx @@ -0,0 +1,22 @@ +# သင်၏ Certificate ကို ရယူပါ 🎓 + +သင်၏ စစ်ဆေးမေးခွန်းများတွင် **ရမှတ် ၃၀% အထက် ရရှိခဲ့ပါက၊ ဂုဏ်ယူပါတယ်! 👏 သင်သည် ယခုအခါ တရားဝင် Certificate ကို ရယူရန် အရည်အချင်း ပြည့်မီပါပြီ။** + +Certificate ရရှိရန်အတွက် အောက်ပါ အဆင့်များကို လိုက်နာဆောင်ရွက်ပါ။ + +1. [Certificate Page](https://huggingface.co/spaces/agents-course/Unit4-Final-Certificate) သို့ သွားရောက်ပါ။ +2. ပေးထားသော ခလုတ်ကို အသုံးပြု၍ သင်၏ Hugging Face Account ဖြင့် **ဝင်ရောက်ပါ (Sign in)**။ +3. **သင်၏ အမည်အပြည့်အစုံကို ထည့်သွင်းပါ**။ ဤအမည်သည် သင်၏ Certificate ပေါ်တွင် ဖော်ပြမည့် အမည်ဖြစ်သောကြောင့် စာလုံးပေါင်း မှန်ကန်မှုရှိစေရန် သေချာစွာ စစ်ဆေးပါ။ +4. သင်၏ ရမှတ်ကို စစ်ဆေးအတည်ပြုပြီး Certificate ကို Download ရယူရန် **“Get My Certificate”** ကို နှိပ်ပါ။ + +Congrats! + +Certificate ရရှိပြီးသည်နှင့် သင်သည် အောက်ပါအတိုင်း လုပ်ဆောင်နိုင်ပါတယ်- + +* သင်၏ **LinkedIn Profile** 🧑‍💼 တွင် ထည့်သွင်းဖော်ပြပါ။ (ဒီလို Certificate တွေကို LinkedIn မှာ ထည့်သွင်းခြင်းက သင့်ရဲ့ Professional Network ကို ပိုမိုခိုင်မာစေပြီး၊ AI နယ်ပယ်မှာ သင်ယူမှု စဉ်ဆက်မပြတ် လုပ်ဆောင်နေကြောင်း ပြသရာရောက်ပါတယ်)။ +* **X (ယခင် Twitter)**၊ **Bluesky** စသည့် Social Media များတွင် မျှဝေပါ 🎉။ + +**[@huggingface](https://huggingface.co/huggingface) ကို Tag လုပ်ဖို့ မမေ့ပါနဲ့နော်။ ကျွန်တော်တို့ အနေနဲ့ သင့်အတွက် အလွန်ဂုဏ်ယူပြီး ဝမ်းမြောက်စွာ အားပေးကြိုဆိုသွားမှာပါ 🤗** + +> [!TIP] +> Certificate ရယူရာတွင် အခက်အခဲ တစ်စုံတစ်ရာ ရှိပါက [The certification community tab](https://huggingface.co/spaces/agents-course/Unit4-Final-Certificate/discussions) တွင် ဆွေးနွေးမေးမြန်းနိုင်ပါတယ်။ (Hugging Face ရဲ့ Community Discussion တွေမှာ မေးခွန်းတွေ မေးမြန်းခြင်းက Open Source Community မှာ ပါဝင်တဲ့ အလေ့အကျင့်ကောင်းတစ်ခု ဖြစ်ပါတယ်)။ \ No newline at end of file diff --git a/units/my/unit4/hands-on.mdx b/units/my/unit4/hands-on.mdx new file mode 100644 index 00000000..1a9d21ba --- /dev/null +++ b/units/my/unit4/hands-on.mdx @@ -0,0 +1,55 @@ +# လက်တွေ့လုပ်ဆောင်ခြင်း (Hands-On) + +သင်တို့ရဲ့ နောက်ဆုံး Agent ကို ဖန်တီးဖို့အတွက် ပိုမိုနက်နက်နဲနဲ လေ့လာဖို့ အသင့်ဖြစ်နေပြီဆိုတော့၊ အဲဒီ Agent ကို စစ်ဆေးမှုအတွက် ဘယ်လို တင်သွင်းရမလဲဆိုတာကို ကြည့်ကြရအောင်။ + +## ဒေတာအစုအဝေး (The Dataset) + +ဒီ Leaderboard မှာ အသုံးပြုထားတဲ့ ဒေတာအစုအဝေးဟာ **GAIA** ရဲ့ **Validation** Set ထဲက Level 1 မေးခွန်း (၂၀) ကို စစ်ထုတ်ထားတာ ဖြစ်ပါတယ်။ + +ရွေးချယ်ထားတဲ့ မေးခွန်းတွေကို အဖြေပေးဖို့အတွက် လိုအပ်တဲ့ Tool အရေအတွက်နဲ့ အဆင့်အရေအတွက်ပေါ် မူတည်ပြီး စစ်ထုတ်ထားတာပါ။ + +GAIA Benchmark ရဲ့ လက်ရှိ အခြေအနေကို ကြည့်ပြီး၊ Level 1 မေးခွန်းတွေမှာ ၃၀% ရည်မှန်းချက်ထားပြီး ကြိုးစားကြည့်ဖို့က သင့်တော်တဲ့ စမ်းသပ်မှုတစ်ခု ဖြစ်မယ်လို့ ကျွန်တော်တို့ ယူဆပါတယ်။ + +GAIA current status! + +## လုပ်ငန်းစဉ် (The Process) + +အခု သင်တို့ စိတ်ထဲမှာ ရှိနေမယ့် အကြီးမားဆုံး မေးခွန်းကတော့ "ဘယ်လို စတင် တင်သွင်းရမလဲ" ဆိုတာ ဖြစ်ပါလိမ့်မယ်။ + +ဒီ Unit အတွက်၊ ကျွန်တော်တို့ဟာ မေးခွန်းတွေကို ရယူနိုင်ပြီး၊ သင်တို့ရဲ့ အဖြေတွေကို အမှတ်ပေးဖို့အတွက် ပေးပို့နိုင်မယ့် API တစ်ခုကို ဖန်တီးထားပါတယ်။ + +API ရဲ့ လမ်းကြောင်းများ (Routes) ကို အောက်မှာ အကျဉ်းချုပ် ဖော်ပြထားပါတယ် (အပြန်အလှန် ဆက်သွယ်နိုင်တဲ့ အသေးစိတ်အချက်အလက်များအတွက် [တိုက်ရိုက် Documentation](https://agents-course-unit4-scoring.hf.space/docs) ကို ကြည့်ရှုနိုင်ပါတယ်)။ + +* **`GET /questions`**: စစ်ထုတ်ထားသော အကဲဖြတ် မေးခွန်းများ၏ စာရင်းအပြည့်အစုံကို ပြန်လည်ရယူခြင်း။ +* **`GET /random-question`**: စာရင်းထဲမှ ကျပန်း မေးခွန်းတစ်ခုကို ရယူခြင်း။ +* **`GET /files/{task_id}`**: သတ်မှတ်ထားသော Task ID နှင့် ဆက်စပ်နေသည့် သီးခြားဖိုင်တစ်ခုကို Download လုပ်ခြင်း။ +* **`POST /submit`**: Agent အဖြေများကို တင်သွင်းခြင်း၊ အမှတ်တွက်ချက်ခြင်းနှင့် Leaderboard ကို Update လုပ်ခြင်း။ + +**အရေးကြီးသော အချက်:** `submit` function သည် အဖြေကို မှန်ကန်သော အဖြေ (Ground Truth) နှင့် **လုံးဝ တူညီမှုရှိမရှိ (EXACT MATCH)** ပုံစံဖြင့် နှိုင်းယှဉ်မှာ ဖြစ်ပါတယ်။ ဒါကြောင့် သင်တို့ရဲ့ Agent ကို **Prompting** လုပ်တဲ့အခါ သေသေချာချာ ဂရုစိုက်ဖို့ လိုပါတယ်။ GAIA Team က သင်တို့ရဲ့ Agent အတွက် Prompting ဥပမာကို [ဒီနေရာမှာ](https://huggingface.co/spaces/gaia-benchmark/leaderboard) မျှဝေထားပါတယ်။ (ဒီ Course အတွက်ကတော့၊ သင်တို့ရဲ့ တင်သွင်းမှုမှာ "FINAL ANSWER" ဆိုတဲ့ စာသားကို ထည့်သွင်းခြင်း မပြုဖို့ သေချာပါစေ။ Agent က အဖြေကိုသာ တုံ့ပြန်စေပြီး တခြား ဘာမှ မပါဝင်စေရပါဘူး။) + +🎨 **Template ကို ကိုယ်ပိုင်ပုံစံ ပြောင်းလဲပါ!** + +API နဲ့ ဘယ်လို အပြန်အလှန် ဆက်သွယ်ရမလဲဆိုတာကို ပြသဖို့အတွက်၊ ကျွန်တော်တို့ဟာ စတင်အသုံးပြုနိုင်မယ့် [အခြေခံ Template](https://huggingface.co/spaces/agents-course/Final_Assignment_Template) တစ်ခုကို ထည့်သွင်းပေးထားပါတယ်။ + +ဒီ Template ကို ပြောင်းလဲခြင်း၊ ထပ်ထည့်ခြင်း သို့မဟုတ် လုံးဝ ပုံစံအသစ် ပြန်လည်ဖွဲ့စည်းခြင်းတို့ကို လွတ်လပ်စွာ ပြုလုပ်နိုင်ပြီး **တက်ကြွစွာ အားပေးပါတယ်**။ သင်တို့ရဲ့ ချဉ်းကပ်ပုံနဲ့ တီထွင်ဖန်တီးနိုင်စွမ်းနဲ့ အသင့်တော်ဆုံးဖြစ်မယ့် ပုံစံအတိုင်း ပြုပြင်ပြောင်းလဲနိုင်ပါတယ်။ + +ဒီ Template ကို တင်သွင်းဖို့အတွက် API က လိုအပ်တဲ့ အချက် (၃) ချက်ကို တွက်ချက်ရပါမယ်။ + +* **Username:** သင်တို့ရဲ့ Hugging Face Username (Gradio Login မှတစ်ဆင့် ရယူထားသော) ဖြစ်ပြီး၊ သင်တို့ရဲ့ တင်သွင်းမှုကို ခွဲခြားသတ်မှတ်ဖို့ အသုံးပြုပါတယ်။ +* **Code Link (`agent_code`):** စစ်ဆေးအတည်ပြုရန်အတွက် သင်တို့ရဲ့ Hugging Face Space Code ( `.../tree/main` ) ကို ချိတ်ဆက်ထားတဲ့ URL ဖြစ်ပါတယ်။ ဒါကြောင့် သင်တို့ရဲ့ Space ကို Public အဖြစ် ထားရှိဖို့ လိုပါတယ်။ +* **Answers (`answers`):** သင်တို့ရဲ့ Agent က ထုတ်ပေးထားတဲ့ အဖြေများ စာရင်း (`{"task_id": ..., "submitted_answer": ...}`) ဖြစ်ပြီး အမှတ်ပေးဖို့အတွက် အသုံးပြုပါတယ်။ + +ဒါကြောင့် သင်တို့ရဲ့ Hugging Face Profile မှာ [ဒီ Template](https://huggingface.co/spaces/agents-course/Final_Assignment_Template) ကို Duplicate လုပ်ပြီး စတင်ဖို့ ကျွန်တော်တို့ တိုက်တွန်းပါတယ်။ + +🏆 Leaderboard ကို [ဒီနေရာမှာ](https://huggingface.co/spaces/agents-course/Students_leaderboard) ကြည့်ရှုနိုင်ပါတယ်။ + +*သတိပြုရန် အချက်:* ဒီ Leaderboard ကို ပျော်ရွှင်စရာအတွက် ရည်ရွယ်ထားတာပါ။ အပြည့်အဝ စစ်ဆေးအတည်ပြုခြင်းမရှိဘဲ အမှတ်တွေ တင်သွင်းလို့ ရနိုင်တယ်ဆိုတာ ကျွန်တော်တို့ သိပါတယ်။ ဒါပေမယ့် Public Link နဲ့ အတည်ပြုထားခြင်းမရှိဘဲ အမှတ်များလွန်းတဲ့ တင်သွင်းမှုတွေ များလာရင်၊ Leaderboard ကို အသုံးဝင်စေဖို့အတွက် အချို့သော အချက်အလက်တွေကို ပြန်လည်စစ်ဆေးခြင်း၊ ချိန်ညှိခြင်း သို့မဟုတ် ဖယ်ရှားခြင်းတွေ လုပ်ဆောင်ရနိုင်ပါတယ်။ + +ဒီ Leaderboard ဟာ ကျောင်းသားများအတွက်သာ ဖြစ်တဲ့အတွက်၊ သင် ဂုဏ်ယူရမယ့် အမှတ်တစ်ခု ရရှိခဲ့ရင် သင်တို့ရဲ့ Space ကို Public အဖြစ် ထားရှိပေးပါနော်။ Leaderboard မှာ သင်တို့ရဲ့ Space Code-base ကို ချိတ်ဆက်ပြသပေးမှာ ဖြစ်ပါတယ်။ + + \ No newline at end of file diff --git a/units/my/unit4/introduction.mdx b/units/my/unit4/introduction.mdx new file mode 100644 index 00000000..dfa19441 --- /dev/null +++ b/units/my/unit4/introduction.mdx @@ -0,0 +1,27 @@ +# နောက်ဆုံး အခန်းသို့ ကြိုဆိုပါတယ် [[မိတ်ဆက်]] + +AI Agents Course thumbnail + +Course ရဲ့ နောက်ဆုံး အခန်းကို လှိုက်လှဲစွာ ကြိုဆိုပါတယ်။ 🎉 + +ဒီအထိ သင်ခန်းစာတွေမှာ သင်ဟာ **AI Agent တွေရဲ့ ခိုင်မာတဲ့ အခြေခံအုတ်မြစ်** ကို တည်ဆောက်ခဲ့ပြီးပါပြီ။ Agent တွေရဲ့ အစိတ်အပိုင်းတွေကို နားလည်တာကနေ ကိုယ်ပိုင် Agent တွေကို ဖန်တီးနိုင်တဲ့အထိ အသိပညာတွေ ရရှိခဲ့ပါတယ်။ ဒီအသိပညာတွေနဲ့အတူ၊ အခုဆိုရင် လျင်မြန်စွာ ပြောင်းလဲနေတဲ့ ဒီနယ်ပယ်မှာ **စွမ်းအားမြင့် Agent တွေ တည်ဆောက်ဖို့** နဲ့ နောက်ဆုံးပေါ် တိုးတက်မှုတွေကို သိရှိနေဖို့အတွက် သင် အသင့်ဖြစ်နေပါပြီ။ + +ဒီအခန်းကတော့ သင်လေ့လာခဲ့သမျှတွေကို လက်တွေ့ အသုံးချရမယ့် အပိုင်းပဲ ဖြစ်ပါတယ်။ ဒါဟာ သင့်ရဲ့ **နောက်ဆုံး လက်တွေ့လုပ်ဆောင်ရမယ့် Project** ဖြစ်ပြီး၊ ဒီ Project ကို ပြီးမြောက်အောင် လုပ်ဆောင်နိုင်မှသာ **Course Certificate** ကို ရရှိမှာ ဖြစ်ပါတယ်။ + +## စိန်ခေါ်မှုက ဘာလဲ? + +သင်ဟာ ကိုယ်ပိုင် Agent တစ်ခုကို ဖန်တီးရမှာဖြစ်ပြီး၊ ၎င်းရဲ့ စွမ်းဆောင်ရည်ကို **[GAIA Benchmark](https://huggingface.co/spaces/gaia-benchmark/leaderboard)** ရဲ့ အစိတ်အပိုင်းတစ်ခုကို အသုံးပြုပြီး အကဲဖြတ်ရပါမယ်။ + +> **GAIA Benchmark အကြောင်း သိကောင်းစရာ:** GAIA (General AI Agents) Benchmark ဆိုတာဟာ AI Agent တွေရဲ့ စွမ်းဆောင်ရည်ကို တိုင်းတာဖို့အတွက် ဖန်တီးထားတဲ့ စိန်ခေါ်မှုများစွာပါဝင်တဲ့ စံနှုန်းတစ်ခု ဖြစ်ပါတယ်။ ဒီစံနှုန်းက Agent တွေဟာ ရှုပ်ထွေးတဲ့ ပြဿနာတွေကို ဘယ်လောက်ထိ ဆင်ခြင်သုံးသပ်ပြီး ဖြေရှင်းနိုင်သလဲဆိုတာကို စစ်ဆေးပါတယ်။ + +ဒီ Course ကို အောင်မြင်စွာ ပြီးမြောက်ဖို့အတွက်၊ သင့် Agent ဟာ Benchmark မှာ **30% သို့မဟုတ် အဲဒီထက် ပိုများတဲ့ အမှတ်** ရရှိဖို့ လိုအပ်ပါတယ်။ ဒီရည်မှန်းချက်ကို ပြည့်မီရင်၊ သင့်ရဲ့ ကျွမ်းကျင်မှုကို တရားဝင် အသိအမှတ်ပြုတဲ့ **Certificate of Completion** ကို ရရှိမှာ ဖြစ်ပါတယ်။ 🏅 + +ဒါ့အပြင်၊ သင့်ရဲ့ ရလဒ်တွေကို အခြားသူငယ်ချင်းတွေနဲ့ ယှဉ်ပြိုင်ကြည့်နိုင်ဖို့အတွက် သီးသန့် **[Student Leaderboard](https://huggingface.co/spaces/agents-course/Students_leaderboard)** ကိုလည်း ပြင်ဆင်ထားပါတယ်။ သင့်ရဲ့ အမှတ်တွေကို တင်သွင်းပြီး Community ရဲ့ တိုးတက်မှုကို ကြည့်ရှုနိုင်ပါတယ်။ + +> ** 🚨 သတိပြုရန်- အဆင့်မြင့် လက်တွေ့လုပ်ဆောင်မှု အခန်း** +> +> ဒီအခန်းဟာ ပိုမို လက်တွေ့ကျတဲ့ (Practical, Hands-on) ချဉ်းကပ်မှုဆီကို ပြောင်းလဲသွားပြီဆိုတာကို သတိပြုပါ။ ဒီအပိုင်းမှာ အောင်မြင်ဖို့အတွက် **ပိုမို အဆင့်မြင့်တဲ့ Coding အသိပညာ** လိုအပ်မှာဖြစ်ပြီး၊ Course ရဲ့ အစောပိုင်း အပိုင်းတွေထက် **ရှင်းလင်းပြတ်သားတဲ့ လမ်းညွှန်မှု နည်းပါးစွာ** နဲ့ Tasks တွေကို ကိုယ်တိုင် ဖြေရှင်းနိုင်ဖို့ လိုအပ်ပါလိမ့်မယ်။ +> +> **အကြံပြုချက်:** အကယ်၍ သင်ဟာ Coding အတွေ့အကြုံ နည်းပါးသေးတယ်ဆိုရင်၊ အရင်အခန်းတွေက Code ဥပမာတွေကို သေချာပြန်လေ့လာပြီးမှ ဒီ Project ကို စတင်ဖို့ အကြံပြုချင်ပါတယ်။ + +စိတ်လှုပ်ရှားစရာကောင်းတယ် မဟုတ်လား? စတင်လိုက်ရအောင်! 🚀 \ No newline at end of file diff --git a/units/my/unit4/what-is-gaia.mdx b/units/my/unit4/what-is-gaia.mdx new file mode 100644 index 00000000..95b831c5 --- /dev/null +++ b/units/my/unit4/what-is-gaia.mdx @@ -0,0 +1,73 @@ +# GAIA ဆိုတာ ဘာလဲ? + +[GAIA](https://huggingface.co/papers/2311.12983) ဆိုတာဟာ **AI Assistant တွေရဲ့ စွမ်းဆောင်ရည်ကို လက်တွေ့ကမ္ဘာက လုပ်ငန်းဆောင်တာတွေနဲ့ တိုင်းတာဖို့အတွက် အထူးဒီဇိုင်းထုတ်ထားတဲ့ စံနှုန်းတိုင်းတာချက် (Benchmark)** တစ်ခုပဲ ဖြစ်ပါတယ်။ + +ဒီစံနှုန်းတိုင်းတာချက်ဟာ ဆင်ခြင်သုံးသပ်နိုင်စွမ်း (Reasoning)၊ ပုံရိပ်နှင့် စာသား နှစ်မျိုးလုံးကို နားလည်နိုင်စွမ်း (Multimodal Understanding)၊ ဝက်ဘ်ရှာဖွေနိုင်စွမ်းနဲ့ Tool များကို ကျွမ်းကျင်စွာ အသုံးပြုနိုင်စွမ်း စတဲ့ အဓိက စွမ်းရည်ပေါင်းစပ်မှုတွေ လိုအပ်တဲ့ Tasks တွေကို အခြေခံထားပါတယ်။ + +GAIA ကို _"[GAIA: A Benchmark for General AI Assistants](https://huggingface.co/papers/2311.12983)"_ ဆိုတဲ့ စာတမ်းမှာ မိတ်ဆက်ခဲ့တာပါ။ + +ဒီ Benchmark မှာ **၄၆၆ ခုသော မေးခွန်းများကို ဂရုတစိုက် စီစဉ်ထည့်သွင်းထားပါတယ်**။ ဒီမေးခွန်းတွေဟာ **လူသားတွေအတွက်တော့ သဘောတရားအရ ရိုးရှင်းပါတယ်**၊ ဒါပေမယ့် **လက်ရှိ AI စနစ်တွေအတွက်တော့ အံ့ဩစရာကောင်းလောက်အောင် စိန်ခေါ်မှုကြီးမားပါတယ်**။ + +AI နဲ့ လူသားတွေရဲ့ စွမ်းဆောင်ရည် ကွာဟချက်ကို ရှင်းရှင်းလင်းလင်း မြင်သာအောင် ဥပမာပြရရင်- + +* **လူသားများ:** အောင်မြင်မှုနှုန်း ၉၂% ခန့် +* **GPT-4 (Plugins များဖြင့်):** အောင်မြင်မှုနှုန်း ၁၅% ခန့်သာ +* **Deep Research (OpenAI):** စစ်ဆေးရေး ဒေတာအစုအဝေး (Validation Set) တွင် ၆၇.၃၆% + +GAIA ဟာ လက်ရှိ AI မော်ဒယ်တွေရဲ့ ကန့်သတ်ချက်တွေကို မီးမောင်းထိုးပြနေပြီး၊ စစ်မှန်တဲ့ **General-purpose AI Assistants** တွေဆီ ဦးတည်တဲ့ တိုးတက်မှုတွေကို အကဲဖြတ်ဖို့အတွက် တင်းကျပ်တဲ့ စံနှုန်းတစ်ခုကို ပေးစွမ်းပါတယ်။ + +## 🌱 GAIA ရဲ့ အဓိက မူဝါဒများ + +GAIA ကို အောက်ပါ အဓိက မဏ္ဍိုင်များအပေါ် အခြေခံပြီး ဂရုတစိုက် ဒီဇိုင်းထုတ်ထားပါတယ်။ + +* 🔍 **လက်တွေ့ကမ္ဘာ အခက်အခဲ (Real-world difficulty):** လုပ်ငန်းဆောင်တာများမှာ အဆင့်များစွာဖြင့် ဆင်ခြင်သုံးသပ်ခြင်း၊ ပုံရိပ်နှင့် စာသား နှစ်မျိုးလုံးကို နားလည်ခြင်းနှင့် Tool များ အပြန်အလှန် အသုံးပြုခြင်းတို့ လိုအပ်ပါတယ်။ +* 🧾 **လူသား နားလည်နိုင်စွမ်း (Human interpretability):** AI အတွက် ခက်ခဲနေသော်လည်း၊ လုပ်ငန်းဆောင်တာများသည် လူသားများအတွက် သဘောတရားအရ ရိုးရှင်းပြီး လိုက်နာရန် လွယ်ကူပါတယ်။ +* 🛡️ **လိမ်လည်၍ မရနိုင်ခြင်း (Non-gameability):** မှန်ကန်တဲ့ အဖြေရဖို့အတွက် လုပ်ငန်းတစ်ခုလုံးကို အပြည့်အဝ လုပ်ဆောင်ဖို့ လိုအပ်ပါတယ်။ ဒါကြောင့် အဖြေကို ခန့်မှန်းပြီး အတင်းအဓမ္မ ထိုးထည့်ခြင်း (Brute-forcing) ဟာ ထိရောက်မှု မရှိပါဘူး။ +* 🧰 **အကဲဖြတ်ရ လွယ်ကူခြင်း (Simplicity of evaluation):** အဖြေများသည် တိုတောင်းပြီး၊ အချက်အလက်အပေါ် အခြေခံကာ၊ မရေရာမှု မရှိပါဘူး။ ဒါကြောင့် စံနှုန်းတိုင်းတာချက်အတွက် အကောင်းဆုံး ဖြစ်ပါတယ်။ + +## အခက်အခဲ အဆင့်များ (Difficulty Levels) + +GAIA ရဲ့ လုပ်ငန်းဆောင်တာများကို ရှုပ်ထွေးမှု တိုးလာတဲ့ **အဆင့် (၃) ဆင့်** ခွဲခြားထားပြီး၊ အဆင့်တစ်ခုစီက သီးခြားစွမ်းရည်များကို စမ်းသပ်ပါတယ်။ + +* **အဆင့် ၁ (Level 1):** ၅ ဆင့်ထက် နည်းသော လုပ်ဆောင်ချက်များနှင့် Tool အသုံးပြုမှု အနည်းငယ်သာ လိုအပ်ပါတယ်။ +* **အဆင့် ၂ (Level 2):** ပိုမိုရှုပ်ထွေးသော ဆင်ခြင်သုံးသပ်မှုနှင့် Tool များစွာကို ၅-၁၀ ဆင့်အတွင်း ပေါင်းစပ်ညှိနှိုင်း လုပ်ဆောင်ရန် လိုအပ်ပါတယ်။ +* **အဆင့် ၃ (Level 3):** ရေရှည် စီမံကိန်းချမှတ်ခြင်းနှင့် Tool အမျိုးမျိုးကို အဆင့်မြင့် ပေါင်းစပ်အသုံးပြုခြင်းတို့ လိုအပ်ပါတယ်။ + +![GAIA levels](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit4/gaia_levels.png) + +## ခက်ခဲသော GAIA မေးခွန်း ဥပမာ + +> ၂၀၀၈ ခုနှစ်က ပန်းချီကား "Embroidery from Uzbekistan" မှာ ပြသထားတဲ့ သစ်သီးတွေထဲက ဘယ်သစ်သီးတွေဟာ နောက်ပိုင်းမှာ "The Last Voyage" ရုပ်ရှင်အတွက် ရေပေါ် Prop အဖြစ် အသုံးပြုခဲ့တဲ့ သမုဒ္ဒရာဖြတ် သင်္ဘောကြီးရဲ့ ၁၉၄၉ ခုနှစ် အောက်တိုဘာလ မနက်စာ Menu မှာ ပါဝင်ခဲ့ပါသလဲ။ အဖြေကို ကော်မာခြားပြီး စာရင်းပြုစုပေးပါ။ ပန်းချီကားထဲမှာ ၁၂ နာရီ နေရာကနေ စပြီး နာရီလက်တံအတိုင်း လှည့်ပတ်ကာ စီစဉ်ပေးပါ။ သစ်သီးတိုင်းကို အများကိန်း (Plural Form) ဖြင့် အသုံးပြုပါ။ + +သင်တွေ့မြင်ရတဲ့အတိုင်း၊ ဒီမေးခွန်းဟာ AI စနစ်တွေကို နည်းလမ်းများစွာနဲ့ စိန်ခေါ်နေပါတယ်။ + +* **စနစ်တကျ အဖြေပုံစံ (Structured Response Format)** လိုအပ်ခြင်း။ +* **ပုံရိပ်နှင့် စာသား နှစ်မျိုးလုံးကို ဆင်ခြင်သုံးသပ်ခြင်း (Multimodal Reasoning)** ပါဝင်ခြင်း (ဥပမာ - ပန်းချီကားကို ခွဲခြမ်းစိတ်ဖြာခြင်း)။ +* **အဆင့်များစွာဖြင့် အချက်အလက် ရှာဖွေခြင်း (Multi-hop Retrieval)** လိုအပ်ခြင်း။ (အချက်အလက်များ တစ်ခုနှင့်တစ်ခု ဆက်စပ်နေပါတယ်) + * ပန်းချီကားထဲက သစ်သီးတွေကို ဖော်ထုတ်ခြင်း။ + * *The Last Voyage* မှာ အသုံးပြုခဲ့တဲ့ သမုဒ္ဒရာဖြတ် သင်္ဘောကြီးကို ရှာဖွေခြင်း။ + * ထိုသင်္ဘောရဲ့ ၁၉၄၉ ခုနှစ် အောက်တိုဘာလ မနက်စာ Menu ကို ရှာဖွေခြင်း။ +* မှန်ကန်တဲ့ အစီအစဉ်အတိုင်း ဖြေရှင်းဖို့အတွက် **တိကျတဲ့ အစီအစဉ်ချမှတ်မှု (Correct Sequencing)** နဲ့ အဆင့်မြင့် စီမံကိန်းချမှတ်မှု လိုအပ်ခြင်း။ + +ဒီလိုမျိုး Tasks တွေဟာ Standalone LLM တွေ ဘယ်နေရာမှာ အားနည်းချက်ရှိနေလဲဆိုတာကို မီးမောင်းထိုးပြနေပါတယ်။ ဒါကြောင့် GAIA ဟာ အဆင့်များစွာနဲ့ မတူညီတဲ့ Modality တွေပေါ်မှာ ဆင်ခြင်သုံးသပ်နိုင်၊ အချက်အလက် ရှာဖွေနိုင်ပြီး လုပ်ဆောင်ချက်များ လုပ်ဆောင်နိုင်တဲ့ **Agent-based Systems** တွေအတွက် အကောင်းဆုံး စံနှုန်းတိုင်းတာချက် ဖြစ်ပါတယ်။ + +![GAIA capabilities plot](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit4/gaia_capabilities.png) + +## တိုက်ရိုက် အကဲဖြတ်ခြင်း (Live Evaluation) + +စဉ်ဆက်မပြတ် စံနှုန်းတိုင်းတာမှုများကို အားပေးဖို့အတွက် **GAIA ဟာ Hugging Face မှာ Public Leaderboard တစ်ခုကို ပံ့ပိုးပေးထားပါတယ်**။ ဒီနေရာမှာ သင်ဟာ သင့်ရဲ့ မော်ဒယ်တွေကို **စမ်းသပ်မေးခွန်း ၃၀၀** နဲ့ ယှဉ်ပြိုင် စမ်းသပ်နိုင်ပါတယ်။ + +👉 Leaderboard ကို [ဒီနေရာမှာ](https://huggingface.co/spaces/gaia-benchmark/leaderboard) ကြည့်ရှုနိုင်ပါတယ်။ + + + +GAIA အကြောင်း ပိုမိုနက်ရှိုင်းစွာ လေ့လာချင်ပါသလား? + +* 📄 [စာတမ်းအပြည့်အစုံကို ဖတ်ရှုပါ](https://huggingface.co/papers/2311.12983) +* 📄 [OpenAI မှ Deep Research ထုတ်ပြန်ချက် Post](https://openai.com/index/introducing-deep-research/) +* 📄 [Open-source DeepResearch – Freeing our search agents](https://huggingface.co/blog/open-deep-research) \ No newline at end of file