--- title: Matching Embedding Service emoji: 🏠 colorFrom: blue colorTo: green sdk: docker pinned: false license: mit app_port: 7860 --- # Matching Embedding Service v2.2.0 **Production-Ready** сСрвис для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ эмбСддингов тСкста ΠΈ сСмантичСского поиска ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² нСдвиТимости. ## πŸ†• Π§Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π² v2.2.0 - βœ… **Новая модСль** β€” `ai-forever/ru-en-RoSBERTa` (768 dimensions) - βœ… **Нормализация эмбСддингов** β€” `normalize_embeddings=True` для cosine similarity - βœ… **Унифицированная кэш-Π»ΠΎΠ³ΠΈΠΊΠ°** β€” ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π»Π°Π³ `cached` - βœ… **Асинхронная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°** β€” Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ event loop - βœ… **Prometheus ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ** β€” `/metrics` endpoint - βœ… **Rate limiting** β€” Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ - βœ… **In-memory ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅** β€” Π΄ΠΎ 100x ускорСниС ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… запросов ## ВозмоТности - πŸ”’ ГСнСрация эмбСддингов для русского ΠΈ английского тСкста - πŸ” БСмантичСский поиск ΠΈ ΠΌΠ°Ρ‚Ρ‡ΠΈΠ½Π³ - πŸš€ FastAPI с автоматичСской Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ - 🌐 CORS-ready для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с Go Backend - πŸ“Š Prometheus ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ## МодСль Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ модСль: `ai-forever/ru-en-RoSBERTa` - πŸ‡·πŸ‡Ί ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° для русского языка - πŸ‡¬πŸ‡§ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° английского языка - Π Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ²: **768** - НормализованныС эмбСддинги для pgvector + cosine similarity ## Endpoints ### ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ | ΠœΠ΅Ρ‚ΠΎΠ΄ | Endpoint | ОписаниС | |-------|----------|----------| | `GET` | `/health` | ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ | | `GET` | `/metrics` | Prometheus ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ | | `GET` | `/model-info` | Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈ | | `POST` | `/embed` | Π­ΠΌΠ±Π΅Π΄Π΄ΠΈΠ½Π³ ΠΈΠ· тСкста | | `POST` | `/prepare-and-embed` | ⭐ Основной endpoint | | `POST` | `/batch` | ΠŸΠ°ΠΊΠ΅Ρ‚Π½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° | ### ΠŸΠ΅Ρ€Π΅ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ | ΠœΠ΅Ρ‚ΠΎΠ΄ | Endpoint | ОписаниС | |-------|----------|----------| | `POST` | `/reindex` | ΠŸΠ΅Ρ€Π΅ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° | | `POST` | `/reindex-batch` | ΠŸΠ°ΠΊΠ΅Ρ‚Π½Π°Ρ пСрСиндСксация | ### Кэш | ΠœΠ΅Ρ‚ΠΎΠ΄ | Endpoint | ОписаниС | |-------|----------|----------| | `GET` | `/cache/stats` | Бтатистика кэша | | `POST` | `/cache/clear` | ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° кэша | ## ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ | ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ | По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ | ОписаниС | |------------|--------------|----------| | `EMBEDDING_MODEL` | `paraphrase-multilingual-MiniLM-L12-v2` | МодСль | | `MAX_BATCH_SIZE` | `128` | Макс. элСмСнтов Π² Π±Π°Ρ‚Ρ‡Π΅ | | `MAX_TEXT_LENGTH` | `10000` | Макс. символов | | `RATE_LIMIT` | `100/minute` | Rate limit | | `CACHE_ENABLED` | `true` | Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ кэш | | `CACHE_TTL_SECONDS` | `3600` | TTL кэша | ## ИспользованиС ### Python ```python import requests # Health check response = requests.get("https://your-space.hf.space/health") print(response.json()) # {"status": "healthy", "model": "...", "version": "2.1.0", "cache_enabled": true} # ГСнСрация эмбСддинга response = requests.post( "https://your-space.hf.space/prepare-and-embed", json={ "title": "Π£ΡŽΡ‚Π½Π°Ρ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Π° Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅", "description": "Для сСмьи с Π΄Π΅Ρ‚ΡŒΠΌΠΈ", "price": 10000000, "rooms": 3 } ) result = response.json() embedding = result["embedding"] # [0.123, -0.456, ...] checksum = result["model_checksum"] # "a1b2c3d4e5f6" cached = result["cached"] # true/false ``` ### Go ```go type EmbedRequest struct { Title string `json:"title"` Description string `json:"description"` Price float64 `json:"price,omitempty"` Rooms int `json:"rooms,omitempty"` } type EmbedResponse struct { Embedding []float64 `json:"embedding"` Dimensions int `json:"dimensions"` ModelVersion string `json:"model_version"` ModelChecksum string `json:"model_checksum"` Cached bool `json:"cached"` } // БохраняСм Π² PostgreSQL + pgvector // UPDATE leads SET embedding = $1, model_checksum = $2 WHERE id = $3 ``` ## Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ### Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ запуск ```bash pip install -r requirements.txt uvicorn main:app --host 0.0.0.0 --port 7860 ``` ### Docker ```bash docker build -t matching-service . docker run -p 7860:7860 \ -e CACHE_ENABLED=true \ -e RATE_LIMIT=100/minute \ matching-service ``` ### ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Prometheus scrape config: ```yaml scrape_configs: - job_name: 'embedding-service' static_configs: - targets: ['localhost:7860'] metrics_path: '/metrics' ``` ## Changelog Π‘ΠΌ. [CHANGELOG.md](CHANGELOG.md) для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ списка ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.