TGViewer
Channel Public Channel
DeepSchool / underthehood

DeepSchool / underthehood

@deepschool_underthehood

Это канал школы deepschool.ru. Каждую неделю ведущим канала становится один из преподавателей или друзей школы. Каждую неделю: новый человек, новая область и домен, новые истории, наблюдения и рекомендации. Поддержка: @deepschool_support
Subscribers
1.13K
Photos
257
Videos
28
Links
131
Recent Posts 20 shown
Post #544 625
На этом моя неделя заканчивается

Пытался показать агентскую разработку не со стороны хайпа, а со стороны реальных приколов:
— tool оказался backend-friendly, а не LLM-friendly
— ReAct-промпт превратился в монолит
— модели не дали места, где можно безопасно подумать
— часть ошибок оказалось проще чинить кодом, а не промптом

Главная мысль недели:
Если вы не можете дообучить модель, вас ждёт захватывающий и удивительный мир жонглирований, переворотов и фокусов с контекстом

В таком сетапе оказывается, что качество системы во много зависит не только от модели, но и от интерфейсов, декомпозиции и проверок вокруг неё

Спасибо всем, кто читал ❤️

P.S. Дальше мои мысли возвращаются в @yet_another_mle
  • ❤ 12
  • 🔥 5
  • 👍 2
  • 💯 1
Post #543 600
Tool call — это просто текст. Его можно модифицировать

Когда LLM вызывает инструмент, это не какой-то магический вызов функции напрямую. Сначала модель генерирует структуру в JSON, примерно такую:

{
"name": "search_cruises",
"args": {
"departure_cities": ["москва"],
"departure_date_from": "2026-08-10",
"arrival_date_to": "2026-08-30"
},
"type": "tool_call"
}


А уже потом наш код берет name, берет args и выполняет нужный инструмент

И вот между этими двумя шагами можно вклиниться

У меня это всплыло на датах

Было два кейса:

1. Пользователь говорит: “хочу круиз в мае”
Если сейчас сентябрь, то логично искать май следующего года. Но LLM иногда ставила май текущего года - то есть прошедшую дату

2. У gpt-4.1-mini были проблемы с февралем 2026
Она периодически считала, что там 29 дней

В итоге я починил это не промптом, а исправлением аргументов функцией перед вызовом инструмента

1. LLM сгенерировала, что хочет tool call
2. Если это "search_cruises"
- Проверяем даты. Исправляем год, если месяц уже прошел
- Проверяем количество дней в месяце, исправляем
3. Возвращаем исправленный tool call обратно в пайплайн — как будто это и был ответ LLM

Для остального пайплайна это выглядит так, будто модель сама сразу вызвала инструмент с правильными аргументами

Работает безотказно
  • ❤ 14
  • 🤝 5
  • 👍 2
  • 🔥 1
Post #542 562
Пока писал пост про перегрузку LLM-промпта, понял, что упустил важное ограничение: ответ агента сразу стримился пользователю. Нельзя, чтобы промежуточные размышления модели не должны были быть видны пользователю, поэтому reasoning вслух я фактически запретил.

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

Ей нужно сразу понять задачу, выбрать нужные инструменты, удержать ограничения, не нарушить формат и начать писать user-facing ответ. То есть сложную логику надо было “проризонить” внутри, без размышлений.

В таком режиме complex instruction following деградирует сильнее. И тогда разбиение на planner + executor выглядит уже не просто как способ разгрузить промпт.

Это попытка жестко задать архитектуру рассуждения модели на уровне графа выполнения.

Planner думает, определяет состояние по бизнес логике и даёт план. Он размышляет вслух. Executor вызывает инструменты и пишет ответ пользователю. Это происхожит все ещё молча, но уже работает лучше, потому что задача упрощена.

По сути, это schema-guided reasoning, но вынесенный из промпта в алгоритм.

Не “модель, пожалуйста, рассуждай вот так”, а сам порядок промптов и их цель добавляет рассуждение каждый раз.

Возможно, если бы я мог позволить модели свободно рассуждать перед ответом, проблема была бы не такой критичной. Но если reasoning нельзя показывать пользователю, то им все равно нужно как-то управлять.

Вывод для меня такой: complex instruction following ломается не только из-за длинных промптов.

Иногда проблема в том, что модели не дали безопасного места, где она может подумать. А если такого места нет, его приходится создавать архитектурно.

P.S. интересно услышать ваши подходы к тому, как добиться от LLM следования сложной логике!
  • ❤ 13
  • 👍 6
  • 🤩 3
  • 👏 1
Post #541 578
ReAct-промпт стал монолитом

Это был узел в агенте, который искал круизы и вел пользователя по процессу бронирования. Тот самый, который упоминался в посте выше.

В этом агентском цикле модель должна была делать tool calls по инструкциям, а затем отвечать пользователю.

Пока бронирований не было, всё работало нормально: агент искал круизы, уточнял параметры и показывал варианты. Алгоритм был достаточно простым.

Потом добавилась booking-логика. Причем уже заметно сложнее: с явными состояниями, переходами и запретами.

