সততামুলক ক্রোমা ডেটা ইনিশিয়ালাইজ করা হচ্ছে

import { ChromaClient } from 'chromadb'

ক্লায়েন্ট ইনিশিয়ালাইজ করা হচ্ছে

const client = new ChromaClient();

সাধারণ ক্লায়েন্ট অপারেশন

await client.reset() // ডাটাবেস মুছে ফেলুন

কালেকশন সহ কাজ করা

ক্রোমাডব ভেক্টর ডেটা সেট পরিচালনা করার জন্য কালেকশন ধারণাটি ব্যবহার করে, যা মাইক্রোসফট এমএসকিউএলের সাথে তুলনা করা যেতে পারে।

কালেকশন তৈরি, দেখা এবং মুছে ফেলা

ক্রোমা কালেকশনের অবজেক্ট নামটি ইউআরএলে ব্যবহার করে, তাই কিছু নামকরণ সীমানুযায়ীতা আছে:

  • নামের দৈর্ঘ্যটি 3 এবং 63 অক্ষরের মধ্যে হতে হবে।
  • নামটি কেবল ছোট অক্ষর বা সংখ্যায় শুরু এবং শেষ হতে হবে, এবং মাঝখানে দশামিক, হাইফেন এবং আন্ডারস্কোর থাকতে পারে।
  • নামটি দুটি সারিবর্তী দশাংশ মিলানো যাবে না।
  • নামটি বৈধ আইপি ঠিকানা হতে পারে না।

একটি কালেকশন তৈরি করতে, কালেকশনের নাম এবং ঐচ্ছিক ভেক্টর গণনা করার কাজ (অনুলিপি ফাংশন হিসাবেও পরিচিত) উল্লেখ করা দরকার। একটি অনুলিপি ফাংশন যদি সরবরাহ করা হয়, তবে প্রতিবার কালেকশনে অ্যাক্সেস করা হলে এটি প্রদান করা আবশ্যক।

লক্ষ্য করুন: অ্যাক্সেস করার জন্য অনুলিপি ফাংশনটি ব্যবহার করা হয় টেক্সট ভেক্টর গণনা করার জন্য।

import { ChromaClient } from 'chromadb'

নিম্নলিখিতভাবে একটি কালেকশন তৈরি এবং উ্পস্থাপন করুন:

let collection = await client.createCollection({name: "my_collection", embeddingFunction: emb_fn})

let collection2 = await client.getCollection({name: "my_collection", embeddingFunction: emb_fn})

অনুলিপি ফাংশনটি টেক্সট নিয়েই ভেক্টর ডেটা গণনা করে।

লক্ষ্য করুন: বউঝে খেলাযাওয়ারা এই টিউটোরিয়াল থেকে টেক্সট অঙ্কন মডেল শিখতে পারে।

বিদ্যমান কালেকশনগুলি .getCollection দ্বারা নামের সাথে উল্লিখিত হতে পারে, এবং এগুলি অপসারণ করতে পারেন .deleteCollection ব্যবহার করে।

const collection = await client.getCollection({name: "tizi365"}) // কালেকশন tizi365 উল্লেখ করুন
await client.deleteCollection({name: "my_collection"}) // কালেকশন মুছে ফেলুন

সাধারণ কালেকশন ফাংশনসমূহ

await collection.peek() // কালেকশনের প্রথম 10 ডাটা রেকর্ডগুলি ফিরিয়ে দিয়ে যায়
await collection.count() // কালেকশনের মোট ডাটা রেকর্ডের সংখ্যা ফিরিয়ে দিয়ে যায়

ভেক্টর দূরত্ব গণনা পদ্ধতি সাজানো

createCollection এর একটি ঐচ্ছিক মেটাডেটা প্যারামিটার অন্তর্ভুক্ত করে, যেখানে ভেক্টর স্পেসের দূরত্ব গণনার জন্য hnsw:space এর মান সাজানো যেতে।

লক্ষ্য করুন: ভেক্টর ডেটা ব্যাপকতা মডেলে ভেক্টরগুলির মধ্যে স্থানীয় দূরত্ব গণনা করে, যেখানে নিকটতম দূরত্বগুলি উচ্চ অনুরূপতাকে নির্দেশ করে এবং বিপরীতটা বিপরীতটা।

