Галоўная / Артыкулы / Практычныя прытамулкі: Неякія затраты на API: Стварэнне локальной системы AI з колькама агентамі

Практычныя прытамулкі: Неякія затраты на API: Стварэнне локальной системы AI з колькама агентамі

Практычныя прыказкі: Не застосовуецца плата за API: стварэнне локальной системы AI з колькама агентамі за дапамою контрактов, перакрыцэнняў і шаблонаў коду для команд, якія выкарыстоўваюць гэты патэрн.

2862 слоў

Існавайце гэта як перапрацоўаны варыянт ідэй з артыкула “Без костаў API: стварэнне локальной мульті-агентскай системы AI з Gemma 4, Ollama і Google ADK” для аператараў: чыстыя этапы, аранжаваныя блакі коду і прыметкі па вяснаванню, якія застаюцца пасля перадачы. Этап “Апглэйв” найкраща працюе, калі яго розглядаць як вимерны элемент. Запісайце адна ідеальная транскрыпцыю, адзін прыклад неудачы і прыметкі па адвярнуццю перад расшырэнням масштаба. Запісвайце часы выканання і косты токенав або запытаў па боку функцыйнальных рэзультатаў. Відразлівае паказанне костаў запобегае неспадзяваным рахункам, калі працэс пераходзіць з дэманстрацыі ў спяльныя сераўеры.

Што мы ствараем

Для стадіі «Што мы будуем ствараць» неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння пры зміне коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы схованы стан. Конфігурацыю трэба залічыць пазначкай ад коду прыемліка. Файлы сераўнавання, храненні секрэтных данных і флагі функций должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаяўшы весь граф. Раздзеліце стварэнне кліента ад цыклу паведамленняў, каб можна было змяніць прадаўцоў без перапісвання машыны стану размовы.

Чаму Gemma 4 E4B?

Для стадіі Why Gemma 4 E4B неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтыяры завершэння пры зміне коду. Аперацыйныя працавнікі павінны магчымае перазапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Неабяжна задокументаваць як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкіе перакрыцця і обробка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней. Аддзельнае стварэнне кліента ад цыклу паведамленняў дазволяе змініць прадаўцаў без перапісвання машыны стану размовы.

gemma4:e4b
gemma4:e2b

Іспользуемая апаратура

Для стадіі, дзе выкарыстоўваецца апаратная частка, перад змінайом коду неабходна задаць вхідныя даны, адпаведальнага за крок і крэтары выходу. Аператары должны магчымае перайсці на выкананне кроку з вядомага пункта контролю, не спрабоўваючы здогадвацца пра схованы стан. Валічыце маленькія, тэставальныя елементы працэў над велікімі скрыптамі. Калі крок не выйшаў, прычына неудачы павінна вказываць на аднойчы адпаведальны элемент, а не на заплутаную схему выконання. Раздзеляйце стварэнне кліента ад цыклу перадачы паведамленняў, ўжо тады, калі можна будзе заменіць прадаўцоў, не перапісваючы машыну стана дыялогу. Для стадіі, дзе выкарыстоўваецца апаратная частка, перад змінайом коду неабходна задаць вхідныя даны, адпаведальнага за крок і крэтары выходу. Аператары должны магчымае перайсці на выкананне кроку з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Запісвайце час выконання, а таксу токеноў чы запытаў разам з функцыйнальнымі рэзультатамі. Відразлівасць вартасці з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмавайнага режыма ў спакульнае сераўерское сэрвіса.

Шаг 1: Установка Ollama

Калі вы працуеце над шагам 1 «Установка Ollama», спачатку запісайце неабяжлівыя элементы: трэбуемыя данны, сигнал успеху і тое, што выходзіць у разе частковага невыпання. Такі список дапамагае заліцварыць пазнейшыя змены ў кодзе. Зберагаюце настройкі паза кодам прыемніка. Файлы сераўнавання, храненнія секрэтных данных і флагі функцый крануцца на аднам месцы, якое аператары можаць пераглядаць без неабяжлівага чытання всей структуры. Запісвайце ID запытку, ID модэлю і час адпаведзення праз кожны вызов. Без такога лёгкага стэйта періодычныя кантракты падрыхтавальніка выглядаюць як багі ў прыемніку.

brew install ollama
brew update
brew upgrade ollama
ollama --version

Шаг 2: З’явіць Gemma 4

