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: "ваш_ключ_api"})
const collection = await client.createCollection({name: "моя_коллекция", embeddingFunction: embedder})
Здесь используется модель встраивания текста openai для вычисления текстовых векторов, поэтому вам нужно предоставить ваш ключ openai api. Конечно, вы также можете опустить параметр embeddingFunction и использовать встроенную модель в Chroma для вычисления векторов или заменить ее другой моделью встроенного текстового встраивания с открытым исходным кодом.
4. Добавление данных
После определения коллекции данные добавляются в коллекцию, и Chroma будет хранить наши данные и создавать отдельный векторный индекс на основе векторов текстовых данных для удобного последующего запроса.
await collection.add({
ids: ["id1", "id2"],
metadatas: [{"source": "мой_источник"}, {"source": "мой_источник"}],
documents: ["Это документ", "Это другой документ"],
})
Используя предварительно рассчитанные текстовые векторы, не используя встроенную функцию встраивания Chroma для вычисления:
await collection.add({
ids: ["id1", "id2"],
embeddings: [[1.2, 2.3, 4.5], [6.7, 8.2, 9.2]],
where: [{"source": "мой_источник"}, {"source": "мой_источник"}],
documents: ["Это документ", "Это другой документ"]
})
5. Запрос данных коллекции
На основе установленных для условий запроса queryTexts, Chroma вернет самые похожие результаты nResults.
const results = await collection.query({
nResults: 2,
queryTexts: ["Это запрос документа"]
})