Векторы встраивания - это естественный способ для искусственного интеллекта представлять любой тип данных, и многие алгоритмы используют векторы признаков для представления данных. Они могут представлять текст, изображения, а также аудио и видео. Существует множество методов вычисления векторов признаков, включая использование открытых моделей встраивания или некоторых облачных сервисных API, таких как openai API.
Chroma предоставляет удобную обертку для популярных моделей встраивания, что позволяет легко использовать их в ваших приложениях.
Transformers.js
Chroma может запускать модели встраивания локально на вашем компьютере с использованием библиотеки Transformers.js для генерации векторов признаков. Transformers использует модель "Xenova/all-MiniLM-L6-v2". Чтобы запустить это, установите библиотеку Transformers.js, выполнив команду npm install @xenova/transformers
в командной строке.
const {ChromaClient} = require('chromadb');
const client = new ChromaClient({path: "http://localhost:8000"});
const {TransformersEmbeddingFunction} = require('chromadb');
const embedder = new TransformersEmbeddingFunction();
(async () => {
// Укажите функцию встраивания для использования через параметр embeddingFunction
const collection = await client.getOrCreateCollection({name: "name", embeddingFunction: embedder})
// Добавьте данные без указания векторов; функция добавления вызовет функцию встраивания для вычисления текстовых векторов
await collection.add({
ids: ["id1", "id2", "id3"],
metadatas: [{"глава": "3", "стих": "16"}, {"глава": "3", "стих": "5"}, {"глава": "29", "стих": "11"}],
documents: ["lorem ipsum...", "doc2", "doc3"],
})
// Запросите данные, что также вызовет функцию встраивания для вычисления векторов для queryTexts, а затем выполнит поиск похожих данных
const results = await collection.query({
nResults: 2,
queryTexts: ["lorem ipsum"]
})
})();
OPENAI
Chroma предоставляет удобную обертку для API модели встраивания OpenAI. Чтобы делать вызовы к OpenAI API, вам понадобится ключ API, который можно получить, зарегистрировавшись в аккаунте OpenAI.
const {OpenAIEmbeddingFunction} = require('chromadb');
const embedder = new OpenAIEmbeddingFunction({openai_api_key: "ключAPI"})
// использовать напрямую
const embeddings = embedder.generate(["документ1","документ2"])
// Укажите функцию встраивания, используя параметр embeddingFunction
const collection = await client.createCollection({name: "name", embeddingFunction: embedder})
const collection = await client.getCollection({name: "name", embeddingFunction: embedder})
Вы также можете дополнительно передавать параметр model_name для выбора модели встраивания OpenAI. По умолчанию Chroma использует text-embedding-ada-002.
Пользовательские функции встраивания
Если вы используете другие модели встраивания, вы можете интегрировать базовый класс EmbeddingFunction и вызывать свою собственную выбранную модель для генерации векторов.
Примечание: Пользовательские функции встраивания не являются обязательными, поскольку можно предварительно вычислить векторы с помощью собственной модели встраивания, а затем использовать векторы для чтения и записи данных в Chroma.
class MyEmbeddingFunction {
private api_key: string;
constructor(api_key: string) {
this.api_key = api_key;
}
public async generate(texts: string[]): Promise<number[][]> {
// Вызовите свою собственную модель для вычисления векторов
return embeddings;
}
}