18.5 KB · updated 2026-07-31 · md

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_PROVIDERclaudecodex, claude, anthropic, custom
TESSERAE_LLM_MODELзависит от провайдераОграничено провайдером, чтобы claude-совместимая модель никогда не попала на codex путь
TESSERAE_CODEX_REASONING_EFFORTmediumСтруктурированное извлечение не требует 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_PIDFILEPidfile парка движков
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.