Первый взгляд на Chroma: векторную базу данных с открытым исходным кодом для LLM
Первый взгляд на Chroma: векторную базу данных с открытым исходным кодом для LLM

Первый взгляд на Chroma: векторную базу данных с открытым исходным кодом для LLM

Chroma — это встроенная база данных с открытым исходным кодом, которая упрощает создание приложений LLM, позволяя подключать к LLM знания, факты и навыки. Вот как это работает.

Переведено с Exploring Chroma: The Open Source Vector Database for LLMs

Большая языковая модельизRise ускоряет встраивание сохраненных словизвекторная база данныхизиспользовать。

Векторные базы данных хранят данные в векторной форме, используя потенциал передовых алгоритмов машинного обучения. Он обеспечивает высокоэффективный поиск по сходству, который имеет решающее значение для приложений искусственного интеллекта, включая рекомендательные системы, распознавание изображений и обработку естественного языка.

В векторной базе данных каждая сохраненная точка данных представлена ​​как многомерный вектор, отражающий суть сложных данных. Расширенные методы индексации, такие как деревья kd или хэши, помогают быстро находить похожие векторы. Эта архитектура создает высокомасштабируемые и эффективные решения для отраслей с интенсивным использованием данных, меняя наш подход к анализу больших данных.

В этой статье мы рассмотрим более подробно Chroma , легкая векторная база данных с открытым исходным кодом。

Обзор цветности

Chroma можно использовать в коде Python или JavaScript для создания вложений слов. Он имеет простой API, который можно использовать для работы с базами данных, работающими в режиме памяти или в режиме клиент/сервер. Разработчики могут установить Chroma, прототип с помощью API в Jupyter Notebook, а затем использовать тот же код в производственной среде, которая может запускать базу данных в режиме клиент/сервер.

При работе в памяти Chroma Коллекции баз данных можно сохранить как Apache Parquet отформатировать файл диска. Поскольку создание векторных представлений слов является дорогостоящей задачей, сохранение их для последующего извлечения может снизить затраты и накладные расходы на производительность.

Теперь давайте посмотрим, как работает база данных векторов Chroma.

Использование Chroma с Python

Первый шаг к использованию Chroma — установить его через pip.

Язык кода:javascript
копировать
pip install chroma

После установки вы можете импортировать модуль в свой код.

Язык кода:javascript
копировать
import chromadb

Теперь давайте создадим список строк, которые мы будем закодировать для создания вложений.

Язык кода:javascript
копировать
phrases = [
    "Amanda baked cookies and will bring Jerry some tomorrow.",
    "Olivia and Olivier are voting for liberals in this election.",
    "Sam is confused, because he overheard Rick complaining about him as a roommate. Naomi thinks Sam should talk to Rick. Sam is not sure what to do.",
    "John's cookies were only half-baked but he still carries them for Mary."
]

Нам также нужен список строк, которые однозначно идентифицируют указанную выше строку.

Язык кода:javascript
копировать
ids = ["001", "002", "003", "004"]

Дополнительные метаданные также могут быть связаны с каждой строкой со ссылкой или указателем на первоисточник. Это совершенно необязательно. Для нашего урока мы добавим несколько фиктивных метаданных. Он создается в виде списка объектов словаря.

Язык кода:javascript
копировать
metadatas = [{"source": "pdf-1"}, {"source": "doc-1"}, {"source": "pdf-2"}, {"source": "txt-1"}]

Теперь у нас есть все сущности, которые можно хранить в Chroma. Давайте инициализируем клиента.

Язык кода:javascript
копировать
chroma_client = chromadb.Client()

Если вы хотите сохранить данные на диске, вы можете передать им местоположение каталога, в котором сохранена база данных.

Язык кода:javascript
копировать
chroma_client = chromadb.PersistentClient(path="/path/to/save/to")

Chroma называет группу связанного контента коллекцией. В каждой коллекции есть документы, которые представляют собой просто серию строк, идентификаторы, которые действуют как уникальные идентификаторы документов, и необязательные метаданные.

Вложения являются важной частью коллекций. Они могут быть сгенерированы неявно на основе модели внедрения слов, включенной в Chroma, или вы можете сгенерировать их на основе внешних моделей внедрения слов из OpenAI, PaLM или Cohere. Chroma упрощает интеграцию внешних API для автоматического создания и хранения встраиваемых изображений. Мы рассмотрим эту концепцию более подробно в следующей части этого урока.