И в одном промпте оказалось сразу три ответственности:
— определить бизнес-сценарий
— выбрать и вызвать нужные инструменты
— отформатировать ответ пользователю

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

Пошли ошибки:
— неправильно определялись сценарии
— пропускались шаги
— игнорировались важные запреты
— да, те самые, которые написаны капсом и с восклицательными знаками

Проблема была в том, что один промпт пытался быть сразу planner’ом, tool executor’ом и formatter’ом.

Для LLM это превращается в complex instruction following: много ограничений разного типа внутри одного вызова.

Формально — один промпт.
По факту — несколько задач в одном forward pass.

Решение было не в том, чтобы еще раз “лучше написать промпт”.

Мы разделили узел на два этапа:
— planning: определить сценарий и план действий
— tool execution: выполнить нужные вызовы

После этого стало проще понимать, где ломается логика: на выборе сценария или на исполнении.

Следующий шаг — отдельно вынести presentation logic.

Главный вывод:

когда промпт начинает содержать бизнес-логику, он становится кодом.
А код нужно декомпозировать.

Благо, на моем любимчике LangGraph это легко провернуть
  • 🔥 8
  • ❤ 6
  • 🐳 4
Post #540 586
Агенту нельзя просто дать backend API и ждать магии

Делали простой сценарий:
— есть LLM-агент
— есть API сервиса поиска круизов
— есть клиент, который пишет: “хочу круиз из Казани в июле на 5 дней”

Задача агента — вызвать поиск и вернуть подходящие варианты.

Казалось бы, всё просто: берем метод API, заворачиваем в MCP tool, описываем параметры и даем агенту.

Формально работает. Но на практике быстро выяснилось, что tool получился не “LLM-friendly”, а “backend-friendly”.

То есть удобный для кода, но хрупкий для модели.

И в какой-то момент стало понятно: проблема не в агенте, а в интерфейсе, который мы ему дали.

Антипаттерн 1 — цепочка вызовов вместо одного

Проблема: инструмент поиска принимал не человеческие сущности, а внутренние id: города, теплоходы, направления, стоянки.

Поэтому агенту приходилось сначала вызывать tool-маппинг “название → id”, а потом уже search_cruises.

Что ломалось:
— модель забывала вызвать маппинг
— вызывала его не для всех сущностей
— путала полученные id между параметрами: cityStart, cityEnd, cities

Короткий вывод: если пользователь говорит названиями, а инструмент требует id, мы заставляем LLM быть не ассистентом, а glue-code между UI и базой данных.

Фикс: принимать в LLM-facing tool названия:
— город отправления: Москва
— теплоход: Беда
— направление: Волга

А id-резолвинг делать внутри инструмента.

Антипаттерн 2 — непопулярные типы аргументов

Проблема: некоторые параметры API были типизированы странно. Например, одиночное значение передавалось как массив: не durationFrom = 7, а durationFrom = [7].

Что ломалось:
— модель передавала скаляр вместо массива
— массив не там
— не тот shape
— параметр вообще пропускался

Короткий вывод: LLM лучше работает с boring-типами: string, number, boolean, простые объекты вроде min/max.

Необычная форма данных — это не нейтральная backend-деталь, а дополнительная когнитивная нагрузка.

Фикс:

Было:
— durationFrom: [7]
— durationTo: [10]

Стало:
— duration_days_min: 7
— duration_days_max: 10

Или один понятный объект: duration_days: от 7 до 10

Антипаттерн 3 — плохие имена параметров

Проблема: параметры назывались как поля backend API, а не как понятия из пользовательского запроса: cities, dateTo, costFrom, category_id, motorships.

Что ломалось: модель путала семантику.

Например, cities может значить город отправления, город прибытия, стоянки, города маршрута или просто направление.

dateTo тоже неочевиден: это дата отправления “до” или дата прибытия “до”?

Короткий вывод: имя параметра — это часть prompt’а.

Если имя требует знания внутренней модели данных, LLM начинает угадывать.

Фикс:
Было: cities, dateTo, costFrom
Стало: must_visit_cities_or_landmarks, departure_before, price_min_rub

Да, имена становятся длиннее. Но для LLM это плюс: название параметра одновременно работает как мини-инструкция.

Главный вывод

Хороший tool для агента — это не thin wrapper над backend API.

Backend API проектируется под код: id, внутренние типы, короткие поля, цепочки методов.

LLM-facing tool лучше проектировать под модель и пользовательскую задачу:
— одно пользовательское действие = один tool
— человеческие названия вместо внутренних id
— простые boring-типы вместо legacy-форматов
— говорящие имена параметров
— минимум промежуточного состояния

Иначе получается странная ситуация: модель вроде умная, MCP вроде подключили, API вроде рабочий — а агент всё равно хрупкий.

Потому что для LLM tool — это не endpoint.

Это UX.
  • 👍 19
  • ❤ 9
  • 🤩 5
  • 🤷‍♂ 4
Post #539 673
Всем привет! Меня зовут Егор, на этой неделе канал веду я

