Этот репозиторий содержит приложение Python, которое использует DuckDB в качестве бэкэнда для хранения и извлечения векторов. Новое использование DuckDB позволяет выполнять эффективные поиски сходства среди больших наборов данных. В этом примере мы загрузили комментарии из Hacker News и внедрили функциональность, чтобы найти 10 самых похожих комментариев к данному комментарию.
Клонировать репозиторий:
git clone https://github.com/patricktrainer/duckdb-embedding-search.gitПерейдите к каталогу репозитория:
cd duckdb-embedding-searchУстановите необходимые пакеты:
pip install -r requirements.txtЧтобы использовать приложение, выполните следующие действия:
load_comments.py , чтобы загрузить комментарии в базу данных DuckDB. Комментарии и их соответствующие векторы встраивания будут храниться в таблице embeddings в таблице базы данных hn_embeddings.db .main.py ) и предоставьте комментарий хакеров новостей. Сценарий вернет 10 самых похожих комментариев из базы данных.ПРИМЕЧАНИЕ - Функция
get_similarityвembedding.pyсоздаст новый вектор встраивания для предоставленного комментария, если его еще не существует в базе данных. Это означает, что он попадет в API OpenAI, который будет рассчитывать на ваше использование API.
Следующий пример демонстрирует функциональность приложения. Комментарий предоставляется в качестве ввода, и приложение возвращает 10 самых похожих комментариев из базы данных.
Комментарий предоставлен в качестве входного:
Одна вещь, которую я заметил, это то, что многие инженеры, когда они ищут библиотеку на GitHub, они проверяют последнее время для совершения. Они думают, что чем более позднее последнее коммит, тем лучше поддерживаться библиотекой. Но как насчет архивированного проекта, который делает именно то, что вам нужно, имеет 0 ошибок, и он был стабильным в течение многих лет? Это как найти скрытый драгоценный камень в благотворительном магазине! Большинство инженеров, которых я вижу в настоящее время, автоматически отбросит библиотеку, которая не «постоянно» обновляется ... подразумевая, что это хорошо :)
Наиболее похожие комментарии, возвращенные приложением (сокращенно для краткости):
Текст:> Смерть в общие библиотеки. Головные боли, которые они вызывают, просто не стоят выгоды.
Полностью не согласен. Несмотря на то, что один размер не подходит для всех, любой, кто делает широкие заявления о статических библиотеках, просто заявляет миру, как они полностью не замечают основных задач по техническому обеспечению программного обеспечения, как отслеживание, какой программный пакет обновляется, особенно те, кто не обновляется ежедневно.
Сходство: 0,8047998201033179
Текст: Здесь много хороших моментов, но работы по техническому обслуживанию для прибыльных систем кажется действительным использованием времени.
Теперь некоторые прибыльные системы медленно биттируют, и штатные инженеры могут продолжать заняться обычной работой, одновременно не обращаясь к биту. Но я думаю, что люди, которые хороши в том, чтобы убедиться, что скучные и стабильные вещи остаются скучными и стабильными, как правило, недооценены.
Сходство: 0,796911347299464
connection.py : обрабатывает подключения базы данных DuckDB.embedding.py : управляет внедрением векторных операций.operations.py : содержит функции утилиты для обработки данных.openai_client.py : интерфейсы с API OpenAI. DuckDB используется в качестве легкой высокопроизводительной базы данных для хранения векторов встраивания. Модуль connection.py устанавливает соединение с DuckDB, а operations.py содержит логику для вставки и получения внедрения.
Встроенные векторы генерируются с использованием API OpenAI. Модуль openai_client.py содержит логику для взаимодействия с API. Модуль embedding.py содержит логику для генерации векторов встраивания и сравнения их.