let collection = client.createCollection("collection_name", undefined, metadata={ "hnsw:space": "cosine" })

hnsw:space এর জন্য বৈধ অপশনগুলি "l2", "ip", বা "cosine"। ডিফল্টপ্রস্তাবিত হলো "l2"।

সংগ্রহে ডেটা যোগ করা

.add ব্যবহার করে ক্রোমা সংগ্রহে ডেটা যোগ করুন।

ডকুমেন্ট ভেক্টর নির্ধারণ না করে ডেটা সরাসরি যোগ করতে:

await collection.add({
    ids: ["id1", "id2", "id3", ...],
    metadatas: [{"chapter": "3", "verse": "16"}, {"chapter": "3", "verse": "5"}, {"chapter": "29", "verse": "11"}, ...],
    documents: ["lorem ipsum...", "doc2", "doc3", ...],
})
// প্যারামিটার ব্যাখ্যা
// ids - প্রয়োজনীয়
// embeddings - ঐচ্ছিক
// metadata - ঐচ্ছিক
// documents - ঐচ্ছিক

যদি ক্রোমা ডকুমেন্টগুলির একটি তালিকা পেয়ে, তাহলে স্বয়ংক্রিয়ভাবে সংগ্রহের ভেক্টর ফাংশন ব্যবহার করে ডকুমেন্টের জন্য ভেক্টর গণনা করবে (যদি সংগ্রহ তৈরি করার সময় একটি ভেক্টর ফাংশন সরবরাহ করা না হয় তবে ডিফল্ট মান ব্যবহার করা হবে)। ক্রোমা এছাড়াও ডকুমেন্টগুলি স্বয়ং সংরক্ষণ করবে। যদি কোনও ডকুমেন্ট নির্বাচিত ভেক্টর ফাংশন দিয়ে ব্যবহার করার জন্য বড় হয়, তবে একটি অস্তিত্ব সেটা অনুমতি পেতে পারবে।

প্রতিটি ডকুমেন্টের একটি অদ্বিতীয় আইডি (ids) থাকতে হবে। একই আইডি দ্বিতীয়বার যোগ করলে শুধুমাত্র আদি মানটি সংরক্ষিত হবে। উপলব্ধি একটি অতিরিক্ত তথ্যের জন্য প্রতিটি ডকুমেন্টের জন্য মেটাডেটা নির্ধারণ করার জন্য বেশীকরণের ডিকশনারির একটি তালিকা সরবরাহ করা যাবে।

আপাতত প্রদান করা সরণির সাথে সংস্করণ মেটাডেটা তালিকা এবং ক্রোমা আইডিস সহ ভেক্টর সরবরাহ করলে আপনি ডকুমেন্টগুলি অথবা প্রতিষ্ঠিত ডাটাবেসে সংরক্ষণ করতে পারেন।

await collection.add({
    ids: ["id1", "id2", "id3", ...],
    embeddings: [[1.1, 2.3, 3.2], [4.5, 6.9, 4.4], [1.1, 2.3, 3.2], ...],
    metadatas: [{"chapter": "3", "verse": "16"}, {"chapter": "3", "verse": "5"}, {"chapter": "29", "verse": "11"}, ...],
    documents: ["lorem ipsum...", "doc2", "doc3", ...],
})

যদি প্রদানকৃত ভেক্টর ডেটার মুল্যমাপ (দৈর্ঘ্য) সংগ্রহের মাপের সাথে মেলবে না, তাহলে একটি অস্তিত্ব সেটা অনুমতি পেতে পারবে।

আপনি আরো ডকুমেন্টগুলি অন্য জায়গায় সংরক্ষণ করে সংক্ষেপে ভেক্টর ডেটা এবং মেটাডেটা তালিকা প্রদান করে ক্রোমা ব্যবহার করতে পারেন। আপনি এই ভেক্টরগুলির সাথে ডকুমেন্টস সম্পর্কিত তালিকা জড়াতে আইডিস ব্যবহার করতে পারেন।