Chroma по умолчанию создает вложения, используя модель преобразователей предложений, полностью состоящую из MiniLM-L6-v2. Эта модель внедрения может генерировать внедрения предложений и документов для различных задач. Эта функция внедрения запускается на вашем локальном компьютере и может потребовать загрузки файла модели, что произойдет автоматически.

Поскольку мы полагаемся на встроенную модель встраивания слов, предоставляемую Chroma, мы просто принимаем данные и позволяем Chroma автоматически генерировать встраивания для каждого документа в коллекции.

Мы можем пойти дальше и создать коллекцию.

Язык кода:javascript
копировать
collection = chroma_client.create_collection(name="tns_tutorial")

Теперь мы готовы вставить документ в коллекцию.

Язык кода:javascript
копировать
collection.add(
    documents=phrases,
    metadatas=metadatas,
    ids=ids
)

Мы можем быстро проверить, создал ли вставленный документ встраивание.

Язык кода:javascript
копировать
collection.peek()

Вы должны увидеть автоматически созданную вставку, добавленную в список встраивания коллекции.

Теперь мы можем выполнить поиск по сходству в коллекции. Давайте найдем фразы, соответствующие фразе «Мэри недоделана от Джона». Обратите внимание, что оно имеет только то же значение, что и документ, но не точное совпадение.

Язык кода:javascript
копировать
results = collection.query(
    query_texts=["Mary got half-baked cake from John"],
    n_results=2
)

Когда осуществляется доступ к переменной результата, ее содержимое выглядит следующим образом:

Язык кода:javascript
копировать
{'ids': [['004', '001']],
 'distances': [[0.4699302613735199, 1.333911657333374]],
 'metadatas': [[{'source': 'txt-1'}, {'source': 'pdf-1'}]],
 'embeddings': None,
 'documents': [["John's cookies were only half-baked but he still carries them for Mary.",
   'Amanda baked cookies and will bring Jerry some tomorrow.']]}

Судя по расстоянию, первый документ в списке идеально подходит. Теперь мы можем получить прямой доступ к элементу, чтобы получить фактическую фразу. Элемент внедрения пуст, поскольку получение внедрения для каждого запроса обходится дорого. Но за кулисами Chroma выполняет поиск косинусного сходства на основе вложений, хранящихся в виде векторов.

Язык кода:javascript
копировать
print(results['documents'][0][0])

База данных Chroma также поддерживает запросы на основе метаданных или идентификаторов. Это делает поиск по источнику документа очень удобным.

Язык кода:javascript
копировать
results = collection.query(
    query_texts=["cookies"],
    where={"source": "pdf-1"},
    n_results=1
)
print(results)

Приведенный выше запрос сначала выполняет поиск по сходству, а затем фильтрует запрос на основе условияwhere, которое определяет метаданные.

Наконец, давайте удалим коллекцию.

Язык кода:javascript
копировать
collection.delete()

В следующей части этого руководства, которая, как ожидается, будет выпущена на следующей неделе, мы расширим чат-бот Academy Awards, чтобы использовать базу данных векторов Chroma. Следите за обновлениями.

Ниже приведен полный код, который вы можете попробовать на своем компьютере.

Язык кода:javascript
копировать
import chromadb

phrases = [
    "Amanda baked cookies and will bring Jerry some tomorrow.",
    "Olivia and Olivier are voting for liberals in this election.",
    "Sam is confused, because he overheard Rick complaining about him as a roommate. Naomi thinks Sam should talk to Rick. Sam is not sure what to do.",
    "John's cookies were only half-baked but he still carries them for Mary.",
]

ids = ["001", "002", "003", "004"]

metadatas = [{"source": "pdf-1"}, {"source": "doc-1"}, {"source": "pdf-2"}, {"source": "txt-1"}]

chroma_client = chromadb.Client()

collection = chroma_client.get_or_create_collection(name="tns_tutorial")

collection.add(
    documents=phrases,
    metadatas=metadatas,
    ids=ids
)

collection.peek()

results = collection.query(
    query_texts=["Mary got half-baked cake from John"],
    n_results=2
)

print(results['documents'][0][0])

results = collection.query(
    query_texts=["cookies"],
    where={"source": "pdf-1"},
    n_results=1
)
print(results)

collection.delete()
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose