Содержание
время чтения : 20 minutes

Инжиниринг промптов — это хрупко. При 80 000 токенов ваши правила выравнивания тонут в шуме, и LLM забывает, что вы lui попросили в начале диалога. Мое решение? Не выравнивать по тексту, а попространство. Я организовал своё рабочее пространство разработки в четыре концентрических круга доверия — от интимного секретного сада до публичных кузниц — и каждый круг представляет собой физическую область файловой системы. LLM не нуждается в напоминании о правилах: путь к файлу их содержит. Вот как это работает, и почему эта архитектура выравнивания по пространству более устойчива, чем`system prompt`500 строк.

Это длинная статья.
Устройтесь поудобнее.

Констатация: инжиниринг подсказок — это замок из песка

В течение трёх недель я разработал плагины Gradle с Opencode, используя три разных LLM — Kimi K2.6, GLM-5.1 и DeepSeek-V4-Pro (единственный оставшийся в живых, но это уже другая историяУже рассмотрено здесь.) Мой метод управления агентомЯ подробно документировал его в предыдущей статье. основан на файлах AsciiDoc —AGENT.adoc, INDEX.adoc, PROMPT_REPRISE.adoc— которые загружают ~30 000 токенов правил, бэклога и истории в начале каждой сессии.

И несмотря на эту документальную инфраструктуру, меня поразили две вещи:

  1. LLM забывает. Даже с абсолютными правилами в начале каждого файла EAGER, свыше 60 000 накопленных токенов (начальный контекст + диалог), Kimi K2.6 начал предлагать`Write`Огромные на файлах конфигурации. GLM-5.1 перепутала токен Firebase с заполнителем, который нужно заменить. Правила были записаны — LLM больше их не видел.

  2. Само управление становится проблемой. После реализации механизма Hot/Warm/ColdArticle sur la rotation de backup. для предотвращения взрыва контекста, мои файлы EAGER всё ещё весили 1414 строкJ’ai documenté cet audit ici.. Управление — разработанное для защиты LLM от перенасыщения — само насыщало LLM.

Мне нужен был механизм выравнивания, который не зависит от количества токенов в подсказке.

Ответ: прекратить выравнивание по тексту, и начать выравнивание попространство.

Четыре круга доверия: пространственная онтология

Моя папка`workspace/(в~/workspace/`) не является репозиторием Git. Это корень всей моей работы — код, документация, обучение, инфраструктура. И он организован в четыре зоны, которые не являются соглашениями о хранении, а являютсяконцентрические круги доверия:

Уровень

Метка

Физическая зона

CVS

Видимость

0

Секретный сад

`workspace/`корень

никакой

Intime — свободная мысль, без коммита, без публикации

1

Сейф

configuration/

Приватный Git (один)

Секреты, токены, архив видения. Один только человек.

2

Библиотека

office/

Приватный Git (расширенный)

Педагогические данные, SPG/SPD, схемы JSON. Определённый круг доверия.

4

Кузницы (публичные)

foundry/

Git публичный (Apache 2.0)

Исходный код, плагины, тесты, техническая документация.

ПРИМЕЧАНИЕ: В таблице нет уровня 3. Уровень 3 является переходным уровнем: это содержимое`office/`который был анонимизирован и готов к публикации в открытых данных. У него нет собственной физической зоны — это состояние данных, а не место.

Каждый уровень отвечает на конкретный вопрос :

  • Где разместить идею, которая ещё не готова к совместному использованию, даже в узком кругу? → Тайный сад. Нет Git. Нет давления.

  • Где хранить токен API, чтобы он не утек? → Сейф (configuration/). Физически изолирован. Никакой другой репозиторий не может ошибочно ссылаться на него.

  • Где совместно построить каталог обучения с пилотным ОФ? → Библиотека`office/`). Версионированный, совместный, но приватный.

  • Где индустриализировать плагин Gradle с открытым исходным кодом? → Кузница`foundry/`). Публичный, форкаемый, протестирован в CI.

Эта онтология естьпотребляемый LLM. Когда он читает файл в`foundry/plantuml-gradle/src/`, он неявно понимает : "я нахожусь в круге 4 — открытый код, обязательные тесты, никаких секретов, никаких учебных данных". Ему не нужен подсказка, который напомнил бы ему об этом.

Секретный сад: пространство вне CVS

Это самая важная концепция — и самая неинтуитивная концепция.

