|
| 1 | +# Configuration Guide |
| 2 | + |
| 3 | +Это руководство описывает систему конфигурации SGR Agent Core и способы настройки агентов для вашего проекта. |
| 4 | + |
| 5 | +## Иерархия |
| 6 | + |
| 7 | +Система конфигурации построена по принципу дополнения: |
| 8 | +Общие настройки из основного конфига переопределяют defaults, |
| 9 | +а специфичные из `agents` переопределяют необходимые параметры для каждого конкретного агента на уровне `AgentDefinition`. |
| 10 | + |
| 11 | +```mermaid |
| 12 | +graph TD |
| 13 | + FD[Framework Defaults] |
| 14 | + B[.env] |
| 15 | + C[config.yaml] |
| 16 | + A[any other definitions yaml] |
| 17 | + D[agents.yaml] |
| 18 | + E[GlobalConfig] |
| 19 | + G[Agent Config] |
| 20 | + I[AgentDefinition] |
| 21 | + J[Agent] |
| 22 | +
|
| 23 | + FD ----> E |
| 24 | + B ---> E |
| 25 | + C --> E |
| 26 | + D --> G |
| 27 | + A --> G |
| 28 | + E --> I |
| 29 | + G --> I |
| 30 | + I --> J |
| 31 | +
|
| 32 | + style E fill:#10B981 |
| 33 | + style G fill:#10B981 |
| 34 | + style I fill:#8B5CF6 |
| 35 | + style J fill:#8B5CF6 |
| 36 | +``` |
| 37 | + |
| 38 | +## GlobalConfig |
| 39 | + |
| 40 | +!!! Important "Важно: Единый инстанс GlobalConfig" |
| 41 | + Все вызовы `GlobalConfig()` возвращают один и тот же экземпляр. Это означает, что при создании нескольких объектов `GlobalConfig` вы получите ссылку на один и тот же объект в памяти. |
| 42 | + |
| 43 | + Единожды применённые изменения и загруженные конфигурации распространятся на всю программу. |
| 44 | + |
| 45 | +### Загрузка из переменных окружения (.env) |
| 46 | + |
| 47 | +`GlobalConfig` использует `pydantic-settings` для автоматической загрузки настроек из переменных окружения. Все переменные должны иметь префикс `SGR__` и использовать двойное подчёркивание `__` для вложенных параметров. |
| 48 | + |
| 49 | +```python |
| 50 | +from sgr_agent_core import GlobalConfig |
| 51 | + |
| 52 | +config = GlobalConfig() |
| 53 | +``` |
| 54 | +Пример можно найти в [`.env.example`](https://github.com/vamplabAI/sgr-agent-core/blob/main/.env.example). |
| 55 | + |
| 56 | +### Загрузка из YAML файла |
| 57 | + |
| 58 | +Для более структурированной конфигурации можно использовать YAML файлы: |
| 59 | + |
| 60 | +```python |
| 61 | +from sgr_agent_core import GlobalConfig |
| 62 | + |
| 63 | +# Загрузка из config.yaml |
| 64 | +config = GlobalConfig.from_yaml("config.yaml") |
| 65 | +``` |
| 66 | + |
| 67 | + |
| 68 | +Пример можно найти в [`config.yaml.example`](https://github.com/vamplabAI/sgr-agent-core/blob/main/config.yaml.example). |
| 69 | + |
| 70 | + |
| 71 | + |
| 72 | +### Переопределение параметров |
| 73 | + |
| 74 | +**Ключевая особенность:** `AgentDefinition` наследует все параметры из `GlobalConfig` и переопределяет только те, которые указаны явно. Это позволяет создавать минималистичные конфигурации, указывая только необходимые изменения. |
| 75 | + |
| 76 | +### Примеры конфигурации агентов |
| 77 | + |
| 78 | +Агенты определяются в файле `agents.yaml` или могут быть загружены программно: |
| 79 | + |
| 80 | +```python |
| 81 | +from sgr_agent_core import GlobalConfig |
| 82 | + |
| 83 | +config = GlobalConfig.from_yaml("config.yaml") |
| 84 | +config.definitions_from_yaml("agents.yaml") |
| 85 | +config.definitions_from_yaml("more_agents.yaml") |
| 86 | +``` |
| 87 | +!!!warning |
| 88 | + Метод `definitions_from_yaml` объединяет новые определения с существующими, перезаписывая агентов с одинаковыми именами |
| 89 | + |
| 90 | +#### Пример 1: Минимальная конфигурация |
| 91 | + |
| 92 | +Агент, который переопределяет только модель LLM и набор инструментов: |
| 93 | + |
| 94 | +```yaml |
| 95 | +agents: |
| 96 | + simple_agent: |
| 97 | + base_class: "SGRToolCallingAgent" |
| 98 | + |
| 99 | + # Переопределяем только модель |
| 100 | + llm: |
| 101 | + model: "gpt-4o-mini" |
| 102 | + |
| 103 | + # Указываем минимальный набор инструментов |
| 104 | + tools: |
| 105 | + - "WebSearchTool" |
| 106 | + - "FinalAnswerTool" |
| 107 | +``` |
| 108 | +
|
| 109 | +В этом примере агент `simple_agent` использует: |
| 110 | +- Все настройки LLM из `GlobalConfig`, кроме `model` |
| 111 | +- Все настройки поиска из `GlobalConfig` |
| 112 | +- Все настройки выполнения из `GlobalConfig` |
| 113 | +- Только два указанных инструмента |
| 114 | + |
| 115 | +#### Пример 2: Полная кастомизация |
| 116 | + |
| 117 | +Агент с полным переопределением параметров: |
| 118 | + |
| 119 | +```yaml |
| 120 | +agents: |
| 121 | + custom_research_agent: |
| 122 | + base_class: "sgr_agent_core.agents.sgr_agent.ResearchSGRAgent" |
| 123 | +
|
| 124 | + # Переопределяем LLM настройки |
| 125 | + llm: |
| 126 | + model: "gpt-4o" |
| 127 | + temperature: 0.3 |
| 128 | + max_tokens: 16000 |
| 129 | + # api_key и base_url наследуются из GlobalConfig |
| 130 | +
|
| 131 | + # Переопределяем настройки поиска |
| 132 | + search: |
| 133 | + max_results: 15 |
| 134 | + max_searches: 6 |
| 135 | + content_limit: 2000 |
| 136 | +
|
| 137 | + # Переопределяем настройки выполнения |
| 138 | + execution: |
| 139 | + max_iterations: 15 |
| 140 | + max_clarifications: 5 |
| 141 | + max_searches: 6 |
| 142 | + logs_dir: "logs/custom_agent" |
| 143 | + reports_dir: "reports/custom_agent" |
| 144 | +
|
| 145 | + # Полный набор инструментов |
| 146 | + tools: |
| 147 | + - "WebSearchTool" |
| 148 | + - "ExtractPageContentTool" |
| 149 | + - "CreateReportTool" |
| 150 | + - "ClarificationTool" |
| 151 | + - "GeneratePlanTool" |
| 152 | + - "AdaptPlanTool" |
| 153 | + - "FinalAnswerTool" |
| 154 | +``` |
| 155 | + |
| 156 | +#### Пример 3: Оптимизированный для скорости |
| 157 | + |
| 158 | +Агент с настройками для быстрого выполнения: |
| 159 | + |
| 160 | +```yaml |
| 161 | +agents: |
| 162 | + fast_research_agent: |
| 163 | + base_class: "SGRToolCallingAgent" |
| 164 | +
|
| 165 | + llm: |
| 166 | + model: "gpt-4o-mini" |
| 167 | + temperature: 0.1 # Более детерминированные ответы |
| 168 | + max_tokens: 4000 # Меньше токенов для быстрого ответа |
| 169 | +
|
| 170 | + execution: |
| 171 | + max_iterations: 8 # Меньше итераций |
| 172 | + max_clarifications: 2 |
| 173 | + max_searches: 3 |
| 174 | +
|
| 175 | + tools: |
| 176 | + - "WebSearchTool" |
| 177 | + - "CreateReportTool" |
| 178 | + - "FinalAnswerTool" |
| 179 | + - "ReasoningTool" |
| 180 | +``` |
| 181 | + |
| 182 | +#### Пример 4: С кастомными промптами |
| 183 | + |
| 184 | +Агент с переопределением системных промптов: |
| 185 | + |
| 186 | +```yaml |
| 187 | +agents: |
| 188 | + technical_analyst: |
| 189 | + base_class: "SGRAgent" |
| 190 | +
|
| 191 | + llm: |
| 192 | + model: "gpt-4o" |
| 193 | + temperature: 0.2 |
| 194 | +
|
| 195 | + # Переопределяем промпты |
| 196 | + prompts: |
| 197 | + system_prompt_str: | |
| 198 | + You are a highly specialized technical analyst. |
| 199 | + Your expertise includes deep technical analysis and |
| 200 | + detailed research documentation. |
| 201 | +
|
| 202 | + execution: |
| 203 | + max_iterations: 20 |
| 204 | + max_searches: 8 |
| 205 | +
|
| 206 | + tools: |
| 207 | + - "WebSearchTool" |
| 208 | + - "ExtractPageContentTool" |
| 209 | + - "CreateReportTool" |
| 210 | + - "ClarificationTool" |
| 211 | + - "FinalAnswerTool" |
| 212 | +``` |
| 213 | + |
| 214 | + |
| 215 | +## Рекомендации |
| 216 | + |
| 217 | +- **Храните секреты в .env** - не коммитьте чувствительные ключи в репозиторий =) |
| 218 | + |
| 219 | + В production окружении рекомендуется использовать ENV переменные вместо хардкода ключей в YAML |
| 220 | + |
| 221 | +- **Используйте минимальные переопределения** - указывайте только то, что отличается от GlobalConfig |
| 222 | +- **Храните Definitions, a не Agents** - Агенты создаются под непосредственное выполнение задачи, |
| 223 | +их definitions можно добавлять/удалять/изменять в любое время |
0 commit comments