You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/PRD-public-knowledge-search-service.md
+4-3Lines changed: 4 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -270,7 +270,7 @@ rate_limit_tiers:
270
270
| Компонент | Статус | Заметки |
271
271
|-----------|--------|---------|
272
272
| Монтирование корпуса **`/corpus`** (прод) и **`KNOWLEDGE_ROOT`**|**Done**| Образ также содержит снимок **`knowledge/`** в **`/opt/search/knowledge`** для запуска без volume. |
273
-
| Ранжирование фрагментов перед вызовом LLM |**Done**|Эвристика по токенам запроса и `.md` (Unicode-токены для кириллицы); см. `docker/search/knowledge-rank.mjs`, зеркало логики в `src/local-search.ts`. |
273
+
| Ранжирование фрагментов перед вызовом LLM |**Done**|По умолчанию **[MiniSearch](https://github.com/lucaong/minisearch)** (BM25-алгоритм) по секциям Markdown; при пустом hit — fallback на эвристику по токенам. `SEARCH_RANKER=legacy` — только эвристика. См. `docker/search/knowledge-rank.mjs`; зеркало эвристики в `src/local-search.ts`. |
274
274
| Учёт **`locale`** в промпте |**Done**| Явные инструкции `ru` / `en` / авто по языку запроса. |
275
275
| Поле **`sources`**|**Done**| Из JSON ответа модели; если пусто — fallback из ранжированных источников. |
276
276
| Диагностика сбоев Qwen (**stdout/stderr** в **502**) |**Done**| Усечённые потоки в `message` для оператора. |
@@ -288,6 +288,7 @@ rate_limit_tiers:
288
288
|`SEARCH_HTTP_PORT` / `QWEN_HTTP_PORT`| Порт HTTP listener (по умолчанию **8790**). |
289
289
|`SEARCH_HTTP_BIND` / `QWEN_HTTP_BIND`| Bind address (по умолчанию **0.0.0.0**). |
290
290
|`KNOWLEDGE_ROOT`| Корень Markdown-корпуса (**рекомендуется `/corpus`** в проде). |
291
+
|`SEARCH_RANKER`|`minisearch` (по умолчанию) или `legacy` — только эвристика по токенам. |
291
292
|`SEARCH_RATE_LIMIT_TIERS`| JSON override лимитов **free** / **basic** (см. §5.6). |
292
293
|`API_TOKEN`| Общий секрет для **Bearer** и tier **basic** на **`search`**. |
293
294
|`PROD_QWEN_OAUTH_CREDS` / `QWEN_OAUTH_CREDS_B64`| Base64 **oauth_creds** для Qwen CLI в контейнере; после смены секрета — **пересобрать/перезапустить****`search`**. |
@@ -362,7 +363,7 @@ rate_limit_tiers:
362
363
363
364
| ID | Требование | Приоритет |
364
365
|----|------------|-----------|
365
-
|**NR-RET-1**| Оценить **FTS5 / BM25** или **сведение рангов (RRF)** для релевантности фрагментов корпуса вместо или вместе с текущей эвристикой; сохранить контракт API. | P2 |
366
+
|**NR-RET-1**|~~Оценить BM25~~ — **частично done** (MiniSearch + секции). Далее: **FTS5 / RRF / trigram** при необходимости; контракт API без изменений. | P2 |
366
367
|**NR-RET-2**| Опциональный **кэш** ответов по `(query нормализованный, locale, версия корпуса)` при неизменном корпусе — снижение стоимости Qwen и latency. | P3 |
367
368
|**NR-OBS-1**| Метрики (**accepted/429/latency/502**) и точки интеграции с мониторингом хоста. | P2 |
368
369
|**NR-HA-1**| При **>1 реплики**`search` — вынести дневные/минутные счётчики rate limit из in-memory (**Redis** и аналоги); см. §5.6.3. | P2 |
@@ -388,4 +389,4 @@ rate_limit_tiers:
388
389
389
390
---
390
391
391
-
*Document version: 1.5 — 2026-03-25 — §4/§6/§7 актуализированы; §5.8 пайплайн; §12 статус и backlog; §13 context-mode; §9 smoke-тесты; NR для retrieval/observability/HA.*
0 commit comments