Секретный сад разработчика: как пространственная онтология выравнивает LLM без промпт-инжиниринга
Опубликовано 30 April 2026
- Констатация: инжиниринг подсказок — это замок из песка
- Четыре круга доверия: пространственная онтология
- Плюсы/Минусы : Пространственное выравнивание vs Выравнивание по подсказке
- Реляционная алгебра Workspace и наблюдаемая дельта
- Композитный вектор контекста: RAG + pgvector + Graphify
- Автоматическая классификация GDPR : LLM как маршрутизатор
- Roadmap: от AsciiDoc до LangGraph4j
- Что решает эта архитектура (и что она не решает)
- Вывод: Архитектура как Дискурс
- Ссылки
Инжиниринг промптов — это хрупко. При 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 токенов правил, бэклога и истории в начале каждой сессии.
И несмотря на эту документальную инфраструктуру, меня поразили две вещи:
-
LLM забывает. Даже с абсолютными правилами в начале каждого файла EAGER, свыше 60 000 накопленных токенов (начальный контекст + диалог), Kimi K2.6 начал предлагать`Write`Огромные на файлах конфигурации. GLM-5.1 перепутала токен Firebase с заполнителем, который нужно заменить. Правила были записаны — LLM больше их не видел.
-
Само управление становится проблемой. После реализации механизма 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 |
Сейф |
|
Приватный Git (один) |
Секреты, токены, архив видения. Один только человек. |
2 |
Библиотека |
|
Приватный Git (расширенный) |
Педагогические данные, SPG/SPD, схемы JSON. Определённый круг доверия. |
4 |
Кузницы (публичные) |
|
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 не должен находиться в единственном репозитории. Он должен существовать таким образомразбросаннаяв каждом плагине :
-
Каждый плагин содержит задачу Gradle`updateKnowledgeGraph`который вызывает Graphifyна своём собственном скоупеи производит один`graph.json`местный.
-
Скрипт сборки`office/
потребляет`graphify-gradle`с`rootDir = /home/cheroliv/workspace`и производит`graph.json глобальныйкоторый агрегирует локальные графы. -
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-… |
Маршрутизатор → |
1 |
Внутренний URL |
Содержит`localhost`, частный IP |
Анонимизировать → |
2 |
Педагогические данные (SPG, курс) |
Структура Bloom/Qualiopi |
Маршрутизатор → |
3 |
Исходный код / тест |
Расширение`.kt`, |
Маршрутизатор → |
4 |
В конце сессии LLM выполняетглобальная задача:
-
чтение`.gitignore`корень для идентификации эфемерных артефактов (исключаемых из снимка) против стратегических артефактов (подлежащих историзации)
-
Перечень всех файлов`.adoc`из корня`workspace/`
-
Фильтрация: исключение файлов, перечисленных в`.gitignore`, включение всех остальных
-
Скопируй в`configuration/vision-archive/$DATE/
et обновление symlink`latest/ -
Commit в репозитории`configuration/`с структурированным сообщением
-
Автоматическая классификация GDPR каждого изменённого файла (все круги)
-
Маршрутизация : данные`office/
→ приватный коммит, код`foundry/→./gradlew check, конфигурация → фиксация -
Структурированный отчет с оповещениями о 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 больше не будет решать вопрос маршрутизации — граф сделает это.
Что решает эта архитектура (и что она не решает)
|
Пространственная онтология не охватывает всё. Соглашения о стиле кода, наименование, выбор архитектурного дизайна — всё это остаётся в промпте. Что решает пространственная онтология, этослой безопасности и видимости: где каждый байт должен жить, и кто может его увидеть. |
Вот что она привносит конкретно :
-
Нет`git push`случайное раскрытие секрета : секреты находятся в`configuration/
(круг 1). Государственные проекты находятся в`foundry/(круг 4). Ни один путь не проходит через оба. -
Нет бизнес-кода в данных :`office/
содержит.adoc`, YAML, JSON Schemas — но без`.kt`. Le `build.gradle.kts`кто там живёт — это скрипт потребления, а не бизнес-код. -
Нет раскрытой стратегической мысли : документы видения живут в секретном саду (корень вне CVS). Снимки находятся в`configuration/`(частный сейф). Никто, даже в расширенном кругу доверия, не читает генезис стратегии.
-
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 то, что никакой запрос не может ему дать: способностьвосприниматьгде он находится, что существует, чего не хватает — и вывести из этого, что он должен сделать.
Ссылки
-
Статья о управлении агентом Eager/Lazy :Управление ИИ-агентом с помощью AsciiDoc
-
Статья о механизме Hot/Warm/Cold :скользящее окно и холодная волна
-
Статья об аудите контекста:Когда Ваше Собственное Управление Становится Проблемой
-
Статья о сравнении трёх LLM:DeepSeek-V4-Pro, Kimi K2.6, GLM-5.1