Калі вы працуеце над стадзіяй «Выкарыстоўваць Gemma», спачатку запісайце умовы: неабходныя даны, сігнал успеху і тое, што выканаецца у разе частковага невыпання. Такі список дапамагае заліцварыць будучыя змены ў кодзе. Документавайце як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкія перакрыцця та обробка некоректных паведамленняў є частью продукту, а не наступнымэтапам дорабкі. Зявляйце логі з ідэнтыфікаторам запиту, ідэнтыфікаторам моделі та часам адзначэння кожнага вызову. Без такога логу періодычныя кантракты падрыхтавальніка выглядаюць як багі ў самай аплікацыі.

ollama pull gemma4:e4b
ollama list
NAME            ID              SIZE
gemma4:e4b      ...             9.6 GB

Шаг 3: Апранаваць Gemma безпосередна

Калі працуеце над стадзіяй Step 3 Test Gemma, спачатку запісайце контракт: неабяжлівыя даны, сигнал успеху і тое, што выканаецца пад частковым нявыполненнем. Такі список пераканаецца, што пазнейшыя змены коду буду чыстымі. Воліце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына нявыполнення павінна вказваць на адзінную адпаведальнасць, а не на заплутаны ланцюг задач. Зявіце лог дадзеных про ідэнтыфікатор запиту, ідэнтыфікатор моделі і час адпаведзьбы за кожны вызов. Без такога логу эпізодыяныя канты праўайдера выглядаюць як багі ў самай прыемлівай. Калі працуеце над стадзіяй Step 3 Test Gemma, спачатку запісайце контракт: неабяжлівыя даны, сигнал успеху і тое, што выканаецца пад частковым нявыполненнем. Такі список пераканаецца, што пазнейшыя змены коду буду чыстымі. Запісвайце часы выканання і кост токена або запиту пад функцыональнымі рэзультатамі. Відразувая візуабільнасць костаў запобегае неспакойным рахункам, калі праця пераходзіць з дэмовай среды ў спакульнаныя сераўы.

ollama run gemma4:e4b
Create an outline for an article explaining AI agents to beginners.
/bye

Шаг 4: Пераканаце, чы рунуець Ollama

Пераканаце ў шагу 4, чы стадія працюе належным чынам, лепей усвядомляць як меркаваную величыну. Зберажце адна ідеальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваце масштаб. Храніце настройкі парадульна коду прыемлена. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць без неабходнасці чытання всей структуры. Зафіксавайце інтэрпретара і файл з блокірацыяй завісанасцей прымусова перш чым нарабляце цикл. Разніця межу лэптопам і средой CI ёсць найчыстае тыхое выключэнне для дамаў API.

http://127.0.0.1:11434
ollama serve
Error: listen tcp 127.0.0.1:11434: bind: address already in use
curl http://127.0.0.1:11434/api/tags
ollama ps

Шаг 5: Створыце проект ADK

Этап 5 «Стварэнне сцэны» працюе найкраща, калі яго розглядаюць як вимерную паверхню. Запісаўце адна «золатая» транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Дакументаваць трэба як шлях успеху, так і шлях вярнэння. Перапрыбуткі, людзкія контрольныя пункты і обработка некоректных паведамленняў є частью продукту, а не чымсь, што дадаецца пазней. Закрепіце інтэрпретара і файл з блокаванням залежнасцяў пры тым, як выучаеце цикл. Разніця межу лептопам і системай CI ёсьць найпасёлейшым таямным бракам у дэманстраціях API.

cd /Users/yourusername
mkdir bloggeragent
cd bloggeragent
touch requirements.txt .env .gitignore __init__.py agent.py
bloggeragent/
├── .env
├── .gitignore
├── __init__.py
├── agent.py
└── requirements.txt

Этап 6: Стварэнне віртуальной среды

Шаг 6 «Стварыць стадію» працуе найэфектывней, калі яго спрыяваць як меркаваную плошчу. Зберагачыце адны ідеальны прыклад роботы, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Валіце больш маленькія, тэставаныя елементы замест большых скрыптов. Калі шаг не выконваецца, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцужок задач. Зафіксавайце інтэрпретара і файл з правіламі залежнасцяў перад тым, як выучаць цикл. Разлік межу ноутбукам і системай CI ёсць найчастэйшым таямным абаранкам для дэмонстрацый API. Шаг 6 «Стварыць стадію» працуе найэфектывней, калі яго спрыяваць як меркаваную плошчу. Зберагачыце адны ідеальны прыклад роботы, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Запісвайце часы выконання і косты токенаў або запытак разам з функцыйнальнымі рэзултатамі. Відразувая візуабельнасць костаў запобегае неспакойным рахункам, калі процес пераходзіць з дэманстрацыі ў спяльныя среды.