Корень`workspace/не имеет.git/. Документы, которые там живут (`WORKSPACE_VISION.adoc, WORKSPACE_AS_PRODUCT.adoc, WORKSPACE_ORGANIZATION.adoc— и тот, который вы читаете сейчас, который является его продолжением, не предназначены для версионирования, совместного использования или даже повторного чтения кем-то другим, кроме меня. ЭтоПроростающие мысли.

Секретный сад out-of-CVS по природе. Отсутствие версионирования — условие свободы мысли. Там не пишут, чтобы быть прочитанным — там пишут, чтобы прояснить свою собственную перспективу.

Но эта свобода имеет цену: один`rm`случайно, и это месяцы стратегических размышлений исчезают. Решение не в том, чтобы версионировать сад (это означало бы его уничтожение) — решение в том, чтобызеркалироватьв самом узком круге.

.gitignore` как конфигурация управления

У корня`workspace/, файл.gitignore`минимальный объявляетполитика историзациифайлы секретного сада:

.goosehints
.goose

Ce .gitignore`не имеет классической функции Git (нет.git/`в корне). Он действует какфайл конфигурации управлениякоторый отвечает на конкретный вопрос: какие артефакты секретного сада заслуживают того, чтобы быть историзированными, а какие являются чисто переходными?

  • Файлы, перечисленные в`.gitignore`—.goosehints, .goose— являются временными артефактами, созданными агентами. Нет стратегической ценности. Нет историзации.

  • Файлы`.adoc`корня —WORKSPACE_VISION.adoc, WORKSPACE_ORGANIZATION.adoc, WORKSPACE_AS_PRODUCT.adoc, WHAT_THE_GAMES_BEEN_MISSING.adoc, depots_implementes_strategie.adoc, synthese-LLMs-long-contexte.adoc— не являютсянев`.gitignore`. Это артефакты, которые необходимо историзировать.

Le `.gitignore`являетсясхема управления: все, что не перечислено здесь, является кандидатом на снимок. И LLM, читая этот файл, точно знает, что должно быть архивировано, а что можно игнорировать — без необходимости напоминать ему об этом в промпте.

Механизм снимка

Я создал`configuration/vision-archive/: датированные снимки всех.adoc`корня, сделанные в частном репозитории`configuration/`. Каждая сессия мозгового штурма создает снимок :

DATE=$(date +%Y-%m-%d)
mkdir -p /home/cheroliv/workspace/configuration/vision-archive/$DATE
cp /home/cheroliv/workspace/*.adoc /home/cheroliv/workspace/configuration/vision-archive/$DATE/
cd /home/cheroliv/workspace/configuration && git add vision-archive/ && \
  git commit -m "vision-archive: snapshot $DATE"

Процедура запускается в конце сеанса самим LLM, который выполняет эту глобальную задачу маршрутизации. Каждый снимок фиксирует полное состояние стратегического мышления в момент T.

История Git`configuration/`становитсябиография моей стратегической мыслиЯ могу сделать`git log — vision-archive/`et увидеть развитие моего видения, сессия за сессией, дата за датой.

Реальный пример истории после рабочего дня :

$ git -C configuration log --oneline -- vision-archive/
1089d1b vision-archive: fin de session finale 2026-05-03
6b21eaf vision-archive: fin de session 2026-05-03-1300
1690f82 vision-archive: post-article 2026-05-03
28e6593 vision-archive: post-migration 2026-05-03
3707b78 vision-archive: snapshot 2026-05-03 — jardin secret initial

Пять снимков за один день. Каждый — точка восстановления. Каждый — веха в генезисе стратегии.

дело`configuration/vision-archive/latest/`содержит постоянно однурабочая копияпоследнего снапшота, служащего быстрой ссылкой без необходимости навигации по истории Git

И для LLM этооракул согласованности: Когда он замечает противоречие между текущей реализацией и архивированным видением на предыдущую дату, он может это указать.

Хранилище : configuration/ как Spring Cloud Config

`configuration/`Он содержит не только архив видения. Его первостепенная — и будущая — функция состоит в том, чтобы бытьсервер Spring Cloud Config. Все секреты, токены, учетные данные и дескрипторы инфраструктуры находятся здесь, в частном репозитории Git, доступном только владельцу.

Почему отдельный репозиторий вместо файла`.env`в каждом проекте ?

  • Случайная отправка секрета : невозможно. Секреты находятся в частном репозитории, на который публичные проекты не могут ссылаться по ошибке.

  • Audit : история Git показывает следы каждого изменения конфигурации. Кто что изменил, когда, с каким хешем SHA.

  • Откат :`git revert`на сломанной конфигурации. Снимок, без ручного резервного копирования.

Библиотека: office/ как Data Consommable

`office/`является документальным дополнением к работе по разработке. Он содержит статьи блога, технические спецификации, учебные материалы (38 каталогов курсов FPA, SPG/SPD, схемы JSON, таксономии Блум/Харроу/Кратхвол) — всё, что составляетучебный материал.

Но`office/`Это не просто ящик для документов. Этоисточник структурированных данныхчто плагины Gradle`foundry/`потребляют. Запись блога в`office/`является записью, которую плагин преобразует в HTML. SPG AsciiDoc в`office/metiers/FPA/`python print(" является артефактом, который будет распарсен оркестратором для генерации слайдов, квизов и видеокапсул.")

Et le `build.gradle.kts`в корне`office/`не является бизнес-кодом — этоСкрипт потребления экосистемы плагинов. Он говорит: "вот Gradle-плагины, которые я использую, вот контекст моего рабочего пространства

Кузница: foundry/ как реализация

foundry/`содержитпромышленный код. 54 репозитория Git, из которых 7 в настоящее время управляются некоторыми.agents/`. Вот где видение становится выполнимым — плагины Gradle, CI/CD, тесты JUnit5 + Cucumber.

Отношение с`office/`является двунаправленной :

  • office/→foundry/: педагогические данные являются исходным материалом, который потребляют плагины.

  • foundry/→office/: плагины производят данные, которые обогащают`office/` — le `graph.json`из graphify-gradle, скомпилированные слайдерные колоды, отчёты о сборке.

Плюсы/Минусы : Пространственное выравнивание vs Выравнивание по подсказке

Сравним два подхода.

Классический подход: Выравнивание с помощью pre-prompt

Профессионал

❌ Против

Просто реализовать. Блок текста в системном промпте.

Хрупкий при длинном контексте: правило теряется после 80K токенов.

Работает для общих правил (тон, формат).

Непроверяемый : ничего не мешает LLM нарушить правило.

Не нужно переосмысливать архитектуру проекта.

Непередаваемый : каждый репозиторий повторно объявляет правила.

чисто декларативное : LLM знает, что он должен, но ничего ему не мешает.

Этот подход: выравнивание по пространственной онтологии

✅ Про

❌ Против

устойчив к длинному контексту : правило находится в пути к файлу, не в далёком запросе.

Начальная стоимость инфраструктуры : структурирование рабочего пространства в кругах занимает время.

Основное преимущество не защитное (безопасность, видимость) — онотворческий. Когда LLM работает в пространстве, структурированном онтологией, он может делать то, что никакой промпт ему не позволяет: наблюдать дельту.

Реляционная алгебра Workspace и наблюдаемая дельта

Когда LLM обходит`foundry/, у него естьрешетка структурированных данныхузлы (плагины, файлы, тесты, зависимости), типизированные ребра`import, depends_on, generates, tests), отношения композиции и порядка (`training-gradle`извлекает репозиторий →`slider-gradle`генерирует слайды →`capsule-gradle`увеличичь видео)

Эта алгебра нигде не записана явно — но она наблюдаема. Каждая`build.gradle.kts`показывает зависимости. Каждый`INDEX.adoc`излагает перекрёстные ссылки.

LLM наблюдает эту алгебру и обнаруживает егодельта: разрыв между тем, что система уже может производить и тем, что описывает видение

Из этого дельта он может определитькарты экспертов по предметной области— CDA (разработчик приложений, Kotlin/Gradle/JHipster) и FPA (профессиональный тренер для взрослых, педагогика/Qualiopi/Bloom) — и определить, чего не хватает каждому эксперту.

Expert CDA (Kotlin/Gradle/JHipster)
  ├── Plugins : jhipster-gradle-plugins, plantuml-gradle,
  │   codebase-gradle
  ├── Delta : pas encore de SPG CDA formalisé,
  │   pas de fine-tuning expert CDA

Expert FPA (Pédagogie/Qualiopi/Bloom)
  ├── Plugins : training-gradle, slider-gradle,
  │   school-backoffice/forms, capsule-gradle
  ├── Matériel : 38 modules cours, SPG/SPD, taxonomies
  └── Delta : parser AsciiDoc→JSON à créer,
      orchestrateur à coder

LLM не нужно говорить, что делать. Дельта возникает из структуры.

Композитный вектор контекста: RAG + pgvector + Graphify

Она материализована тремя компонентами, которые образуюткомпозитный вектор контекстадля LLM.

Компонент 1 — RAG LangChain4j + PostgreSQL pgvector

У меня уже есть LangChain4j в продакшене в двух плагинах:`slider-gradle`(4 провайдера LLM) и`plantuml-gradle`(7 providers). Эмбеддинги ONNX (AllMiniLmL6V2) индексируют данные de`office/`и исходный код`foundry/`в PostgreSQL + pgvector.

Этот RAG работает в двух измерениях :

  • Dimension data : документы`office/`(СПГ, статьи, формирования, схемы JSON)

  • Код измерения : кодовые базы`foundry/`(источники Kotlin, тесты Cucumber, AGENT.adoc)

Пересечение охватывает как что (деловая область) и как (реализация).

Компонент 2 — Knowledge Graph Graphify

Graphify интегрирован в`plantuml-gradle`(109 тестов, 380/380 PASS) и производит`graph.json`— структурированный knowledge graph с узлами, ребрами и автоматически обнаруженными сообществами.

В отличие от RAG, который работает на основе векторного сходства (размытое), knowledge graph работает на основеточные отношения(детерминированный) :`graphify query`pour les interrogations sémantiques (~50 tokens),`graphify path`pour навигации,`graphify explain`чтобы объяснить.

Компонент 3 — Инкрементальный Graphify: разреженный, агрегируемый, потребляемый

Это ключевое архитектурное решение.

Graphify не должен находиться в единственном репозитории. Он должен существовать таким образомразбросаннаяв каждом плагине :

  1. Каждый плагин содержит задачу Gradle`updateKnowledgeGraph`который вызывает Graphifyна своём собственном скоупеи производит один`graph.json`местный.

  2. Скрипт сборки`office/ потребляет`graphify-gradle`с`rootDir = /home/cheroliv/workspace`и производит`graph.json глобальныйкоторый агрегирует локальные графы.

  3. RAG каждого плагина вводит`graph.json`глобальный какфильтр контекстадля запросов LLM.

TÂCHE GRADLE (dans chaque plugin)
    ↓
graphify → graph.json (scope local)
    ↓
office/build.gradle.kts → graph.json (scope global)
    ↓
RAG pgvector (dans slider, plantuml, codebase...)
    ↓  ← injection du graph.json comme filtre
LLM (deepseek-v4-pro)
    ↓  ← observation algèbre relationnelle
    ↓  ← détection delta vs cartographies experts
PRIORISATION → prochaine tâche

Результат: LLM не ищет в пустоте — он перемещается в пространстве, структурированном знанием графом. Запрос на «генерировать схему» знает, как достичь соответствующих узлов графа.

Автоматическая классификация GDPR : LLM как маршрутизатор

Пространственная онтология не просто выравнивает LLM — она даёт ейматрица классификации GDPRдля маршрутизации каждого элемента данных в его законную зону

критерий

Обнаружение LLM

Действие

Максимальный уровень

Личные данные (имя, email, IP)

Pattern`@`, IP, собственные имена

Анонимизировать →`[OF_PILOTE]`ou маршрутизатор уровня 2

2

Токен / Секрет / Учетные данные

шаблон`sk-…​, `ghp_…​, ya29…​

Маршрутизатор →configuration/. Упомянуто в`${VAR}`в коде.

1

Внутренний URL

Содержит`localhost`, частный IP

Анонимизировать →${API_URL}

2

Педагогические данные (SPG, курс)

Структура Bloom/Qualiopi

Маршрутизатор →office/(уровень 2). Двойная версия при экспорте.

3

Исходный код / тест

Расширение`.kt`, .kts`в`foundry/

Маршрутизатор →foundry/. Проверить отсутствие секретов.

4

В конце сессии LLM выполняетглобальная задача:

  1. чтение`.gitignore`корень для идентификации эфемерных артефактов (исключаемых из снимка) против стратегических артефактов (подлежащих историзации)

  2. Перечень всех файлов`.adoc`из корня`workspace/`

  3. Фильтрация: исключение файлов, перечисленных в`.gitignore`, включение всех остальных

  4. Скопируй в`configuration/vision-archive/$DATE/et обновление symlink`latest/

  5. Commit в репозитории`configuration/`с структурированным сообщением

  6. Автоматическая классификация GDPR каждого изменённого файла (все круги)

  7. Маршрутизация : данные`office/→ приватный коммит, код`foundry/→./gradlew check, конфигурация → фиксация

  8. Структурированный отчет с оповещениями о GDPR и подтверждением архивации

Le `.gitignore`корень не является файлом конфигурации Git — этофайл управления историзацией. Он определяет схему, которую LLM потребляет, чтобы решить, какие файлы из секретного сада попадают в стратегическую биографию, а какие являются одноразовыми.

LLM больше не является простым генератором текста. Онменеджер информацииэкосистемы — производитель, классификатор, маршрутизатор.

Roadmap: от AsciiDoc до LangGraph4j

Сегодня, эта система управления детерминистна: эта LLM применяет процедуру описанную в файлах AsciiDoc. Estaфаза 1— инжиниринг подсказок с памятью LLM.

La фаза 2извлечет каждый этап процедуры в однутипизированная задача GradleПожалуйста, предоставьте текст для перевода.

./gradlew endSessionWorkspace    → snapshot vision-archive
./gradlew endSessionProject      → archive .agents/
./gradlew endSessionReport       → rapport multi-zones

La фаза 3будет моделировать процесс завершения сессии какграф состоянийсhttps://github.com/langgraph4j/langgraph4j[LangGraph4j]:

[Start] → [Inventaire fichiers modifiés]
       → [Classification RGPD] (nœud ONNX)
       → [Branchement par cercle]
            ├→ cercle 0 → snapshot → commit
            ├→ cercle 2 → anonymisation → commit
            ├→ cercle 4 → archive → commit
            └→ cercle 1 → commit configuration/
       → [Rapport] → [End]

Этот граф будет версионироваться в CI/CD, выполняться Gradle, настраиваться через GitHub Secrets плагинов. LLM больше не будет решать вопрос маршрутизации — граф сделает это.

Что решает эта архитектура (и что она не решает)

Пространственная онтология не охватывает всё. Соглашения о стиле кода, наименование, выбор архитектурного дизайна — всё это остаётся в промпте. Что решает пространственная онтология, этослой безопасности и видимости: где каждый байт должен жить, и кто может его увидеть.

Вот что она привносит конкретно :

  1. Нет`git push`случайное раскрытие секрета : секреты находятся в`configuration/(круг 1). Государственные проекты находятся в`foundry/(круг 4). Ни один путь не проходит через оба.

  2. Нет бизнес-кода в данных :`office/содержит.adoc`, YAML, JSON Schemas — но без`.kt`. Le `build.gradle.kts`кто там живёт — это скрипт потребления, а не бизнес-код.

  3. Нет раскрытой стратегической мысли : документы видения живут в секретном саду (корень вне CVS). Снимки находятся в`configuration/`(частный сейф). Никто, даже в расширенном кругу доверия, не читает генезис стратегии.

  4. Auto-priorisation : LLM наблюдает за дельтой между реляционной алгеброй (то, что существует) и картами экспертов (то, что необходимо). Следующая задача разработки возникает из этой дельты.

Вывод: Архитектура как Дискурс

Я не помещаю политический манифест в подвал моего сайта. Я не помещаю этические правила в мои промпты. Выравнивание не находится в тексте — оно находится вфайловая система.

Когда LLM работает в этом пространстве, он не может утечь секретом (путь ему это запрещает). Он не может перепутать учебные данные с исходным кодом (физическая зона различна). Он не может забыть правило безопасности в 80 000 токенов — потому что правило не находится в промпте, оно находится в`workspace/(There is no output as the translated text is empty.)`configuration/→office/</think>`foundry/`что каждое чтение файла повторно активирует.

Это принцип secure by design, применённый к выравниванию агента: не требуйте от LLM запоминания правил. Делайте так, чтобы архитектура делала ошибку структурно невозможной.

Кстати, это даёт LLM то, что никакой запрос не может ему дать: способностьвосприниматьгде он находится, что существует, чего не хватает — и вывести из этого, что он должен сделать.

Ссылки

Похожие статьи