Chroma là một cơ sở dữ liệu vector mã nguồn mở sử dụng công nghệ tìm kiếm tương tự vector để lưu trữ và truy xuất dữ liệu vector high-dimensional quy mô lớn một cách hiệu quả.
Chroma là một cơ sở dữ liệu được nhúng vào ứng dụng của chúng ta dưới dạng một package. Ưu điểm của nó nằm ở sự đơn giản. Nếu bạn đang phát triển một ứng dụng LLM yêu cầu một cơ sở dữ liệu vector để triển khai bộ nhớ LLM và hỗ trợ tìm kiếm ngôn ngữ tương tự văn bản mà không muốn cài đặt một cơ sở dữ liệu vector độc lập, Chroma là lựa chọn tốt. Hướng dẫn này chủ yếu dựa trên JavaScript.
1. Cài đặt Package
npm install --save chromadb # yarn add chromadb
2. Khởi tạo Chroma client
const {ChromaClient} = require('chromadb');
const client = new ChromaClient();
3. Tạo bộ sưu tập
Một bộ sưu tập trong cơ sở dữ liệu Chroma tương tự như một bảng trong Mysql, nơi dữ liệu vector (bao gồm tài liệu và dữ liệu nguồn khác) được lưu trữ. Dưới đây là cách tạo một bộ sưu tập:
const {OpenAIEmbeddingFunction} = require('chromadb');
const embedder = new OpenAIEmbeddingFunction({openai_api_key: "your_api_key"})
const collection = await client.createCollection({name: "my_collection", embeddingFunction: embedder})
Ở đây, một mô hình nhúng văn bản openai được sử dụng để tính toán vector văn bản, vì vậy bạn cần cung cấp khóa api openai của bạn. Tất nhiên, bạn cũng có thể bỏ qua tham số embeddingFunction và sử dụng mô hình tính toán vector có sẵn trong Chroma, hoặc thay thế nó bằng một mô hình nhúng văn bản mã nguồn mở khác.
4. Thêm dữ liệu
Sau khi xác định một bộ sưu tập, dữ liệu được thêm vào bộ sưu tập và Chroma sẽ lưu trữ dữ liệu của chúng ta và tạo một chỉ mục vector dành riêng dựa trên vector của dữ liệu văn bản để truy vấn dễ dàng sau này.
await collection.add({
ids: ["id1", "id2"],
metadatas: [{"source": "my_source"}, {"source": "my_source"}],
documents: ["Đây là một tài liệu", "Đây là một tài liệu khác"],
})
Sử dụng vector văn bản đã được tính toán trước, mà không sử dụng hàm nhúng tích hợp của Chroma để tính toán:
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: ["Đây là một tài liệu", "Đây là một tài liệu khác"]
})
5. Truy vấn dữ liệu bộ sưu tập
Dựa trên các queryTexts được thiết lập cho điều kiện truy vấn, Chroma sẽ trả về nResults kết quả tương tự nhất.
const results = await collection.query({
nResults: 2,
queryTexts: ["Đây là một tài liệu truy vấn"]
})