Перейти к содержимому
Главная страница » Настройка pgvector в docker

Настройка pgvector в docker

Вы когда-нибудь задумывались, как Netflix предлагает фильмы, которые могут вам понравиться, или как Spotify создаёт персонализированные плейлисты? Эти функции на базе ИИ часто используют поиск по векторному сходству. В этом гайде мы установим векторную БД pgvector на базе PostgreSQL подобную тем, что используют рекомендательные системы!

Давайте начнём…🐢

Обзор проекта ✨

Мы создадим поисковую систему, которая будет находить похожий контент по смыслу, а не только по ключевым словам. Это та же технология, которая лежит в основе:

  • Предложения по написанию кода от GitHub Copilot
  • Рекомендации Spotify по песням
  • Рекомендации по фильмам от Netflix

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

Pgvector представляет собой специализированный тип данных, операторы и функции, которые обеспечивают эффективное хранение, обработку и анализ векторных данных. 
Это решение с открытым исходным кодом, которое легко интегрируется с PostgreSQL, что делает его отличным выбором, если вы уже знакомы с базами данных Postgres. 

В первой части мы настроим инфраструктуру базы данных. Во второй части мы реализуем функцию поиска с помощью встраиваний OpenAI.

Что такое векторный поиск? 🔎

Когда ИИ обрабатывает контент (текст, код или изображения), он создаёт специальный список чисел, называемый врезкой. Представьте себе, что это интеллектуальное резюме, которое отражает смысл контента. У похожего контента будут похожие числа, что упрощает поиск связанных элементов.

Если вы не знакомы с машинным обучением, не волнуйтесь! Вы можете легко получить эти векторы из API-интерфейсов ИИ, таких как OpenAI, даже не обладая глубокими знаниями в области ИИ.

pgvector помогает нам эффективно хранить и искать эти вложения в виде векторов в PostgreSQL.

Пошаговая настройка 👣

Убедитесь, что на вашем компьютере установлен Docker Desktop.

Структура проекта

vector-search/
├── compose.yml
└── postgres/
    └── schema.sql

1. Создать compose.yml

services:
  db:
    image: pgvector/pgvector:pg17 # PostgreSQL with pgvector support
    container_name: pgvector-db
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      POSTGRES_DB: example_db
    ports:
      - "5432:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data
      - ./postgres/schema.sql:/docker-entrypoint-initdb.d/schema.sql

volumes:
  pgdata: # Stores data outside the container to ensure persistence

2. Определите схему базы данных

Создатьpostgres/schema.sql:

-- Enable pgvector extension
CREATE EXTENSION IF NOT EXISTS vector;

-- Create sample table
CREATE TABLE items (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    item_data JSONB,
    embedding vector(1536) -- vector data
);

3. Запустите базу данных

Запустите Docker Compose, чтобы создать и запустить контейнер PostgreSQL с помощью pgvector.

docker compose up --build

4. Проверьте настройки

Подключение к PostgreSQL:

docker exec -it pgvector-db psql -U postgres -d example_db

Проверьте, всё ли настроено правильно:

-- Check installed extensions
\dx

-- Check table creation
\dt

-- Check table structure
\d items

Советы по устранению неполадок 🛠️

Ошибка: порт 5432 уже используется

Измените порт в compose.yml на 5433 или другой свободный порт.

  ports:
    - "5433:5432"

База данных не инициализируется должным образом

Извлеките volume и перезагрузите компьютер.

  docker-compose down -v    # Remove existing volume
  docker-compose up --build # Start fresh

Вы всё ещё не знаете, что не так?

Проверьте журналы контейнеров.

  docker compose logs db

Быстрый предварительный просмотр 👀

Вот краткий обзор того, как мы будем искать похожие товары в части 2:

-- Find items similar to a specific vector
SELECT id, name, item_data
FROM items
ORDER BY embedding <-> '[0.1, 0.2, ...]'::vector
LIMIT 5;

Замените [0,1, 0,2, …] на фактический вектор из моделей ИИ.

Что будет дальше? 💭

Мы рассмотрим следующие темы:

  • Узнайте, что такое вложения и как они работают
  • Создайте встраиваемые элементы с помощью OpenAI
  • Посмотрите, как работает векторный поиск на практике

Оставайтесь с нами! 🚀

Вы заметили какие-то ошибки или знаете, как сделать лучше? Пожалуйста, оставьте комментарий ниже! 💬

Перевод:  Setup with PostgreSQL and pgvector

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *