Перейти к содержанию

Настройка AI чата

Info

AI чат требует Gramps Web API версии 2.5.0 или выше.

Gramps Web API поддерживает задавание вопросов о генеалогической базе данных с использованием больших языковых моделей (LLM) через технику, называемую дополненной генерацией извлечения (RAG).

RAG работает следующим образом. Сначала используется модель векторного встраивания, чтобы создать индекс всех объектов в базе данных Gramps в виде числовых векторов, которые кодируют значение объектов. Этот процесс аналогичен созданию индекса полнотекстового поиска, но более вычислительно затратный.

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

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

Для включения конечной точки чата в Gramps Web API необходимо выполнить три шага:

  1. Установить необходимые зависимости,
  2. Включить семантический поиск,
  3. Настроить поставщика LLM.

Эти три шага описаны ниже по порядку. Наконец, владелец или администратор должен настроить, какие пользователи могут получить доступ к функции чата в настройках Управления пользователями.

Установка необходимых зависимостей

AI чат требует установки библиотек Sentence Transformers и PyTorch.

Стандартные образы Docker для Gramps Web уже имеют их предустановленными для архитектур amd64 (например, 64-битный настольный ПК) и arm64 (например, 64-битный Raspberry Pi). К сожалению, AI чат не поддерживается на архитектуре armv7 (например, 32-битный Raspberry Pi) из-за отсутствия поддержки PyTorch.

При установке Gramps Web API через pip (это не требуется при использовании образов Docker) необходимые зависимости устанавливаются с помощью

pip install gramps_webapi[ai]

Включение семантического поиска

Если необходимые зависимости установлены, включение семантического поиска может быть таким же простым, как установка параметра конфигурации VECTOR_EMBEDDING_MODEL (например, установив переменную окружения GRAMPSWEB_VECTOR_EMBEDDING_MODEL), см. Конфигурация сервера. Это может быть любая строка модели, поддерживаемой библиотекой Sentence Transformers. Смотрите документацию этого проекта для получения подробностей и доступных моделей.

Warning

Обратите внимание, что стандартные образы Docker не включают версию PyTorch с поддержкой GPU. Если у вас есть доступ к GPU (что значительно ускорит семантическую индексацию), пожалуйста, установите версию PyTorch с поддержкой GPU.

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

  • Когда вы изменяете модель, вам нужно вручную воссоздать семантический индекс поиска для вашего дерева (или всех деревьев в многодеревной настройке), в противном случае вы столкнетесь с ошибками или бессмысленными результатами.
  • Модели представляют собой компромисс между точностью/общностью с одной стороны и вычислительным временем/объемом памяти с другой. Если вы не запускаете Gramps Web API на системе, имеющей доступ к мощному GPU, большие модели обычно слишком медленны на практике.
  • Если ваша вся база данных на английском языке и все ваши пользователи ожидаются только с вопросами в чате на английском, вам потребуется многоязычная модель встраивания, которые более редки, чем чисто английские модели.

Если модель отсутствует в локальном кэше, она будет загружена при первом запуске Gramps Web API с новой конфигурацией. Модель sentence-transformers/distiluse-base-multilingual-cased-v2 уже доступна локально при использовании стандартных образов Docker. Эта модель является хорошей отправной точкой и поддерживает многоязычный ввод.

Пожалуйста, делитесь знаниями о различных моделях с сообществом!

Info

Библиотека sentence transformers потребляет значительное количество памяти, что может привести к завершению работы рабочих процессов. В качестве правила, с включенным семантическим поиском каждый рабочий процесс Gunicorn потребляет около 200 МБ памяти, а каждый рабочий процесс celery около 500 МБ памяти даже в неактивном состоянии и до 1 ГБ при вычислении встраиваний. См. Ограничение использования CPU и памяти для настроек, которые ограничивают использование памяти. Кроме того, рекомендуется выделить достаточно большой раздел подкачки, чтобы предотвратить ошибки OOM из-за временных всплесков использования памяти.

Настройка поставщика LLM

Связь с LLM использует совместимый с OpenAI API с помощью библиотеки openai-python. Это позволяет использовать локально развернутый LLM через Ollama (см. Совместимость Ollama с OpenAI) или API, такой как OpenAI или Hugging Face TGI (Text Generation Inference). LLM настраивается через параметры конфигурации LLM_MODEL и LLM_BASE_URL.

Использование хостируемого LLM через OpenAI API

При использовании OpenAI API LLM_BASE_URL можно оставить не установленным, в то время как LLM_MODEL должен быть установлен на одну из моделей OpenAI, например, gpt-4o-mini. Обратите внимание, что из-за подхода RAG LLM используется "только" для выбора правильной информации из результатов семантического поиска и формулирования ответа, ему не требуется глубокое генеалогическое или историческое знание. Поэтому вы можете попробовать, достаточно ли маленькой/дешевой модели.

Вам также потребуется зарегистрироваться, получить API-ключ и сохранить его в переменной окружения OPENAI_API_KEY.

Info

LLM_MODEL является параметром конфигурации; если вы хотите установить его через переменную окружения, используйте GRAMPSWEB_LLM_MODEL (см. Конфигурация). OPENAI_API_KEY не является параметром конфигурации, а переменной окружения, которая напрямую используется библиотекой openai-python, поэтому ее не следует префиксировать.

Использование локального LLM через Ollama

Ollama является удобным способом запуска LLM локально. Пожалуйста, ознакомьтесь с документацией Ollama для получения подробностей. Обратите внимание, что LLM требуют значительных вычислительных ресурсов, и все, кроме самых маленьких моделей, вероятно, будут слишком медленными без поддержки GPU. Вы можете попробовать, соответствует ли tinyllama вашим требованиям. Если нет, попробуйте одну из более крупных моделей. Пожалуйста, делитесь любым опытом с сообществом!

При развертывании Gramps Web с помощью Docker Compose вы можете добавить службу Ollama

services:
  ollama:
    image: ollama/ollama
    container_name: ollama
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama

volumes:
    ollama_data:

и затем установить параметр конфигурации LLM_BASE_URL на http://ollama:11434/v1. Установите LLM_MODEL на модель, поддерживаемую Ollama, и загрузите ее в ваш контейнер с помощью ollama pull <model>. Наконец, установите OPENAI_API_KEY на ollama.

Чтобы устранить проблемы с Ollama, вы можете включить отладочный логгинг, установив переменную окружения OLLAMA_DEBUG=1 в среде службы Ollama.

Info

Если вы используете Ollama для AI чата Gramps Web, пожалуйста, поддержите сообщество, заполнив эту документацию любыми недостающими деталями.

Использование других поставщиков

Пожалуйста, не стесняйтесь предоставлять документацию для других поставщиков и делиться своим опытом с сообществом!