Vector nhúng là cách tự nhiên cho trí tuệ nhân tạo biểu diễn bất kỳ loại dữ liệu nào, và nhiều thuật toán sử dụng vector đặc trưng để biểu diễn dữ liệu. Chúng có thể biểu diễn văn bản, hình ảnh, cũng như âm thanh và video. Có nhiều phương pháp tính toán vector đặc trưng, bao gồm sử dụng các mô hình nhúng mã nguồn mở hoặc một số API dịch vụ đám mây, như openai API.
Chroma cung cấp một lớp bọc nhẹ cho các mô hình nhúng phổ biến, giúp bạn sử dụng chúng dễ dàng trong ứng dụng của bạn.
Transformers.js
Chroma có thể chạy các mô hình nhúng cục bộ trên máy tính của bạn bằng cách sử dụng Transformers.js để tạo vector đặc trưng. Transformers sử dụng mô hình "Xenova/all-MiniLM-L6-v2". Để chạy điều này, cài đặt thư viện Transformers.js bằng cách chạy npm install @xenova/transformers
trong dòng lệnh.
const {ChromaClient} = require('chromadb');
const client = new ChromaClient({path: "http://localhost:8000"});
const {TransformersEmbeddingFunction} = require('chromadb');
const embedder = new TransformersEmbeddingFunction();
(async () => {
// Chỉ định hàm nhúng để sử dụng thông qua tham số embeddingFunction
const collection = await client.getOrCreateCollection({name: "name", embeddingFunction: embedder})
// Thêm dữ liệu mà không chỉ định vector; hàm thêm sẽ gọi hàm nhúng để tính toán vector văn bản
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"],
})
// Truy vấn dữ liệu, cũng sẽ gọi hàm nhúng để tính toán vector cho các queryTexts và sau đó tìm kiếm dữ liệu tương tự
const results = await collection.query({
nResults: 2,
queryTexts: ["lorem ipsum"]
})
})();
OPENAI
Chroma cung cấp một lớp bọc thuận tiện cho API mô hình nhúng của OpenAI. Để gọi API của OpenAI, bạn cần một khóa API, mà bạn có thể nhận được bằng cách đăng ký tài khoản OpenAI.
const {OpenAIEmbeddingFunction} = require('chromadb');
const embedder = new OpenAIEmbeddingFunction({openai_api_key: "khóaAPI"})
// sử dụng trực tiếp
const embeddings = embedder.generate(["tài liệu1","tài liệu2"])
// Chỉ định hàm nhúng sử dụng tham số embeddingFunction
const collection = await client.createCollection({name: "name", embeddingFunction: embedder})
const collection = await client.getCollection({name: "name", embeddingFunction: embedder})
Bạn có thể truyền tùy chọn một tham số model_name để chọn mô hình nhúng của OpenAI để sử dụng. Theo mặc định, Chroma sử dụng text-embedding-ada-002.
Chức năng Nhúng Tùy chỉnh
Nếu bạn sử dụng các mô hình nhúng khác, bạn có thể tích hợp lớp cơ sở EmbeddingFunction và gọi mô hình bạn chọn để tạo vector.
Lưu ý: Chức năng nhúng tùy chỉnh không bắt buộc, vì bạn có thể tính toán trước các vector bằng mô hình nhúng của riêng bạn và sau đó sử dụng các vector đó để đọc và viết dữ liệu Chroma.
class MyEmbeddingFunction {
private api_key: string;
constructor(api_key: string) {
this.api_key = api_key;
}
public async generate(texts: string[]): Promise<number[][]> {
// Gọi mô hình riêng của bạn để tính toán vector
return embeddings;
}
}