<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>LakedApp</title><link href="https://lakedapp.com/" rel="alternate"/><link href="https://lakedapp.com/feeds/all.atom.xml" rel="self"/><id>https://lakedapp.com/</id><updated>2026-09-15T10:00:00+02:00</updated><entry><title>GTM Engineer: кто это и чем отличается от дата- и аналитик-инженера</title><link href="https://lakedapp.com/blog/gtm-engineer-role/" rel="alternate"/><published>2026-09-15T10:00:00+02:00</published><updated>2026-09-15T10:00:00+02:00</updated><author><name>Edgar L</name></author><id>tag:lakedapp.com,2026-09-15:/blog/gtm-engineer-role/</id><summary type="html">&lt;p&gt;Термин придумала Clay в 2023 году — разбираем по первоисточникам, что реально делает GTM-инженер и чем эта роль отличается от RevOps, дата- и аналитик-инженера.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Термин «GTM Engineer» ввела компания Clay в 2023 году, и с тех пор он закрепился в таких компаниях, как Cursor, Lovable и Webflow — &lt;a href="https://www.clay.com/blog/gtm-engineering"&gt;пишет сама Clay в своём блоге&lt;/a&gt;. По данным &lt;a href="https://pipeline.zoominfo.com/sales/gtm-engineer-hype"&gt;ZoomInfo Pipeline&lt;/a&gt; (со ссылкой на &lt;a href="https://bloomberry.com/blog/i-analyzed-1000-gtm-engineering-jobs-here-is-what-i-learned/"&gt;анализ Bloomberry по 1000 вакансий&lt;/a&gt;), число открытых позиций GTM Engineer выросло на 205% год к году, публикуется около 100 новых вакансий в месяц, а вилки зарплат — от $85 000 у junior до $241 000 у senior. Сам Bloomberry явно не указывает географию выборки, но цифры в долларах, а среди упомянутых работодателей — Vercel, OpenAI, Ramp и Clay, то есть речь по сути о рынке США.&lt;/p&gt;
&lt;h2&gt;Что реально делает GTM Engineer&lt;/h2&gt;
&lt;p&gt;В &lt;a href="https://www.clay.com/guides/gtm-engineering"&gt;гайде Clay&lt;/a&gt; GTM-инжиниринг определён как «практика построения автоматизированных revenue-систем с помощью AI, данных и автоматизации workflow — вместо ручного ведения go-to-market». Единица работы — не отдельная задача, а система, которая работает на масштабе.&lt;/p&gt;
&lt;p&gt;Clay описывает три последовательных уровня работы:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Фундамент данных&lt;/strong&gt; — чистые, дедуплицированные записи в CRM.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Моделирование данных&lt;/strong&gt; — скоринговые модели, ICP-атрибуты, исследовательские данные.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Активация данных&lt;/strong&gt; — данные запускают конкретные revenue-действия (роутинг лида, персонализированный аутрич, кампания).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Практический пример из гайда Clay: workflow отслеживает сигналы о раунде финансирования, подтягивает новую компанию в Clay, обогащает её фирмографикой и контактами, скорит по ICP, генерирует персонализированную первую строку письма через LLM — и отправляет лучшие аккаунты в CRM и outbound-последовательность.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.apollo.io/insights/gtm-engineer-job-description"&gt;Apollo.io&lt;/a&gt; в своём описании роли выделяет пять зон ответственности: обогащение данных и контроль их качества, скоринговые модели, автоматизация workflow (роутинг лидов, триггеры последовательностей), настройка AI-агентов для исследования и генерации контента, и аналитика/дашборды.&lt;/p&gt;
&lt;h2&gt;Какие навыки нужны&lt;/h2&gt;
&lt;p&gt;Clay формулирует это так: GTM-инженер — «гибрид: наполовину человек с коммерческим мышлением, наполовину билдер» (&lt;a href="https://www.clay.com/blog/gtm-engineering"&gt;источник&lt;/a&gt;). Продакшен-код не обязателен — нужна, по формулировке гайда, «готовность разобраться в инструменте методом тыка» (&lt;a href="https://www.clay.com/guides/gtm-engineering"&gt;источник&lt;/a&gt;). При этом Apollo.io в списке технических навыков называет SQL, JavaScript/Python для кастомных интеграций, работу с API и дата-хранилищами, настройку CRM и prompt engineering для AI-оркестрации.&lt;/p&gt;
&lt;p&gt;Стек, который называет Clay: CRM (Salesforce), дата-хранилище (Snowflake/BigQuery) и «движковый» слой — сам Clay, который в одном месте закрывает обогащение, скоринг, исследование и активацию.&lt;/p&gt;
&lt;h2&gt;Это не то же самое, что GTM Analyst&lt;/h2&gt;
&lt;p&gt;Название похоже, но роли разные — и GTM Analyst появился гораздо раньше. По разбору вакансий &lt;a href="https://www.productroadmap.ai/go-to-market/what-is-a-go-to-market-strategy-analyst-job-description"&gt;productroadmap.ai&lt;/a&gt;, go-to-market (strategy) analyst занимается анализом рынка и поведения покупателей, ценообразованием и позиционированием продукта, конкурентной разведкой и финансовым моделированием — это стратегическая, исследовательская роль без кода и автоматизации. GTM Engineer, наоборот, почти не формирует стратегию сам — он реализует уже принятые гипотезы в виде работающих систем. Если упростить: GTM Analyst отвечает на вопрос «что делать на рынке», GTM Engineer — «как это автоматизировать».&lt;/p&gt;
&lt;h2&gt;GTM Engineer vs RevOps&lt;/h2&gt;
&lt;p&gt;Прежде чем сравнивать — что такое RevOps, если вы слышите про эту роль впервые. По определению &lt;a href="https://www.salesforce.com/sales/revenue-lifecycle-management/what-is-revenue-operations/"&gt;Salesforce&lt;/a&gt;, revenue operations — «стратегический фреймворк, который объединяет всю revenue-активность компании»: маркетинг, продажи, customer success и часто финансы работают по единым процессам и на одном технологическом стеке вместо разрозненных отделов с несовместимыми данными и целями. На практике RevOps-команда сводит данные о выручке воедино, интегрирует CRM/маркетинговые/ERP-системы, автоматизирует рутину вроде передачи лида между отделами или выставления счетов и следит, чтобы все revenue-команды двигались в одном направлении. Это уже устоявшаяся, стандартная должность в большинстве B2B-компаний — в отличие от GTM Engineer, которая появилась только в 2023 году.&lt;/p&gt;
&lt;p&gt;Это ближайшее и самое частое сравнение с GTM Engineer — многие GTM-инженеры начинают именно в RevOps. &lt;a href="https://www.clay.com/guides/gtm-engineering"&gt;Clay формулирует разницу так&lt;/a&gt;: «RevOps поддерживает существующий процесс работающим. GTM-инжиниринг меняет сам процесс». &lt;a href="https://www.salesforge.ai/blog/gtm-engineering-vs-revops"&gt;Salesforge.ai&lt;/a&gt; раскладывает это по осям:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;RevOps&lt;/th&gt;
&lt;th&gt;GTM Engineer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Отправная точка&lt;/td&gt;
&lt;td&gt;Существующий процесс: «что мешает воронке»&lt;/td&gt;
&lt;td&gt;Чистый лист: «какую систему построить»&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Владеет&lt;/td&gt;
&lt;td&gt;Роутинг лидов, SLA, прогнозирование, документация процессов&lt;/td&gt;
&lt;td&gt;Дата-пайплайны, архитектура стека, API-интеграции, автоматизация&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Навыки&lt;/td&gt;
&lt;td&gt;Бизнес-операции, финмоделирование, Salesforce/HubSpot, SQL для отчётности&lt;/td&gt;
&lt;td&gt;SQL, Python, проектирование API, работа с данными&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Метрика успеха&lt;/td&gt;
&lt;td&gt;Эффективность воронки, соблюдение SLA, точность прогноза&lt;/td&gt;
&lt;td&gt;Аптайм систем, надёжность интеграций, точность данных, покрытие автоматизацией&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;GTM Engineer vs Data Engineer vs Analytics Engineer&lt;/h2&gt;
&lt;p&gt;Здесь стоит опереться на первоисточники самих этих ролей, а не только на маркетинг GTM-инжиниринга.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Data Engineer.&lt;/strong&gt; По определению &lt;a href="https://www.splunk.com/en_us/blog/learn/data-engineer-role-responsibilities.html"&gt;Splunk&lt;/a&gt;, дата-инженер «проектирует, строит и поддерживает масштабируемые системы и пайплайны данных», которые позволяют компании собирать, хранить и обрабатывать большие объёмы данных. Ключевые зоны: архитектура данных, сбор и валидация данных из разных источников, автоматизация процессов, инфраструктура для дата-саентистов и аналитиков. Инструменты — Python/Java/Scala/SQL, Hadoop/Kafka, облачные платформы, Airflow.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Analytics Engineer.&lt;/strong&gt; Роль оформилась около 2018 года в сообществе вокруг dbt (тогда ещё Fishtown Analytics) — облачные хранилища (Redshift, BigQuery, Snowflake) и сервисы загрузки данных (Stitch, Fivetran) удешевили хранение и упростили извлечение, а бизнес-пользователям стало не хватать умения работать с сырыми данными напрямую. По &lt;a href="https://www.getdbt.com/blog/what-is-analytics-engineering"&gt;определению dbt Labs&lt;/a&gt;, аналитик-инженер «предоставляет конечным пользователям чистые датасеты, моделируя данные так, чтобы пользователи могли сами отвечать на свои вопросы» — пишет трансформации (в основном на SQL через dbt), тестирует данные, документирует и поддерживает структуру хранилища. Разница с дата-инженером в том же посте dbt: дата-инженер строит инфраструктуру и пайплайны, аналитик-инженер — трансформацию и документацию поверх уже собранных данных.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GTM Engineer.&lt;/strong&gt; В отличие от обеих ролей, единица работы — не датасет и не пайплайн, а revenue-система целиком: от данных до конкретного действия (письмо, звонок, запись в CRM), которое двигает сделку. GTM-инженер может использовать SQL и API так же, как дата- или аналитик-инженер, но конечный получатель его работы — не аналитик и не дашборд, а sales/marketing-процесс, и метрика — не качество данных сама по себе, а встречи и сделки.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Data Engineer&lt;/th&gt;
&lt;th&gt;Analytics Engineer&lt;/th&gt;
&lt;th&gt;GTM Engineer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Что строит&lt;/td&gt;
&lt;td&gt;Пайплайны и инфраструктуру данных&lt;/td&gt;
&lt;td&gt;Трансформации и чистые датасеты поверх хранилища&lt;/td&gt;
&lt;td&gt;Автоматизированные revenue-workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Для кого&lt;/td&gt;
&lt;td&gt;Дата-саентисты, аналитики, вся компания&lt;/td&gt;
&lt;td&gt;Бизнес-пользователи, self-service BI&lt;/td&gt;
&lt;td&gt;Sales, marketing, RevOps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Основной инструмент&lt;/td&gt;
&lt;td&gt;Airflow, Spark/Hadoop, облачные хранилища&lt;/td&gt;
&lt;td&gt;dbt, SQL&lt;/td&gt;
&lt;td&gt;Clay, CRM, API-интеграции, LLM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Метрика&lt;/td&gt;
&lt;td&gt;Надёжность и доступность данных&lt;/td&gt;
&lt;td&gt;Качество и документированность датасетов&lt;/td&gt;
&lt;td&gt;Пайплайн, встречи, сделки&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img alt="Схема: стек ролей Data Engineer → Analytics Engineer → GTM Engineer, от сырых данных до revenue-действия" src="https://lakedapp.com/blog/gtm-engineer-role/gtm-engineer-stack.svg"&gt;&lt;/p&gt;
&lt;h2&gt;Коротко&lt;/h2&gt;
&lt;p&gt;GTM Engineer — не замена дата- или аналитик-инженеру и не более технична, а функционально версия RevOps, ориентированная на скорость и revenue-эффект: она использует тот же набор инструментов (SQL, API, дата-модели), что и инженерные роли в данных, но продукт работы — не датасет, а работающий кусок go-to-market процесса. Роль молодая (2023 год) и пока не стандартизирована так, как data/analytics engineering — поэтому конкретный набор задач у GTM-инженера сильно зависит от компании, в отличие от куда более устоявшихся ролей дата- и аналитик-инженера.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Источники: &lt;a href="https://www.clay.com/blog/gtm-engineering"&gt;Clay — GTM Engineering (блог)&lt;/a&gt;, &lt;a href="https://www.clay.com/guides/gtm-engineering"&gt;Clay — The Complete Guide to GTM Engineering&lt;/a&gt;, &lt;a href="https://www.apollo.io/insights/gtm-engineer-job-description"&gt;Apollo.io — GTM Engineer Job Description&lt;/a&gt;, &lt;a href="https://pipeline.zoominfo.com/sales/gtm-engineer-hype"&gt;ZoomInfo Pipeline — What Is GTM Engineering?&lt;/a&gt;, &lt;a href="https://www.salesforge.ai/blog/gtm-engineering-vs-revops"&gt;Salesforge.ai — GTM Engineering vs RevOps&lt;/a&gt;, &lt;a href="https://www.salesforce.com/sales/revenue-lifecycle-management/what-is-revenue-operations/"&gt;Salesforce — What Is Revenue Operations (RevOps)?&lt;/a&gt;, &lt;a href="https://www.productroadmap.ai/go-to-market/what-is-a-go-to-market-strategy-analyst-job-description"&gt;productroadmap.ai — What Is a Go-To-Market Strategy Analyst Job Description?&lt;/a&gt;, &lt;a href="https://www.getdbt.com/blog/what-is-analytics-engineering"&gt;dbt Labs — What is analytics engineering?&lt;/a&gt;, &lt;a href="https://www.splunk.com/en_us/blog/learn/data-engineer-role-responsibilities.html"&gt;Splunk — The Data Engineer Role, Explained&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content><category term="Инжиниринг"/><category term="GTM Engineer"/><category term="RevOps"/><category term="Data Engineer"/><category term="Analytics Engineer"/><category term="карьера"/></entry><entry><title>Память AI-агентов: рабочий фреймворк вместо зоопарка терминов</title><link href="https://lakedapp.com/blog/agent-memory-framework/" rel="alternate"/><published>2026-09-14T10:00:00+02:00</published><updated>2026-09-14T10:00:00+02:00</updated><author><name>Edgar L</name></author><id>tag:lakedapp.com,2026-09-14:/blog/agent-memory-framework/</id><summary type="html">&lt;p&gt;Три независимые оси — что хранится, как достаётся и кто владеет, — вместо очередного списка из четырёх-семи «типов памяти».&lt;/p&gt;</summary><content type="html">&lt;p&gt;Если почитать несколько материалов про память AI-агентов подряд, немудрено запутаться: один источник называет три вида памяти, другой — четыре или пять, третий вообще обходится без слова «тип» и говорит про «compaction» и «note-taking». При этом почти все так или иначе отсылают к одной и той же научной работе — &lt;a href="https://arxiv.org/abs/2309.02427"&gt;CoALA&lt;/a&gt; (Sumers, Yao, Narasimhan, Griffiths, 2023).&lt;/p&gt;
&lt;p&gt;Сама статья предлагает четыре типа памяти: &lt;strong&gt;working&lt;/strong&gt; (рабочая — то, что активно прямо сейчас, в текущем шаге), &lt;strong&gt;semantic&lt;/strong&gt; (факты), &lt;strong&gt;episodic&lt;/strong&gt; (события), &lt;strong&gt;procedural&lt;/strong&gt; (правила и навыки — включая как явно написанный код, так и неявные знания в весах модели). Дальше мы группируем их немного иначе, чем в оригинале, — не потому что CoALA ошибается, а потому что для инженерного решения полезнее смотреть на вопрос с двух разных сторон одновременно.&lt;/p&gt;
&lt;p&gt;Разброс объясним: большинство материалов смешивают в один список два независимых вопроса:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Что&lt;/strong&gt; запоминается (факт? событие? правило?)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Как и где&lt;/strong&gt; это возвращается модели (прямо сейчас в промпте? в файле на диске? через поиск?)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Это две разные оси, и на них строится большая часть путаницы. Есть и третья — кто владеет памятью и когда она пишется, — про неё почти никогда не говорят в одном ряду с первыми двумя, поэтому разберём её отдельно ниже. Разделив все три, можно построить простую и рабочую схему — и заодно понять, почему даже профессионалы редко сходятся в терминологии.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Ось 1: что хранится&lt;/h2&gt;
&lt;p&gt;Тут действительно есть три содержательные категории, и они устойчиво повторяются от источника к источнику:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Тип&lt;/th&gt;
&lt;th&gt;Вопрос&lt;/th&gt;
&lt;th&gt;Пример&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Факт (semantic)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Что верно?&lt;/td&gt;
&lt;td&gt;«Пользователь предпочитает Python»&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Событие (episodic)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Что произошло?&lt;/td&gt;
&lt;td&gt;«В прошлый раз деплой упал из-за забытой env-переменной»&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Правило (procedural)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Как действовать?&lt;/td&gt;
&lt;td&gt;«Перед деплоем всегда проверяй env-переменные»&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;# Одна и та же структура для всех трёх — просто разные схемы записи&lt;/span&gt;
&lt;span class="n"&gt;fact&lt;/span&gt;    &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;fact&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="s2"&gt;&amp;quot;key&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;language_pref&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;python&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;episode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;episode&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;task&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;deploy&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;outcome&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;failed&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="s2"&gt;&amp;quot;reason&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;missing env var&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;date&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;2026-09-01&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;rule&lt;/span&gt;    &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;rule&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="s2"&gt;&amp;quot;trigger&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;before_deploy&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="s2"&gt;&amp;quot;action&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;check env vars&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Как уже говорилось во вступлении, у CoALA working memory — равноправный четвёртый тип наравне с этими тремя. Мы намеренно переносим её на Ось 2, потому что для инженерного решения важнее не «какой это тип контента», а «оно уже физически лежит в промпте или нет» — так ближе к тому, как эту развилку приходится решать на практике. Дальше по тексту working memory обсуждается именно там.&lt;/p&gt;
&lt;h2&gt;Ось 2: как и где это возвращается модели&lt;/h2&gt;
&lt;p&gt;Здесь путаются сильнее всего. Ключевая мысль, которую явно формулирует Anthropic в своём разборе &lt;a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents"&gt;context engineering&lt;/a&gt;: &lt;strong&gt;модель не «помнит» ничего, что физически не лежит в промпте прямо сейчас&lt;/strong&gt;. Хранение — это ещё не память. Память — это то, что реально попало в контекстное окно.&lt;/p&gt;
&lt;p&gt;Отсюда три механизма:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Working memory&lt;/strong&gt; — то, что уже в промпте (system prompt, история диалога, только что вызванный tool result).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Persistent storage&lt;/strong&gt; — файл, база, memory store: место, где информация живёт между сессиями, но модель её &lt;em&gt;не видит&lt;/em&gt;, пока кто-то её туда не положил обратно.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Retrieval&lt;/strong&gt; — активный шаг «достать нужный кусок из storage и вставить в working memory». Поиск по смыслу, точный лукап или просто чтение файла по известному пути.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;# Псевдокод в духе &amp;quot;structured note-taking&amp;quot; из поста Anthropic&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;turn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;working_memory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;store&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# 1. Retrieval: что из storage релевантно прямо сейчас?&lt;/span&gt;
    &lt;span class="n"&gt;relevant&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;store&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;top_k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;working_memory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;compact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;working_memory&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;relevant&lt;/span&gt;

    &lt;span class="c1"&gt;# 2. Модель отвечает, видя только working_memory&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;call_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;working_memory&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;user_message&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

    &lt;span class="c1"&gt;# 3. Что стоит сохранить обратно в storage?&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;worth_remembering&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;store&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;extract_memory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;working_memory&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="Схема: Fact/Event/Rule в persistent storage, через Retrieval попадают в Working memory; Parametric подключается к Working memory напрямую, без retrieval" src="https://lakedapp.com/blog/agent-memory-framework/agent-memory-diagram.svg"&gt;&lt;/p&gt;
