Chroma คือฐานข้อมูลแบบเวกเตอร์โอเพนซอร์สที่ใช้เทคโนโลยีการค้นหาความคล้ายคลึงของเวกเตอร์เพื่อเก็บรักษาและดึงข้อมูลเวกเตอร์มากมายที่มีมิติสูงได้โดยมีประสิทธิภาพ

Chroma เป็นฐานข้อมูลที่ฝังตัวอยู่ในแอปพลิเคชั่น โดยเอาไปฝังในโค้ดของเราในรูปแบบของแพคเกจ ข้อดีของมันอยู่ที่ความเรียบง่าย หากคุณกำลังพัฒนาแอปพลิเคชั่น LLM ที่ต้องการฐานข้อมูลเวกเตอร์เพื่อนำมาใช้งานหน่วยความจำ LLM และสนับสนุนการค้นหาภาษาที่คล้ายกัน โดยไม่ต้องติดตั้งฐานข้อมูลเวกเตอร์แยกต่างหาก Chroma ก็เป็นทางเลือกที่ดี ส่วนประกอบหลักของบทนี้จะเป็นการแนะนำการใช้งานใน JavaScript

1. การติดตั้งแพคเกจ

npm install --save chromadb # yarn add chromadb

2. การเริ่มต้นใช้งานไคลเอ็นต์ Chroma

const {ChromaClient} = require('chromadb');
const client = new ChromaClient();

3. สร้างคอลเล็กชัน

คอลเล็กชันในฐานข้อมูล Chroma คล้ายกับตารางใน Mysql ที่เก็บข้อมูลเวกเตอร์ (รวมถึงเอกสารและข้อมูลต้นฉบับอื่น ๆ) ที่ทุกครั้งหลังการสร้างคอลเล็กชัน:

const {OpenAIEmbeddingFunction} = require('chromadb');
const embedder = new OpenAIEmbeddingFunction({openai_api_key: "your_api_key"})
const collection = await client.createCollection({name: "my_collection", embeddingFunction: embedder})

ที่นี่ใช้โมเดลการแปลงข้อความจาก OpenAI เพื่อคำนวณเวกเตอร์ของข้อความ ดังนั้นคุณจำเป็นต้องกำหนดคีย์ API ของ OpenAI ของคุณไว้ แน่นอนว่าคุณยังสามารถละเว้นพารามิเตอร์ embeddingFunction และใช้โมเดลที่มีอยู่ใน Chroma เพื่อคำนวณเวกเตอร์ หรือแทนที่ด้วยโมเดลการแปลงข้อความโอเพนซอร์สอื่น ๆ

4. เพิ่มข้อมูล

หลังจากกำหนดคอลเล็กชันไว้ ก็สามารถเพิ่มข้อมูลลงในคอลเล็กชัน และ Chroma จะเก็บข้อมูลของเราและสร้างดัชนีเวกเตอร์ที่เฉพาะเจาอันขึ้นตามข้อมูลข้อความเพื่อให้เราสามารถสอบถามได้โดยง่ายในภายหลัง

await collection.add({
    ids: ["id1", "id2"],
    metadatas: [{"source": "my_source"}, {"source": "my_source"}],
    documents: ["This is a document", "This is another document"],
}) 

การใช้เวกเตอร์ข้อความที่ถูกคำนวณโดยก่อน โดยไม่ได้ใช้ฟังก์ชันการแปลไขอความที่ถูกคำนวณของ Chroma:

await collection.add({
    ids: ["id1", "id2"],
    embeddings: [[1.2, 2.3, 4.5], [6.7, 8.2, 9.2]],
    where: [{"source": "my_source"}, {"source": "my_source"}],
    documents: ["This is a document", "This is another document"]
}) 

5. คิวรีข้อมูลคอลเล็กชัน

อิงจาก queryTexts ที่กำหนดไว้สำหรับเงื่อนไขการคิวรี Chroma จะคืนผลลัพธ์ที่คล้ายกันที่สุด nResults รายการ

const results = await collection.query({
    nResults: 2, 
    queryTexts: ["This is a query document"]
})