Я эдакий фулстак мл - начинал с CV в медицине, а потом в банке, а затем делал агентов и обучал VLM (и даже чуть-чуть рексис). Веду канал @yet_another_mle

Я, как и многие, тоже подвержен LLM-ой лихорадке, поэтому на этой неделе хочу поразбирать случаи из практики разработки агентов. Должно быть интересно!
  • 👍 22
  • 🔥 10
  • ❤ 3
Post #538 670
Неделя авторства тут пересеклась с организацией хакатона, поэтому не успел написать побольше постов. Надеюсь, было интересно!

Напоследок поделюсь тем, каково делать PhD в Германии (точнее в Мюнхене, так как Германия довольно разная). Офигенно. Если послушать людей или почитать чаты, многие жалуются на переработки – это, конечно, не 40 часов в неделю – и низкие зарплаты. Если сравнивать с индустрией, то это так, но низкой я бы зарплату не назвал. Мне её хватило, чтобы посетить три десятка стран (ох и запарился я их перечислять при недавней подаче на визу в США). И это я ещё по должности не иишник – у них зп на треть выше. Ну и да, на пхд надо идти с готовностью работать много

Сама пхд-программа порой подкидывает невероятный опыт. Недавно был на ретрите по написанию статей в Альпах с отдельной комнатой и ресторанной едой всю неделю. Для меня – бесплатно. До этого ездил на конференцию в официально самое красивое место Европы, на другую в Сингапур и на летнюю школу в Оксфорд. Полезно для работы и невероятно круто

В общем, PhD – это сложно, но кайфово. При определённом складе ума и щепотке удачи
Telegram человек наук
  • 🔥 23
  • ❤ 12
  • 🤩 2
Post #537 709
Другое важное направление – диагностика болезней и стратификация пациентов. На языке машинного обучения это классификация и кластеризация. Вам дают какие-нибудь данные и нужно понять, что за болезнь у человека или есть ли там какие-то интересные кластеры, которые врачи не видят. Например, не все пациенты реагируют на лечение. Что-то в них отличается, но что? Есть надежда, что это поможет понять машинное обучение

Особенно это важно в исследованиях рака, где у каждого пациента по сути уникальная болезнь, а лекарства работающие у одних не срабатывают у других. В этой области на слуху стартап Noetik. Они используют данные пространственной транскриптомики. Это как картинки из под микроскопа, только вместо 3 цветовых каналов есть тысячи каналов, каждый из которых показывает активность определённого гена. Дальше компания тренирует masked автоэнкодер – прячет часть. картинки и просит нейросеть восстановить спрятанное по окружению. Пример на видео

Так компания надеется, что нейросеть во-первых выучит биологию и ей можно будет задавать counterfactual вопросы – что изменится, если активность вот этого гена будет вот такой? А также, хочется верить, можно будет кластеризовать (мы называем это «стратифицировать») пациентов и понять, кому нужно какое лекарство
  • 🔥 12
  • ❤ 5
  • 👍 4
Post #536 741
Примерно каждый первый стартап по машинному обучению в медицине занимается разработкой лекарств. Что это означает?

В идеальном мире – вы запихиваете в алгоритм данные пациента (например, медицинскую карту, результаты анализов или снимок из микроскопа), а он говорит вам какое лекарство нужно применить, чтобы пациент выздоровел. А если такого лекарства ещё не придумали, генерирует химическую формулу новой молекулы. Она работает так как надо без побочных эффектов, а ещё легко и дёшево синтезируется. Мы от этого идеального мира ещё ох как далеко

Здесь есть несколько сложностей. Одна из них – representation learning. Пока не существует хороших способов представления молекул, а их пространство ведёт себя очень непредсказуемо. Есть такой термин как «activity cliff» – небольшое изменение в составе молекулы может приводить к огромному изменению её активности. Пример на картинке, голубые числа снизу – активность на логарифмической шкале (pK)

Пока страются отработать методы на более простых задачах, таких как классификация лекарств по данным. К примеру, капают на клетки разными лекарствами, смотрят на фото из микроскопа как изменяется их внешний вид и тренируют нейросетку распознать по этим снимкам лекарства. Именно таким занимается компания Recursion из поста повыше. Так можно обкатать методы, собрать данные и возможно однажды решить обратную задачу – задать, какие мы хотим получить клетки, и попросить алгоритм выдать формулу нужного лекарства
  • 🔥 12
  • 😍 9
  • ❤ 6
  • 👍 1
Post #535 1.14K
Как вообще применяется машинное обучение в биологии? Со стороны инструментов – примерно так же, как везде. Если вы анализируете картинки, применяемые инструменты те же самые, что и в других областях. Например, визуальный трансформер DINO, который мета презентует на картинках собак и сендвичей, также успешно применяется для сегментации опухолей. А если вы работаете с естественным языком, никто не помешает натравить трансформеры на ДНК вместо текста из интернетов (здесь хорошим примером будет AlphaGenome). Не всегда это работает напрямую, но в любом случае пересечение методов с другими областями очень сильное

