การตั้งค่า embeddings vectors เป็นวิธีการพื้นเมืองสำหรับปัญญาประดิษฐ์ในการแสดงข้อมูลประเภทต่าง ๆ และมีอัลกอริทึมมากมายที่ใช้ feature vectors เพื่อแสดงข้อมูล ทั้งข้อความ ภาพ และเสียงและวีดีโอ มีหลายวิธีการในการคำนวณ feature vectors ได้ทั้งการใช้ embedding models โดยเปิดเผย หรือบางครั้งใช้ cloud service APIs เช่น openai API

Chroma มีการ提供 wrapper ที่เบาสำหรับ embedding models ยอดนิยม เพื่อทำให้คุณสามารถนำมาใช้งานได้ง่าย

Transformers.js

Chroma สามารถทำงานกับ embedding models ได้แบบ local บนเครื่องของคุณโดยใช้ Transformers.js เพื่อสร้าง feature vectors Transformers ใช้ "Xenova/all-MiniLM-L6-v2" model ในการทำงาน ในการทำงานนี้ คุณสามารถทำการติดตั้ง library ของ Transformers.js ได้โดยการรัน npm install @xenova/transformers ใน command line

const {ChromaClient} = require('chromadb');
const client = new ChromaClient({path: "http://localhost:8000"});
const {TransformersEmbeddingFunction} = require('chromadb');
const embedder = new TransformersEmbeddingFunction();

(async () => {
    // ระบุ embedding function ที่ต้องการใช้ผ่าน parameter embeddingFunction
    const collection = await client.getOrCreateCollection({name: "name", embeddingFunction: embedder})

    // เพิ่มข้อมูลโดยไม่ระบุ vectors; ฟังก์ชั่น add จะเรียกฟังก์ชั่น embeddingFunction ในการคำนวณ text vectors
    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"], 
    })

    // ค้นหาข้อมูล ซึ่งยังจะเรียกใช้ฟังก์ชั่น embeddingFunction เพื่อคำนวณ vectors สำหรับ queryTexts แล้วค้นหาข้อมูลที่คล้ายกัน
    const results = await collection.query({
        nResults: 2, 
        queryTexts: ["lorem ipsum"]
    }) 
})();

OPENAI

Chroma มีการ提供 wrapper ที่สะดวกสบายสำหรับ OpenAI's embedding model API ในการเรียกใช้งาน API ของ OpenAI คุณจะต้องใช้ API key ซึ่งคุณสามารถได้รับได้โดยการลงทะเบียนบัญชี OpenAI

const {OpenAIEmbeddingFunction} = require('chromadb');
const embedder = new OpenAIEmbeddingFunction({openai_api_key: "apiKey"})

// ใช้โดยตรง 
const embeddings = embedder.generate(["document1","document2"])

// ระบุฟังก์ชั่น embedding โดยใช้ parameter embeddingFunction
const collection = await client.createCollection({name: "name", embeddingFunction: embedder})
const collection = await client.getCollection({name: "name", embeddingFunction: embedder})

คุณสามารถผ่าน parameter model_name เพื่อเลือกรุ่นของ OpenAI embedding model ที่ต้องการใช้งาน โดยค่าเริ่มต้น Chroma ใช้ text-embedding-ada-002.

Custom Embedding Functions

หากคุณใช้ embedding models อื่น ๆ คุณสามารถรวม EmbeddingFunction base class และเรียกใช้งาน model ที่คุณเลือกเพื่อสร้าง vectors

หมายเหตุ: Custom embedding functions ไม่จำเป็นต้องใช้เพราะคุณสามารถทำการคำนวณ vectors ล่วงหน้าโดยใช้ embedded model ของคุณเอง แล้วใช้ vectors เพื่ออ่านและเขียนข้อมูลของ Chroma