Files
DLE/md/vector-search-service.md

108 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Техническое задание: Векторный сервис поиска по таблице
## Цель
Реализовать отдельный микросервис для векторного поиска по данным из таблицы в базе данных. Сервис должен предоставлять REST API для добавления, поиска и обновления векторных представлений (эмбеддингов) строк таблицы.
## Язык и стек
- Язык: Python 3.10+
- Векторный движок: FAISS
- API: FastAPI
- Хранение индекса: на диске (persistency)
- Docker-образ для деплоя
## API сервиса
### 1. Добавление/обновление записей
- **POST /upsert**
- Тело запроса:
```json
{
"table_id": "string", // идентификатор таблицы
"rows": [
{
"row_id": "string", // идентификатор строки
"text": "string", // текст для эмбеддинга
"metadata": { ... } // любые дополнительные поля
}
]
}
```
- Ответ: `{ "success": true }`
### 2. Поиск похожих записей
- **POST /search**
- Тело запроса:
```json
{
"table_id": "string",
"query": "string", // текст запроса
"top_k": 3 // количество результатов
}
```
- Ответ:
```json
{
"results": [
{
"row_id": "string",
"score": float,
"metadata": { ... }
}
]
}
```
### 3. Удаление записей
- **POST /delete**
- Тело запроса:
```json
{
"table_id": "string",
"row_ids": ["string", ...]
}
```
- Ответ: `{ "success": true }`
### 4. Пересоздание индекса (опционально)
- **POST /rebuild**
- Тело запроса:
```json
{
"table_id": "string"
}
```
- Ответ: `{ "success": true }`
## Требования к эмбеддингам
- Для генерации эмбеддингов сервис использует Ollama (через HTTP API, модель mxbai-embed-large или аналогичную).
- Эмбеддинги кэшируются локально для ускорения поиска.
## Требования к интеграции
- Сервис не хранит бизнес-логику, только индексы и метаданные.
- Node.js backend обращается к сервису по HTTP (localhost или через docker-compose).
- Все операции атомарны, сервис устойчив к сбоям.
## Безопасность
- Сервис доступен только во внутренней сети (docker-compose).
- Нет публичного доступа извне.
## Мониторинг и логирование
- Логирование всех запросов и ошибок.
- Healthcheck endpoint: **GET /health** (ответ: `{ "status": "ok" }`)
## Docker
- Сервис должен запускаться как отдельный контейнер.
- Все зависимости описаны в requirements.txt.
## Пример docker-compose.yml (фрагмент)
```yaml
services:
vector-search:
build: ./vector-search
ports:
- "8001:8001"
environment:
- OLLAMA_BASE_URL=http://ollama:11434
depends_on:
- ollama
```