python3 -m venv .venv
source .venv/bin/activate
(.venv)
which python
/Users/philipobiorah/bloggeragent/.venv/bin/python

Шаг 7: Установка Google ADK з падтрымкам локальных модэляў

У падчасе шагу 7 «Установка Google» неабходна з’явіць вхідныя даны, абавесця шагу і крэтыніяты для завершэння пры перадзмене коду. Аперацыйныя системы должны магчымаць перзапуск шагу з вядомай точкі контролю без неабясненняя схованага стану. Конфігурацыю трэба залічыць пазначанай ад коду прыкладнення. Файлы сераўніка, хранальнікі секрэтных дадзеных і флагі функцыяй должны знаходзіцца ў аднам месцы, якое аперацыйныя системы можаць пераглядаць без неабясненняя всіх элементаў системы. Трэба аддзеліць стварэнне кліента ад цыклу перадачы паведамленняў, каб было можна змяніць прадаўцоў без перапісвання машыны стану размовы.

google-adk[extensions]==2.2.0
python-dotenv
litellm>=1.84
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
ImportError: LiteLLM support requires:
pip install google-adk[extensions]
python -m pip install --upgrade "google-adk[extensions]==2.2.0"
python -m pip install --upgrade "litellm>=1.84"
python -c "from google.adk.models.lite_llm import LiteLlm; print('LiteLLM connection ready')"
LiteLLM connection ready

Шаг 8: Канфігурацыя локальнага з’ўязку з Ollama

Для 8-го крока «Настроўка этапу» неабходна пазначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння пры перадзеі коду. Аператары должны магчыма было перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Неабходна аддзеіснаваць дакументацыю як для стандартнага, так і для альтернатывнага падходу. Практыкі перапрыбутку, людзкія контрольны пункты і обработка некоректных паведамленняў є часткай продукту, а не елементамі пазнейшага доўнешчэння. Аддзеіснаваць разлік меж між стварэнням кляйента і цыклам паведамленняў, ўпэўніваючыся, што прадаўцы можна будзе заменіць без перапісву стану машыны дыялогу.

OLLAMA_API_BASE=http://127.0.0.1:11434
GOOGLE_API_KEY
.env
.venv/
__pycache__/
*.pyc

9-й крок: Настроўка пакета Python

Для крока 9 «Настроўка стадіі» неабходна прадзеяваць вхідныя даны, абярнучага крока і крэтарыі выходу пры змяне коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не падозрываючы схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выканаецца, прычына неудачы павінна вказываць на адну абяранасць, а не на заплутаны ланцюг задач. Раздзеляйце стварэнне кліента ад цыклу перадачы паведамленняў, каб было можна змяніць прадаючыхя без перапісвання машыны стану размовы. Для крока 9 «Настроўка стадіі» неабходна прадзеяваць вхідныя даны, абярнучага крока і крэтарыі выходу пры змяне коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не падозрываючы схованы стан. Запісвайце час выканання і кост токенаў або запытаў разам з функцыйнаімі рэзультатамі. Відразлівасць костаў з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмавай версіі ў спяльныя сераўы.

from . import agent

Шаг 10: Адаптаванне местнай модэлі Gemma

Калі працуеце над шагам 10 «Адаптаванне», спачатку запісайце умовы викорыстоўвання: неабходныя данні, сігнал успеху і тое, што выканаецца у разе частковага невыпалення. Такі список дапамагае залічваць змяны ў кодзе. Храніце настройкі парадульна ад коду прыемліка. Файлы сераўнавання, сховішчы секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куда аператары можуць пераглядаць іх без неабходнасці чытання всей структуры. Зявляйце логі з ідэнтыфікаторам запиту, ідэнтыфікаторам модэлі і часам адпаведзення на кожны вызов. Без такога логу періодычныя проблэмы прадастаўцоў выглядаюць як багі прыемліка.

import datetime
from dotenv import load_dotenv
from google.adk.agents import Agent, LoopAgent
from google.adk.models.lite_llm import LiteLlm
from google.adk.tools import agent_tool
load_dotenv()
MODEL = LiteLlm(
    model="ollama_chat/gemma4:e4b"
)
MODEL = LiteLlm(
    model="ollama_chat/gemma4:e2b"
)

