1. ওভারভিউ
এই কোডল্যাবে, আপনি শিখবেন কিভাবে Firestore ভেক্টর সাদৃশ্য অনুসন্ধান ব্যবহার করে আপনার অ্যাপে শক্তিশালী অনুসন্ধান বৈশিষ্ট্য যুক্ত করবেন। আপনি সুইফট এবং সুইফটইউআই-তে লেখা একটি নোট গ্রহণকারী অ্যাপের জন্য একটি শব্দার্থিক অনুসন্ধান বৈশিষ্ট্য বাস্তবায়ন করবেন।
যা শিখবেন
- ভেক্টর এম্বেডিং গণনা করতে Firestore এক্সটেনশনের সাথে ভেক্টর অনুসন্ধান কীভাবে ইনস্টল করবেন।
- একটি সুইফ্ট অ্যাপ্লিকেশন থেকে ফায়ারবেস ক্লাউড ফাংশনগুলিকে কীভাবে কল করবেন।
- সাইন-ইন করা ব্যবহারকারীর উপর ভিত্তি করে ডেটা কীভাবে প্রাক-ফিল্টার করবেন।
আপনি কি প্রয়োজন হবে
- এক্সকোড 15.3
- কোডল্যাব নমুনা কোড। আপনি কোডল্যাবের পরবর্তী ধাপে এটি ডাউনলোড করবেন।
2. একটি ফায়ারবেস প্রকল্প তৈরি এবং সেট আপ করুন৷
Firebase ভেক্টর অনুসন্ধান এক্সটেনশন ব্যবহার করতে, আপনার একটি Firebase প্রকল্প প্রয়োজন। কোডল্যাবের এই অংশে, আপনি একটি নতুন ফায়ারবেস প্রকল্প তৈরি করবেন এবং প্রয়োজনীয় পরিষেবাগুলি যেমন ক্লাউড ফায়ারস্টোর এবং ফায়ারবেস প্রমাণীকরণ সক্রিয় করবেন।
একটি ফায়ারবেস প্রকল্প তৈরি করুন
- Firebase এ সাইন ইন করুন
- Firebase কনসোলে, প্রকল্প যোগ করুন ক্লিক করুন, তারপর আপনার প্রকল্পের নাম দিন Firestore ভেক্টর অনুসন্ধান ল্যাব
- প্রকল্প তৈরির বিকল্পগুলির মাধ্যমে ক্লিক করুন। অনুরোধ করা হলে Firebase শর্তাবলী স্বীকার করুন।
- Google Analytics স্ক্রিনে, এই প্রকল্পের জন্য Google Analytics সক্ষম করুন বক্সটি আনচেক করুন, কারণ আপনি এই অ্যাপের জন্য Analytics ব্যবহার করবেন না৷
- অবশেষে, Create project এ ক্লিক করুন।
ফায়ারবেস প্রকল্পগুলি সম্পর্কে আরও জানতে, ফায়ারবেস প্রকল্পগুলি বুঝতে দেখুন।
আপনার Firebase মূল্য পরিকল্পনা আপগ্রেড করুন
ফায়ারবেস এক্সটেনশন এবং তাদের অন্তর্নিহিত ক্লাউড পরিষেবাগুলি ব্যবহার করার জন্য, আপনার ফায়ারবেস প্রজেক্টকে পে-অ্যাস-ইউ গো (ব্লেজ) মূল্য পরিকল্পনায় থাকতে হবে, যার অর্থ এটি একটি ক্লাউড বিলিং অ্যাকাউন্টের সাথে লিঙ্ক করা হয়েছে৷
- একটি ক্লাউড বিলিং অ্যাকাউন্টের জন্য একটি অর্থপ্রদানের পদ্ধতি প্রয়োজন, যেমন একটি ক্রেডিট কার্ড৷
- আপনি Firebase এবং Google ক্লাউডে নতুন হলে, আপনি $300 ক্রেডিট এবং একটি বিনামূল্যের ট্রায়াল ক্লাউড বিলিং অ্যাকাউন্টের জন্য যোগ্য কিনা তা পরীক্ষা করুন।
- আপনি যদি একটি ইভেন্টের অংশ হিসাবে এই কোডল্যাবটি করছেন, তাহলে আপনার সংগঠককে জিজ্ঞাসা করুন যদি কোনো ক্লাউড ক্রেডিট উপলব্ধ থাকে।
আপনার প্রকল্পকে ব্লেজ প্ল্যানে আপগ্রেড করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
- Firebase কনসোলে, আপনার প্ল্যান আপগ্রেড করতে নির্বাচন করুন।
- ব্লেজ প্ল্যান নির্বাচন করুন। আপনার প্রকল্পের সাথে একটি ক্লাউড বিলিং অ্যাকাউন্ট লিঙ্ক করতে অন-স্ক্রীন নির্দেশাবলী অনুসরণ করুন।
এই আপগ্রেডের অংশ হিসাবে আপনার যদি একটি ক্লাউড বিলিং অ্যাকাউন্ট তৈরি করার প্রয়োজন হয়, তাহলে আপগ্রেড সম্পূর্ণ করতে আপনাকে Firebase কনসোলে আপগ্রেড প্রবাহে ফিরে যেতে হতে পারে।
কনসোলে Firebase পণ্যগুলিকে সক্ষম করুন এবং সেট আপ করুন৷
আপনি যে অ্যাপটি তৈরি করছেন সেটি অ্যাপল অ্যাপের জন্য উপলব্ধ বেশ কয়েকটি Firebase পণ্য ব্যবহার করে:
- Firebase প্রমাণীকরণ সহজেই আপনার ব্যবহারকারীদের আপনার অ্যাপে সাইন ইন করার অনুমতি দেয়।
- ক্লাউড ফায়ারস্টোর ক্লাউডে স্ট্রাকচার্ড ডেটা সংরক্ষণ করতে এবং ডেটা পরিবর্তন হলে তাৎক্ষণিক বিজ্ঞপ্তি পেতে।
- আপনার ডাটাবেস সুরক্ষিত করতে ফায়ারবেস নিরাপত্তা নিয়ম ।
এই পণ্যগুলির মধ্যে কিছু বিশেষ কনফিগারেশন প্রয়োজন বা Firebase কনসোল ব্যবহার করে সক্ষম করা প্রয়োজন।
ফায়ারবেস প্রমাণীকরণের জন্য বেনামী প্রমাণীকরণ সক্ষম করুন
এই অ্যাপ্লিকেশনটি ব্যবহারকারীদের প্রথমে একটি অ্যাকাউন্ট তৈরি না করেই অ্যাপ ব্যবহার শুরু করার অনুমতি দেওয়ার জন্য বেনামী প্রমাণীকরণ ব্যবহার করে। এর ফলে একটি কম-ঘর্ষণ অনবোর্ডিং প্রক্রিয়া হয়। বেনামী প্রমাণীকরণ সম্পর্কে আরও জানতে (এবং কীভাবে একটি নামযুক্ত অ্যাকাউন্টে আপগ্রেড করবেন), বেনামী প্রমাণীকরণের জন্য সেরা অনুশীলনগুলি দেখুন।
- Firebase কনসোলের বাম পাশের প্যানেলে, Build > Authentication-এ ক্লিক করুন। তারপর Get start-এ ক্লিক করুন।
- আপনি এখন প্রমাণীকরণ ড্যাশবোর্ডে আছেন, যেখানে আপনি সাইন-আপ করা ব্যবহারকারীদের দেখতে পারবেন, সাইন-ইন প্রদানকারী কনফিগার করতে পারবেন এবং সেটিংস পরিচালনা করতে পারবেন।
- সাইন-ইন পদ্ধতি ট্যাবটি নির্বাচন করুন (বা সরাসরি ট্যাবে যেতে এখানে ক্লিক করুন )।
- প্রদানকারীর বিকল্পগুলি থেকে বেনামীতে ক্লিক করুন, সক্ষম করুন -এ সুইচটি টগল করুন এবং তারপর সংরক্ষণ করুন ক্লিক করুন।
ক্লাউড ফায়ারস্টোর সেট আপ করুন
এই সুইফট অ্যাপ্লিকেশনটি নোট সংরক্ষণ করতে ক্লাউড ফায়ারস্টোর ব্যবহার করে।
আপনার ফায়ারবেস প্রকল্পে ক্লাউড ফায়ারস্টোর কীভাবে সেট আপ করবেন তা এখানে:
- Firebase কনসোলের বাম-প্যানেলে, বিল্ড প্রসারিত করুন এবং তারপর Firestore ডাটাবেস নির্বাচন করুন।
- ডাটাবেস তৈরি করুন ক্লিক করুন।
- ডাটাবেস আইডি
(default)
এ সেট করুন। - আপনার ডাটাবেসের জন্য একটি অবস্থান নির্বাচন করুন, তারপর পরবর্তী ক্লিক করুন।
একটি বাস্তব অ্যাপের জন্য, আপনি এমন একটি অবস্থান বেছে নিতে চান যা আপনার ব্যবহারকারীদের কাছাকাছি। - স্টার্ট ইন টেস্ট মোডে ক্লিক করুন। নিরাপত্তা নিয়ম সম্পর্কে দাবিত্যাগ পড়ুন.
পরে এই কোডল্যাবে, আপনি আপনার ডেটা সুরক্ষিত করতে নিরাপত্তা নিয়ম যোগ করবেন। আপনার ডাটাবেসের জন্য নিরাপত্তা বিধি যোগ না করে সর্বজনীনভাবে কোনো অ্যাপ বিতরণ বা প্রকাশ করবেন না । - তৈরি করুন ক্লিক করুন।
ফায়ারবেসের জন্য ক্লাউড স্টোরেজ সেট আপ করুন
ওয়েব অ্যাপটি ছবি সংরক্ষণ, আপলোড এবং শেয়ার করতে Firebase-এর জন্য ক্লাউড স্টোরেজ ব্যবহার করে।
আপনার ফায়ারবেস প্রকল্পে ফায়ারবেসের জন্য ক্লাউড স্টোরেজ কীভাবে সেট আপ করবেন তা এখানে:
- Firebase কনসোলের বাম-প্যানেলে, বিল্ড প্রসারিত করুন এবং তারপর স্টোরেজ নির্বাচন করুন।
- শুরু করুন ক্লিক করুন।
- আপনার ডিফল্ট স্টোরেজ বাকেটের জন্য একটি অবস্থান নির্বাচন করুন।
US-WEST1
,US-CENTRAL1
, এবংUS-EAST1
এ বাকেটগুলি Google ক্লাউড স্টোরেজের জন্য "সর্বদা বিনামূল্যে" স্তরের সুবিধা নিতে পারে৷ অন্যান্য সমস্ত অবস্থানে বালতি Google ক্লাউড স্টোরেজ মূল্য এবং ব্যবহার অনুসরণ করে। - স্টার্ট ইন টেস্ট মোডে ক্লিক করুন। নিরাপত্তা নিয়ম সম্পর্কে দাবিত্যাগ পড়ুন.
পরে এই কোডল্যাবে, আপনি আপনার ডেটা সুরক্ষিত করতে নিরাপত্তা নিয়ম যোগ করবেন। আপনার স্টোরেজ বাকেটের জন্য নিরাপত্তা বিধি যোগ না করে সর্বজনীনভাবে কোনো অ্যাপ বিতরণ বা প্রকাশ করবেন না । - তৈরি করুন ক্লিক করুন।
3. মোবাইল অ্যাপ কানেক্ট করুন
কোডল্যাবের এই বিভাগে, আপনি একটি সাধারণ নোট নেওয়ার অ্যাপের জন্য সোর্স কোড ডাউনলোড করবেন এবং এটিকে আপনার তৈরি করা Firebase প্রকল্পের সাথে সংযুক্ত করবেন।
নমুনা অ্যাপ্লিকেশন ডাউনলোড করুন
- https://github.com/FirebaseExtended/codelab-firestore-vectorsearch-ios- এ যান এবং আপনার স্থানীয় মেশিনে সংগ্রহস্থল ক্লোন করুন
- Xcode-এ Notes.xcodeproj প্রকল্পটি খুলুন
আপনার Firebase প্রকল্পের সাথে অ্যাপটি সংযুক্ত করুন
আপনার অ্যাপ Firebase পরিষেবাগুলি অ্যাক্সেস করতে সক্ষম হওয়ার জন্য, আপনাকে Firebase কনসোলে অ্যাপটি সেট আপ করতে হবে। আপনি একই ফায়ারবেস প্রকল্পের সাথে একাধিক ক্লায়েন্ট অ্যাপ্লিকেশন সংযোগ করতে পারেন, উদাহরণস্বরূপ আপনি যদি একটি Android বা ওয়েব অ্যাপ তৈরি করেন তবে আপনার সেগুলিকে একই Firebase প্রকল্পের সাথে সংযুক্ত করা উচিত।
ফায়ারবেস প্রকল্পগুলি সম্পর্কে আরও জানতে, ফায়ারবেস প্রকল্পগুলি বুঝতে দেখুন।
- Firebase কনসোলে, আপনার Firebase প্রকল্পের ওভারভিউ পৃষ্ঠায় যান।
- আপনার iOS অ্যাপ যোগ করতে iOS+ আইকনে ক্লিক করুন।
- আপনার Apple অ্যাপ স্ক্রিনে Firebase যোগ করুন , Xcode প্রকল্প থেকে বান্ডিল আইডি ঢোকান ( com.google.firebase.codelab.Notes )।
- আপনি যদি চান, আপনি একটি অ্যাপ ডাকনাম লিখতে পারেন ( iOS এর জন্য নোট )।
- পরবর্তী ধাপে যেতে রেজিস্টার অ্যাপে ক্লিক করুন।
- GoogleServices-Info.plist ফাইলটি ডাউনলোড করুন।
- আপনার Xcode প্রকল্পের নোট ফোল্ডারে GoogleServices-Info.plist টেনে আনুন। এটি করার একটি ভাল উপায় এটি Assets.xcassets ফাইলের নীচে ফেলে দেওয়া।
- প্রয়োজনে অনুলিপি আইটেম নির্বাচন করুন, লক্ষ্য করুন লক্ষ্য যোগ করুন -এ নোট টার্গেট নির্বাচন করা হয়েছে তা নিশ্চিত করুন এবং সমাপ্তিতে ক্লিক করুন।
- Firebase কনসোলে, আপনি এখন বাকি সেটআপ প্রক্রিয়ার মাধ্যমে ক্লিক করতে পারেন: এই বিভাগের শুরুতে আপনি যে নমুনাটি ডাউনলোড করেছেন তাতে ইতিমধ্যেই Firebase Apple SDK ইনস্টল করা আছে, এবং প্রাথমিক সেট আপ করা হয়েছে। আপনি Continue to console এ ক্লিক করে প্রক্রিয়াটি শেষ করতে পারেন।
অ্যাপটি চালান
এটি একটি স্পিন জন্য অ্যাপ্লিকেশন নিতে এখন সময়!
- Xcode-এ ফিরে, iOS সিমুলেটরে অ্যাপটি চালান। Run Destinations ড্রপ-ডাউনে, প্রথমে iOS সিমুলেটরগুলির একটি নির্বাচন করুন।
- তারপর, রান বোতামে ক্লিক করুন, বা ⌘ + R টিপুন
- সিমুলেটরে অ্যাপটি সফলভাবে চালু হয়ে গেলে, কয়েকটি নোট যোগ করুন।
- Firebase কনসোলে, Firestore ডেটা ব্রাউজারে নেভিগেট করুন, যাতে আপনি অ্যাপে নতুন নোট যোগ করার সাথে সাথে নতুন নথি তৈরি করা দেখতে পারেন।
4. Firestore এক্সটেনশনের সাথে ভেক্টর অনুসন্ধান ইনস্টল করুন
কোডল্যাবের এই অংশে, আপনি Firestore এক্সটেনশনের সাথে ভেক্টর অনুসন্ধান ইনস্টল করবেন এবং আপনি যে নোট-গ্রহণ অ্যাপে কাজ করছেন তার প্রয়োজনীয়তার সাথে এটি কনফিগার করবেন।
এক্সটেনশন ইনস্টল করা শুরু করুন
- এখনও ফায়ারস্টোর বিভাগে, এক্সটেনশন ট্যাবে ক্লিক করুন।
- এক্সপ্লোর এক্সটেনশন হাব এ ক্লিক করুন।
- "ভেক্টর" টাইপ করুন।
- "Firestore এক্সটেনশন সহ ভেক্টর অনুসন্ধান" এ ক্লিক করুন। এটি আপনাকে এক্সটেনশনের বিশদ পৃষ্ঠায় নিয়ে যাবে, যেখানে আপনি এক্সটেনশন সম্পর্কে আরও পড়তে পারেন, এটি কীভাবে কাজ করে, কোন ফায়ারবেস পরিষেবাগুলির প্রয়োজন এবং আপনি কীভাবে এটি কনফিগার করতে পারেন।
- Firebase কনসোলে Install এ ক্লিক করুন।
- আপনাকে আপনার সমস্ত প্রকল্পের একটি তালিকা উপস্থাপন করা হবে।
- এই কোডল্যাবের প্রথম ধাপে আপনি যে প্রকল্পটি তৈরি করেছেন সেটি বেছে নিন।
এক্সটেনশন কনফিগার করুন
- API গুলি সক্রিয় এবং তৈরি সংস্থানগুলি পর্যালোচনা করুন৷
- প্রয়োজনীয় পরিষেবাগুলি সক্ষম করুন।
- সমস্ত পরিষেবা সক্রিয় হয়ে গেলে, Next এ ক্লিক করুন।
- এই এক্সটেনশনে মঞ্জুর করা অ্যাক্সেস পর্যালোচনা করুন।
- এক্সটেনশন কনফিগার করুন:
- LLM হিসাবে Vertex AI নির্বাচন করুন
- সংগ্রহের পথ : নোট
- ডিফল্ট ক্যোয়ারী সীমা : 3
- ইনপুট ক্ষেত্রের নাম : পাঠ্য
- আউটপুট ক্ষেত্রের নাম: এমবেডিং
- স্থিতি ক্ষেত্রের নাম: * *স্থিতি*
- বিদ্যমান নথি এম্বেড করুন : হ্যাঁ
- বিদ্যমান নথি আপডেট করুন : হ্যাঁ
- ক্লাউড ফাংশন অবস্থান : us-central1
- ইনস্টলেশন শেষ করতে ইন্সটল এক্সটেনশনে ক্লিক করুন।
এতে কয়েক মিনিট সময় লাগতে পারে। আপনি যখন ইনস্টলেশন সম্পূর্ণ হওয়ার জন্য অপেক্ষা করছেন, তখন নির্দ্বিধায় টিউটোরিয়ালের পরবর্তী বিভাগে অগ্রসর হন এবং ভেক্টর এম্বেডিং সম্পর্কে কিছু পটভূমি তথ্য পড়ুন।
5. পটভূমি
আপনি যখন ইনস্টলেশন শেষ হওয়ার জন্য অপেক্ষা করছেন, তখন Firestore এক্সটেনশনের সাথে ভেক্টর অনুসন্ধান কীভাবে কাজ করে সে সম্পর্কে এখানে কিছু পটভূমির তথ্য রয়েছে।
ভেক্টর, এমবেডিং এবং ভেক্টর ডাটাবেস কি?
- ভেক্টর হল গাণিতিক বস্তু যা একটি পরিমাণের মাত্রা এবং দিক নির্দেশ করে। এগুলিকে এমনভাবে ডেটা উপস্থাপন করতে ব্যবহার করা যেতে পারে যা তুলনা করা এবং অনুসন্ধান করা সহজ করে তোলে।
- এমবেডিংগুলি এমন ভেক্টর যা একটি শব্দ বা বাক্যাংশের অর্থ উপস্থাপন করে। এগুলি পাঠ্যের একটি বৃহৎ কর্পাসে একটি নিউরাল নেটওয়ার্ককে প্রশিক্ষণ দিয়ে এবং শব্দের মধ্যে সম্পর্ক শেখার মাধ্যমে তৈরি করা হয়।
- ভেক্টর ডেটাবেসগুলি এমন ডেটাবেস যা ভেক্টর ডেটা সংরক্ষণ এবং অনুসন্ধানের জন্য অপ্টিমাইজ করা হয়। তারা দক্ষ নিকটতম প্রতিবেশী অনুসন্ধানের জন্য অনুমতি দেয়, যা একটি প্রদত্ত ক্যোয়ারী ভেক্টরের সাথে সবচেয়ে অনুরূপ ভেক্টর খুঁজে বের করার প্রক্রিয়া।
ভেক্টর অনুসন্ধান কিভাবে কাজ করে?
ভেক্টর অনুসন্ধান ডাটাবেসের সমস্ত ভেক্টরের সাথে কোয়েরি ভেক্টরের তুলনা করে কাজ করে। যে ভেক্টরগুলি ক্যোয়ারী ভেক্টরের সাথে সবচেয়ে বেশি মিল সেগুলি অনুসন্ধান ফলাফল হিসাবে ফেরত দেওয়া হয়।
বিভিন্ন দূরত্বের মেট্রিক্স ব্যবহার করে দুটি ভেক্টরের মধ্যে মিল পরিমাপ করা যেতে পারে। সবচেয়ে সাধারণ দূরত্ব মেট্রিক হল কোসাইন সাদৃশ্য, যা দুটি ভেক্টরের মধ্যে কোণ পরিমাপ করে।
6. Firestore এক্সটেনশনের সাথে ভেক্টর অনুসন্ধান চেষ্টা করুন
এই কোডল্যাবে আগে ডাউনলোড করা iOS অ্যাপে Firestore এক্সটেনশনের সাথে ভেক্টর অনুসন্ধান ব্যবহার করার আগে, আপনি Firebase কনসোলে এক্সটেনশনটি ব্যবহার করে দেখতে পারেন।
ডকুমেন্টেশন পড়ুন
ফায়ারবেস এক্সটেনশানগুলি কীভাবে কাজ করে তার ডকুমেন্টেশন অন্তর্ভুক্ত করে।
- এক্সটেনশনটি ইনস্টল করা শেষ হলে, Get start বাটনে ক্লিক করুন।
- "এই এক্সটেনশনটি কীভাবে কাজ করে" ট্যাবটি দেখুন - এটি ব্যাখ্যা করে:
- কীভাবে নথিগুলির জন্য এম্বেডিংগুলিকে
notes
সংগ্রহে যুক্ত করে গণনা করা যায়, - কিভাবে
ext-firestore-vector-search-queryCallable
callable ফাংশন কল করে সূচকটি জিজ্ঞাসা করবেন, - অথবা কিভাবে
_firestore-vector-search/index/queries
সংগ্রহে একটি ক্যোয়ারী ডকুমেন্ট যোগ করে সূচকটি জিজ্ঞাসা করতে হয়। - এটি একটি কাস্টম এমবেডিং ফাংশন কীভাবে সেট আপ করতে হয় তাও ব্যাখ্যা করে - যদি এক্সটেনশন দ্বারা সমর্থিত কোনো LLM আপনার প্রয়োজনীয়তা পূরণ না করে এবং আপনি এম্বেডিং গণনা করার জন্য একটি ভিন্ন LLM ব্যবহার করতে চান তবে এটি কার্যকর।
- কীভাবে নথিগুলির জন্য এম্বেডিংগুলিকে
- আপনার ফায়ারস্টোর ইনস্ট্যান্সে যেতে ক্লাউড ফায়ারস্টোর ড্যাশবোর্ড লিঙ্কে ক্লিক করুন
-
_firestore-vector-search/index
নথিতে নেভিগেট করুন। এটি দেখানো উচিত যে এক্সটেনশনটি এই কোডল্যাবের আগের ধাপে আপনার তৈরি করা সমস্ত নোট নথিগুলির জন্য এমবেডিংগুলি গণনা করা শেষ করেছে৷ - এটি যাচাই করতে, নোটের একটি নথি খুলুন, এবং আপনি ভেক্টরের
embedding
নামে একটি অতিরিক্ত ক্ষেত্র দেখতে পাবেনvector<768>
, পাশাপাশি একটিstatus
ক্ষেত্র।
একটি নমুনা নথি তৈরি করুন
এক্সটেনশনটি কার্যকরী দেখতে আপনি Firebase কনসোলে একটি নতুন নথি তৈরি করতে পারেন।
- এখনও Firestore ডেটা ব্রাউজারে,
notes
সংগ্রহে নেভিগেট করুন এবং মাঝের কলামে + নথি যোগ করুন -এ ক্লিক করুন। - একটি নতুন অনন্য নথি আইডি তৈরি করতে অটো-আইডিতে ক্লিক করুন।
- টাইপ স্ট্রিং এর
text
নামের একটি ক্ষেত্র যোগ করুন এবং মান ক্ষেত্রে কিছু টেক্সট পেস্ট করুন। এটা গুরুত্বপূর্ণ যে এটি lorem ipsum বা অন্য কোনো এলোমেলো পাঠ্য নয়। উদাহরণস্বরূপ, একটি সংবাদ নিবন্ধ চয়ন করুন। - Save এ ক্লিক করুন।
- লক্ষ্য করুন কিভাবে এক্সটেনশন একটি স্থিতি ক্ষেত্র যোগ করে তা নির্দেশ করে যে এটি ডেটা প্রক্রিয়া করছে।
- কিছুক্ষণ পর, আপনি
vector<768>
এর মান সহ একটি নতুন ক্ষেত্রembedding
দেখতে পাবেন।
একটি প্রশ্ন সঞ্চালন
Firestore এক্সটেনশনের সাথে ভেক্টর অনুসন্ধানের একটি নিফটি সামান্য বৈশিষ্ট্য রয়েছে যা আপনাকে একটি অ্যাপ সংযোগ না করেই নথির সূচী অনুসন্ধান করতে দেয়।
- Firebase কনসোলের Firestore বিভাগে,
_firestore-vector-search/index
নথিতে যান - ক্লিক করুন + সংগ্রহ শুরু করুন
-
queries
নামে একটি নতুন উপ-সংগ্রহ তৈরি করুন - একটি নতুন নথি তৈরি করুন এবং আপনার নথিগুলির একটিতে থাকা একটি পাঠ্যের জন্য
query
ক্ষেত্র সেট করুন। এটি শব্দার্থগত প্রশ্নগুলির জন্য সবচেয়ে ভাল কাজ করে, যেমন "আমি কীভাবে সুইফ্ট দিয়ে ফায়ারস্টোর নথিগুলিকে ম্যাপ করতে পারি" (আপনার যোগ করা নোটগুলির মধ্যে অন্তত একটিতে এই বিষয়ে আলোচনা করা পাঠ্য রয়েছে)। - আপনি স্ট্যাটাসে একটি ত্রুটি দেখতে পারেন
- এটি একটি অনুপস্থিত সূচকের কারণে। অনুপস্থিত সূচক কনফিগারেশন সেট আপ করতে, এই লিঙ্কটি অনুসরণ করে আপনার প্রকল্পের জন্য Google ক্লাউড কনসোলে যান এবং তারপর তালিকা থেকে আপনার প্রকল্প নির্বাচন করুন
- ক্লাউড লগ এক্সপ্লোরারে, আপনি এখন "FAILED_PRECONDITION: অনুপস্থিত ভেক্টর ইনডেক্স কনফিগারেশন" বলে একটি ত্রুটি বার্তা দেখতে পাবেন। অনুগ্রহ করে নিম্নলিখিত gcloud কমান্ড দিয়ে প্রয়োজনীয় সূচক তৈরি করুন: ..."
- ত্রুটি বার্তাটিতে একটি
gcloud
কমান্ডও রয়েছে যা আপনাকে অনুপস্থিত সূচকটি কনফিগার করতে চালাতে হবে। - আপনার কমান্ড লাইন থেকে নিম্নলিখিত কমান্ড চালান। আপনার মেশিনে
gcloud
CLI ইনস্টল না থাকলে, এটি ইনস্টল করতে এখানে নির্দেশাবলী অনুসরণ করুন।
সূচক তৈরি করতে কয়েক মিনিট সময় লাগে। আপনি Firebase কনসোলের Firestore বিভাগে ইন্ডেক্স ট্যাবে অগ্রগতি পরীক্ষা করতে পারেন।gcloud alpha firestore indexes composite create --project=INSERT-YOUR=PROJECT-ID-HERE --collection-group=notes --query-scope=COLLECTION --field-config=vector-config='{"dimension":"768","flat": "{}"}',field-path=embedding
- একবার সূচী সেট আপ হয়ে গেলে, আপনি একটি নতুন কোয়েরি নথি তৈরি করতে পারেন।
- আপনি এখন ফলাফল ক্ষেত্রে মিলিত নথি আইডিগুলির একটি তালিকা দেখতে পাবেন৷
- সেই আইডিগুলির একটি কপি করুন এবং
notes
সংগ্রহে ফিরে যান। - আপনার কপি করা ডকুমেন্ট আইডি অনুসন্ধান করতে ⌘+F ব্যবহার করুন - এই ডকুমেন্টটি আপনার প্রশ্নের সাথে সবচেয়ে ভালো মেলে।
7. শব্দার্থিক অনুসন্ধান বাস্তবায়ন করুন
অবশেষে আপনার মোবাইল অ্যাপটিকে Firestore এক্সটেনশনের সাথে ভেক্টর অনুসন্ধানের সাথে সংযুক্ত করার এবং একটি শব্দার্থিক অনুসন্ধান বৈশিষ্ট্য প্রয়োগ করার সময় এসেছে যা আপনার ব্যবহারকারীদের স্বাভাবিক ভাষার প্রশ্নগুলি ব্যবহার করে তাদের নোটগুলি অনুসন্ধান করার অনুমতি দেবে৷
প্রশ্ন সম্পাদনের জন্য কলযোগ্য ফাংশন সংযোগ করুন
Firestore এক্সটেনশনের সাথে ভেক্টর অনুসন্ধানে একটি ক্লাউড ফাংশন রয়েছে যা আপনি এই কোডল্যাবে আগে তৈরি করা সূচকটি জিজ্ঞাসা করতে আপনার মোবাইল অ্যাপ থেকে কল করতে পারেন। এই ধাপে, আপনি আপনার মোবাইল অ্যাপ এবং এই কলযোগ্য ফাংশনের মধ্যে একটি সংযোগ স্থাপন করবেন। ফায়ারবেসের সুইফ্ট SDK-এ API গুলি রয়েছে যা কলিং দূরবর্তী ফাংশনগুলিকে নির্বিঘ্ন করে তোলে৷
- Xcode-এ ফিরে যান এবং নিশ্চিত করুন যে আপনি এই কোডল্যাবের পূর্ববর্তী ধাপে ক্লোন করা প্রজেক্টে আছেন।
-
NotesRepository.swift
ফাইলটি খুলুন। -
private lazy var vectorSearchQueryCallable: Callable = functions.httpsCallable("")
private lazy var vectorSearchQueryCallable: Callable = functions.httpsCallable("")
একটি কলযোগ্য ক্লাউড ফাংশন আহ্বান করতে, আপনি যে ফাংশনটি কল করতে চান তার নাম প্রদান করতে হবে৷
- আপনার প্রকল্পের জন্য ফায়ারবেস কনসোলে যান এবং বিল্ড বিভাগে ফাংশন মেনু আইটেমটি খুলুন।
- আপনি এক্সটেনশন দ্বারা ইনস্টল করা ফাংশনগুলির একটি তালিকা দেখতে পাবেন।
-
ext-firestore-vector-search-queryCallable
নামের একটি অনুসন্ধান করুন এবং এর নাম অনুলিপি করুন। - আপনার কোডে নাম পেস্ট করুন। এটা এখন পড়া উচিত
private lazy var vectorSearchQueryCallable: Callable<String, String> = functions.httpsCallable("ext-firestore-vector-search-queryCallable")
ক্যোয়ারী ফাংশন কল করুন
-
performQuery
পদ্ধতি খুঁজুন - আহ্বান করে আপনার কলযোগ্য ফাংশন কল করুন
let result = try await vectorSearchQueryCallable(searchTerm)
যেহেতু এটি একটি দূরবর্তী কল, এটি ব্যর্থ হতে পারে৷
- কোনো ত্রুটি ধরার জন্য কিছু মৌলিক ত্রুটি হ্যান্ডলিং যোগ করুন এবং Xcode এর কনসোলে লগ করুন।
private func performQuery(searchTerm: String) async -> [String] { do { let result = try await vectorSearchQueryCallable(searchTerm) return [result] } catch { print(error.localizedDescription) return [] } }
UI কানেক্ট করুন
ব্যবহারকারীদের তাদের নোটগুলি অনুসন্ধান করার অনুমতি দেওয়ার জন্য, আপনি নোট তালিকার স্ক্রিনে একটি অনুসন্ধান বার প্রয়োগ করবেন৷ ব্যবহারকারী যখন সার্চ টার্মে টাইপ করেন, তখন আপনাকে আগের ধাপে প্রয়োগ করা performQuery
পদ্ধতি ব্যবহার করতে হবে। SwiftUI দ্বারা প্রদত্ত searchable
এবং task
ভিউ মডিফায়ারগুলির জন্য ধন্যবাদ, এর জন্য শুধুমাত্র কয়েকটি লাইন কোড প্রয়োজন।
- প্রথমে
NotesListScreen.swift
খুলুন - তালিকার দৃশ্যে একটি অনুসন্ধান বাক্স যোগ করতে, লাইনের ঠিক উপরে
.searchable(text: $searchTerm, prompt: "Search")
ভিউ মডিফায়ার যোগ করুন.navigationTitle("Notes")
- তারপরে, নীচের কোডটি যোগ করে অনুসন্ধান ফাংশনটি শুরু করুন:
.task(id: searchTerm, debounce: .milliseconds(800)) {
await notesRepository.semanticSearch(searchTerm: searchTerm)
}
এই কোড স্নিপেট আপনার semanticSearch
পদ্ধতিকে অ্যাসিঙ্ক্রোনাসভাবে কল করে। 800 মিলিসেকেন্ডের একটি টাইমআউট প্রদান করে, আপনি টাস্ক মডিফায়ারকে 0.8 সেকেন্ডের মধ্যে ব্যবহারকারীর ইনপুট ডিবাউন্স করার নির্দেশ দেন। এর মানে হল যে ব্যবহারকারী 0.8 সেকেন্ডের বেশি সময় ধরে টাইপিং থামিয়ে দিলেই semanticSearch
কল করা হবে।
আপনার কোড এখন এই মত হওয়া উচিত:
...
List(repository.notes) { note in
NavigationLink(value: note) {
NoteRowView(note: note)
}
.swipeActions {
Button(role: .destructive, action: { deleteNote(note: note) }) {
Label("Delete", systemImage: "trash")
}
}
}
.searchable(text: $searchTerm, prompt: "Search")
.task(id: searchTerm, debounce: .milliseconds(800)) {
await notesRepository.semanticSearch(searchTerm: searchTerm)
}
.navigationTitle("Notes")
...
অ্যাপটি চালান
- iOS সিমুলেটরে অ্যাপটি চালু করতে ⌘ + R টিপুন (বা রান বোতামে ক্লিক করুন)
- আপনি এই কোডল্যাবে আগে অ্যাপে যোগ করেছেন সেই একই নোট দেখতে পাবেন, সেইসাথে Firebase কনসোলের মাধ্যমে আপনি যে নোট যোগ করেছেন
- আপনি নোট তালিকার শীর্ষে একটি অনুসন্ধান ক্ষেত্র দেখতে পাবেন
- আপনার যোগ করা নথিগুলির একটিতে প্রদর্শিত একটি শব্দ টাইপ করুন৷ আবার, এটি শব্দার্থগত প্রশ্নের জন্য সবচেয়ে ভাল কাজ করে, যেমন "আমি কীভাবে সুইফট থেকে অ্যাসিঙ্ক্রোনাস ফায়ারবেস এপিআই কল করতে পারি" (আপনার যোগ করা নোটগুলির অন্তত একটিতে এই বিষয় নিয়ে আলোচনা করে এমন পাঠ্য রয়েছে)।
- আপনি সম্ভবত অনুসন্ধান ফলাফল দেখার আশা করছেন, কিন্তু পরিবর্তে, তালিকা দৃশ্যটি খালি, এবং Xcode কনসোল একটি ত্রুটি বার্তা প্রদর্শন করে: "ফাংশনটি একটি অবৈধ যুক্তি দিয়ে কল করা হয়েছিল"
এর মানে আপনি ভুল ফরম্যাটে ডেটা পাঠিয়েছেন।
ত্রুটি বার্তা বিশ্লেষণ
- কি ভুল আছে তা জানতে, Firebase কনসোলে যান
- ফাংশন বিভাগে যান
-
ext-firestore-vector-search-queryCallable
ফাংশন খুঁজুন, তিনটি উল্লম্ব বিন্দুতে ক্লিক করে ওভারফ্লো মেনু খুলুন - লগ এক্সপ্লোরারে যেতে লগ দেখুন নির্বাচন করুন
- আপনি একটি ত্রুটি দেখতে হবে
Unhandled error ZodError: [
{
"code": "invalid_type",
"expected": "object",
"received": "string",
"path": [],
"message": "Expected object, received string"
}
]
এর মানে আপনি ভুল ফরম্যাটে ডেটা পাঠিয়েছেন।
সঠিক তথ্য প্রকার ব্যবহার করুন
এক্সটেনশনটি কোন ফর্ম্যাটে প্যারামিটারগুলি আশা করে তা খুঁজে বের করতে, এক্সটেনশনের ডকুমেন্টেশন দেখুন৷
- ফায়ারবেস কনসোলের এক্সটেনশন বিভাগে যান
- Manage -> এ ক্লিক করুন
- কিভাবে এই এক্সটেনশন কাজ করে বিভাগে, আপনি ইনপুট এবং আউটপুট পরামিতিগুলির একটি স্পেসিফিকেশন পাবেন।
- Xcode-এ ফিরে যান এবং
NotesRepository.swift
এ নেভিগেট করুন - ফাইলের শুরুতে নিম্নলিখিত কোড যোগ করুন:
এক্সটেনশনের ডকুমেন্টেশন অনুযায়ী এক্সটেনশনটি প্রত্যাশা করে ইনপুট প্যারামিটারের কাঠামোর সাথেprivate struct QueryRequest: Codable { var query: String var limit: Int? var prefilters: [QueryFilter]? } private struct QueryFilter: Codable { var field: String var `operator`: String var value: String } private struct QueryResponse: Codable { var ids: [String] }
QueryRequest
মেলে। এটিতে একটি নেস্টেডprefilter
বৈশিষ্ট্যও রয়েছে যা আপনার পরে প্রয়োজন হবে।QueryResponse
এক্সটেনশনের প্রতিক্রিয়ার কাঠামোর সাথে মেলে। - কলযোগ্য ফাংশন স্পেসিফিকেশন খুঁজুন এবং ইনপুট এবং আউটপুট প্রকার আপডেট করুন
private lazy var vectorSearchQueryCallable: Callable<QueryRequest, QueryResponse> = functions.httpsCallable("ext-firestore-vector-search-queryCallable")
-
performQuery
এ কলযোগ্য ফাংশনের আহ্বান আপডেট করুনprivate func performQuery(searchTerm: String) async -> [String] { do { let queryRequest = QueryRequest(query: searchTerm, limit: 2) let result = try await vectorSearchQueryCallable(queryRequest) print(result.ids) return result.ids } catch { print(error.localizedDescription) return [] } }
আবার অ্যাপটি চালান
- আবার অ্যাপটি চালান
- একটি অনুসন্ধান ক্যোয়ারী টাইপ করুন যাতে আপনার নোটগুলির একটিতে অন্তর্ভুক্ত পদ রয়েছে৷
- আপনার এখন নোটের একটি ফিল্টার করা তালিকা দেখতে হবে
ব্যবহারকারীর ডেটা প্রাক-ফিল্টার করুন
উদযাপন করার জন্য আপনি নাচের আগে - অ্যাপটির বর্তমান সংস্করণে একটি সমস্যা রয়েছে: ফলাফল সেটে সমস্ত ব্যবহারকারীর ডেটা রয়েছে৷
আপনি একটি ভিন্ন সিমুলেটরে অ্যাপটি চালিয়ে এবং আরও নথি যোগ করে এটি যাচাই করতে পারেন। নতুন নথিগুলি শুধুমাত্র সেই সিমুলেটরে প্রদর্শিত হবে, যদি আপনি অন্য সিমুলেটরে আবার অ্যাপটি চালান, আপনি শুধুমাত্র সেই নথিগুলি দেখতে পাবেন যা আপনি প্রথমবার তৈরি করেছিলেন।
আপনি যদি একটি অনুসন্ধান করেন, আপনি লক্ষ্য করবেন যে vectorSearchQueryCallable
এ কলটি অন্য ব্যবহারকারীর অন্তর্গত হতে পারে এমন নথি আইডি প্রদান করে। এটি প্রতিরোধ করার জন্য, আমাদের একটি প্রিফিল্টার ব্যবহার করতে হবে।
performQuery
এ, আপনার কোডটি নিম্নরূপ আপডেট করুন:
let prefilters: [QueryFilter] = if let uid = user?.uid {
[QueryFilter(field: "userId", operator: "==", value: uid)]
}
else {
[]
}
let queryRequest = QueryRequest(query: searchTerm,
limit: 2,
prefilters: prefilters)
এটি লগ-ইন করা ব্যবহারকারীর আইডির উপর ভিত্তি করে ডেটা প্রাক-ফিল্টার করবে যেমন আপনি আশা করতে পারেন, এর জন্য Firestore সূচক আপডেট করা প্রয়োজন।
একটি নতুন Firestore সূচক নির্ধারণ করতে কমান্ড লাইন থেকে নিম্নলিখিত কমান্ডটি চালান যাতে embedding
ক্ষেত্রের মধ্যে userId
এবং ভেক্টর এম্বেডিং উভয়ই অন্তর্ভুক্ত থাকে।
gcloud alpha firestore indexes composite create --project=INSERT-YOUR-PROJECT-ID-HERE --collection-group=notes --query-scope=COLLECTION --field-config=order=ASCENDING,field-path=userId --field-config=vector-config='{"dimension":"768","flat": "{}"}',field-path=embedding
একবার সূচক তৈরি করা শেষ হলে, এটি প্রত্যাশিতভাবে কাজ করে তা যাচাই করতে অ্যাপটি আবার চালান
8. অভিনন্দন
অভিনন্দন - এই কোডল্যাবটি সফলভাবে সম্পন্ন করার জন্য!
এই কোডল্যাবে, আপনি শিখেছেন কিভাবে:
- শব্দার্থিক অনুসন্ধান সক্ষম করে একটি ক্লাউড ফায়ারস্টোর ডেটাবেস সেট আপ করুন৷
- ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করতে একটি সাধারণ SwiftUI অ্যাপ তৈরি করুন।
- SwiftUI এর অনুসন্ধানযোগ্য ভিউ মডিফায়ার এবং টাস্ক মডিফায়ার ব্যবহার করে একটি অনুসন্ধান বার প্রয়োগ করুন৷
- Firestore SDK-এর কলযোগ্য ইন্টারফেস ব্যবহার করে ডাটাবেসে একটি শব্দার্থিক অনুসন্ধান করতে একটি ক্লাউড ফাংশন কল করুন।
এই কোডল্যাবে আপনার অর্জিত জ্ঞানের সাথে, আপনি এখন শক্তিশালী অ্যাপ্লিকেশন তৈরি করতে পারেন যা ব্যবহারকারীদের আরও স্বজ্ঞাত এবং দক্ষ অনুসন্ধান অভিজ্ঞতা প্রদান করতে ক্লাউড ফায়ারস্টোরের শব্দার্থিক অনুসন্ধান ক্ষমতাগুলিকে কাজে লাগায়।
Firestore এর নতুন ভেক্টর ক্ষেত্র এবং ভেক্টর এমবেডিংগুলি কীভাবে গণনা করা যায় সে সম্পর্কে আরও জানতে, ডকুমেন্টেশনটি দেখুন।