tuning.ru.md
docs/i18n/tuning.ru.md
Справочник настройки — переменные окружения
<!-- translations:start -->
English · 한국어 · 中文 · 日本語 · Русский · Español · Français · Deutsch
<!-- translations:end -->
Все переменные, которые Tesserae читает из окружения, их значения по умолчанию и когда их действительно стоит менять. Здесь ничего не требуется: значения по умолчанию выбраны так, чтобы обычная команда tesserae compile работала корректно.
Конфигурация проекта и глобальная конфигурация (.tesserae/config.json, ~/.tesserae/config.json) имеют приоритет для параметров LLM-бэкэнда; переменные окружения ниже переопределяют обе конфигурации в текущем запуске.
Хуки, которые тратят деньги
Плагин Claude Code поставляется с хуками, которые могут запустить компиляцию в фоне. Всё, что тратит деньги, отключено по умолчанию:
export TESSERAE_HOOK_AUTOCOMPILE=1 # явно согласиться на автоматические перекомпиляции
Ограничены: posttooluse-edit.sh (срабатывает на каждом Edit/Write) и session-end.sh. Не ограничены, потому что стоят ничего: session-start.sh запускает tesserae code sync, что детерминировано, и pretooluse-compile.sh только перехватывает tesserae compile, который вы сами напечатали.
Это значение по умолчанию существует, потому что альтернатива была измерена. База знаний в ~/.tesserae делает $HOME похожей на корень проекта, и резолвер хука шёл вверх от рабочей директории к первому найденному .tesserae/ — поэтому любой сеанс вне зарегистрированного проекта разрешался в $HOME и компилировал всю домашнюю директорию: 15k файлов, граф 795 MB, ~10 часов расходов LLM, из отделённого процесса, пережившего сеанс, который его запустил.
resolve_project_root() теперь отказывает $HOME по обоим путям, и возвращает пусто вместо отката к рабочей директории, поэтому вызывающие коды ничего не делают вместо угадывания. Хук, который запускает работу модели в фоне, должен быть включен явно, не отключен после того, как придёт счёт.
Извлечение
TESSERAE_EXTRACT_TIMEOUT
По умолчанию 1800 (секунды), за попытку. Ограничивает каждый вызов codex/claude-извлечения, чтобы зависший дочерний процесс не мог зависить compile.
Это реально случилось: compile наблюдался на 0% CPU в течение 5 h 43 m с codex exec дочерним процессом, простоявшим 4 h 6 m, постоянно удерживающим .tesserae/compile.lock. Он уже построил 32 краткие описания сообществ в памяти и никогда не получилось их сохранить.
За попытку, не за документ — при timeout клиент переходит к следующей директории CODEX_HOME / claude, поэтому в худшем случае для одного документа это timeout × количество настроенных профилей.
export TESSERAE_EXTRACT_TIMEOUT=3600 # больше времени для очень больших документов
export TESSERAE_EXTRACT_TIMEOUT=0 # без ограничений — работать до завершения
Значение, которое задано но не валидно (10m, 600s, отрицательное, inf), выведет предупреждение в stderr и сохранит значение по умолчанию. Опечатка не должна бесшумно отключать предохранитель безопасности.
TESSERAE_EXTRACT_CONCURRENCY
По умолчанию 4. Документы, извлекаемые параллельно. Каждый — это блокирующий дочерний процесс CLI, требующий примерно минуту, поэтому последовательный цикл делает реальное время ровно суммой всех времён моделей — измерено как ~2 h 40 m для 161 документа.
Верхний предел — это limit скорости аккаунта провайдера, а не вашей машины, поэтому значение по умолчанию консервативно. Установите 1 для строго последовательного поведения.
Параллелизм никогда не меняет результат: список работ зафиксирован в порядке пути, результаты собираются по индексу, поэтому параллельный запуск идентичен последовательному в каждом байте.
TESSERAE_LLM_CACHE
По умолчанию включено. Кэш с адресацией по содержимому ответов CLI-провайдера в ~/.tesserae/llm_cache, индексированный по (документ, вид, рекомендация) плюс модель и уровень рассуждений — поэтому при смене модели система переспросит вместо использования ответов предыдущей модели. Сохраняются только распарсиваемые ответы, поэтому одна ошибка генерации не может стать постоянной.
export TESSERAE_LLM_CACHE=0 # всегда переспрашивать
TESSERAE_LLM_CHUNK_CHARS
Количество символов на фрагмент, когда документ слишком большой для одного вызова. Оставьте неустановленным, если вы не упираетесь в limit контекста.
LLM бэкэнд
| Переменная | По умолчанию | Примечания |
|---|---|---|
TESSERAE_LLM_PROVIDER | claude | codex, claude, anthropic, custom |
TESSERAE_LLM_MODEL | зависит от провайдера | Ограничено провайдером, чтобы claude-совместимая модель никогда не попала на codex путь |
TESSERAE_CODEX_REASONING_EFFORT | medium | Структурированное извлечение не требует xhigh, который вы можете установить для интерактивной работы — xhigh делает multi-document compile в несколько раз медленнее |
tesserae config status выводит полученный бэкэнд и проверяет его доступность.
Проходы компиляции
| Переменная | По умолчанию | Что контролирует |
|---|---|---|
TESSERAE_COMMUNITY_SUMMARIES | включено | Проход краткого описания в стиле GraphRAG. Один вызов LLM на кластер ≥ 5 членов, кэшировано по дайджесту членства. Отключается через false/0/no/off |
TESSERAE_ENABLE_LLM_PASSES | выключено | Опциональные проходы обогащения LLM сверх извлечения |
TESSERAE_AGENT_DISTILL | выключено | Артефакты L1 знаний на агента (tesserae distill) |
TESSERAE_RUNBOOK_DISTILLATION | выключено | Узлы дистиллированной памяти Runbook/Gotcha |
TESSERAE_INSIGHT_SYMBOL_LINK | включено | Связывает insights сеанса с символами кода |
TESSERAE_SUPERSEDE_PASS | включено | Рёбра superseded_by между исправленными утверждениями |
TESSERAE_PROMPT_SIGNATURES | выключено | Записывает подписи промптов для обнаружения дрейфа |
TESSERAE_COMPILE_LOCK_WAIT | — | Секунды ожидания .tesserae/compile.lock перед отказом |
О резюме сообществ: проход компиляции нетерпеливо охватывает самый грубый уровень; graph_map дополнительно лениво материализует резюме при первом спуске в холодную область, кэшируемое за уровень. Отключение прохода — это законная стратегия экономии — вы платите только за ветви, которые действительно посещаете — но есть одно предостережение: федеративный спуск никогда не материализует лениво. Карточки соседнего проекта могут быть названы только из его резюме в графе или уже горячих кэшей, поэтому проект, по которому вы навигируете кросс-проектно, хочет включённый нетерпеливый проход.
Запрос и синтез
| Переменная | По умолчанию | Примечания |
|---|---|---|
TESSERAE_QUERY_LLM | выключено | LLM-планировщик для tesserae query |
TESSERAE_QUERY_DRY_RUN | выключено | План без вызова модели |
TESSERAE_SYNTHESIS_LLM | выключено | Синтез текста в tesserae ask |
TESSERAE_SYNTHESIS_MODEL | — | Переопределяет модель синтеза |
TESSERAE_SYNTHESIS_WORKERS | — | Рабочие потоки параллельного синтеза |
TESSERAE_SYNTHESIS_DRY_RUN | выключено | Пропустить модель, выполнить конвейер |
Пути и инфраструктура
| Переменная | По умолчанию | Примечания |
|---|---|---|
TESSERAE_REGISTRY | ~/.tesserae/registry.json | Расположение реестра проектов |
TESSERAE_DISCOVERY_CACHE | — | Кэш обнаружения сеансов |
TESSERAE_ARXIV_CACHE | — | Кэш метаданных arXiv |
TESSERAE_NO_FEDERATION_CACHE | выключено | Отключает LRU федеративного графа |
TESSERAE_INCLUDE_COMBINED_GRAPH | выключено | Выводит объединённый кросс-проектный граф |
TESSERAE_FLEET_PIDFILE | — | Pidfile парка движков |
TESSERAE_CLIP_TOKEN | — | Общий секрет для веб-ножниц |
TESSERAE_SCHEMA_DRIFT_APPLY | выключено | Применяет предложения по дрейфу схемы (tesserae lab) |
Восстановление деградировавшего корпуса
Когда извлечение документа не удаётся, он обслуживается детерминированным исходным вариантом и помечается в .tesserae/manifest.json. Без пометки его невозможно отличить от чистого извлечения, поэтому --changed-only будет его пропускать вечно и деградация будет постоянной, пока содержимое файла не изменится.
tesserae compile --changed-only --retry-fallbacks
Повторно обрабатывает только помеченные документы; чистые остаются пропущены.
Проверка иерархии
tesserae graph-map # корневая карта
tesserae graph-map --scope <scope_id> # спуск
tesserae graph-map --scope '<alias>::' # соседний зарегистрированный проект
Каждая карточка сообщает size и leaf_member_count из служебного файла иерархии, плюс live_member_count — сколько членов текущий граф действительно содержит. Если там 0, это означает, что область мертва (рассинхрон служебного файла/графа): пропустите её вместо спуска.
Агенты пишут в граф
\graph_write\ (MCP) принимает проверенные по схеме типизированные узлы и рёбра с обязательной провенансой, поэтому агент записывает находку как структуру, а не как прозу, которую экстрактор должен угадывать типы.
Отказывает, а не принуждает: нетипизированные рёбра, типы узлов или рёбер вне контролируемого словаря, свободные концы и записи без провенанса отклоняются. Дублированные записи идемпотентны. Узлы, написанные агентом, выживают при полной перекомпиляции, удалённом \graph.json\, \--limit\ и полном удалении корпуса.
Проверка утверждения относительно графа
\verify_claim\ (MCP) отвечает, лицензирует ли граф тройку. Принимает \(subject, predicate, object)\ — нет параметра на естественном языке, по замыслу, потому что парсер заставил предыдущую версию ответить SUPPORTED на отрицание утверждения, которое она поддерживала.
Вердикт — чистая функция графовых байтов: нет LLM, нет встраивания, нет нечёткого совпадения где-либо на пути принятия решения.
| Вердикт | Значение |
|---|---|
\SUPPORTED\ | рёбро существует, содержит собственные доказательства, и этот текст переоснован на исходный файл |
\PRESENT_UNEVIDENCED\ | рёбро существует, но ничего на основе документа не поддерживает его |
\CONTRADICTED\ | подтверждённое документом \contradicts_claim\ между теми же двумя концами |
\DISPUTED_UNEVIDENCED\ | утверждаемое несогласие, ничего не подтверждено |
\CONFLICTING\ | обе полярности подтверждены документом — инструмент отказывается решать |
\ABSENT\ | этот граф не утверждает тройку. Не опровержение |
\NOT_RESOLVABLE\ | конечная точка или предикат не может быть точно разрешена |
Есть две вещи, которые он намеренно не делает. Он никогда не рассматривает \supersedes\ как опровержение — эта связь говорит, что узел был заменён, а не что тройка ложна. И запись агента может только ослабить класс провенанса, никогда не обновить, поэтому ничто, что агент утверждает, не может представляться как документно-обоснованное.
Стоит знать при чтении результатов: на реальном графе с 15 284 рёбрами около 40% вердиктов \SUPPORTED\ тавтологичны — рёбра \evidenced_by\, цитируемый диапазон которых является собственной целью ребра. Верно, но не информативно.
Маршрутизация вопроса
\tesserae ask\ выбирает путь извлечения по форме вопроса: простые поиски по одной сущности идут на дешевый бэкенд, мульти-хоп / "что изменилось" / "почему" / вопросы по корпусу идут на граф. Независимые тесты показывают, что графы опережают по мульти-хопу, временным и синтетическим вопросам, и отстают по простому поиску фактов и стоимости — поэтому платить граф-цены за каждый вопрос — убыток.
Решение появляется в возвращённом конверте, поэтому дешёвый ответ проверяем. Переопределите его с --route на CLI или параметром route на инструменте MCP.