Проектирование кода с учетом затрат: создание решения промышленного уровня
Расчетно-оптимизированный агентный кодинг: производственная система локальных LLM с маршрутизацией через LiteLLM, кэшированием промптов и конечными точками, совместимыми с OpenAI, что позволяет снизить расходы.
В этом руководстве показано, как пройти путь от сырья до рабочей системы для следующих целей: разработка экономичных агентных схем кодирования с созданием прокси локального LLM производственного уровня, архитектура многих агентов и безопасные инструменты с использованием Zoo Code, TensorX и DeepInfra. Основное внимание уделяется практическим шагам, четкой проверке и коду, который можно просто добавить в репозиторий без необходимости догадываться о намерениях автора.
Краткое резюме
Для краткого резюме необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Необходимо фиксировать время выполнения и стоимость токенов или запросов вместе с функциональными результатами. Отслеживание затрат на раннем этапе предотвращает неожиданные счета при переходе от демо-среды к общедоступным средам. При следующем шаге, связанном с кодом или вызовом инструмента, предпочтительнее использовать структурированные выводы с проверкой схемы вместо свободного текста.
1. Обзор архитектуры: шаблон локального прокси
Для раздела 1. Обзор архитектуры: шаблон локального прокси необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Конфигурацию следует хранить отдельно от кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь кодовый граф. При следующем шаге, представляющем собой код или вызов инструмента, следует отдавать предпочтение структурированным выводам с проверкой схемы перед свободным текстом.
Слой перевода протоколов
Для слоя перевода протоколов необходимо определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Необходимо задокументировать как успешный, так и восстановительный пути выполнения. Повторные попытки, проверки человеком и обработка неработоспособных сообщений являются частью продукта, а не этапом последующей доработки. При следующем шаге, представляющем собой код или вызов инструмента, следует отдавать предпочтение структурированным выводам с проверкой по схеме перед свободным текстом.
2. Основная конфигурация: подробный обзор litellm_config.yaml
Для уровня 2. Настройка: подробно изучите файл litellm_config.yaml, определите входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии.
Предпочитайте небольшие, тестируемые единицы кода вместо обширных скриптов. При сбое шага причина должна быть связана с конкретной функцией, а не с запутанной структурой всего процесса.
При следующем шаге, представляющем собой код или вызов инструмента, предпочитайте структурированные выходные данные с проверкой соответствия шаблону вместо свободного текста.
# litellm_config.yaml
litellm_settings:
drop_params: true
modify_params: true
model_list:
# =========================================================================
# WILDCARD CATCH-ALL ROUTES
# Allows on-the-fly usage of any model published by TensorX or DeepInfra
# Example: tensorx/qwen/qwen3.8-2.4t-a95b
# =========================================================================
- model_name: "tensorx/*"
litellm_params:
model: "openai/*"
api_base: https://api.tensorx.ai/v1
api_key: "PLACEHOLDER_TENSORX_KEY"
use_chat_completions_api: true
- model_name: "deepinfra/*"
litellm_params:
model: "openai/*"
api_base: https://api.deepinfra.com/v1/openai
api_key: "PLACEHOLDER_DEEPINFRA_KEY"
use_chat_completions_api: true
# =========================================================================
# TENSORX NAMED SHORT ALIASES
# =========================================================================
- model_name: kimi-k3
litellm_params:
model: openai/moonshotai/kimi-k3
api_base: https://api.tensorx.ai/v1
api_key: "PLACEHOLDER_TENSORX_KEY"
use_chat_completions_api: true
- model_name: glm-5.2
litellm_params:
model: openai/z-ai/glm-5.2
api_base: https://api.tensorx.ai/v1
api_key: "PLACEHOLDER_TENSORX_KEY"
use_chat_completions_api: true
- model_name: kimi-k2.7-code
litellm_params:
model: openai/moonshotai/kimi-k2.7-code
api_base: https://api.tensorx.ai/v1
api_key: "PLACEHOLDER_TENSORX_KEY"
use_chat_completions_api: true
- model_name: glm-5.1
litellm_params:
model: openai/z-ai/glm-5.1
api_base: https://api.tensorx.ai/v1
api_key: "PLACEHOLDER_TENSORX_KEY"
use_chat_completions_api: true
# =========================================================================
# DEEPINFRA NAMED SHORT ALIASES
# =========================================================================
- model_name: deepseek-v4-pro
litellm_params:
model: openai/deepseek-ai/DeepSeek-V4-Pro
api_base: https://api.deepinfra.com/v1/openai
api_key: "PLACEHOLDER_DEEPINFRA_KEY"
use_chat_completions_api: true
- model_name: qwen3-coder-480b
litellm_params:
model: openai/Qwen/Qwen3-Coder-480B-A35B-Instruct
api_base: https://api.deepinfra.com/v1/openai
api_key: "PLACEHOLDER_DEEPINFRA_KEY"
use_chat_completions_api: true
- model_name: qwen3.6-35b
litellm_params:
model: openai/Qwen/Qwen3.6-35B-A3B
api_base: https://api.deepinfra.com/v1/openai
api_key: "PLACEHOLDER_DEEPINFRA_KEY"
use_chat_completions_api: true
- model_name: glm-4.7-flash
litellm_params:
model: openai/zai-org/GLM-4.7-Flash
api_base: https://api.deepinfra.com/v1/openai
api_key: "PLACEHOLDER_DEEPINFRA_KEY"
use_chat_completions_api: true
- model_name: nemotron-3-ultra
litellm_params:
model: openai/nvidia/Nemotron-3-Ultra
api_base: https://api.deepinfra.com/v1/openai
api_key: "PLACEHOLDER_DEEPINFRA_KEY"
use_chat_completions_api: true
# =========================================================================
# PROXY AUTHENTICATION GATEWAY
# =========================================================================
general_settings:
master_key: "PLACEHOLDER_MASTER_KEY"
Критически важные механизмы настройки
Для критически важных механизмов конфигурации необходимо определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Рассматривайте этот этап как контракт между входными данными и проверенными результатами. Дайте названия результатам работы, определите критерии успеха и не допускайте безответственного частичного выполнения задачи. При следующем шаге, представляющем собой код или вызов инструмента, предпочитайте структурированные результаты с проверкой по шаблону вместо свободного текста. Для критически важных механизмов конфигурации необходимо определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, которое операторы могут проверять, не читая весь кодовый граф.
3. Моделирование угроз и безопасность с множественными уровнями защиты
При работе над разделом 3. Моделирование угроз и безопасность с множественными уровнями защиты сначала запишите условия работы: необходимые входные данные, сигнал успешного выполнения и действия при частичной неудаче. Такой список поможет сохранять честность при последующих изменениях кода. Документируйте одновременно успешный и восстановительный сценарии работы. Повторные попытки, проверки со стороны человека и обработка неработоспособных сообщений являются частью продукта, а не элементами последующей доработки. Храните в кэше стабильные инструкции системы и схемы инструментов. Пересылка одинаковых данных является распространенной причиной избыточных нагрузок.
Шаблон уязвимости Open Relay
При работе над шаблоном уязвимости The Open Relay сначала запишите условия работы: необходимые входные данные, сигнал успешного выполнения и последствия частичной неудачи. Такой список поможет сохранять честность при последующих изменениях кода. Предпочитайте небольшие, тестируемые модули вместо обширных скриптов. Если какой-то шаг не сработает, причина должна быть связана с конкретной функцией, а не с запутанной цепочкой операций. Храните в кэше стабильные инструкции системы и схемы инструментов. Повторная отправка одинакового преамбулы — частая причина избыточных затрат ресурсов.
Стандарт двухуровневой митигации
При работе над Стандартом двухуровневой митигации сначала запишите контракт: необходимые входные данные, сигнал о успехе и действия при частичной неудаче. Такой список помогает сохранять честность при последующих изменениях кода. Рассматривайте этот этап как контракт между входными данными и проверенными выходными данными. Дайте названия результатам обработки, определите критерии успеха и не допускайте беззвучного частичного выполнения задачи. Храните в кэше стабильные системные инструкции и схемы инструментов. Пересылка одинаковых преамбул является распространенной причиной износа ресурсов. При работе над Стандартом двухуровневой митигации сначала запишите контракт: необходимые входные данные, сигнал о успехе и действия при частичной неудаче. Такой список помогает сохранять честность при последующих изменениях кода. Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, которое операторы могут проверять, не читая весь код.
# Executable Proxy Invocation Command
LITELLM_USE_CHAT_COMPLETIONS_URL_FOR_ANTHROPIC_MESSAGES=true \
litellm --config ~/.claude/litellm_config.yaml \
--host 127.0.0.1 \
--port 4000
# Authentication Enforcement inside litellm_config.yaml
general_settings:
master_key: "sk-7i9UOL9jkji09löOIhM..."
Архитектура разделения секретов
Архитектура разделения секретов работает наилучшим образом, когда рассматривается как измеримая структура. Сначала необходимо зафиксировать один эталонный пример работы, один случай сбоя и записку о возврате к предыдущему состоянию перед расширением объёма работ. Необходимо документировать как успешный путь выполнения, так и путь восстановления. Повторные попытки, проверки человеком и обработка неработающих сообщений являются частью продукта, а не последующими доработками. Необходимо установить лимиты на количество токенов за один ход и за сессию. Инструменты агентов активно расширяют объём контекста; жесткие ограничения предотвращают появление неожиданных счетов при демонстрациях.
4. Инжиниринг затрат в многоагентных системах: оркестратор, разведчик и дешёвый программист
- Инженерия затрат в многоагентных системах: Orchestrator, Scout и Cheap Coder работают наилучшим образом, когда рассматриваются как измеримые элементы. Соберите один идеальный пример работы, один случай сбоя и записку о возврате к предыдущему состоянию перед расширением объема работ. Предпочитайте небольшие, тестируемые единицы кода вместо обширных скриптов. При сбое какого-либо шага причина должна быть связана с конкретной функцией, а не с запутанной цепочкой операций. Установите лимиты на количество токенов за ход и за сессию. Инструменты агентов активно расширяют объем контекста; жесткие ограничения предотвращают появление неожиданных счетов.
Проблема постепенного расширения контекста в агентных системах
Проблема расширения контекста агентами лучше всего решается, если рассматривать её как измеримую характеристику. Соберите один идеальный пример работы, один случай сбоя и запись о возврате к предыдущему состоянию перед расширением объёма работ. Рассматривайте этот этап как контракт между входными данными и проверенными результатами. Дайте названия всем элементам, определите критерии успеха и не соглашайтесь на молчаливое частичное выполнение задачи. Установите лимиты на количество токенов за ход и за сессию. Инструменты агентов активно расширяют контекст; жёсткие ограничения предотвращают появление неожиданных счетов. Проблема расширения контекста агентами лучше всего решается, если рассматривать её как измеримую характеристику. Соберите один идеальный пример работы, один случай сбоя и запись о возврате к предыдущему состоянию перед расширением объёма работ. Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, которое операторы могут проверять, не читая весь код.
Решение с использованием трёх агентов
Для решения с участием трех агентов необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Необходимо одновременно задокументировать успешный сценарий выполнения и сценарий восстановления. Повторные попытки, проверки человеком и обработка неработоспособных сообщений являются частью продукта, а не элементами последующей доработки. При следующем шаге, представляющем собой код или вызов инструмента, следует отдавать предпочтение структурированным выводам с проверкой по схеме перед свободным текстовым описанием.
Сравнение затрат в зависимости от контекста
Для сравнения затрат в контексте необходимо определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Лучше использовать небольшие, тестируемые единицы кода вместо обширных скриптов. При сбое шага он должен указывать на конкретную причину, а не на сложную структуру обработки данных. При следующем шаге, представляющем собой код или вызов инструмента, лучше использовать структурированные выходные данные с проверкой соответствия шаблону вместо свободного текста.
Декларации пользовательского режима (custom_modes.yaml)
Для настроек пользовательского режима (custom_modes.yaml) необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии.
Рассматривайте этот этап как контракт между входными данными и проверенными результатами. Дайте названия результатам работы, определите критерии успеха и не допускайте молчаливого частичного выполнения задачи.
При следующем шаге, представляющем собой код или вызов инструмента, предпочитайте структурированные результаты с проверкой по шаблону вместо свободного текста.
Для настроек пользовательского режима (custom_modes.yaml) необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии.
Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, доступном для аудита операторами.
customModes:
- slug: scout
name: 🔍 Scout
roleDefinition: >-
You are a reconnaissance specialist. The orchestrator cannot read files,
so you read them on its behalf and return the smallest set of facts it
needs to write a precise implementation brief: exact paths, exact symbol
locations, and only the excerpts that matter.
whenToUse: >-
Use as the first subtask whenever the orchestrator does not already know
the exact file paths and code shape involved. Always run a scout before
delegating implementation into a codebase area that has not been mapped.
groups:
- read
customInstructions: >-
WHY YOU EXIST: Your report is pasted into the orchestrator's context,
which runs on the most expensive model in this system. Raw file dumps
read there cost many times what they cost here. Your job is to convert
a lot of cheap reading into a little expensive context.
WHAT TO RETURN: Exact repo-relative paths with line numbers. The signature
or declaration of every symbol that matters. Only excerpts directly relevant
to the task. Maximum budget: ~40 lines of total quoted code across all files.
NEVER paste full files. NEVER suggest solutions or fixes—report facts only.
- slug: cheap-coder
name: 💸 Cheap Coder
roleDefinition: >-
You are a focused implementation worker. You receive a precise,
self-contained task brief from an orchestrator and apply the smallest
correct code change that satisfies it. You do not design architecture,
you do not explore the repository on your own, and you do not invent requirements.
whenToUse: >-
Use for delegated single-purpose implementation subtasks whose target files
and intent are already named in the brief. Do not use for investigation
or architectural design.
groups:
- read
- edit
- command
customInstructions: >-
SCOPE: Work only from the files and excerpts named in your task brief.
Do not search or browse the repository to build your own picture; the
orchestrator already paid for exploration and passed you the result.
If the brief is missing a file or fact, stop and report exactly what is
missing instead of hunting for it.
EDITS: Apply the minimal diff that satisfies the brief. Preserve surrounding
style, type annotations, and conventions. Run only the single verification
command specified in the brief. If verification fails twice, stop and report.
Собственные инструкции Orchestrator
При работе с собственными инструкциями Orchestrator сначала запишите условия работы: необходимые входные данные, сигнал успешного выполнения и действия при частичной неудаче. Такой чек-лист поможет сохранять честность при последующих изменениях кода. Документируйте одновременно успешный сценарий работы и сценарий восстановления. Повторные попытки, проверки со стороны человека и обработка неработоспособных сообщений являются частью продукта, а не элементами последующей доработки. Храните в кэше стабильные системные инструкции и схемы инструментов. Пересылка одинакового вступительного блока — распространенная причина избыточных затрат.
You cannot read files. Before delegating any implementation into code you have
not yet mapped, delegate a `scout` subtask first and use its report to write the
implementation brief.
Delegate implementation with new_task to `cheap-coder`, never to `code`. Every
brief must be self-contained—the worker cannot see this conversation. Include:
the exact file paths from the scout report, the excerpts the scout returned, the
precise change wanted, and the single verification command to run.
Never paste a scout report into a brief wholesale; pass only the part that
subtask needs.
After an implementation subtask reports success, do not accept its self-assessment.
Delegate a separate `scout` subtask to verify: have it confirm the changed files now
contain what was asked and report the verification command's output verbatim. Decide
on the scout's facts, not the implementer's summary.
Once the scout's verification confirms the change is correct, use
ask_followup_question to ask the user for permission to commit, and separately ask
for permission to push—approval of one is never approval of the other. If the user
approves committing, delegate to `cheap-coder` with a brief naming only the exact
relative paths of the files that actually changed to stage (never `git add .` or
`git add -A`) and the exact commit message to use: a single short line, imperative
mood, no `Co-Authored-By` trailer, no "Generated with" attribution line. Only include
a push step in that brief if the user separately approved pushing.
5. Экономика моделей и использование кэширования промптов
При работе над разделом «5. Экономика моделей и использование кэширования запросов» сначала запишите контракт: необходимые входные данные, сигнал успешного выполнения и действия при частичной неудаче. Такой чек-лист поможет сохранять честность при последующих изменениях кода. Предпочитайте небольшие, тестируемые единицы кода вместо обширных скриптов. Когда какой-то шаг терпит неудачу, она должна указывать на конкретную ответственность, а не на запутанную цепочку операций. Кэшируйте стабильные инструкции системы и схемы инструментов. Повторная отправка одинакового вводного текста — частая причина ресурсозатрат.
В центре внимания: qwen3.8-2.4t-a95b (TensorX)
При работе с моделью Model Spotlight: qwen3.8-2.4t-a95b (TensorX) сначала запишите условия использования: необходимые входные данные, сигнал о успешном выполнении и последствия частичной неудачи. Такой список поможет сохранять честность при последующих изменениях кода.
Рассматривайте этот этап как договор между входными данными и проверенными выходными результатами. Дайте названия создаваемым объектам, определите критерии успешности и не допускайте безупречного завершения работы только частично.
Храните в кэше стабильные системные инструкции и схемы инструментов. Пересылка одинаковых данных является распространенной причиной лишних ресурсов.
Механизм кэширования промптов
При изучении книги «The Mechanics of Prompt Caching» сначала запишите условия работы: необходимые входные данные, сигнал о успешном выполнении и последствия частичной неудачи. Такой список поможет избежать ошибок при последующих изменениях кода. Рядом с функциональными результатами записывайте время выполнения и стоимость токенов или запросов. Отслеживание затрат с самого начала предотвращает неожиданные расходы при переходе с демо-среды в общедоступные среды. Храните в кэше стабильные инструкции системы и схемы инструментов. Повторная отправка одинаковых данных — частая причина избыточных затрат.
Turn 1: [System Prompt + Tool Definitions + File Map] -> Written to Cache ($2.50 / 1M)
Turn 2: [System Prompt + Tool Definitions + File Map] -> CACHE HIT ($0.63 / 1M) -> 75% Savings
Turn 3: [System Prompt + Tool Definitions + File Map] -> CACHE HIT ($0.63 / 1M) -> 75% Savings
6. Телеметрия, конфиденциальность и аудит локальной обработки
При работе над разделом 6. Телеметрия, конфиденциальность и аудит локальной обработки сначала запишите контракт: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой чек-лист поможет сохранять честность при последующих изменениях кода. Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их аудитировать, не читая весь код. Храните в кэше стабильные инструкции системы и схемы инструментов. Пересылка одинаковых преамбул — частая причина износа ресурсов.
Результаты аудита
При работе с результатами аудита сначала запишите условия контракта: необходимые входные данные, сигнал успешного выполнения и действия при частичной неудаче. Такой чек-лист поможет сохранять честность при последующих изменениях кода. Документируйте одновременно успешный и восстановительный сценарии работы. Повторные попытки, проверки со стороны человека и обработка неработоспособных сообщений являются частью продукта, а не элементами последующей доработки. Храните в кэше стабильные инструкции системы и схемы инструментов. Пересылка одинаковых заголовков — распространенная причина избыточных нагрузок.
Усиление защиты телеметрии до минимума
При работе над усилением защиты телеметрии до минимума сначала запишите описание требований: необходимые входные данные, сигнал успешного выполнения и действия при частичной неудаче. Такой чек-лист поможет сохранять честность при последующих изменениях кода. Предпочитайте небольшие, проверяемые на тестах модули вместо обширных скриптов. Если какой-то шаг не сработает, причина должна быть связана с конкретной функцией, а не с запутанной цепочкой операций. Храните в кэше стабильные инструкции системы и схемы инструментов. Повторная отправка одинакового преамбула — частая причина износа ресурсов.
{
"telemetry.telemetryLevel": "off"
}
7. Пошаговое руководство по настройке в производственной среде
При работе с руководством «7. Пошаговое руководство по настройке производства» сначала запишите условия контракта: необходимые входные данные, сигнал успешного завершения и действия при частичной неудаче. Такой список поможет избежать ошибок при последующих изменениях кода. Рассматривайте этот этап как контракт между входными данными и проверенными выходными результатами. Укажите названия элементов, определите критерии успешности и не допускайте молчаливого частичного выполнения задачи. Храните в кэше стабильные инструкции системы и схемы инструментов. Пересылка одинаковых данных несколько раз — частая причина избыточных ресурсов.
Шаг 1: Инициализация среды
При выполнении шага 1: инициализация среды сначала запишите контракт: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой список поможет сохранять честность при последующих изменениях кода. Рядом с функциональными результатами записывайте время выполнения и стоимость токенов или запросов. Отображение затрат с самого начала предотвращает неожиданные расходы при переходе с демо-среды в общедоступные среды. Храните в кэше стабильные инструкции системы и схемы инструментов. Повторная отправка одинаковых данных — частая причина избыточных затрат.
# Start LiteLLM Proxy in foreground
alias claude-proxy='LITELLM_USE_CHAT_COMPLETIONS_URL_FOR_ANTHROPIC_MESSAGES=true litellm --config ~/.claude/litellm_config.yaml --host 127.0.0.1 --port 4000'
# Start LiteLLM Proxy in background with health check
cx-proxy-up() {
if ! ss -ltn | grep -q ":4000 "; then
echo "Starting LiteLLM Proxy on 127.0.0.1:4000..."
LITELLM_USE_CHAT_COMPLETIONS_URL_FOR_ANTHROPIC_MESSAGES=true \
nohup litellm --config ~/.claude/litellm_config.yaml --host 127.0.0.1 --port 4000 > /tmp/litellm-proxy.log 2>&1 &
# Wait for readiness endpoint
until curl -s http://127.0.0.1:4000/health/readiness | grep -q '"status":"healthy"'; do
sleep 0.5
done
echo "LiteLLM Proxy is online and healthy."
else
echo "LiteLLM Proxy is already running on port 4000."
fi
}
# CLI model catalog search tool
cx-find() {
python3 ~/.claude/cx-find.py "$@"
}
source ~/.bashrc
Шаг 2: инициализация прокси
При работе над шагом 2: инициализация прокси, сначала запишите контракт: необходимые входные данные, сигнал о успехе и то, что происходит при частичной неудаче. Такой список помогает сохранять честность при последующих изменениях кода. Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Храните в кэше стабильные инструкции системы и схемы инструментов. Пересылка одинаковых заголовков — распространенная причина ресурсозатрат.
cx-proxy-up
ss -ltnp | grep :4000
# Expected output: LISTEN 0 128 127.0.0.1:4000 ...
curl -s http://127.0.0.1:4000/health/readiness
# Expected output: {"status":"healthy","db":"Not connected"}
Шаг 3: Настройка профилей расширений кода Zoo
При работе над шагом 3: «Настройка профилей расширения Zoo Code», сначала запишите условия работы: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой чек-лист поможет сохранять честность при последующих изменениях кода. Задокументируйте одновременно успешный и восстановительный сценарии работы. Повторные попытки, проверки со стороны оператора и обработка некорректных сообщений являются частью продукта, а не элементами последующей доработки. Храните в кэше стабильные инструкции системы и схемы инструментов. Пересылка одинаковых заголовков — распространенная причина избыточных нагрузок.
Профили
При работе с профилями сначала запишите условия контракта: необходимые входные данные, сигнал успешного выполнения и действия при частичной неудаче. Такой чек-лист поможет сохранять честность при последующих изменениях кода. Предпочитайте небольшие, тестируемые единицы кода вместо обширных скриптов. Когда какой-то шаг не срабатывает, причина должна указывать на конкретную ответственность, а не на запутанную цепочку операций. Храните в кэше стабильные инструкции системы и схемы инструментов. Пересылка одинаковых данных является распространенной причиной избыточных ресурсов.
Шаг 4: Связи между режимами и профилями
При работе над шагом 4: Связывание режимов с профилями сначала запишите контракт: необходимые входные данные, сигнал о успехе и последствия частичной неудачи. Такой список помогает сохранять честность при последующих изменениях кода. Рассматривайте этот этап как контракт между входными данными и проверенными выходными данными. Дайте названия элементам, определите критерии успеха и не допускайте безответственного частичного выполнения задач. Храните в кэше стабильные системные инструкции и схемы инструментов. Пересылка одинаковых данных является распространенной причиной избыточных затрат. При работе над шагом 4: Связывание режимов с профилями сначала запишите контракт: необходимые входные данные, сигнал о успехе и последствия частичной неудачи. Такой список помогает сохранять честность при последующих изменениях кода. Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, которое операторы могут проверять, не читая весь код.
🪃 Orchestrator --> orchestrator profile
🔍 Scout --> worker profile
💸 Cheap Coder --> worker profile
Debug --> orchestrator profile
8. Руководство по проверке и устранению неполадок
- Руководство по проверке и устранению неполадок работает наилучшим образом, если рассматриваться как измеримая структура. Соберите один идеальный пример работы, один случай сбоя и запись о возврате к предыдущему состоянию перед расширением объема исследований. Задокументируйте одновременно успешный сценарий работы и сценарий восстановления. Повторные попытки, проверки человеком и обработка сообщений с ошибками являются неотъемлемой частью продукта, а не последующими доработками. Установите лимиты на количество токенов за один запрос и за сессию. Инструменты агентов активно расширяют объем контекста; жесткие ограничения предотвращают появление неожиданных счетов при демонстрациях.
Проверка активных моделей
Проверка активных моделей работает наилучшим образом, когда её рассматривают как измеримую поверхность. Соберите один идеальный пример работы, один случай сбоя и записку о возврате к предыдущему состоянию перед расширением объёма работ. Предпочитайте небольшие, тестируемые единицы кода вместо обширных скриптов. При сбое какого-либо шага причина должна быть связана с конкретной функцией, а не с запутанной цепочкой операций. Установите лимит токенов на один ход и на всю сессию. Инструменты агентов активно расширяют объём контекста; жесткие ограничения предотвращают появление неожиданных счетов.
curl -si http://localhost:4000/v1/messages \
-H "Authorization: Bearer YOUR_MASTER_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"kimi-k3","max_tokens":16,"messages":[{"role":"user","content":"hi"}]}' \
| grep -i x-litellm
Распространённые коды ошибок и способы их устранения
Работа с распространёнными кодами ошибок и способами их устранения наиболее эффективна, когда она рассматривается как измеримая структура. Соберите один эталонный пример работы, один случай сбоя и запись о возврате к предыдущему состоянию перед расширением объёма работ. Рассматривайте этот этап как контракт между входными данными и проверенными результатами. Дайте названия создаваемым элементам, определите критерии успешного выполнения и не соглашайтесь на молчаливое частичное завершение работы. Установите лимиты на количество операций за раз и за сессию. Инструменты агентов активно расширяют объём контекста; жесткие ограничения предотвращают появление неожиданных счетов.
Ошибка: HTTP 400 No connected db. / HTTP 500 Internal Server Error
Ошибка: HTTP 403 Key not allowed to access model
Ошибка: Safe Process Termination во время перезагрузки прокси
OLD_PID=$(ss -ltnp | grep ":4000" | grep -oE "pid=[0-9]+" | cut -d= -f2 | head -1)
if [ -n "$OLD_PID" ]; then
kill "$OLD_PID"
sleep 2
ss -ltn | grep -q ":4000" || echo "Port 4000 cleared successfully."
fi