await collection.add({
    ids: ["id1", "id2", "id3", ...],
    embeddings: [[1.1, 2.3, 3.2], [4.5, 6.9, 4.4], [1.1, 2.3, 3.2], ...],
    metadatas: [{"chapter": "3", "verse": "16"}, {"chapter": "3", "verse": "5"}, {"chapter": "29", "verse": "11"}, ...],
})

দ্রষ্টব্য: ভেক্টর ডাটাবেসের প্রধান ফাংশন টেক্সটোয়ের ভিত্তিতে সামান্তিক সিমিলারিটি সন্ধান। ভেক্টর ডাটাবেসের আয়তনকে কমানোর জন্য এবং কর্যকরিতার জন্য ভেক্টর ডাটার একটি অংশ এবং কিছু ফিল্টার যোগ করা সম্ভব। অন্য ডেটা, যেমন আর্টিকেলের বিষয়বস্তু, মাইসকিউলে সংরক্ষণ করা যাবে, এখানে মুদ্রিত আইডির মাধ্যমে যোগাযোগ করা যেতে পারে।

কালেকশন ডেটা অনুসন্ধান করা

.query মেথডটি বিভিন্ন উপায়ে ক্রোমা উপাদান ডেটাসেটে অনুসন্ধান করতে ব্যবহার করা যেতে পারে।

আপনি একটি সেট অফ কুয়েরি এম্বেডিং (ভেক্টর ডেটা) ব্যবহার করে অনুসন্ধান করতে পারেন।

পরামর্শ: কুয়েরি এম্বেডিং পেতে, প্রায়ই বর্তমান উন্নয়ন স্কেনারিতে, ব্যবহারকারীর জিঞ্জাসা প্রথমে একটি টেক্সট এম্বেডিং মডেল মাধ্যমে একটি কুয়েরি ভেক্টরে গণনা করা হয়, এবং তারপর এই ভেক্টরগুলি ব্যবহার করে অনুরূপ সামগ্রী অনুসন্ধান করা হয়।

const result = await collection.query({
    queryEmbeddings: [[11.1, 12.1, 13.1],[1.1, 2.3, 3.2], ...],
    nResults: 10,
    where: {"metadata_field": "is_equal_to_this"},
})
// ইনপুট অর্ডার
// query_embeddings - ঐচ্ছিক
// n_results - প্রয়োজন
// where - ঐচ্ছিক
// query_texts - ঐচ্ছিক

কুয়েরি ভেক্টর (কুয়েরি এম্বেডিং) প্রতি কুয়েরি ভেক্টরের জন্য শীর্ষ n_results ফলাফল প্রদান করবে এবং একটি ঐচ্ছিক where ফিল্টার ডিকশনারি সরবরাহ করা যেতে পারে ফলাফলগুলি মেটাডেটা সংযুক্ত করা ছোট নির্ধারণ করতে। উল্লেখ্য, একটি ঐচ্ছিক where_document ফিল্টার ডিকশনারি প্রদান করা যেতে পারে ফলাফলগুলি ডকুমেন্টের সাথে সংযুক্ত উপর ফিল্টার করতে।

যদি প্রদত্ত কুয়েরি এম্বেডিংগুলি সংগতিমূলক না হয় কালেকশনের মাত্রাগুলির সাথে, একটি ব্যাধি ঘটতে পারে। ভেক্টর সংগতি নিশ্চিত করার জন্য পরামর্শযোগ্য ডেটা ভেক্টর গণনার জন্য একই টেক্সট এম্বেডিং মডেল ব্যবহার করা শীর্ষক।

আপনি আপনি অনুরূপ লেখা পাওয়ার জন্য বা ব্যবহার করে অনুসন্ধান করতে query_texts সেট ব্যবহার করতে পারেন। ক্রোমা প্রথমে প্রতিটি কুয়েরি টেক্সটের জন্য ভেক্টর গণনা করবে ব্যবহার করে এবং তারপর অনুরূপ টেক্সট ভেক্টর ব্যবহার করে কুয়েরি অনুষ্ঠান.

await collection.query({
    nResults: 10, // n_results
    where: {"metadata_field": "is_equal_to_this"}, // where
    queryTexts: ["doc10", "thus spake zarathustra", ...], // query_text
})