Шаг 11: Стварэнне рабочага процесу з калькольнікамі

Калі працюеце над крокам 11 «Стварэнне сцэны», спачатку запісайце контракт: неабяжлівыя даннэ, сігнал успеху і тое, што выканаецца у разы частковага нявыпалення. Такі список пераконтроўкі дапамагае заліцьварыць пасляэтапныя змены коду. Документавайце як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкіе контралі і обработка некоректных паведамленняў ёсць часткай продукту, а не пасляэтапным дапрацоўкам. Зявляйце логі з ідэнтыфікаторам запиту, ідэнтыфікаторам моделі і часам затрымкі праз кожны вызов. Без такога следу періодычныя памылкі прадаўцоў выглядаюць як багі ў прыемніку.

Настроўка __init__.py

Калі працуеце над стадзіяю Configure init py, спачатку запісайце умовы вярбунка: неабяжлівыя данні, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список контроля дапамагае заліцьварыць пазнейшыя змены ў кодзе. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, нявыпанне павінна вказваць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Зявляйце логі з ідэнтыфікаторам запросу, ідэнтыфікаторам моделі і часам адліквідацыі кожнага запиту. Без такога следу періадычныя кантакты з прадастальнікам выглядаюць як багі ў самай прыемлівай. Калі працуеце над стадзіяю Configure init py, спачатку запісайце умовы вярбунка: неабяжлівыя данні, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список контроля дапамагае заліцьварыць пазнейшыя змены ў кодзе. Запісвайце часы выканання і кост токена або запиту разам з функцыональнымі рэзультатамі. Відразувая візуабельнасць костаў запобегае неспакойным рахункам, калі праця пераходзіць з дэмовых у спакульнаныя сераўысы.

from . import agent

Змяніце імпорты для локальнай Gemma

Метод «Змяніце імпорты для стэйджа» работае найкраща, калі яго розглядаць як вимерную плошчу. Запісаце адна ідеальная транскрыпцыя, адзін прыклад неудачы і прыметку паўранення перш чым расширваць масштаб. Зберагачыце настройкі за межамі коду аплікацыі. Файлы сераўнавання, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куда аператары можуць аудітаваць іх без неабяжнага чытання всіх дадзеных. Фіксавайце інтэрпретара і файл з блокірацыяю залежнасцей пры падготовцы ціклу. Разніця межаў лептапа і CI ёсць найчастэйшым таямным бягам для дэманстрацый API.

from google.adk.models.lite_llm import LiteLlm
import sys
from pathlib import Path
import datetime
from dotenv import load_dotenv
from google.adk.agents import Agent, LoopAgent
from google.adk.tools import agent_tool

Заменіце хоставаны модэль Gemini

Этап замены хоставанага Gemini працюе наяўней, калі яго спрыяваць як мерыемую паверхню. Зафіксавайце адна «золатая» транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Дакументавайце як успішны, так і вярнучыся шляхы развіцця. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам. Забезпечыце фіксацію інтэрпретара і файла з блокаванням залежнасцяў пры стварэнні циклу. Разлік межаў між ноутбукам і системай CI ёсць найпасёлейшым таямным бракам у дэманстраціях API.

MODEL = os.getenv("MODEL", "gemini-flash-latest")
MODEL = LiteLlm(
    model="ollama_chat/gemma4:e4b"
)
import datetime
from dotenv import load_dotenv
from google.adk.agents import Agent, LoopAgent
from google.adk.models.lite_llm import LiteLlm
from google.adk.tools import agent_toolload_dotenv()MODEL = LiteLlm(
    model="ollama_chat/gemma4:e4b"
)
model=MODEL

Што дэманструе гэты проект

Этап «Што практыкуе гэты проект» працюе наяўней, калі яго спрыяваць як мерыемую паверхню. Зафіксавайце адны ідеальны прымер роботы, адзін кейс неудачы і прыметкі па адвярненню роботы пры расшырэнні масштаба. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, неудача должна вказваць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Зафіксавайце версію інтэрпретара і файл з правамі на залежнасці пры вучэнні циклаў. Разлікі межаў лептапа і системы CI ёсць найчастэйшай прычыной таямнічых абрываў у дэманстрацыях API. Этап «Што практыкуе гэты проект» працюе наяўней, калі яго спрыяваць як мерыемую паверхню. Зафіксавайце адны ідеальны прымер роботы, адзін кейс неудачы і прыметкі па адвярненню роботы пры расшырэнні масштаба. Запісвайце часы виконання і косты токенаў або запытам да рэзультатаў функцыйнасці. Відразлівасць костаў з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэманстрацыі ў спяльныя сераўы.