Что отличается – специфика данных, их количество (как в большую, так и в меньшую сторону) и зачем эти методы применяются. Основными задачами по важности и количеству влитых в них денег являются разработка лекарств и диагностика болезней. Первым занимается, например, Isomorphic Labs – дочка Дипмайнда, развивающая успех моделей для предсказания структуры белка. Их цель – «решить все болезни». Амбициозно, но если у кого-то это и получится, то у Дипмайнда

Вторая задача – диагностика или на языке машинного обучения – классификация по каким-либо данным. Например, предсказание диагноза по картинкам с микроскопа. Здесь есть поучительная история для машинного обучения в целом. Глядя на успех свёрточных нейросетей для работы с изображениями, Хинтон в 2016 году предсказал, что радиологи – врачи, смотрящие на картинки и делающие по ним вывод – будут не нужны через 5 лет. Через 10 лет после этой фразы радиологов больше, чем когда-либо (прикрепил мем в тему). Почитать, почему так вышло, можно вот тут. Оказалось, что работа радиологов чуть сложнее, чем классификация картинок, а внедрение нейросеток в медицину – тяжелее, чем максимизация F-скора

Ещё, конечно, есть фундаментальная наука, где приложения машинного обучения ограничиваются только фантазией исследователей: от расшифровки языка китов до изучения иммунной системы бактерий. Но так как я из прикладных областей, буду рассказывать о них
  • ❤ 16
  • 🔥 12
  • 👍 5
  • 😁 3
Post #534 800

Forwarded from человек наук

Идеальный пример приложения машинного обучения к биологии. Компания Recursion разрабатывает лекарства, тестируя огромное количество химических веществ на клеточных линиях и наблюдая как клетки меняют вид под воздействием разных молекул. Раньше учёные полагались на окрашивание клеток – безумно красивый биологический метод, позволяющий по-разному окрасить органеллы: ядро, элементы клеточного скелета и другие. Однако с развитием машинного обучения оказалось, что это не обязательно. Нейросетевая модель может распознать элементы клеток по обычному изображению со светового микроскопа! Результат неотличим от применения более дорогого и сложного окрашивания клеток

Помимо экономии времени и денег на красители, это ещё и позволяет смотреть на динамику. Раньше это было невозможно: красители повреждают элементы клетки и она ведёт себя по-другому, а протокол окрашивания требует убийства и фиксации клеток

Быть может, и другие методы можно упростить

#биология@chelovek_nauk #програмирование@chelovek_nauk
  • ❤ 13
  • 🔥 8
  • 👍 1
Post #533 804
Начну со своего любимого примера приложения ML к биологии. Если вы когда-нибудь смотрели в микроскоп на биологические препараты, то знаете, что без окраски там сложно что-то увидеть. Понятно, что какие-то структуры есть, но чтобы из различить, человеческому глазу нужна окраска препаратов. А вот компьютерам, оказывается, не нужна! И это хорошие новости для разработки лекарств
Telegram человек наук Идеальный пример приложения машинного обучения к биологии. Компания Recursion разрабатывает лекарства, тестируя огромное количество химических веществ на клеточных линиях и наблюдая как клетки меняют вид под воздействием разных молекул. Раньше учёные полагались…
  • 🔥 11
  • ❤ 2
  • 👍 1
Post #532 868
Привет! Я Вова и я применяю машинное обучение к биологии, а ещё веду канал человек наук. Сейчас я заканчиваю PhD в институте вычислительной биологии в Helmholtz Munich. Буду делиться с вами интересностями из биологии в ближайшую неделю!

Мы работаем с данными single-cell транскриптомики – это когда измеряют активность генов в сотнях тысяч клеток. Получаются очень большие данные – таблицы размером сотни тысяч клеток на десятки тысяч генов. Задача моего PhD – понять как связать такие данные с клиническими – табличками поменбше, содержащими информацию о пациентах. Так мы можем лучше понять развитие болезней, рано их детектировать или даже предложить возможное лечение

На картинке – пример как PhD влияет на человека. На самом деле, на втором фото я невыспавшийся после хакатона и дедлайна на конференцию, обычно я всё же выгляжу получше
  • 🔥 31
  • 🤝 10
  • ❤ 9
  • 👍 2
Post #531 1.52K
DeepSchool / underthehood Продолжаем про агентскую память [PART 3] Мне ближе био-мотивированные системы памяти Markdown, конечно, нравится: просто, наглядно, редактируемо руками. Но хочется, чтобы агент не просто хранил факты, а становился лучше после взаимодействий со мной. Самый…
Агентская память done right [PART 4 FINAL]

Hebbs — элегантный слой памяти для агентов. Наткнулся на него абсолютно случайно, рыская по GitHub. У проекта на момент написания 20 с небольшим звезд. Но после всего, что я прочитал и изучил на тему памяти, реализовал бы я её именно так.

базовая единица — эпизод ⭐️

Один и тот же эпизод живёт сразу в нескольких представлениях:
• как обычный текстовый memory item
• как вектор в HNSW embedding index
• как узел в графе связей
• как событие во времени
• как часть более поздних инсайтов и ревизий