&lt;p&gt;Retrieval — не четвёртый вид содержимого, а способ доставки любого из трёх типов из Оси 1. LangChain формулирует это почти дословно в документации Deep Agents: в таблице параметров памяти «Information type» (semantic/episodic/procedural) и «Retrieval» (загружено в промпт по умолчанию / читается по требованию) — это два разных столбца, отвечающих на два разных вопроса, а не пункты одного перечня.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Особые случаи: parametric и prospective&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Parametric memory&lt;/strong&gt; (знания в весах модели) — по классификации CoALA это implicit-форма процедурной памяти; explicit-форма той же процедурной памяти — как раз написанные правила из «rule» выше. Но для инженерной практики эти две формы стоит развести: explicit-правило можно прочитать, отредактировать и заверсионировать как обычные данные, а implicit-знания в весах — нет. Это фундамент, на котором работает всё остальное: общая грамотность модели, здравый смысл, факты, усвоенные при обучении. Она не «извлекается» отдельным шагом — уже неотъемлемо участвует в генерации каждого токена. В схему управления памятью её включать бессмысленно: точечно отредактировать нельзя, можно только дообучить или переобучить модель целиком.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Prospective memory&lt;/strong&gt; («напомни мне в пятницу») — один из тех пунктов, из-за которых в некоторых классификациях список разрастается до четырёх-пяти типов вместо трёх (см. вступление). Отдельной оси или типа под него заводить не нужно: это частный случай Оси 2: запись в persistent storage плюс внешний триггер (cron, очередь задач), который в нужный момент кладёт эту запись в working memory нового запуска. Технически это ничем не отличается от обычного правила с полем &lt;code&gt;trigger_at&lt;/code&gt; вместо &lt;code&gt;trigger: "before_deploy"&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;reminder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;rule&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;trigger_at&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;2026-09-18T09:00:00Z&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;action&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;follow up with customer about renewal&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;done&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h2&gt;Ось 3: кому принадлежит память&lt;/h2&gt;
&lt;p&gt;Есть и третье измерение, которое обычно упускают из виду в разговорах про «типы памяти», хотя на практике оно решает больше инженерных проблем, чем классификация по содержанию. Это governance — кто пишет, кто читает и когда:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Scope&lt;/strong&gt; — память привязана к пользователю, к агенту (общая для всех) или к организации (политики и compliance).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update strategy&lt;/strong&gt; — память пишется прямо во время диалога (hot path) или отдельным фоновым процессом между сессиями (background consolidation / «sleep time compute»).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Permissions&lt;/strong&gt; — read-write по умолчанию, но для общих политик и compliance-правил обычно делают read-only, чтобы одна инъекция в диалоге не смогла тихо переписать поведение агента для всех остальных пользователей.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;# Организационная память read-only — агент читает, но не пишет&lt;/span&gt;
&lt;span class="c1"&gt;# (точные пути к полям рантайм-объекта зависят от версии LangChain/Deep Agents;&lt;/span&gt;
&lt;span class="c1"&gt;# здесь — актуальная на момент написания схема из их документации)&lt;/span&gt;
&lt;span class="n"&gt;backend&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CompositeBackend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;StateBackend&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="n"&gt;routes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;&amp;quot;/memories/&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;StoreBackend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;namespace&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;rt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;server_info&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;identity&lt;/span&gt;&lt;span class="p"&gt;,)),&lt;/span&gt;  &lt;span class="c1"&gt;# per-user, read-write&lt;/span&gt;
        &lt;span class="s2"&gt;&amp;quot;/policies/&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;StoreBackend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;namespace&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;rt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;org_id&lt;/span&gt;&lt;span class="p"&gt;,)),&lt;/span&gt;              &lt;span class="c1"&gt;# org-wide, read-only&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img alt="Схема: Agent читает и пишет в User scope (read-write), из Org scope только читает; попытка агента записать инструкцию из диалога в Org scope блокируется правами доступа" src="https://lakedapp.com/blog/agent-memory-framework/agent-memory-governance-diagram.svg"&gt;&lt;/p&gt;
