# Самостоятельное размещение эмбеддингов для DiscourseAI

**URL:** https://meta.discourse.org/t/self-hosting-embeddings-for-discourseai/290925
**Category:** Self-Hosting
**Tags:** ai, ai-search, related-topics
**Created:** [08.Январь.2024 20:49:12 UTC](https://meta.discourse.org/t/self-hosting-embeddings-for-discourseai/290925 "2024-01-08T20:49:12Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![Discourse](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/discourse/32/148734_2.png) [@Discourse](https://meta.discourse.org/u/Discourse)
#### Post date: [08.Январь.2024 20:49:12 UTC](https://meta.discourse.org/t/self-hosting-embeddings-for-discourseai/290925/1 "2024-01-08T20:49:12Z")

</div>

Плагин [Discourse AI](https://meta.discourse.org/t/discourse-ai/259214) обладает множеством функций, требующих для работы векторных представлений (embeddings), таких как «Связанные темы», «Поиск с помощью ИИ», «Помощник ИИ» и предложения категорий и тегов. Хотя вы можете использовать сторонний API, например, [настроить ключи API для OpenAI](https://meta.discourse.org/t/configure-api-keys-for-openai/280783), [настроить ключи API для Cloudflare Workers AI](https://meta.discourse.org/t/configure-api-keys-for-cloudflare-workers-ai/283321) или [настроить ключи API для Google Gemini](https://meta.discourse.org/t/configure-api-keys-for-google-gemini/289556), мы создали Discourse AI с первого дня так, чтобы не быть зависимыми от этих сервисов.

### Запуск с использованием HuggingFace TEI

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

Например:

```plaintext
mkdir -p /opt/tei-cache
docker run --rm --gpus all --shm-size 1g -p 8081:80 \
  -v /opt/tei-cache:/data \
  ghcr.io/huggingface/text-embeddings-inference:latest \
  --model-id BAAI/bge-large-en-v1.5

```

Это позволит вам запустить локальный экземпляр модели BAAI/bge-large-en-v1.5 — очень эффективной модели с открытым исходным кодом.

Вы можете проверить, работает ли он, выполнив команду:

```bash
curl -X POST \
  'http://localhost:8081/embed' \
  -H 'Content-Type: application/json' \
  -d '{ "inputs": "Testing string for embeddings" }'

```

При нормальной работе должен быть возвращён массив чисел с плавающей запятой.

### Доступность для вашего экземпляра Discourse

Чаще всего этот сервис будет запускаться на выделенном сервере из-за ускорения работы GPU. В таком случае рекомендуется использовать обратный прокси-сервер, завершать TLS-соединения и обеспечить безопасность конечной точки, чтобы к ней мог подключаться только ваш экземпляр Discourse.

### Настройка DiscourseAI

Discourse AI теперь использует полностью настраиваемую систему определения векторных представлений, аналогичную настройке больших языковых моделей (LLM). Чтобы настроить ваш самохостинговый конечный пункт:

1. Перейдите в **Администрирование → Плагины → Discourse AI → Векторные представления (Embeddings)**.
2. Нажмите **Создать** , чтобы создать новое определение векторных представлений.
3. Выберите **шаблон** , соответствующий вашей модели (например, `bge-large-en`, `bge-m3` или `multilingual-e5-large`), или выберите **Настроить вручную** для любой другой модели.
4. Укажите **URL** , ведущий на ваш самохостинговый сервер TEI (например, `https://your-tei-server:8081`).
5. Используйте кнопку **Тест** , чтобы проверить подключение перед сохранением.
6. После сохранения установите параметр `ai_embeddings_selected_model` на ваше новое определение векторных представлений.

После настройки Discourse автоматически заполнит векторные представления для существующих тем с помощью запланированной фоновой задачи. Если у вас большая очередь, вы можете увеличить скрытый параметр `ai_embeddings_backfill_batch_size` (по умолчанию: 250), чтобы обрабатывать темы быстрее.

---

<div class="post-metadata">

### Author: ![satonotdead](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/satonotdead/32/447830_2.png) [@satonotdead](https://meta.discourse.org/u/satonotdead)
#### Post date: [14.Февраль.2024 01:51:18 UTC](https://meta.discourse.org/t/self-hosting-embeddings-for-discourseai/290925/2 "2024-02-14T01:51:18Z")

</div>

Модель `bge-m3` должна работать для многоязычных (или не на английском) сайтов?

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [14.Февраль.2024 04:14:47 UTC](https://meta.discourse.org/t/self-hosting-embeddings-for-discourseai/290925/3 "2024-02-14T04:14:47Z")

</div>

Да, я протестировал его на той неделе, когда его тихо опубликовали на GitHub, и он работает хорошо. Всё ещё жду, как он покажет себя в рейтинге MTEB, так как в последний раз, когда я смотрел, его там не было.

Тем не менее, у нас есть крупные размещённые экземпляры Discourse, использующие мультиязычный плагин e5, который идёт в комплекте, и он работает очень хорошо.

---

<div class="post-metadata">

### Author: ![satonotdead](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/satonotdead/32/447830_2.png) [@satonotdead](https://meta.discourse.org/u/satonotdead)
#### Post date: [14.Февраль.2024 14:24:38 UTC](https://meta.discourse.org/t/self-hosting-embeddings-for-discourseai/290925/4 "2024-02-14T14:24:38Z")

</div>

Спасибо. Планировали ли вы включить возможность настройки пользовательских конечных точек с открытым исходным кодом для встраиваний? Я пытаюсь использовать эти модели на Hugging Face.

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [15.Февраль.2024 22:48:07 UTC](https://meta.discourse.org/t/self-hosting-embeddings-for-discourseai/290925/5 "2024-02-15T22:48:07Z")

</div>

> [@satonotdead](#):
>
> Спасибо. Планируете ли вы включить возможность использования открытых пользовательских конечных точек для эмбеддингов?

Извините, я не совсем понял, что вы имеете в виду. Эта тема представляет собой руководство по запуску моделей с открытым исходным кодом для эмбеддингов в Discourse AI.

---

<div class="post-metadata">

### Author: ![satonotdead](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/satonotdead/32/447830_2.png) [@satonotdead](https://meta.discourse.org/u/satonotdead)
#### Post date: [16.Февраль.2024 14:37:55 UTC](https://meta.discourse.org/t/self-hosting-embeddings-for-discourseai/290925/6 "2024-02-16T14:37:55Z")

</div>

> [@Falco](#):
>
> Извините, я не совсем понял, что вы имеете в виду. Эта тема — руководство по запуску моделей с открытым исходным кодом для внедрений Discourse AI.

О, извините. Я пытаюсь использовать модель с открытым исходным кодом из HuggingFace через пользовательскую конечную точку и wondering, возможно ли это или это планируется реализовать в ближайшем будущем 🙂

---

<div class="post-metadata">

### Author: ![fokx](https://avatars.discourse-cdn.com/v4/letter/f/958977/32.png) [@fokx](https://meta.discourse.org/u/fokx)
#### Post date: [28.Апрель.2024 03:40:37 UTC](https://meta.discourse.org/t/self-hosting-embeddings-for-discourseai/290925/7 "2024-04-28T03:40:37Z")

</div>

Чтобы проверить, что всё работает, используйте следующую команду (для модели `BAAI/bge-m3`):

```plaintext
curl -X 'POST' \
  'http://localhost:8081/embed'\
  -H 'Content-Type: application/json' \
  -d '{ "inputs": "Testing string for embeddings"}'

```

Кстати, вы также можете воспользоваться веб-интерфейсом Swagger по адресу [http://localhost:8081/docs/](http://localhost:8081/docs/).

---

<div class="post-metadata">

### Author: ![Isambard](https://avatars.discourse-cdn.com/v4/letter/i/858c86/32.png) [@Isambard](https://meta.discourse.org/u/Isambard)
#### Post date: [16.Май.2024 20:19:05 UTC](https://meta.discourse.org/t/self-hosting-embeddings-for-discourseai/290925/8 "2024-05-16T20:19:05Z")

</div>

Это также отличный сервер для эмбеддингов:

[https://github.com/michaelfeil/infinity](https://github.com/michaelfeil/infinity)

---

<div class="post-metadata">

### Author: ![Isambard](https://avatars.discourse-cdn.com/v4/letter/i/858c86/32.png) [@Isambard](https://meta.discourse.org/u/Isambard)
#### Post date: [29.Ноябрь.2024 13:06:41 UTC](https://meta.discourse.org/t/self-hosting-embeddings-for-discourseai/290925/9 "2024-11-29T13:06:41Z")

</div>

Чтобы сэкономить место, можно ли использовать квантованные эмбеддинги? Я хочу использовать бинарные квантованные эмбеддинги, чтобы значительно уменьшить размер хранилища. Проведя некоторые тесты, я получил \>90% производительности при сокращении объема хранилища в 32 раза!

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [29.Ноябрь.2024 13:49:54 UTC](https://meta.discourse.org/t/self-hosting-embeddings-for-discourseai/290925/10 "2024-11-29T13:49:54Z")

</div>

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

---

<div class="post-metadata">

### Author: ![Isambard](https://avatars.discourse-cdn.com/v4/letter/i/858c86/32.png) [@Isambard](https://meta.discourse.org/u/Isambard)
#### Post date: [29.Ноябрь.2024 22:27:29 UTC](https://meta.discourse.org/t/self-hosting-embeddings-for-discourseai/290925/11 "2024-11-29T22:27:29Z")

</div>

Не могли бы вы также добавить:

> **[mixedbread-ai/mxbai-embed-xsmall-v1 · Hugging Face](https://huggingface.co/mixedbread-ai/mxbai-embed-xsmall-v1)**
>
> We’re on a journey to advance and democratize artificial intelligence through open source and open science.

в список поддерживаемых моделей для векторизации?

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [29.Ноябрь.2024 22:53:02 UTC](https://meta.discourse.org/t/self-hosting-embeddings-for-discourseai/290925/12 "2024-11-29T22:53:02Z")

</div>

Мы планируем сделать эмбеддинги настраиваемыми так же, как и LLM, поэтому в скором времени будет поддерживаться любая модель.

---

<div class="post-metadata">

### Author: ![Isambard](https://avatars.discourse-cdn.com/v4/letter/i/858c86/32.png) [@Isambard](https://meta.discourse.org/u/Isambard)
#### Post date: [30.Ноябрь.2024 00:00:30 UTC](https://meta.discourse.org/t/self-hosting-embeddings-for-discourseai/290925/13 "2024-11-30T00:00:30Z")

</div>

Если у кого-то ещё возникают проблемы с эндпоинтами в локальной сети, например 192.168.x.x, — похоже, что Discourse их блокирует (вероятно, по соображениям безопасности), и это ограничение нужно обойти. Я потратил несколько часов, чтобы разобраться в этом!

---

<div class="post-metadata">

### Author: ![Isambard](https://avatars.discourse-cdn.com/v4/letter/i/858c86/32.png) [@Isambard](https://meta.discourse.org/u/Isambard)
#### Post date: [30.Ноябрь.2024 08:19:44 UTC](https://meta.discourse.org/t/self-hosting-embeddings-for-discourseai/290925/14 "2024-11-30T08:19:44Z")

</div>

@Falco это было бы здорово. Тем временем, если я захочу попробовать добавить новую модель векторных представлений, мне достаточно будет добавить:

```plaintext
 lib/embeddings/vector_representations/mxbai-embed-xsmall-v1.rb
 lib/tokenizer/mxbai-embed-xsmall-v1.rb
 tokenizers/mxbai-embed-xsmall-v1.json

```

и изменить `lib/embeddings/vector_representations/base.rb`, включив туда новую модель, или нужно изменить что-то ещё?

---

<div class="post-metadata">

### Author: ![Isambard](https://avatars.discourse-cdn.com/v4/letter/i/858c86/32.png) [@Isambard](https://meta.discourse.org/u/Isambard)
#### Post date: [30.Ноябрь.2024 14:11:07 UTC](https://meta.discourse.org/t/self-hosting-embeddings-for-discourseai/290925/15 "2024-11-30T14:11:07Z")

</div>

@Falco Я попробовал добавить модель и отправил pull request. Извините, если я что-то сделал неправильно, так как я не совсем разработчик ПО. Надеюсь, вы сможете посмотреть на это и сказать, подходит ли это для включения.

К сожалению, мне не удалось заставить это работать с TEI. Мне удалось запустить all-mpnet с TEI, но, думаю, что-то не так с тем, что я сделал, чтобы заставить работать mxbai.

Кстати, есть ли шанс добавить поддержку `https://github.com/michaelfeil/infinity` в качестве сервера эмбеддингов?

РЕДАКТИРОВАНИЕ: Я вижу, что это будет запутанно, так как индексы HNSW в базе данных, похоже, прописаны жестко, поэтому новые модели нужно добавлять в конец, чтобы не нарушить порядок, и каждая новая модель должна добавлять свой собственный индекс.

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [30.Ноябрь.2024 22:51:29 UTC](https://meta.discourse.org/t/self-hosting-embeddings-for-discourseai/290925/16 "2024-11-30T22:51:29Z")

</div>

Я _настоятельно_ рекомендую подождать пару недель, пока мы не выпустим поддержку настраиваемых эмбеддингов.

> [@Isambard](#):
>
> Кстати, есть ли шанс добавить поддержку `https://github.com/michaelfeil/infinity` в качестве сервера эмбеддингов?

Это должно работать корректно, когда мы выпустим настраиваемые эмбеддинги, но из любопытства: что это даст по сравнению с [GitHub - huggingface/text-embeddings-inference: A blazing fast inference solution for text embeddings models · GitHub](https://github.com/huggingface/text-embeddings-inference)?

---

<div class="post-metadata">

### Author: ![Isambard](https://avatars.discourse-cdn.com/v4/letter/i/858c86/32.png) [@Isambard](https://meta.discourse.org/u/Isambard)
#### Post date: [03.Декабрь.2024 23:55:21 UTC](https://meta.discourse.org/t/self-hosting-embeddings-for-discourseai/290925/17 "2024-12-03T23:55:21Z")

</div>

Я не следил за TEI, поэтому не буду упоминать преимущества, которые я не проверял недавно, но из того, что я видел недавно:

- Поддержка оборудования: infinity имеет лучшую поддержку GPU, чем TEI
- Сервер infinity может размещать несколько моделей встраивания на одном сервере (если только я не упустил это в TEI)

Это очень здорово. Если вы еще не пробовали, вам стоит взглянуть!

---

<div class="post-metadata">

### Author: ![michaelfeil](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/michaelfeil/32/477406_2.png) [@michaelfeil](https://meta.discourse.org/u/michaelfeil)
#### Post date: [31.Декабрь.2024 14:45:07 UTC](https://meta.discourse.org/t/self-hosting-embeddings-for-discourseai/290925/18 "2024-12-31T14:45:07Z")

</div>

Друг только что прислал мне эту ветку в ДМ.

Плюсы и минусы:

- Infinity поддерживает мультимодальные эмбеддинги (то есть отправку изображений и аудио) в
- поддержку GPU от AMD
- возможность запуска нескольких моделей в одном контейнере (управление моделью через параметр `model`)
- больше типов данных, например, квантование весов до int8 (в основном это неактуально, так как память для активаций больше)
- новые модели часто появляются в виде «пользовательского кода моделирования», поставляемого в репозитории Hugging Face. Infinity при необходимости читает этот код на PyTorch. Это поможет вам избежать постоянных вопросов «можете ли вы поддержать модель xyz»
- поддержка большего числа моделей (например, DeBERTaV2 для Mixedbread)

Минусы:

- время холодного запуска у TEI лучше

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [15.Январь.2025 23:23:19 UTC](https://meta.discourse.org/t/self-hosting-embeddings-for-discourseai/290925/19 "2025-01-15T23:23:19Z")

</div>

Привет, Майкл 👋

@roman активно занимается перестройкой нашей конфигурации эмбеддингов здесь:

> <https://github.com/discourse/discourse-ai/pull/1049>
>
> Adds a way to configure embeddings similar to what we already have for other con…cepts like LLMs, tools, personas, etc.
> 
> It hides many old settings and adds a new one called "ai\_embeddings\_selected\_model". We include a data migration to seed the model using these old settings.
> 
> It also removes the \`DiscourseClassifier\` service.
> 
> 
> \<img width="1131" alt="Screenshot 2025-01-13 at 11 33 39 AM" src="https://github.com/user-attachments/assets/f6be2f98-1cc6-4bf9-a7d3-2aeb289f353f" /\>
> 
> \---
> 
> \<img width="545" alt="Screenshot 2025-01-13 at 11 33 45 AM" src="https://github.com/user-attachments/assets/5f541f6b-0919-42ba-8182-4f84f8c5ab8a" /\>
> 
> \---
> 
> \<img width="572" alt="Screenshot 2025-01-13 at 11 33 51 AM" src="https://github.com/user-attachments/assets/7310580c-64cd-4194-b536-0511e9ea7e81" /\>

Мы должны завершить это очень-очень скоро; как только это будет сделано, добавление поддержки Infinity станет тривиальной задачей.

Я всё ещё часто думаю о мультимодальных эмбеддингах. Это даёт вам преимущество при выполнении RAG для PDF-файлов, так как вы просто преобразуете их в изображения и создаёте эмбеддинги для каждого изображения, избегая необходимости в OCR или дорогостоящем преобразовании изображения в текст с помощью LLM.

Как только мы завершим этот PR, мы с радостью добавим поддержку Infinity (и поддержку мультимодальных моделей) в конфигурацию эмбеддингов.

Спасибо, что заглянули 🤗

---

<div class="post-metadata">

### Author: ![Isambard](https://avatars.discourse-cdn.com/v4/letter/i/858c86/32.png) [@Isambard](https://meta.discourse.org/u/Isambard)
#### Post date: [23.Январь.2025 11:45:12 UTC](https://meta.discourse.org/t/self-hosting-embeddings-for-discourseai/290925/20 "2025-01-23T11:45:12Z")

</div>

Интересно, не станет ли создание поддержки litellm ускоренным решением, поскольку в этом случае вы получите доступ ко всем моделям, поддерживаемым через litellm. Другие проекты, похоже, внедряют это.

> **[liteLLM](https://docs.litellm.ai/)**
>
> The Trivy supply-chain compromise has been contained . All affected packages have been deleted and current releases are free of the compromised code/component. Please refer to our Security Townhall for a deeper understanding of the problem, and CI/CD...

[Следующая страница](https://meta.discourse.org/t/self-hosting-embeddings-for-discourseai/290925.md?page=2)