То есть эпизод один, а способов вспомнить его — несколько.

Помимо этого: продуманная модель данных, минимум абстракций, MCP с 9 понятными инструментами, один ~25Mb бинарник, векторные модельки в ONNX, поддержка основных LLM API, клиентский API на Python, Typescript, Rust или C/C++ (через FFI).

Но главное — реализованы все ключевые паттерны, которые мы разобрали в PART 2 и PART 3.

4 способа вспомнить 🤨


/// hebbs-core/src/recall.rs
pub enum RecallStrategy {
Similarity,
Temporal,
Causal,
Analogical,
}


Хочешь хронологию по проекту — Temporal. Причинную цепочку от конкретного бага — Causal. Нечто похожее, но из другого домена — Analogical. Тупо семантический поиск — Similarity. Конечно же, можно все и сразу и параллельно.

К слову, связи в графе здесь предопределены: CausedBy, FollowedBy, RelatedTo, RevisedFrom, Contradicts, InsightFrom — LLM не сможет бесконтрольно плодить новые, как это часто бывает в подобных системах.

скоринг знаний

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

S = w_r×R + w_t×T + w_i×I + w_c×C

R = relevance — семантическая близость к запросу:
(1 − hnsw_distance)

T = recency — свежесть:
(1 − age / 30 days)

I = importance — значимость, задаётся агентом при вызове remember()

C = reinforcement — частота вспоминания:
log₂(1 + access_count) / log₂(1 + 100)

w — вес при каждой компоненте, соответственно

Дефолтные веса 0.5 : 0.2 : 0.2 : 0.1 ; можно задать вручную, можно юзать пресеты.

Свежий эпизод, стандартная важность, ни разу не вспоминали:
0.5×1.0 + 0.2×1.0 + 0.2×0.5 + 0.1×0.0 = 0.80

через месяц без обращений → T = 0, C = 0 → 0.10, почти забыт. Но если его регулярно вспоминали — C растёт логарифмически и тянет скор обратно вверх.

С позиции LLM агента всё тоже предельно просто: выбери 1 или несколько из 4 способов поиска, если надо, подкрути 4 ручки, чтобы настроить какие сигналы для тебя важнее в этом запросе.

reflect = daydreaming

Режим переоценки знаний происходит так:

(1) Cluster → группировка похожих эпизодов (embedding + temporal proximity)
(2) Propose → LLM генерирует кандидат-инсайты из кластера
(3) Validate → второй LLM-pass проверяет точность и полезность
(4) Consolidate → валидные инсайты → Insight сущности + InsightFrom связи

Каждый инсайт хранит confidence и lineage к исходным эпизодам. Обновили эпизод через revise() или удалили через forget() — зависимые инсайты автоматически помечаются как stale и перевалидируются в фоне. Можно включать автоматически: по количеству новых эпизодов, по расписанию, по накоплению записей высоким importance.

Вот основная разница между «хранить данные» и «накапливать опыт».

Итого

Для долгоживущего автономного LLM агента, особенно в режиме embedded типа умной колонки, Hebbs попадает в sweet spot: forgetting, reinforcement, reflection, lineage, conflict detection — при этом я понимаю, как работает каждый компонент и как его подкрутить.

Для бытовых задач и совместного наполнения некоторой базы знаний, думаю, достаточно инструментов типа QMD или LightRAG.

Из минусов отметил бы для себя малопопулярную RocksDB в качестве БД и отсутствие нативной поддержки мультимодальности. Но это скорее придирки.

Быстрые ссылки
• Hebbs — GitHub
• Hebbs Docs
• Recall Strategies
• Reflection / Background Learning
• API Overview
  • 🔥 11
  • ❤ 8
  • 👍 6
Post #530 1.05K
DeepSchool / underthehood Ещё не забыли? Продолжаем про агентскую память [PART 2] ⬅️ Сперва прокомментирую графики из прошлого поста! На нижней половине вроде всё понятно, поясню за верхнюю. По оси X: на сколько структурированными хранятся знания. Закинули PDF в агента, на выходе…
Продолжаем про агентскую память [PART 3]

Мне ближе био-мотивированные системы памяти

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

Самый ценный сигнал — неудачные моменты, где я явно дал обратную связь голосом:
— «не так, я просил короче»
— «сначала уточни, потом делай»
— «ты опять перепутал даты»

То есть голосовой интерфейс даёт supervision layer нахаляву. Если агент не умеет такие эпизоды отдельно переваривать, значимая часть опыта просто пропадает.

Daydreaming и два режима мышления

В студенческое время я заинтересовался вопросом эффективного обучения и прошёл курс Learning How To Learn на Coursera. Мало того, что в моменте сильно помогло с учёбой, так ещё базу получил о том, как мозг работает вообще.

🥱 мозг переключается между двумя режимами работы:

👊 Focused mode — концентрированный, целенаправленный. Ты решаешь конкретную задачу, мозг задействует определённые нейронные связи, нужные под эту задачу.