&lt;p&gt;Именно эта ось чаще всего создаёт проблемы уже в проде, причём не на этапе прототипа, а позже, когда к памяти получают доступ несколько пользователей или агентов сразу. Практический пример: агент поддержки записывает в общую память тикета заметку вида «клиент попросил пропустить проверку возраста» — и если эту память без разбора читают другие сессии или другой агент, инструкция может незаметно повлиять на чужой диалог. Отсюда рабочее правило по умолчанию: скоуп на пользователя, если нет явной причины делиться; общие политики — read-only и заполняются кодом приложения, а не самим агентом в диалоге.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Коротко: чем оси отличаются друг от друга&lt;/h2&gt;
&lt;p&gt;Прежде чем сводить всё в таблицу — три оси одним взглядом, потому что дальше они постоянно будут использоваться вместе:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ось 1 (что)&lt;/strong&gt; — какого рода информация: устойчивый факт, разовое событие или повторяемое правило. Отвечает на вопрос «что это по содержанию».&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ось 2 (как и где)&lt;/strong&gt; — физически лежит ли это в промпте прямо сейчас (working memory), хранится ли отдельно (persistent storage) и как попадает из одного в другое (retrieval). Отвечает на вопрос «где это находится в конкретный момент».&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ось 3 (чьё)&lt;/strong&gt; — кому принадлежит: пользователю, агенту или организации; кто и когда это пишет; можно ли это редактировать или только читать. Отвечает на вопрос «кто управляет этой записью».&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Это не альтернативные классификации на замену друг другу, а три независимых среза одной и той же записи: у любого факта, события или правила есть свой ответ по каждой из трёх осей одновременно (пример разбора одной записи по всем трём — ниже, в кейсе с агентом поддержки).&lt;/p&gt;
&lt;h2&gt;Собираем фреймворк&lt;/h2&gt;
&lt;p&gt;Сведём эту схему в одну таблицу 3×3 плюс ось governance сверху:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Working memory&lt;/th&gt;
&lt;th&gt;Persistent storage&lt;/th&gt;
&lt;th&gt;Retrieval&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Факт&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Пока не вычищен из контекста&lt;/td&gt;
&lt;td&gt;&lt;code&gt;facts/user_123.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;точный лукап по ключу&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Событие&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Последние N шагов диалога&lt;/td&gt;
&lt;td&gt;лог прошлых запусков / thread history&lt;/td&gt;
&lt;td&gt;поиск по смыслу или по &lt;code&gt;user_id&lt;/code&gt;/&lt;code&gt;org_id&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Правило&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Часть system prompt&lt;/td&gt;
&lt;td&gt;&lt;code&gt;procedures/deploy_checklist.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;обычно читается целиком, не ищется&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Для каждой ячейки отдельно решается: кто владеет этой памятью (user / agent / org) и когда она пишется (hot path / background).&lt;/p&gt;
&lt;p&gt;Практический алгоритм при проектировании памяти агента:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Что это&lt;/strong&gt; — устойчивый факт, разовое событие или повторяемое правило?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Переживёт ли это конец сессии?&lt;/strong&gt; Если нет — working memory достаточно, ничего сохранять не нужно.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Как модель это найдёт в следующий раз&lt;/strong&gt; — по точному ключу, по смыслу, по времени, или файл просто всегда читается целиком?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Кто владеет этой информацией&lt;/strong&gt; — конкретный пользователь, агент в целом, или организация? Нужен ли read-only, чтобы защититься от инъекций через shared state?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Когда это пишется&lt;/strong&gt; — сразу в диалоге, или можно отложить в фоновую консолидацию, чтобы не тратить латентность на каждый ход?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ответьте на эти пять вопросов для каждого вида информации — и получится архитектура памяти агента, а не список абстрактных «типов».&lt;/p&gt;
&lt;h3&gt;Пример: агент поддержки клиентов&lt;/h3&gt;
&lt;p&gt;Три кандидата на «память» из одного диалога с клиентом SaaS-продукта:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;«Клиент на тарифе Pro, оплата продлевается 2026-11-01»&lt;/em&gt; — факт. Переживёт сессию → хранится в &lt;code&gt;facts/customer_{id}.md&lt;/code&gt; или в таблице CRM; скоуп — пользователь, read-write; пишется в hot path сразу после ответа billing API; находится по точному ключу &lt;code&gt;customer_id&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;«За последний месяц клиент три раза жаловался на медленную загрузку отчётов»&lt;/em&gt; — событие. Переживёт сессию → лог тикетов; скоуп — пользователь (или agent, если паттерн нужно эскалировать на команду продукта); пишется в hot path при закрытии тикета; находится поиском по смыслу или по &lt;code&gt;customer_id&lt;/code&gt; + временному окну.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;«Возврат денег оформляется только через форму X, вручную — нельзя»&lt;/em&gt; — правило. Это не про конкретного клиента, живёт дольше любой сессии → &lt;code&gt;policies/refunds.md&lt;/code&gt;; скоуп — организация, для агента &lt;strong&gt;read-only&lt;/strong&gt;; пишется только кодом или командой поддержки; читается целиком как часть system prompt при любом обращении к теме возвратов.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Три записи выглядят одинаково — «что-то, что стоит запомнить», — а инфраструктура и права у них разные. Ради этого и стоит разводить содержимое (Ось 1), способ доставки (Ось 2) и владение (Ось 3) отдельно: одна табличка «тип памяти» без этих осей не подскажет, где хранить и кто может писать.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Почему термины расходятся даже у профессионалов&lt;/h2&gt;
&lt;p&gt;Область молодая и быстро меняется: устоявшегося стандарта нет, а термины во многом заимствованы из когнитивной психологии — удобная метафора, но не точная модель для программной архитектуры. К тому же каждая компания описывает память под свой продукт: LangChain — под LangGraph/Deep Agents, Anthropic — под контекстное окно Claude, IBM — как обзорный учебный материал. Поэтому одни и те же слова получают разный вес и разную вложенность, а из в общем-то простой идеи «сохрани данные, потом достань нужный кусок обратно» вырастают списки из четырёх, пяти, семи пунктов — не обязательно потому, что кто-то ошибается, а потому что каждый список отвечает на свой практический вопрос и рассчитан на свою аудиторию.&lt;/p&gt;
&lt;p&gt;Практический вывод отсюда простой: встретив очередную классификацию памяти, не пытайтесь свести её к одному «правильному» списку типов. Полезнее спросить — на какой из трёх осей (что / как достаётся / кто владеет) она вообще отвечает, и какую инженерную задачу помогает решить именно в вашем случае.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Источники: &lt;a href="https://arxiv.org/abs/2309.02427"&gt;CoALA (Sumers et al., 2023)&lt;/a&gt;, &lt;a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents"&gt;Anthropic — Effective context engineering for AI agents&lt;/a&gt;, &lt;a href="https://docs.langchain.com/oss/python/deepagents/memory"&gt;LangChain — Memory for Deep Agents&lt;/a&gt;, &lt;a href="https://www.langchain.com/blog/memory-for-agents"&gt;LangChain — Memory for agents (blog)&lt;/a&gt;, &lt;a href="https://www.ibm.com/think/topics/ai-agent-memory"&gt;IBM — What is AI agent memory?&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content><category term="AI-агенты"/><category term="AI-агенты"/><category term="память"/><category term="LangChain"/><category term="Anthropic"/><category term="архитектура"/></entry><entry><title>Чек-лист: 7 вопросов перед миграцией на Google Cloud</title><link href="https://lakedapp.com/blog/gcp-migration-checklist/" rel="alternate"/><published>2026-09-02T10:00:00+02:00</published><updated>2026-09-02T10:00:00+02:00</updated><author><name>Edgar L</name></author><id>tag:lakedapp.com,2026-09-02:/blog/gcp-migration-checklist/</id><summary type="html">&lt;p&gt;Семь вопросов, которые стоит закрыть до переноса дата-платформы на GCP, а не через месяц после.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Миграция дата-платформы почти никогда не срывается на самом переносе данных — она срывается на вопросах, которые никто не задал заранее. Вот семь, которые мы проверяем в первую очередь.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Кто владеет данными после переноса?&lt;/strong&gt; Роли и права доступа в BigQuery/IAM должны быть определены до миграции, а не подгоняться постфактум под то, как всё исторически было устроено.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Как считается совокупная стоимость&lt;/strong&gt; — не только вычисления, но и хранение, исходящий трафик и слот-часы BigQuery при пиковой нагрузке?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Что происходит с существующими пайплайнами&lt;/strong&gt; — переписываются под управляемые сервисы (Dataflow, Composer) или переносятся как есть на Compute Engine?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Есть ли план отката&lt;/strong&gt;, если что-то пойдёт не так на середине переноса, а не только "бэкап на всякий случай"?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Как валидируются данные&lt;/strong&gt; после переноса — построчное сравнение, контрольные суммы, сверка агрегатов?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Кто отвечает за мониторинг и алерты&lt;/strong&gt; в новой среде с первого дня, а не после первого инцидента?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Совместим ли CI/CD&lt;/strong&gt; с целевой инфраструктурой, или релизный процесс придётся выстраивать заново?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Если хотя бы на три из семи пунктов нет чёткого ответа — обычно стоит сначала провести обзор архитектуры, а потом уже планировать даты переноса. &lt;a href="/#contact"&gt;Опишите свою платформу&lt;/a&gt;, поможем разложить миграцию на понятные шаги.&lt;/p&gt;</content><category term="Облако"/><category term="Google Cloud"/><category term="миграция"/><category term="чек-лист"/><category term="инфраструктура"/></entry><entry><title>Как мы ускорили дата-пайплайн в 10 раз</title><link href="https://lakedapp.com/blog/data-pipeline-x10/" rel="alternate"/><published>2026-08-20T10:00:00+02:00</published><updated>2026-08-20T10:00:00+02:00</updated><author><name>Edgar L</name></author><id>tag:lakedapp.com,2026-08-20:/blog/data-pipeline-x10/</id><summary type="html">&lt;p&gt;Разбор одного узкого места, из-за которого ночной ETL занимал 6 часов вместо 40 минут — и что мы поменяли в архитектуре.&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Проблема&lt;/h2&gt;
&lt;p&gt;Ночной пайплайн собирал события из нескольких источников в BigQuery и каждую ночь занимал около 6 часов — время, за которое стоимость Slot-часов и риск не успеть к утренним отчётам росли параллельно. Схема не менялась почти год, но объём данных вырос почти в 5 раз.&lt;/p&gt;
&lt;h2&gt;Диагностика&lt;/h2&gt;
&lt;p&gt;Профилирование показало три конкретные причины:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;полное пересчитывание витрин вместо инкрементальной загрузки;&lt;/li&gt;
&lt;li&gt;один гигантский DAG в Airflow без параллельных веток;&lt;/li&gt;
&lt;li&gt;отсутствие партиционирования и кластеризации на исходных таблицах.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Что изменили&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Партиционирование по дате и кластеризация&lt;/strong&gt; по ключу события — сканирование сузилось до нужного окна вместо полной таблицы.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Инкрементальная загрузка&lt;/strong&gt; вместо полного пересчёта: обрабатывали только новые и изменённые записи.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Разбили DAG на независимые ветки&lt;/strong&gt;, которые Airflow теперь исполняет параллельно, а не последовательно.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Результат&lt;/h2&gt;
&lt;p&gt;Пайплайн стал укладываться в 35–40 минут — то есть почти в 10 раз быстрее — а стоимость обработки в BigQuery упала примерно на 60%, потому что каждый прогон сканирует на порядок меньше данных.&lt;/p&gt;
&lt;p&gt;Если у вас похожая картина — ночной пайплайн, который со временем "распух" вместе с объёмом данных — обычно это тот же самый набор причин. &lt;a href="/#contact"&gt;Расскажите о своей задаче&lt;/a&gt;, обсудим, что применимо у вас.&lt;/p&gt;</content><category term="Инжиниринг"/><category term="BigQuery"/><category term="Airflow"/><category term="дата-инжиниринг"/><category term="производительность"/></entry></feed>