Files
agent/tests/pipeline_setup/README.md
2026-03-12 16:55:23 +03:00

116 lines
6.3 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.
# Тесты пайплайна (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.