🦋 Diffuse mode — рассредоточенный, ассоциативный. Мозг «бродит», строит дальние связи, которые не видны при фокусировке. Это то, что происходит, когда ты моешься в душе и такой: «окак надо было сказать ей тогда в 2016».

И вот когда начал ковырять тему памяти, дизайнить какое-то своё решение, — вспоминаю про эти два режима. Окей, focused mode понятен — просто работа агента в моменте, working memory, горячий контекст все дела. Но вот diffuse похоже на то, чего не хватает, чтобы память стала живым инструментом! Надо просто времени от времени её консолидировать — «блуждать» по истории взаимодействий и делать какую-то оценку.

То есть помимо обычного retrieval мне захотелось отдельный режим, где агент сам проходит по прошедшим сессиям и пытается понять:
— где я его поправлял чаще всего
— какие ошибки повторяются
— какие предпочтения уже устойчивы
— что стоит поднять в long-term memory
— что можно превратить в рецепт на будущее


В самом простом виде это выглядит так:

[днём]
поговорили → агент накосячил → я его поправил голосом → эпизод пометился

[ночью]
агент прошёлся по спорным эпизодам → нашёл повторяющийся паттерн →
сжал его в правило / preference / recipe → перенёс в долгосрочную память


Когда вообще агенту уместно консолидировать память:
• между сессиями
• в простое
• когда внутри сессии подбираемся к лимиту контекстного окна
• пользователь попросил «подумай над своим поведением»

Похожую логику я увидел в препринте Active Dreaming Memory: там есть wake phase, где агент копит сырые эпизоды, и sleep phase, где они оффлайн консолидируются в более общие правила.

Потом нашёл тот самый Hebbs (сорри, люто прогрел). К слову, тогда же попалась классная статья на Хабре про похожий пет-проект.

Короче, меня всё меньше интересует память, которая просто ищет. И всё больше — память, которая умеет переваривать опыт. В следующем посте как раз разберу Hebbs подробнее — почему он мне кажется очень удачной серединой между graph memory layer™ и нейрокогнитивным космолётом.


коллеги, прикрепляю ссылки!

• Learning How to Learn
• Learning How to-Learn: Book [Excerpt]
• Focused vs Diffuse Thinking
• Memory Consolidation
• Memory for Autonomous LLM Agents: Mechanisms, Evaluation, and Emerging Frontiers
• AI Meets Brain: A Unified Survey on Memory Systems from Cognitive Neuroscience to Autonomous Agents
• Active Dreaming Memory: Biologically-Inspired Episodic Consolidation for Lifelong Learning in Autonomous Agents
• Научил ИИ-агента помнить важное и забывать лишнее в SQLite
  • ❤ 9
  • 🔥 8
  • 👍 5
Post #529 991
DeepSchool / underthehood Память для LLM агентов [PART 1] Привет... Спишь? Тема оказалась огромной, поэтому разбиваю на несколько постов. Сегодня — обзор ландшафта, общие паттерны и картинка, куда движется индустрия. Далее — разбор одного моего любимчика и сравнение с остальными.…
Ещё не забыли? Продолжаем про агентскую память [PART 2]

⬅️ Сперва прокомментирую графики из прошлого поста!

На нижней половине вроде всё понятно, поясню за верхнюю.

По оси X: на сколько структурированными хранятся знания. Закинули PDF в агента, на выходе у вас что? Саммари? Папка с десятком MD файлов? Или 100+ узлов в графовой БД, по 3-4 связи на каждый?

По оси Y: автономия — сколько супервизии от человека требуется, чтобы решение не «разъехалось» и агент не начал галлюционировать с памятью больше, чем делал бы это без неё.

Левая нижняя часть: небольшой набор Markdown файлов, линковка ссылками на другие документы. Такое отлично работает для более статичных файлов типа тех же CLAUDE.md, MEMORY.md, ..., SKILL.md и т. п. В каждом файле ВЫ явно инструктируете агента как пользоваться этим, зачем он нужен и что сюда писать. Даёте агенту какие-то MCP ручки для чтения построчно, для векторного поиска или Ctrl+F с помощью grep.

НО в таком режиме вы должны активно принимать участие в наполнении этих файлов и время от времени их валидировать. LLM Wiki = Personal Knowledge Management (PKM). В OpenClaw это самая базовая память, но очевидно из-за её недостатков они добавляют альтернативные движки типа Honcho.

А что если хотим долгоживущий процесс, автономного агента а-ля Jarvis?

Правая верхняя часть: проекты типа Vestige: 29 модулей, микс из биологии, техник интервального повторения, в общем полный фарш. Чисто теоретическия такая система при корректной настройке будет поддерживать себя сама, но настройка и обвязка вокруг агента требуется приличная.

Недавно хайпанувший MemPalace, хотя и где-то рядом, совсем о другом — полностью базируется на идее мнемотехники «Дворец памяти», вы могли видеть её подобие в игре Alan Wake 2 (превьюха). Идея дворца памяти эксплуатирует тот факт, что у кожаных по умолчанию лучше работает географическая память — она тупо нужна для выживания. Так можно выдумать некое место и «расставлять» воспоминания там как предметы. Но каким образом это должно помогать LLM... Почему метрики на бенчмарках хорошие? ❓

