4.4 KiB
4.4 KiB
Хардкод vs Конфігурація
🔴 ХАРДКОД (Hardcode) - Що це?
Хардкод = значення, які "зашиті" прямо в коді і не можуть змінюватись без редагування коду.
Приклад хардкоду
# ❌ ХАРДКОД - значення прямо в коді
local_model = "qwen3-8b" # Якщо треба змінити модель, треба редагувати код!
Проблеми хардкоду
- Треба редагувати код для зміни значення
- Не можна змінити без перезапуску сервісу
- Важко тестувати різні конфігурації
- Не гнучко - однаковий код для всіх середовищ (dev/prod)
✅ КОНФІГУРАЦІЯ (Config) - Що це?
Конфігурація = значення, які зберігаються окремо від коду (в файлах, змінних середовища, БД) і можуть змінюватись без редагування коду.
Приклад конфігурації
# ✅ КОНФІГ - значення в окремому файлі router-config.yml
llm_profiles:
qwen3_science_8b:
provider: ollama
model: qwen3:8b
max_tokens: 2048
# ✅ КОД читає з конфігу
llm_profile = router_config.get("llm_profiles", {}).get("qwen3_science_8b")
model = llm_profile.get("model") # Беремо з конфігу, не хардкодимо!
Переваги конфігурації
- Зміна без редагування коду - просто змінити YAML файл
- Різні конфіги для різних середовищ (dev/prod/staging)
- Легко тестувати - можна створити test-config.yml
- Гнучко - один код, багато конфігурацій
📊 ПОРІВНЯННЯ
| Аспект | Хардкод | Конфігурація |
|---|---|---|
| Де зберігається? | В коді | В окремих файлах |
| Як змінити? | Редагувати код | Редагувати конфіг |
| Потрібен рестарт? | Так (перекомпіляція) | Так (перезапуск) |
| Гнучкість | Низька | Висока |
| Тестування | Важко | Легко |
🔧 ЩО МИ ВИПРАВИЛИ?
БУЛО (хардкод)
# ❌ Хардкод - модель завжди "qwen3-8b"
local_model = "qwen3-8b"
СТАЛО (з конфігу)
# ✅ Читаємо з конфігу
if llm_profile.get("provider") == "ollama":
ollama_model = llm_profile.get("model", "qwen3:8b")
local_model = ollama_model.replace(":", "-") # qwen3:8b → qwen3-8b
Результат
- ✅ Модель береться з
router-config.yml - ✅ Якщо змінити конфіг → зміниться поведінка
- ✅ Не треба редагувати код для зміни моделі
- ✅ Різні агенти можуть мати різні локальні моделі
💡 КОЛИ ВИКОРИСТОВУВАТИ?
Хардкод - тільки для
- Константи (π = 3.14, версія API)
- Значення, які ніколи не зміняться
- Технічні деталі (timeout = 5.0 сек)
Конфігурація - для
- Моделі LLM
- API ключі
- URL сервісів
- Параметри (temperature, max_tokens)
- Налаштування агентів
📝 ПРИКЛАД З НАШОГО ПРОЄКТУ
router-config.yml (конфігурація)
agents:
helion:
default_llm: qwen3_science_8b # ← Можна змінити тут
llm_profiles:
qwen3_science_8b:
provider: ollama
model: qwen3:8b # ← Можна змінити модель тут
main.py (код)
# Читаємо з конфігу
default_llm = agent_config.get("default_llm", "qwen3-8b")
llm_profile = llm_profiles.get(default_llm, {})
model = llm_profile.get("model") # ← Беремо з конфігу!
Тепер можна змінити модель просто редагуванням YAML файлу! 🎉