আপনি প্রদান করা ব্যবহার করে ক্যালেকশন থেকে ডেটা অনুসন্ধান করতে .get ব্যবহার করতে পারেন।

await collection.get({
    ids: ["id1", "id2", "id3", ...], //ids
    where: {"style": "style1"} // where
})

.get পরেও where এবং where_document ফিল্টার সমর্থন করে। যদি কোনও id প্রদান করা না হয়, তবে তা যে কোনও ডেটা ফেরতে যেতে পারে যা where এবং where_document ফিল্টার মেলে।

ফিরে পৌঁছাতে ক্ষেত্র নির্ধারণ করা

get বা query ব্যবহার করার সময়, আপনি ফেরত পাঠানে ব্যবহার করতে পারেন include প্যারামিটার যাতে ফেরত ক্ষেত্রের নির্দিষ্ট করতে, ভেক্টর ডেটা, নথিগুলি, এবং মেটা ডেটা সহ। ডিফল্টভাবে, ক্রোমা ডকুমেন্ট, মেটাডেটা, এবং ভেক্টর দূরত্ব ফিরত করে। আপনি ফেরত ক্ষেত্রগুলি নির্ধারণ করতে ফিল্ড নামগুলির একটি অ্যারে পাস করে পাস করতে পারেন যা get বা query এর includes প্যারামিটারের মাধ্যমে।

collection.get(
    include=["documents"]
)

collection.query(
    query_embeddings=[[11.1, 12.1, 13.1],[1.1, 2.3, 3.2], ...],
    include=["documents"]
)

কোথায় ফিল্টার ব্যবহার করা

ক্রোমা মেটা-ডাটা এবং ডকুমেন্ট সামগ্রীর ভিত্তিতে ফিল্টার করার সমর্থন করে। where ফিল্টারটি মেটা-ডাটা ফিল্টার করার জন্য এবং where_document ফিল্টারটি দস্তাবেজ সামগ্রীর উপর ফিল্টার করার জন্য ব্যবহার করা হয়। নীচে, আমরা ফিল্টার শর্ত অভিব্যন্তি লিখার কিভাবে বোঝানোর সহায়তা করো অভিব্যন্তি করি।

**মেট

লজিক্যাল অপারেটর ব্যবহার

আপনি এই তালিকায় এলাকা সমস্যা সমাধান করার জন্য লজিক্যাল অপারেটর $and এবং $or ব্যবহার করতে পারেন।

$and অপারেটরটি তালিকার সমস্ত ফিল্টারের সাথে মিলবে যা ফলাফল দেবে।

{
    "$and": [
        {
            "metadata_field": {
                <Operator>: <Value>
            }
        },
        {
            "metadata_field": {
                <Operator>: <Value>
            }
        }
    ]
}

$or অপারেটরটি তালিকার কোনো ফিল্টারিং শর্ত মেলানো ফলাফল দেবে।

{
    "$or": [
        {
            "metadata_field": {
                <Operator>: <Value>
            }
        },
        {
            "metadata_field": {
                <Operator>: <Value>
            }
        }
    ]
}

ডেটা আপডেট করা

ক্রোমা আপডেট অপারেশনকে সমর্থন করে, যা বিদ্যমান ডেটা আপডেট করে এবং ডেটা না থাকলে নতুন ডেটা ঢুকাতে পারে।

await collection.upsert({
    ids: ["id1", "id2", "id3"],
    embeddings: [[1.1, 2.3, 3.2], [4.5, 6.9, 4.4], [1.1, 2.3, 3.2]],
    metadatas: [{"chapter": "3", "verse": "16"}, {"chapter": "3", "verse": "5"}, {"chapter": "29", "verse": "11"}],
    documents: ["doc1", "doc2", "doc3"]
})

ডেটা মুছে ফেলা

ক্রোমা .delete ব্যবহার করে সংগ্রহ থেকে ডেটা মুছে ফেলার সমর্থনা করে।

await collection.delete({
    ids: ["id1", "id2", "id3",...], //ids
    where: {"chapter": "20"} //where
})