Что общего во всех работающих подходах

😓 Гибридный поиск — используем векторный, полнотекстовый (BM25), и графовый поиск. Один просто не покрывает эффективно все кейсы. Прогоняем несколько видов — результаты объединяем, например, методом Reciprocal Rank Fusion. Здесь же часто добавляют реранкинг отдельной моделью, HyDE, фильтрации по Mean Reciprocal Rank. Но если тут сильно упарываться, скорее всего вы переизобретёте QMD.

🔄 Иерархические мета-индексы — поверх сырых данных строятся отдельные слои, которые связывают информацию на более высоком уровне. Не «ещё одна таблица», а отдельный проход с помощью LLM для выявления паттернов и неочевидных связей. Тут хорошо помогают reasoning модели, но важно грамотно заварить для них контекст, иначе будет искать связи там, где их нет.

💀 Механизм забывания — память не должна жить вечно. Что-то должно забываться, что-то объединяется или суммаризируется. Без этого — контекст взрывается через пару месяцев. Самый ходовой вариант — взять известную кривую забывания Эббингауза как функцию «важности» знания от времени. Не забывайте, что кривую Эббингауза абьюзят студенты с флеш-карточками Anki, чтобы напротив — не забывать информацию. Поэтому в идеале каждое «вспоминание» должно бафать релевантность. Так сделано в том же Vestige и Hebbs.

🍆 Самообслуживание — система должна сама подсвечивать и устранять противоречия в данных. Раньше вы писали на Python, а теперь на Rust — идеальный агент должен знать что было до и после, что актуально сейчас. Веб-поиск вернул одну фамилию первого автора статьи, а у вас в данных другая? — Надо подсветить это и связать оба варианта, позже в отдельном режиме методично устранить расхождение.

📸 История изменений — если факт обновился, важно понимать, что было раньше. Не просто перезаписать, а сохранить исторический лог. Карпатый предлагал append-only лог-файл, в Hebbs такое реализуется через Graph посредством CausedBy связи, но прошлые версии по умолчанию не попадают в выдачу.
  • 👍 10
  • 🔥 9
  • ❤ 6
Post #528 1.28K
Память для LLM агентов [PART 1]

Привет... Спишь? Тема оказалась огромной, поэтому разбиваю на несколько постов. Сегодня — обзор ландшафта, общие паттерны и картинка, куда движется индустрия. Далее — разбор одного моего любимчика и сравнение с остальными.

RAG — это умный поиск, а не память!

В моей голове есть образ ассистента, который реально ускоряет тебя в бытовых задачах. Но для этого он должен запоминать прошедшие интеракции — причём сам, без тычков «пожалуйста, запомни это». Как человек: в живом общении подмечает интересные факты, просьбы, требования и использует их в будущем. Без этого колонка — просто продвинутый поисковик и переключатель треков, не более.

Недавно наш слоняра Андрей Карпатый написал твит, а позже разжился Gist на Github с более подробным описанием системы курирования знаний с помощью LLM. Суть: RAG — stateless, агент каждый раз «переоткрывает» знания, тратит токены впустую. Нужна постоянная, накапливаемая, «живая» память, которую курирует LLM по сути для себя, опционально под вашим контролем.

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

😳 Рабочая — то что держишь в голове прямо сейчас, это ~ context window у LLM

🤠 Эпизодическая — конкретные события с контекстом: что, где, когда ~ «12 апреля посреди ночи дописывал этот пост»

🌟 Семантическая — абстрагированные факты: «юзер не любит азиатскую кухню», «в этом проекте не используем глобальные переменные»

🧠 Процедурная — паттерны действий: «как заказать такси через сервис X»


Общие подходы

За последние полгода я отсмотрел, наверное, с десяток проектов и статей. Если смотреть на решения, выделяются три крупные категории:

📁 File-based [1]

Основа — Markdown файлы в формате вики. LLM компилирует сырые заметки в структурированные документы, при необходимости связывает их друг с другом бэклинками. Обязательно хотя бы по одному файлу для каждого из упомянутых выше типов памяти. Без БД и инфраструктуры. Карпатый описал это так: «Obsidian — IDE, LLM — программист, Wiki — кодовая база». Ровно это же активно применяется в OpenClaw с его MEMORY.md и ежедневными YYYY-MM-DD.md.

+ Плюсы: zero-ops, прозрачно, человекочитаемо.

– Минусы: плохо масштабируется, часто требуют ручной модерации, без механизма ротации или архивирования документов базы разрастаются и превращаются в месиво, которое только путает агента и нереально отсмотреть человеку.

🤴 Graph-based [2]

Основа — графовая база знаний. LLM преобразует знания в сущности и связи между ними. Примеры — Graphiti от Zep, LightRAG от HKUDS.

