116 lines
6.3 KiB
Markdown
116 lines
6.3 KiB
Markdown
# Тесты пайплайна (pipeline_setup)
|
||
|
||
Каталог содержит тесты и вспомогательные модули для настройки и проверки пайплайна: intent router → RAG retrieval → LLM.
|
||
|
||
## Содержимое
|
||
|
||
| Каталог / файл | Назначение |
|
||
|----------------|------------|
|
||
| **suite_01_synthetic/** | Синтетические тесты на fixture-репозитории и golden-кейсах для CODE_QA. |
|
||
| **suite_02_pipeline/** | Интеграционные наборы `router_only`, `router_rag`, `full_chain` и CLI для их запуска. |
|
||
| **test_results/** | Результаты прогонов: JSONL и отчёты тестовых пайплайнов, артефакты CODE_QA eval. |
|
||
| **utils/** | Общие низкоуровневые утилиты. Сейчас здесь живёт переиспользуемый RAG-индексатор. |
|
||
|
||
## Структура наборов
|
||
|
||
- `suite_01_synthetic` — fixture-репозиторий `code_qa_repo`, golden-кейсы и evaluation harness.
|
||
- `suite_02_pipeline` — интеграционные сценарии `router_only`, `router_rag`, `full_chain` и CLI-скрипты запуска.
|
||
|
||
## CLI для pipeline-набора
|
||
|
||
Запуск — из **корня проекта (agent)**:
|
||
|
||
```bash
|
||
# Из каталога agent
|
||
python -m tests.pipeline_setup.suite_02_pipeline.cli.<скрипт> [параметры]
|
||
```
|
||
|
||
### 1. Индексация репозитория
|
||
|
||
Создаёт RAG-сессию и индексирует указанную директорию. Результат — `rag_session_id`, который передаётся в пайплайны с retrieval или full_chain.
|
||
|
||
```bash
|
||
python -m tests.pipeline_setup.suite_02_pipeline.cli.index_repo --repo-path <путь_к_репо> [--project-id ID]
|
||
```
|
||
|
||
| Параметр | Обязательный | Описание |
|
||
|----------|--------------|----------|
|
||
| `--repo-path` | да | Путь к корню индексируемого репозитория. |
|
||
| `--project-id` | нет | Идентификатор проекта для сессии; по умолчанию — имя директории репо. |
|
||
|
||
Пример:
|
||
|
||
```bash
|
||
python -m tests.pipeline_setup.suite_02_pipeline.cli.index_repo --repo-path ./tests/pipeline_setup/suite_01_synthetic/fixtures/code_qa_repo --project-id code_qa_repo
|
||
# Вывод: rag_session_id=<uuid>
|
||
```
|
||
|
||
### 2. Пайплайн «только intent router»
|
||
|
||
Цепочка: классификация запроса (intent_router_v2), без RAG и LLM.
|
||
|
||
```bash
|
||
python -m tests.pipeline_setup.suite_02_pipeline.cli.run_router_only [--case-id ID ...] [--verbose] [--test-name PREFIX]
|
||
```
|
||
|
||
| Параметр | Описание |
|
||
|----------|----------|
|
||
| `--case-id` | Запустить только указанные кейсы (можно повторять). |
|
||
| `--verbose` | Выводить диагностику по каждому кейсу. |
|
||
| `--test-name` | Префикс имени файла с результатами (по умолчанию `cli_router_only`). |
|
||
|
||
### 3. Пайплайн «intent router + retrieval»
|
||
|
||
Цепочка: intent_router_v2 → RAG retrieval. Требуется предварительная индексация (или `--reindex-repo-path`).
|
||
|
||
```bash
|
||
# С уже полученным rag_session_id:
|
||
python -m tests.pipeline_setup.suite_02_pipeline.cli.run_router_rag --rag-session-id <uuid> [--case-id ID ...] [--verbose]
|
||
|
||
# С индексацией перед прогоном:
|
||
python -m tests.pipeline_setup.suite_02_pipeline.cli.run_router_rag --reindex-repo-path <путь_к_репо> [--reindex-project-id ID] [--case-id ID ...]
|
||
```
|
||
|
||
| Параметр | Описание |
|
||
|----------|----------|
|
||
| `--rag-session-id` | UUID RAG-сессии (результат индексации). |
|
||
| `--reindex-repo-path` | Индексировать репо перед прогоном и использовать новую сессию. |
|
||
| `--reindex-project-id` | project_id для новой сессии при `--reindex-repo-path`. |
|
||
| `--case-id` | Запустить только указанные кейсы. |
|
||
| `--verbose` | Диагностика по каждому кейсу. |
|
||
| `--test-name` | Префикс файла результатов (по умолчанию `cli_router_rag`). |
|
||
|
||
Переменная окружения: `RUN_INTENT_PIPELINE_ROUTER_RAG=1` — включить режим router_rag. Обязательна `DATABASE_URL`.
|
||
|
||
### 4. Пайплайн «полная цепочка» (router + retrieval + LLM)
|
||
|
||
Цепочка: intent_router_v2 → RAG retrieval → ответ LLM (например GigaChat).
|
||
|
||
```bash
|
||
# С уже полученным rag_session_id:
|
||
python -m tests.pipeline_setup.suite_02_pipeline.cli.run_full_chain --rag-session-id <uuid> [--case-id ID ...] [--verbose]
|
||
|
||
# С индексацией перед прогоном:
|
||
python -m tests.pipeline_setup.suite_02_pipeline.cli.run_full_chain --reindex-repo-path <путь_к_репо> [--reindex-project-id ID] [--case-id ID ...]
|
||
```
|
||
|
||
Параметры — те же, что у `run_router_rag`. Дополнительно: `RUN_INTENT_PIPELINE_FULL_CHAIN=1` и настройки доступа к LLM (см. `.env` и `suite_02_pipeline/pipeline_intent_rag/.env.test`).
|
||
|
||
## Запуск через pytest
|
||
|
||
- Только intent router (без RAG/LLM):
|
||
`pytest tests/pipeline_setup/suite_02_pipeline/pipeline_intent_rag/test_intent_router_only_matrix.py -q`
|
||
|
||
- С RAG (нужны `RUN_INTENT_PIPELINE_ROUTER_RAG=1` и БД):
|
||
`RUN_INTENT_PIPELINE_ROUTER_RAG=1 pytest -m router_rag tests/pipeline_setup/suite_02_pipeline/pipeline_intent_rag/ -q`
|
||
|
||
- Полная цепочка (нужны `RUN_INTENT_PIPELINE_FULL_CHAIN=1`, БД и LLM):
|
||
`RUN_INTENT_PIPELINE_FULL_CHAIN=1 pytest -m full_chain tests/pipeline_setup/suite_02_pipeline/pipeline_intent_rag/ -q`
|
||
|
||
Подробнее — в `suite_02_pipeline/pipeline_intent_rag/README.md` и `suite_01_synthetic/code_qa_eval/README.md`.
|
||
|
||
## Окружение
|
||
|
||
- Загрузка env: сначала `suite_02_pipeline/pipeline_intent_rag/.env.test`, затем workspace `.env`.
|
||
- Для retrieval и full_chain нужны `DATABASE_URL` и (для full_chain) настройки LLM.
|