AI Edge RAG SDK LLM ইনফারেন্স API এর সাথে একটি পুনরুদ্ধার অগমেন্টেড জেনারেশন (RAG) পাইপলাইন নির্মাণের জন্য মৌলিক উপাদান প্রদান করে। একটি RAG পাইপলাইন LLM-কে ব্যবহারকারী-প্রদত্ত ডেটাতে অ্যাক্সেস প্রদান করে, যার মধ্যে আপডেট করা, সংবেদনশীল বা ডোমেন-নির্দিষ্ট তথ্য অন্তর্ভুক্ত থাকতে পারে। RAG থেকে অতিরিক্ত তথ্য পুনরুদ্ধার ক্ষমতার সাথে, LLMগুলি নির্দিষ্ট ব্যবহারের ক্ষেত্রে আরও সঠিক এবং প্রসঙ্গ-সচেতন প্রতিক্রিয়া তৈরি করতে পারে।
এই গাইডটি আপনাকে AI Edge RAG SDK-এর সাথে LLM ইনফারেন্স API ব্যবহার করে একটি নমুনা অ্যাপ্লিকেশনের একটি প্রাথমিক বাস্তবায়নের মাধ্যমে নিয়ে যায়। এই নির্দেশিকা একটি RAG পাইপলাইন নির্মাণের উপর দৃষ্টি নিবদ্ধ করে। এলএলএম ইনফারেন্স এপিআই ব্যবহার করার বিষয়ে আরও তথ্যের জন্য, অ্যান্ড্রয়েডের জন্য এলএলএম ইনফারেন্স দেখুন।
আপনি GitHub- এ সম্পূর্ণ নমুনা অ্যাপ্লিকেশন খুঁজে পেতে পারেন। শুরু করতে, অ্যাপ্লিকেশনটি তৈরি করুন, ব্যবহারকারী-প্রদত্ত ডেটার মাধ্যমে পড়ুন ( sample_context.txt
), এবং টেক্সট ফাইলে তথ্য সম্পর্কিত LLM প্রশ্ন জিজ্ঞাসা করুন।
উদাহরণ অ্যাপ্লিকেশন চালান
এই নির্দেশিকাটি Android এর জন্য RAG সহ একটি মৌলিক পাঠ্য প্রজন্মের অ্যাপের একটি উদাহরণ উল্লেখ করে৷ আপনি আপনার নিজের অ্যান্ড্রয়েড অ্যাপের জন্য একটি সূচনা পয়েন্ট হিসাবে নমুনা অ্যাপটি ব্যবহার করতে পারেন, বা একটি বিদ্যমান অ্যাপ পরিবর্তন করার সময় এটি উল্লেখ করতে পারেন।
অ্যাপ্লিকেশনটি পিক্সেল 8, পিক্সেল 9, S23 এবং S24 এর মতো উচ্চতর ডিভাইসগুলির জন্য অপ্টিমাইজ করা হয়েছে। আপনার ওয়ার্কস্টেশনে একটি অ্যান্ড্রয়েড ডিভাইস সংযুক্ত করুন এবং নিশ্চিত করুন যে আপনার কাছে অ্যান্ড্রয়েড স্টুডিওর একটি বর্তমান সংস্করণ রয়েছে৷ আরও তথ্যের জন্য, Android সেটআপ নির্দেশিকা দেখুন।
অ্যাপ্লিকেশন কোড ডাউনলোড করুন
নিম্নলিখিত নির্দেশাবলী আপনাকে দেখায় কিভাবে গিট কমান্ড লাইন টুল ব্যবহার করে উদাহরণ কোডের একটি স্থানীয় অনুলিপি তৈরি করতে হয়।
নিম্নলিখিত কমান্ড ব্যবহার করে গিট সংগ্রহস্থল ক্লোন করুন:
git clone https://github.com/google-ai-edge/ai-edge-apis
উদাহরণ কোডের একটি স্থানীয় সংস্করণ তৈরি করার পরে, আপনি প্রকল্পটি অ্যান্ড্রয়েড স্টুডিওতে আমদানি করতে এবং অ্যাপটি চালাতে পারেন।
একটি মডেল ডাউনলোড করুন
নমুনা অ্যাপ্লিকেশনটি Gemma-3 1B ব্যবহার করার জন্য কনফিগার করা হয়েছে। জেমিনি মডেলগুলি তৈরি করতে ব্যবহৃত একই গবেষণা এবং প্রযুক্তি থেকে তৈরি হালকা ওজনের, অত্যাধুনিক ওপেন মডেলগুলির জেমা-3 1B জেমা পরিবারের অংশ। মডেলটিতে 1B প্যারামিটার এবং খোলা ওজন রয়েছে।
Hugging Face থেকে Gemma-3 1B ডাউনলোড করার পরে, আপনার ডিভাইসে মডেলটি পুশ করুন:
cd ~/Downloads
tar -xvzf gemma3-1b-it-int4.tar.gz
$ adb shell rm -r /data/local/tmp/llm/ # Remove any previously loaded models
$ adb shell mkdir -p /data/local/tmp/llm/
$ adb push output_path /data/local/tmp/llm/model_version.task
আপনি নমুনা অ্যাপ্লিকেশন সহ অন্যান্য মডেলগুলিও ব্যবহার করতে পারেন, তবে এটির জন্য অতিরিক্ত কনফিগারেশন পদক্ষেপের প্রয়োজন হতে পারে।
একটি এমবেডার সেট আপ করুন
এমবেডার ব্যবহারকারী-প্রদত্ত ডেটা থেকে পাঠ্যের খণ্ডগুলি নেয় এবং সেগুলিকে ভেক্টরাইজড সাংখ্যিক উপস্থাপনায় পরিণত করে যা এর শব্দার্থগত অর্থ ক্যাপচার করে। LLM প্রাসঙ্গিক ভেক্টর সনাক্ত করতে এই এমবেডিংগুলিকে বোঝায় এবং জেনারেট আউটপুটে সবচেয়ে শব্দার্থগতভাবে প্রাসঙ্গিক অংশগুলিকে অন্তর্ভুক্ত করে।
নমুনা অ্যাপ্লিকেশন দুটি এমবেডার, জেমিনি এমবেডার এবং গেকো এম্বেডারের সাথে কাজ করার জন্য ডিজাইন করা হয়েছে।
গেকো এমবেডার দিয়ে সেট আপ করুন
ডিফল্টরূপে, নমুনা অ্যাপটি Gecko এমবেডার ( GeckoEmbeddingModel
) ব্যবহার করার জন্য কনফিগার করা হয়েছে এবং মডেলটিকে সম্পূর্ণরূপে ডিভাইসে চালায়।
গেকো এমবেডার বিভিন্ন ক্রম দৈর্ঘ্যের জন্য একাধিক সংস্করণ সহ ফ্লোট এবং কোয়ান্টাইজড মডেল হিসাবে উপলব্ধ। আরও তথ্যের জন্য, গেকো মডেল কার্ডটি দেখুন।
মডেল স্পেসিফিকেশন মডেল ফাইলের নাম পাওয়া যাবে. যেমন:
-
Gecko_256_f32.tflite
: ফ্লোট মডেল যা 256 টোকেন পর্যন্ত ক্রম সমর্থন করে। -
Gecko_1024_quant.tflite
: কোয়ান্টাইজড মডেল যা 1024 টোকেন পর্যন্ত সিকোয়েন্স সমর্থন করে।
ক্রম দৈর্ঘ্য হল সর্বাধিক খণ্ড আকার যা মডেলটি এম্বেড করতে পারে৷ উদাহরণস্বরূপ, Gecko_256_f32.tflite
মডেলটি ক্রম দৈর্ঘ্য অতিক্রম করে এমন একটি খণ্ড পাস করা হয়েছে, মডেলটি প্রথম 256 টোকেনগুলিকে এম্বেড করবে এবং খণ্ডটির অবশিষ্টাংশকে ছেঁটে ফেলবে৷
আপনার ডিভাইসে টোকেনাইজার মডেল ( sentencepiece.model
) এবং Gecko এমবেডারটি পুশ করুন:
adb push sentencepiece.model /data/local/tmp/sentencepiece.model
adb push Gecko_256_f32.tflite /data/local/tmp/gecko.tflite
এমবেডিং মডেলটি CPU এবং GPU উভয়ের সাথেই সামঞ্জস্যপূর্ণ। ডিফল্টরূপে, নমুনা অ্যাপটি GPU-তে Gecko মডেলের সাথে এমবেডিংগুলি বের করার জন্য কনফিগার করা হয়েছে।
companion object {
...
private const val USE_GPU_FOR_EMBEDDINGS = true
}
জেমিনি এম্বেডারের সাথে সেট আপ করুন
Gemini Embedder ( GeminiEmbedder
) Gemini Cloud API ব্যবহার করে এম্বেডিং তৈরি করে। অ্যাপ্লিকেশনটি চালানোর জন্য এটির একটি Google Gemini API কী প্রয়োজন, যা আপনি Google Gemini API সেটআপ পৃষ্ঠা থেকে পেতে পারেন৷
Google AI স্টুডিওতে একটি Gemini API কী পান
আপনার Gemini API কী যোগ করুন এবং RagPipeline.kt- এ COMPUTE_EMBEDDINGS_LOCALLY
মিথ্যাতে সেট করুন :
companion object {
...
private const val COMPUTE_EMBEDDINGS_LOCALLY = false
private const val GEMINI_API_KEY = "<API_KEY>"
}
এটা কিভাবে কাজ করে
এই বিভাগটি অ্যাপ্লিকেশনের RAG পাইপলাইন উপাদানগুলির উপর আরও গভীর তথ্য প্রদান করে। আপনি RagPipeline.kt- এ বেশিরভাগ কোড দেখতে পারেন।
নির্ভরতা
RAG SDK com.google.ai.edge.localagents:localagents-rag
লাইব্রেরি ব্যবহার করে। আপনার Android অ্যাপের build.gradle
ফাইলে এই নির্ভরতা যোগ করুন:
dependencies {
...
implementation("com.google.ai.edge.localagents:localagents-rag:0.1.0")
implementation("com.google.mediapipe:tasks-genai:0.10.22")
}
ব্যবহারকারী-প্রদত্ত ডেটা
অ্যাপ্লিকেশনটিতে ব্যবহারকারী-প্রদত্ত ডেটা হল sample_context.txt
নামে একটি টেক্সট ফাইল, যা assets
ডিরেক্টরিতে সংরক্ষণ করা হয়। অ্যাপ্লিকেশনটি পাঠ্য ফাইলের খণ্ডগুলি নেয়, সেই অংশগুলির এম্বেডিং তৈরি করে এবং আউটপুট পাঠ্য তৈরি করার সময় এমবেডিংগুলিকে বোঝায়।
নিম্নলিখিত কোড স্নিপেট MainActivity.kt এ পাওয়া যাবে:
class MainActivity : ComponentActivity() {
lateinit var chatViewModel: ChatViewModel
...
chatViewModel.memorizeChunks("sample_context.txt")
...
}
চঙ্কিং
সরলতার জন্য, sample_context.txt
ফাইলটিতে <chunk_splitter>
ট্যাগ রয়েছে যা নমুনা অ্যাপ্লিকেশনটি খণ্ড তৈরি করতে ব্যবহার করে। তারপর প্রতিটি খণ্ডের জন্য এমবেডিং তৈরি করা হয়। উত্পাদন অ্যাপ্লিকেশনগুলিতে, খণ্ডগুলির আকার একটি মূল বিবেচ্য বিষয়। যখন একটি খণ্ড খুব বড় হয়, তখন ভেক্টরটি কার্যকর হওয়ার জন্য যথেষ্ট নির্দিষ্টতা ধারণ করে না; এবং যখন এটি খুব ছোট, এটি যথেষ্ট প্রসঙ্গ ধারণ করে না।
নমুনা অ্যাপ্লিকেশনটি RagPipeline.kt- এ memorizeChunks
ফাংশনের মাধ্যমে খণ্ডটি পরিচালনা করে।
এমবেডিং
অ্যাপ্লিকেশনটি পাঠ্য এম্বেডিংয়ের জন্য দুটি পথ সরবরাহ করে:
- Gecko এমবেডার : Gecko মডেলের সাথে স্থানীয় (অন-ডিভাইস) টেক্সট এমবেডিং নিষ্কাশন।
- জেমিনি এমবেডার : জেনারেটিভ ল্যাঙ্গুয়েজ ক্লাউড এপিআই সহ ক্লাউড-ভিত্তিক পাঠ্য এমবেডিং নিষ্কাশন।
ব্যবহারকারী স্থানীয়ভাবে বা Google ক্লাউডের মাধ্যমে এম্বেডিং গণনা করতে চায় কিনা তার উপর ভিত্তি করে নমুনা অ্যাপ্লিকেশনটি এমবেডার নির্বাচন করে। নিম্নলিখিত কোড স্নিপেট RagPipeline.kt এ পাওয়া যাবে:
private val embedder: Embedder<String> = if (COMPUTE_EMBEDDINGS_LOCALLY) {
GeckoEmbeddingModel(
GECKO_MODEL_PATH,
Optional.of(TOKENIZER_MODEL_PATH),
USE_GPU_FOR_EMBEDDINGS,
)
} else {
GeminiEmbedder(
GEMINI_EMBEDDING_MODEL,
GEMINI_API_KEY
)
}
ডাটাবেস
নমুনা অ্যাপ্লিকেশনটি টেক্সট এম্বেডিং সঞ্চয় করতে SQLite ( SqliteVectorStore
) ব্যবহার করে। আপনি অ-স্থায়ী ভেক্টর স্টোরেজের জন্য DefaultVectorStore
ডাটাবেস ব্যবহার করতে পারেন।
নিম্নলিখিত কোড স্নিপেট RagPipeline.kt এ পাওয়া যাবে:
private val config = ChainConfig.create(
mediaPipeLanguageModel, PromptBuilder(QA_PROMPT_TEMPLATE1),
DefaultSemanticTextMemory(
SqliteVectorStore(768), embedder
)
)
নমুনা অ্যাপটি এমবেডিং মাত্রা 768 এ সেট করে, যা ভেক্টর ডাটাবেসের প্রতিটি ভেক্টরের দৈর্ঘ্যকে নির্দেশ করে।
চেইন
RAG SDK চেইন সরবরাহ করে, যা একটি একক পাইপলাইনে একাধিক RAG উপাদানকে একত্রিত করে। আপনি পুনরুদ্ধার এবং অনুসন্ধান মডেল অর্কেস্ট্রেট করতে চেইন ব্যবহার করতে পারেন। এপিআই চেইন ইন্টারফেসের উপর ভিত্তি করে।
নমুনা অ্যাপ্লিকেশন পুনরুদ্ধার এবং অনুমান চেইন ব্যবহার করে। নিম্নলিখিত কোড স্নিপেট RagPipeline.kt এ পাওয়া যাবে:
private val retrievalAndInferenceChain = RetrievalAndInferenceChain(config)
মডেল যখন প্রতিক্রিয়া তৈরি করে তখন চেইনটি চালু করা হয়:
suspend fun generateResponse(
prompt: String,
callback: AsyncProgressListener<LanguageModelResponse>?
): String =
coroutineScope {
val retrievalRequest =
RetrievalRequest.create(
prompt,
RetrievalConfig.create(2, 0.0f, TaskType.QUESTION_ANSWERING)
)
retrievalAndInferenceChain.invoke(retrievalRequest, callback).await().text
}