+ Плюсы: явные связи, можно делать запросы на обход графа в глубину/в ширину, хорошо для Enterprise с огромными, раскидистыми, но структурированными данными.

– Минусы: нужна графовая БД, сложный setup, медленнее (vs векторный поиск).

🧠 Brain-inspired [3]

Способ хранения вторичен, основа — организация данных и процедуры, вдохновлённые устройством мозга и нейронаукой: есть забывание данных (decay), укрепление при вспоминании (reinforcement), гибридные стратегии поиска. Hebbs, MemPalace, Vestige — все отсюда.

+ Плюсы: максимально близко к тому, как работает память человека, хороши для долгосрочного использования.

– Минусы: сложнее в настройке, в понимании, некоторые идеи ещё экспериментальные. Как правило, в таких системах требуется тюнинг настроек/параметров под конкретный домен данных.

И, конечно, никто не запрещает всё это миксовать!



Репы про Agent Memory на GitHub штопаются сейчас не хуже JS фреймворков. Те, что на картинке просто успел посмотреть/поковырять и раскрою далее
  • 🔥 15
  • 👍 11
  • ❤ 6
Post #527 1.21K
Привет, читатель! Меня зовут Олег, ближайшие 7 дней я стою у пульта и диджею вам постики. Мне 28 лет, родом из Томска, живу в Питере, окончил бакалавриат по направлению «программная инженерия» 🆒

Сейчас у меня три основных направления деятельности:

(1) Full-time ML Engineer в группе исследований компании Звук — музыкального стриминга от зелёной компании. 🔄 В работе занимаюсь задачами на стыке Аудио, LLM и семантического поиска, а в этом году активно пишем и публикуем статейки на конференции.

(2) Сооснователь в бренде аксессуаров 💅 @hiacleworld. Выполняю роль CTO — отвечаю за IT инфраструктуру, и делаю ИИ-инструменты для небольшой, но эффективной команды в 5-7 человек.

(3) На остаток времени и сил пилю пет-проекты. Часть из них про железо, часть про софт и модельки. Ключевой — аналог колонки типа Алисы или Sberboom, но действительно умной: мультимодальная LLM в формате агента, инструменты, и всё это офлайн на одноплатном компьютере при real-time и минимальной задержке. Короче edge + voice AI со всеми вытекающими. 😥

Помимо этого, с переменным успехом веду канал ❤️ @alisaolega, где в основном делюсь статейками, инструментами, стримлю прогресс по проектам. А ещё собираю комп с двумя RTX 3090 в форм-факторе 10 литров, кастомный NAS, спаял раздельную клавиатуру Ferris Sweep. А когда всё-таки выхожу из дома, катаюсь на шоссейном велике 🚜

О чём ждать посты?

• О мультимодальных LLM — с ними много работал последнее время! Немного про RAG и память для агентов, обязательно будут подборки полезных инструментов, библиотек, сайтов.

• На своём опыте расскажу в каком формате и на каких поверхностях стоит интегрировать ИИ в небольших командах.

• Возможно, расскажу немного про душный инференс на edge устройствах, потому что это одно из ключевых направлений работы над колонкой.

Ну и, конечно же, будут спонтанные посты по секретным заранее неизвестным темами, потому что тайм-менеджмент и подготовка постов заранее — не моё! Но ведь так даже интереснее, да? Да?! 🔫
  • 🔥 24
  • 👍 13
  • 🤩 8
Post #526 1.11K
Мем дня

На днях Дарио Амодеи (ceo оранжевых) заявил:
Инженеры в Anthropic говорят: «Я больше не пишу код. Я просто позволяю модели писать код, а я его редактирую»


А сегодня у нас походу новый самый быстрорастущий репо в истории

https://github.com/instructkr/claude-code

У антропиков утек claude code из сейфа)))
Че ребят еще какие нибудь гайды по вайб кодингу надо или пока сами попишете? 😄

Форков почти в два раза больше чем звезд💀
За 50 минут 13к форков vs 7к звезд, безумие...
  • 😁 12
  • 😱 7
  • ❤ 3
Post #525 1.08K
Заключение
Идея серии постов в том что разработка с Claude Code становится эффективней если есть выстроенный workflow. Я не призываю работать так как работаю я — напротив, автоматизируйте процессы так как удобно вам! Я лишь показал пример и немного рассказал об инструментах которые могут в этом помочь.
Возможно что-то забыл — если вас интересуют конкретные кейсы то всегда welcome ❤️
  • ❤ 9
  • 👍 1
  • 🤩 1
Older posts →

About this channel

How can I read @deepschool_underthehood without a Telegram account?
TGViewer shows the public web preview Telegram publishes for DeepSchool / underthehood: recent posts, photos, videos and the subscriber count, with no app, login or account.
How many subscribers does DeepSchool / underthehood have?
DeepSchool / underthehood (@deepschool_underthehood) has 1.13K subscribers on Telegram, refreshed roughly every 30 minutes.
Does DeepSchool / underthehood know I viewed it here?
No. Public channel previews carry no viewer identity, and TGViewer has no accounts or tracking of what you look up.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →