118 lines
3.2 KiB
Markdown
118 lines
3.2 KiB
Markdown
# Cách chạy test và evaluation
|
|
|
|
## Phân loại
|
|
|
|
**Loại tài liệu:** How-to.
|
|
|
|
**Reader job:** kiểm tra một thay đổi bằng các suite phù hợp và lưu bằng chứng
|
|
không nói quá phạm vi test.
|
|
|
|
## Điều kiện tiên quyết
|
|
|
|
- Python 3.12 khuyến nghị.
|
|
- Dependencies của `apps/ai-service` và `ingestion` đã cài.
|
|
- Node 20, pnpm 9 cho web.
|
|
- Không cần AWS cho unit test mặc định.
|
|
|
|
## Bước 1 — Chạy AI-service checks
|
|
|
|
```powershell
|
|
Set-Location apps/ai-service
|
|
ruff check .
|
|
python -m pytest tests -q
|
|
```
|
|
|
|
`tests/conftest.py` mặc định đặt `EMBEDDING_PROVIDER=disabled` trước collection,
|
|
nên unit suite không cần Qdrant. `test_live_datastores.py` tự skip trừ khi bật
|
|
integration.
|
|
|
|
## Bước 2 — Chạy ingestion suite
|
|
|
|
```powershell
|
|
Set-Location ../../ingestion
|
|
python -m pytest tests -q
|
|
```
|
|
|
|
Suite này kiểm tra extraction, segmentation, chunking, validation, provider
|
|
adapters và loader bằng doubles/in-memory store; nó không gọi Bedrock thật.
|
|
|
|
## Bước 3 — Chạy web checks
|
|
|
|
```powershell
|
|
Set-Location ..
|
|
pnpm --filter @duoc-thu/web lint
|
|
pnpm --filter @duoc-thu/web build
|
|
```
|
|
|
|
Hiện chưa có frontend test runner. Lint/build xanh không chứng minh request
|
|
timeout, citation grouping, middleware rate limit hoặc state UI không regression.
|
|
|
|
## Bước 4 — Chạy integration datastore khi cần
|
|
|
|
Khởi động PostgreSQL và Qdrant trước, rồi:
|
|
|
|
```powershell
|
|
Set-Location apps/ai-service
|
|
$env:RUN_INTEGRATION='1'
|
|
python -m pytest tests/test_live_datastores.py -q
|
|
Remove-Item Env:RUN_INTEGRATION
|
|
```
|
|
|
|
Ghi rõ integration environment và version Qdrant/PostgreSQL trong test record.
|
|
|
|
## Bước 5 — Chạy production/manual battery
|
|
|
|
Battery gọi endpoint thật và có thể phát sinh Bedrock cost:
|
|
|
|
```powershell
|
|
Set-Location apps/ai-service
|
|
python scripts/run_manual_battery.py `
|
|
--base-url http://localhost:3000 `
|
|
--target web `
|
|
--output output/manual-battery.jsonl
|
|
```
|
|
|
|
Script là HTTP recorder với invariant checks, không phải LLM judge. Review các
|
|
failure và đối chiếu citation với PDF. Không ghi đè record cũ; tên output nên có
|
|
timestamp/commit SHA.
|
|
|
|
Để thử một subset, dùng `--start`, `--limit` hoặc `--ids` theo `--help`.
|
|
|
|
## Bước 6 — Ghi kết quả đúng phạm vi
|
|
|
|
Một test record tối thiểu gồm:
|
|
|
|
```text
|
|
commit SHA
|
|
ngày/giờ
|
|
command
|
|
environment/provider mode
|
|
passed / failed / skipped
|
|
evaluation cases đã chạy
|
|
artifact output
|
|
known exclusions
|
|
```
|
|
|
|
Không cộng `skipped` vào `passed`. Không dùng unit suite để tuyên bố chất lượng
|
|
lâm sàng hoặc live provider reliability.
|
|
|
|
## Verify
|
|
|
|
- AI-service ruff và pytest pass.
|
|
- Ingestion pytest pass.
|
|
- Web lint/build pass.
|
|
- Integration/manual result được ghi riêng nếu đã chạy.
|
|
- Không có cloud call ngoài ý muốn.
|
|
|
|
## CI hiện tại
|
|
|
|
`.github/workflows/ci.yml` chạy AI-service ruff/pytest, ingestion pytest và web
|
|
lint/build trên push và pull request. `deploy.yml` vẫn trigger độc lập; CI đỏ
|
|
không tự động chặn production deploy ở cấp workflow.
|
|
|
|
## Liên quan
|
|
|
|
- [Testing reference](../18-testing.md)
|
|
- [RAG evaluation](../19-rag-evaluation.md)
|
|
- [CI/CD](../22-ci-cd.md)
|