# Техническая спецификация конфигурируемых параметров для шаблонов потоков
## Обзор
Эта спецификация описывает реализацию конфигурируемых параметров для шаблонов потоков в TrustGraph. Параметры позволяют пользователям настраивать параметры процессоров при запуске потока, предоставляя значения, которые заменяют заполнители параметров в определении шаблона потока.
Параметры работают путем подстановки переменных в шаблонах в параметрах процессоров, аналогично тому, как работают переменные `{id}` и `{class}`, но со значениями, предоставленными пользователем.
Интеграция поддерживает четыре основных сценария использования:
1.**Выбор модели**: Предоставление пользователям возможности выбора различных моделей LLM (например, `gemma3:8b`, `gpt-4`, `claude-3`) для процессоров.
2.**Конфигурация ресурсов**: Настройка параметров процессоров, таких как размеры пакетов, размеры партий и лимиты параллельности.
3.**Настройка поведения**: Изменение поведения процессоров с помощью параметров, таких как температура, максимальное количество токенов или пороги извлечения.
4.**Параметры, специфичные для среды**: Настройка конечных точек, ключей API или URL-адресов, специфичных для региона, для каждого развертывания.
## Цели
**Динамическая конфигурация процессоров**: Обеспечение возможности динамической конфигурации параметров процессоров путем подстановки параметров.
**Проверка параметров**: Предоставление проверки типов и валидации параметров при запуске потока.
**Значения по умолчанию**: Поддержка разумных значений по умолчанию, позволяя при этом переопределять их для продвинутых пользователей.
**Подстановка шаблонов**: Бесшовная замена заполнителей параметров в параметрах процессоров.
**Интеграция с пользовательским интерфейсом**: Обеспечение ввода параметров как через API, так и через пользовательский интерфейс.
**Безопасность типов**: Обеспечение соответствия типов параметров ожидаемым типам параметров процессора.
**Документация**: Самодокументированные схемы параметров в определениях шаблонов потоков.
**Обратная совместимость**: Поддержка обратной совместимости с существующими шаблонами потоков, которые не используют параметры.
## Предыстория
В шаблонах потоков в TrustGraph теперь поддерживаются параметры процессоров, которые могут содержать либо фиксированные значения, либо заполнители параметров. Это создает возможность для динамической настройки.
`order`: Порядок отображения параметров в формах (меньшие числа отображаются первыми)
`advanced` (необязательно): Булевский флаг, указывающий, является ли этот параметр расширенным (по умолчанию: false). Если установлено значение true, пользовательский интерфейс может скрывать этот параметр по умолчанию или помещать его в раздел "Расширенные"
`controlled-by` (необязательно): Имя другого параметра, который управляет значением этого параметра в простом режиме. Если указано, этот параметр наследует свое значение от управляющего параметра, если явно не переопределен
Этот подход позволяет:
Повторное использование определений типов параметров в нескольких шаблонах потоков
Централизованное управление и проверка типов параметров
Описания и порядок параметров, специфичные для потока
Улучшенный пользовательский интерфейс с описательными формами параметров
Последовательная проверка параметров во всех потоках
Легкое добавление новых стандартных типов параметров
Упрощенный пользовательский интерфейс с разделением на режимы "базовый/расширенный"
Наследование значений параметров для связанных настроек
#### Запрос запуска потока
API запуска потока принимает параметры, используя имена параметров, специфичные для потока:
Примечание: В этом примере, `llm-rag-model` явно не указан, но он унаследует значение "claude-3" из `llm-model` из-за его`controlled-by` связи. Аналогично, `chunk-overlap` может унаследовать вычисленное значение на основе `chunk-size`.
Система будет:
1. Извлекать метаданные параметров из определения схемы потока
2. Сопоставлять имена параметров потока с их определениями типов (например, `llm-model` → `llm-model` тип)
3. Разрешать отношения "контролируется" (например, `llm-rag-model` наследуется от `llm-model`)
Примечание: В этом примере `llm-rag-model` явно не указано, но оно наследует значение "claude-3" из `llm-model` из-за своей `controlled-by` связи. Аналогично, `chunk-overlap` может наследовать вычисленное значение на основе `chunk-size`.
Система будет:
1. Извлекать метаданные параметров из определения шаблона потока
2. Сопоставлять имена параметров потока с их определениями типов (например, `llm-model` → тип `llm-model`)
3. Разрешать зависимости (например, `llm-rag-model` наследует от `llm-model`)
1.**Загрузка схемы потока**: Загрузить определение схемы потока и извлечь метаданные параметров
2.**Извлечение метаданных**: Извлечь `type`, `description`, `order`, `advanced` и `controlled-by` для каждого параметра, определенного в разделе `parameters` схемы потока
3.**Поиск определения типа**: Для каждого параметра в схеме потока:
Получить определение типа параметра из хранилища схем/конфигураций, используя поле `type`
Определения типов хранятся с типом "parameter-type" в системе конфигураций
Каждое определение типа содержит схему параметра, значение по умолчанию и правила проверки
4.**Разрешение значения по умолчанию**:
Для каждого параметра, определенного в схеме потока:
Проверить, предоставлено ли пользователем значение для этого параметра
Если пользовательское значение не предоставлено, использовать значение `default` из определения типа параметра
Создать полную карту параметров, содержащую как предоставленные пользователем, так и значения по умолчанию
Для параметров с полем `controlled-by`, проверить, было ли предоставлено явное значение
Если явное значение не предоставлено, унаследовать значение от контролируемого параметра
Если контролируемый параметр также не имеет значения, использовать значение по умолчанию из определения типа
Проверить отсутствие циклических зависимостей в отношениях `controlled-by`
6.**Проверка**: Проверить полный набор параметров (предоставленные пользователем, значения по умолчанию и унаследованные) на соответствие определениям типов
7.**Хранение**: Сохранить полный разрешенный набор параметров с экземпляром потока для обеспечения возможности аудита
8.**Подстановка шаблонов**: Заменить заполнители параметров в параметрах процессоров разрешенными значениями
9.**Создание экземпляров процессоров**: Создать процессоры с подставленными параметрами
1.**Загрузка шаблона потока**: Загрузить определение шаблона потока и извлечь метаданные параметров
2.**Извлечение метаданных**: Извлечь `type`, `description`, `order`, `advanced` и `controlled-by` для каждого параметра, определенного в разделе `parameters` шаблона потока
3.**Поиск определения типа**: Для каждого параметра в шаблоне потока:
Получить определение типа параметра из хранилища схемы/конфигурации, используя поле `type`
Определения типов хранятся с типом "parameter-type" в системе конфигурации
Каждое определение типа содержит схему параметра, значение по умолчанию и правила проверки
4.**Разрешение значения по умолчанию**:
Для каждого параметра, определенного в шаблоне потока:
Проверить, предоставлено ли пользователем значение для этого параметра
Если значение не предоставлено пользователем, использовать значение `default` из определения типа параметра
Создать полную карту параметров, содержащую как предоставленные пользователем, так и значения по умолчанию
Для параметров с полем `controlled-by`, проверить, было ли предоставлено явное значение
Если явное значение не предоставлено, унаследовать значение от управляющего параметра
Если управляющий параметр также не имеет значения, использовать значение по умолчанию из определения типа
Убедиться в отсутствии циклических зависимостей в отношениях `controlled-by`
6.**Проверка**: Проверить полный набор параметров (предоставленные пользователем, значения по умолчанию и унаследованные) на соответствие определениям типов
7.**Хранение**: Сохранить полный набор разрешенных параметров с экземпляром потока для обеспечения возможности аудита
8.**Подстановка шаблонов**: Заменить заполнители параметров в параметрах процессоров разрешенными значениями
9.**Создание процессоров**: Создать процессоры с подставленными параметрами
Поле `controlled-by` обеспечивает наследование значений параметров, что особенно полезно для упрощения пользовательских интерфейсов, сохраняя при этом гибкость:
Параметр `llm-model` контролирует основную модель LLM
Параметр `llm-rag-model` имеет значение `"controlled-by": "llm-model"`
В простом режиме установка `llm-model` в "gpt-4" автоматически устанавливает `llm-rag-model` в "gpt-4"
В расширенном режиме пользователи могут переопределить `llm-rag-model` другим значением
**Правила разрешения**:
1. Если параметр имеет явно предоставленное значение, используйте это значение
2. Если нет явного значения и `controlled-by` установлено, используйте значение контролируемого параметра
3. Если контролируемый параметр не имеет значения, используйте значение по умолчанию из определения типа
4. Циклические зависимости в отношениях `controlled-by` приводят к ошибке проверки
**Поведение пользовательского интерфейса**:
В базовом/простом режиме: Параметры с`controlled-by` могут быть скрыты или показаны как доступные только для чтения со значением, полученным по наследству
В расширенном режиме: Все параметры отображаются и могут быть настроены индивидуально
При изменении контролируемого параметра зависимые параметры автоматически обновляются, если они не были явно переопределены
Обрабатывать отношения наследования `controlled-by`.
Возвращать полный набор параметров.
2.**Измененный метод `handle_start_flow`**
Вызывать `resolve_parameters` после загрузки схемы потока.
Использовать полный набор разрешенных параметров для подстановки в шаблоне.
Сохранять полный набор параметров (а не только предоставленные пользователем) вместе с потоком.
Проверять, что все необходимые параметры имеют значения.
3.**Получение типа параметра**
Определения типов параметров хранятся в конфигурации с типом "parameter-type".
Каждое определение типа содержит схему, значение по умолчанию и правила проверки.
Кэшировать часто используемые типы параметров для уменьшения количества обращений к конфигурации.
#### Интеграция с системой конфигурации
3.**Хранение объектов потока**
Когда поток добавляется в систему конфигурации компонентом потока в менеджере конфигурации, объект потока должен включать разрешенные значения параметров.
Менеджер конфигурации должен хранить как исходные параметры, предоставленные пользователем, так и разрешенные значения (с применением значений по умолчанию).
Объекты потока в системе конфигурации должны включать:
Команды CLI, которые запускают потоки, должны поддерживать параметры:
Принимать значения параметров через флаги командной строки или файлы конфигурации.
Проверять параметры на соответствие определениям схемы потока перед отправкой.
Поддерживать ввод файлов параметров (JSON/YAML) для сложных наборов параметров.
Команды CLI, которые отображают потоки, должны отображать информацию о параметрах:
Отображать значения параметров, использованные при запуске потока.
Отображать доступные параметры для схемы потока.
Отображать схемы проверки параметров и значения по умолчанию.
#### Интеграция с базовым классом процессора
5.**Поддержка ParameterSpec**
Базовые классы процессоров должны поддерживать подстановку параметров с помощью существующего механизма ParametersSpec.
Класс ParametersSpec (расположенный в том же модуле, что и ConsumerSpec и ProducerSpec) должен быть расширен, если это необходимо, для поддержки подстановки параметров в шаблонах.
Процессоры должны иметь возможность вызывать ParametersSpec для настройки своих параметров со значениями параметров, разрешенными во время запуска потока.
Реализация ParametersSpec должна:
Принимать конфигурации параметров, содержащие заполнители параметров (например, `{model}`, `{temperature}`).
Поддерживать подстановку параметров во время выполнения при создании экземпляра процессора.