Пилот: upload с knowledge_id (RAG-10)¶
Цель: проверить экспериментально гипотезу из
rag-double-embedding.md (Вариант C):
Если сразу передать
knowledge_idв metadata приPOST /api/v1/files/, вызовется лиprocess_fileтолько один раз, а не два?
Экономия при подтверждении: ×2 эмбеддинг-токенов + вдвое меньше места в Qdrant при массовом sync KB (24+ файла).
Что готово в skeletons/¶
upload-with-knowledge-id-pilot.sh— самодостаточный bash-скрипт, включая:- Автогенерация тестового Markdown
- Замер baseline Qdrant
- Загрузка через
POST /api/v1/files/с metadata - Замер после (коллекции, точки)
- Парсинг логов rag-openwebui на
process_fileвызовы - Автоматический вывод: подтверждена ли гипотеза
- Уборка
Порядок прогона (~20 минут)¶
1 · Подготовка ragserver¶
# ssh oswold@192.168.1.200
mkdir -p ~/rag-tests
cd ~/rag-tests
# Скопируй скрипт из репо:
cp /path/to/alatyr-infra-kb/skeletons/upload-with-knowledge-id-pilot.sh .
chmod +x upload-with-knowledge-id-pilot.sh
# Установить jq если нет:
sudo apt install -y jq
2 · Создать тестовую knowledge collection в UI¶
- Открой https://rag.alatyr-service.ru (или http://192.168.1.200:3000)
- Workspace → Knowledge → New Knowledge
- Name:
pilot-8a - Description:
Тестовая коллекция для пилота 8a — удалить после - Открой созданную, скопируй ID из URL (
/workspace/knowledge/<UUID>)
3 · Получить токены из Vaultwarden¶
# Из Vaultwarden:
# - "OpenWebUI API · admin" → скопируй Bearer token
# - "Qdrant API key" → скопируй ключ
4 · Запустить пилот¶
export OW_API_TOKEN='sk-...' # из Vaultwarden
export QDRANT_KEY='...' # из Vaultwarden
export KNOWLEDGE_ID='...' # UUID из шага 2
./upload-with-knowledge-id-pilot.sh
Скрипт вернёт вердикт автоматически. Полный лог — в /tmp/pilot-8a.log.
5 · Интерпретация¶
| Результат | Действие |
|---|---|
✅ process_file вызвался 1 раз, коллекций +0 |
Переписать sync-to-openwebui.sh — использовать этот endpoint |
❌ process_file вызвался 2 раза, коллекция создана |
Оставляем Вариант A (смириться). Обновить rag-double-embedding.md — Вариант C проверен, не работает |
| ⚠️ Неоднозначно | Читай /tmp/pilot-8a.log глазами, проверь версию OpenWebUI (docker exec rag-openwebui cat /app/backend/open_webui/config.py \| grep VERSION) |
6 · Убрать пилотные артефакты¶
Если гипотеза подтвердилась — план миграции¶
Изменения в sync-to-openwebui.sh:
- # БЫЛО: два POST'а
- curl POST /api/v1/files/ -F "file=@$f"
- FID=...
- curl POST /api/v1/knowledge/{KID}/file/add -d "{\"file_id\":\"$FID\"}"
+ # СТАНЕТ: один POST
+ curl POST /api/v1/files/ \
+ -F "file=@$f" \
+ -F "metadata={\"knowledge_id\":\"$KID\"}"
Оценка: 30 минут переписать, 15 минут тест на 3-х файлах, 5 минут полный sync KB.
Гейт: запусти полный sync только если пилот прошёл ✅. Иначе можно потерять эмбеддинги существующей KB.
Пре-риски¶
- Версия OpenWebUI матери́ет. Возможно поведение отличается между 0.6 (docs.openwebui.com рекомендует этот путь) и старее (наш docker-стек). Проверить
docker exec rag-openwebui pip show open-webuiдля точной версии. - Metadata json может парсаться иначе. Если
-F "metadata={\"knowledge_id\":\"..\"}"не работает — попробовать вариант в query:POST /api/v1/files/?knowledge_id=.... - process_file может вызываться асинхронно. Скрипт ждёт 8 сек — если в логах пусто, увеличь sleep до 30 сек и повтори анализ.
Изменения после пилота¶
- Обновить
rag-double-embedding.md— секция "Вариант C" → «Проверено экспериментально» - Если подтверждено — обновить
sync-to-openwebui.shиrag-sync.md - Если подтверждено — переоценить объём Qdrant после следующего полного sync
Автор: агент, 08.08.2026