中文翻译暂不可用,显示俄语原文。
Реализовать component registry
ТЕХНИЧЕСКОЕ ЗАДАНИЕ: Реализовать component registry
1. Цель задачи
Создать реестр компонентов (component registry) для управления версиями промптов, инструментов и конфигураций AI-пайплайнов. Решение должно обеспечить централизованное хранение, версионирование и возможность отката к предыдущим версиям компонентов без простоя системы. Ключевой результат работоспособный registry, интегрированный с CI/CD, позволяющий откатить любой компонент к предыдущей версии командой git revert или API-запросом.
2. Исходные данные
| Что нужно | Откуда взять |
|---|---|
| Набор промптов (Python строки или .prompt файлы) | Предыдущий проект или сгенерировать 5-10 примеров |
| Инструменты (functions/tools для LLM) | Код Python с декораторами @tool |
| Конфигурации (YAML/JSON для RAG, LLM, ретриверов) | Примеры из документации |
| Git-репозиторий | GitHub/GitLab/Bitbucket (создать новый) |
| CI/CD пайплайн (опционально) | GitHub Actions / GitLab CI |
| БД для registry | SQLite / PostgreSQL / JSON-файлы |
Если нет реального проекта — симулируем:
- Создать новый Git-репозиторий
- Сгенерировать 5 версий промпта (например, изменения в системном сообщении)
- Создать 3 версии инструмента (разные реализации поиска)
- Создать 3 конфига (разные параметры top_k, model)
- Описать структуру registry в YAML/JSON
3. Технологический стек
| Компонент | Инструменты | Назначение |
|---|---|---|
| Система контроля версий | Git | Версионирование файлов компонентов |
| Хранилище метаданных | SQLite / JSON | Хранение registry записей |
| Backend API | FastAPI / Flask | REST API для registry |
| CLI | Python Click / Typer | Интерфейс командной строки |
| CI/CD | GitHub Actions | Автоматическая регистрация версий |
| Язык | Python | Реализация логики |
| Сериализация | YAML / Pydantic | Описание схем компонентов |
4. Этапы выполнения
Этап 1: Проектирование схемы registry (1 час)
Действия
# Пример записи для промпта
component:
id: prompt-sys-intent-1
type: prompt
name: system_intent_v1
version: 1.0.2
hash: sha256:abc123
content: "You are a helpful assistant..."
created_at: 2025-04-01T10:00:00Z
created_by: user1
tags: ["production", "v1.0"]
parent_version: 1.0.1
- Выбрать формат хранения registry: YAML-файл в репозитории (registry.yaml) или SQLite БД (registry.db)
- Описать API (CRUD):
Ожидаемый результат этапа Документ со схемой данных и API (OpenAPI spec или описание).
Этап 2: Реализация CLI и логики версионирования (2-3 часа)
Действия
- Реализовать функцию register(component_type, content, metadata)
- Вычислить хеш содержимого (SHA256)
- Создать или обновить запись в registry
- Автоматически инкрементировать версию (semver minor)
- Реализовать
list_versions(component_id)- Вернуть все версии с датами и хешами
- Реализовать rollback(component_id, target_version)
- Скопировать содержимое целевой версии как текущую
- Создать новую запись с обновлением parent
- Гарантировать, что откат сам версионируется
- CLI интерфейс (click):
@click.group()
def cli(): pass
@cli.command()
@click.option('--type', required=True)
@click.option('--file', required=True)
def register(type, file):
# чтение файла, регистрация
pass
@cli.command()
@click.argument('component_id')
def versions(component_id):
# вывод списка версий
pass
@cli.command()
@click.argument('component_id')
@click.argument('version')
def rollback(component_id, version):
# откат
pass
- Написать юнит-тесты для функций register, rollback, list_versions.
Ожидаемый результат этапа Рабочий CLI, который может регистрировать, просматривать и откатывать компоненты.
Этап 3: Интеграция с Git и CI/CD (2 часа)
Действия
- Добавить pre-commit hook (опционально):
- При коммите изменений в папке components/ автоматически вызывать
cli register - Или как часть CI: GitHub Action на push
- При коммите изменений в папке components/ автоматически вызывать
- Создать GitHub Action workflow
.github/workflows/registry.yml:
name: Component Registry
on:
push:
paths:
- 'components/**'
jobs:
register:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- run: pip install click pyyaml
- run: python -m cli register --type prompt --file components/prompts/system.yaml
- Добавить команду
validate— проверяет корректность структуры файла (Pydantic schema). - Реализовать автоматическую генерацию diff при pull request (comment с изменениями).
Ожидаемый результат этапа При каждом изменении компонента в репозитории автоматически регистрируется новая версия.
Этап 4: Реализация API (2 часа)
Действия
- Создать FastAPI приложение с эндпоинтами:
GET /api/v1/registry/{component_id}— последняя версияGET /api/v1/registry/{component_id}/versions— все версииPOST /api/v1/registry/{component_id}/rollback— откатPOST /api/v1/registry/register— регистрация
- Добавить аутентификацию (API key простой).
- Добавить swagger docs (встроено в FastAPI).
- Протестировать curl запросы.
Ожидаемый результат этапа Рабочее API, доступное для интеграции с пайплайнами.
Этап 5: Тестирование отката и документирование (1 час)
Действия
- Симулировать сценарий
- Зарегистрировать версию 1.0.0 промпта
- Обновить и зарегистрировать 1.0.1 (с ошибкой)
- Выполнить rollback to 1.0.0
- Проверить, что текущая версия содержит контент 1.0.0
- Проверить, что откат не удаляет историю — версия 1.0.1 остаётся доступной
- Написать README с инструкцией по использованию CLI и API.
- Добавить пример отката в README:
# После обнаружения проблемы
python registry_cli.py rollback prompt-main 1.0.0
# Результат: создана версия 1.0.2, содержимое совпадает с 1.0.0
Ожидаемый результат этапа Документация, тесты, подтверждённая возможность отката.
5. Критерии приемки (Definition of Done)
- Registry хранит историю изменений для каждого компонента (промпт, инструмент, конфиг)
- Возможность зарегистрировать новую версию через CLI одной командой
- Возможность откатить любой компонент к предыдущей любой версии
- Откат создаёт новую запись в истории (не перезаписывает)
- Интеграция с CI/CD — автоматическая регистрация при push изменений
- REST API с документацией (OpenAPI)
- Юнит-тесты покрывают не менее 80% функций регистрации и отката
- README с инструкцией по установке и использованию
- Возможность просмотреть diff между любыми двумя версиями (через git diff)
- Все компоненты имеют уникальный ID и валидную схему
6. Ожидаемый результат
Основной артефакт Git-репозиторий с кодом:
src/registry.py— логика registrysrc/cli.py— CLI интерфейсsrc/api.py— FastAPI приложениеcomponents/— примеры компонентовregistry.yamlилиregistry.db— файл registry.github/workflows/registry.yml— CI пайплайнtests/test_registry.py— юнит-тестыREADME.md— документация
Дополнительные результаты
- Возможность использовать registry в других пайплайнах (HTTP-вызовы)
- Демонстрация rollback на примере
7. Возможные сложности и их решение
| Сложность | Решение |
|---|---|
| Конфликты при одновременной регистрации (race condition) | Использовать блокировку файла (filelock) или транзакции SQLite |
| Откат к версии, которая зависит от другого компонента (зависимости) | Добавить в схему поле dependencies, при отказе проверять совместимость |
| Большой размер файла registry (тысячи версий) | Перейти на SQLite/PostgreSQL, добавить индексы |
| Чувствительные данные в промптах (API keys) | Не хранить секреты в plaintext, использовать переменные окружения + vault |
| Непреднамеренный откат (человеческая ошибка) | Добавить подтверждение (Y/n) перед rollback; вести лог аудита |
8. Бюджет времени (оценка)
| Этап | Время (часы) |
|---|---|
| Этап 1: Проектирование схемы | 1 |
| Этап 2: CLI и логика версионирования | 3 |
| Этап 3: Интеграция с Git и CI/CD | 2 |
| Этап 4: API | 2 |
| Этап 5: Тестирование и документация | 1 |
| Итого | 9 |
Примечание: Для первого выполнения задачи заложите 12 часов (непредвиденные сложности).
9. Связанные вопросы из базы знаний
| Вопрос | Тема |
|---|---|
| 15 | Что такое семантическое версионирование и как его применять к промптам? |
| 38 | Как организовать CI/CD для ML-пайплайнов? |
| 47 | Какие инструменты используются для управления версиями данных? |
| 102 | Как реализовать A/B тестирование промптов? |
| 145 | Что такое feature store и похож ли он на component registry? |
| 203 | Как безопасно хранить секреты в конфигах? |
| 310 | Какие метрики отслеживать при деградации качества промптов? |
| 412 | Как автоматически проверять корректность YAML/JSON конфигов? |
| 567 | Что такое GitOps и применимо ли оно к ML? |
| 701 | Как организовать мониторинг версий компонентов в production? |
10. Чек-лист самопроверки
- Я спроектировал схему registry с учётом типов (prompt, tool, config) и версий
- Я реализовал CLI с командами register, versions, rollback
- Я проверил, что после rollback содержимое файла соответствует целевой версии
- Я добавил CI/CD: при изменении в components/ регистрируется новая версия
- Я написал README с примерами использования и инструкцией по развёртыванию