Полная рэалізацыя проекту

У стадії повнайго впрынтавання проекта неабяцо пазначыць вхідныя даны, адпаведальнага за кожны крок і крэтырыя для завершэння працы перад зменым коду. Аперацыйныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Конфігурацыю трэба знаходзіць паза кодам прыемленае. Файлы сераўіснага сэрвісу, хранення секрэтных данных і флагі функцыйяў должны быць у аднам месца, якое працавнікі можуць пераглядаць, не чытаючы весь структуру. Трэба аддзеліць стварэнне кліента ад цыклу перадачы паведамленняў, каб можна было змяніць прадаўцоў без перапісвання машыны стану размовы.

git clone https://github.com/philipobiorah/bloggeragent.git
cd bloggeragent
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt

Заключэнне

У стадії Заключэння неабяжна практычна вызначыць інпуты, адпавядаючага за крок адпаведальнага, а таксама крэтыяры завершэння пры змены коду. Аперацыйныя працавнікі павінны магчымае перадзягаць крок з вядомай точкі контролю, не падозрываючы схованы стан. Неабяжна дакументаваць як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкіе контралі і обработка некоректных паведамленняў ёсцю часткая продукту, а не паслядніе дапрацоўкі. Аб’едначыць стварэнне кліента з цыклам паведамленняў, каб можна было змініць прадаўцаў без перапісвання машыны стану размовы.

Апавязанні

У стадії «Апавяранні» неабходна дэфініцыя вхідных даных, адміністратара крока і крэтэрыяў завершэння пры змены коду. Аперацыйныя працавнікі должны магчымае перадзеясць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшоў, прычына неудачы павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцоўкі задач. Раздзеляйце стварэнне кліента ад цыклу перадачы паведамленняў, каб было можна змяніць прадаўцаў без перапісвання машыны стану размовы. У стадії «Апавяранні» неабходна дэфініцыя вхідных даных, адміністратара крока і крэтэрыяў завершэння пры змены коду. Аперацыйныя працавнікі должны магчымае перадзеясць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісвайце час выконання і кост токеноў або запытаў разам з функцыйнаімі рэзультатамі. Відразлівасць костаў з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмовай среды ў спяльнаныя сераўеры.

Чэк-ліст аператыўнай роботы

Калі працуеце над стадзіяй чэк-ліста аператыўнай роботы, спачатку запісуйце угоду: неабходныя даны, сігнал успеху і тое, што выходзіць на падчасовай неудачы. Такі чэк-ліст дапамагае заставіць пазнейшыя змены коду быць чыстымі.

Спрыяйце цій стадзіі як угоды межа данымі і перакананымі выходамі. Дайце назвы артыфактам, задаць правіла пераканання успеху і адмовіцеся ад беззвучнага частковага завершэння.

Зявляйце логі з ідэнтыфікатарам запиту, ідэнтыфікатаром моделі і часам затрымкі праз кожны вызов. Без такога следу періодычныя памылкі прадастаўця выглядаюць як багі прыемленае.

Зберагаюце стан графа ў простам і типаваным формате. Вярнутыя структуры маскуюць, який вузел запісаў канкрэтны поле, і спакоююць працу пасля перарываў.

Калі бюджет дазволяе, дадзіце тэст на працясную працю, які перабірае критычны шлях у CI з фіксатрамі, а не з рэальнымі платнымі API.

Запісвайце адно часова шлях і шлях вярнення ў стан пачатковы. Практыкі перапрыбутку, людзкія контралеры і обработка некоректных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам.

Перш чым пераводзіць стак, заморозьце версіі, зафіксавайце ідеальны транскрыпт для критычнага шляху і паказвайце крокі для вярнення да пачатковага стану. У спільных средах неабходны ліміты частоты запытоў, пераказкі належнасці і чыстае апанаванне пры змяне секрэтных даных. Валіце надзейнасць працы над крэатіўнымі разовымі дамах.

Прыметкі для 4ecfd0db9610: не кладзіце ключы прадаўца ў репазітарый, задаце верхнюю межу токена на кожную сесію і зберагачыце транскрыпты празаўсёды з фікстурамі для ацэнкі, каб пасляднія замены модэлей заставаліся пораўнанымі.