# 1C RAG Search

Первый поиск по корпусу реализован как локальный lexical BM25-подобный индекс.

Он нужен для ранней проверки:

- документы попали в корпус;
- чанки имеют нормальный размер;
- поиск возвращает ожидаемые источники;
- ответы модели можно снабжать найденным контекстом.

Это не финальная семантическая RAG-база. Позже добавим embedding-модель и vector store.

Что уже есть:

- нормализация русских окончаний для частых 1С-терминов;
- алиасы `1с/bsl`, `справочник/catalog`, `реквизиты/attribute`, `метаданные/metadata`;
- смысловые `source_type`: `metadata`, `bsl`, `query`, `safety`, `docs`;
- RAG-профили и auto-routing по вопросу;
- бонус за совпадение в заголовке чанка;
- опциональная дедупликация результатов по документу;
- smoke-проверка качества поиска.

## Build Index

```powershell
python scripts/build_1c_rag_index.py
```

Для синтетического примера:

```powershell
python scripts/build_1c_rag_index.py --corpus plugins/1c/datasets/prepared/rag_corpus.example.jsonl --output plugins/1c/datasets/prepared/rag_index.example.json
```

## Search

```powershell
python scripts/search_1c_rag.py "метаданные справочника" --index plugins/1c/datasets/prepared/rag_index.example.json
```

```powershell
python scripts/search_1c_rag.py "реквизиты справочника номенклатура" `
  --index plugins/1c/datasets/prepared/rag_index.example.json `
  --profile auto `
  --limit 5 `
  --candidate-limit 30 `
  --dedupe-by-document
```

## Quality Smoke

```powershell
python scripts/check_1c_rag_quality.py --index plugins/1c/datasets/prepared/rag_index.example.json --print
```
