Типы памяти: краткосрочная и долгосрочная
Память делает агента «помнящим». Разбираем два её вида и почему долгосрочная память приводит нас к векторным базам и RAG.
Краткосрочная память — история текущего диалога, помещающаяся в контекстное окно модели. Долгосрочная память — внешнее хранилище фактов, откуда нужное достают по запросу.
Зачем агенту память
Без памяти каждый шаг агента «слеп»: модель не помнит, что уже сделала и узнала, и обречена повторяться. Память хранит ход решения и накопленные знания, чтобы агент действовал связно.
Краткосрочная память
Это вся история текущей сессии: вопрос, мысли, действия, наблюдения. Она целиком отдаётся модели на каждом шаге (как список history из раздела 3). Главное ограничение — контекстное окно: модель видит лишь ограниченное число токенов. Когда история разрастается, в окно влезает не всё.
Способы уложиться в окно:
- Обрезка (truncation) — держать только последние N сообщений.
- Суммаризация — сжать старую часть диалога в краткое резюме.
- Вынос в долгосрочную память — старое сохранить вовне и доставать по необходимости.
Долгосрочная память
Долгосрочная память живёт вне контекста модели — в базе. Туда складывают факты, документы, прошлые диалоги. Когда они нужны, агент ищет релевантное и подкладывает в контекст. Чаще всего хранилище — векторная база: тексты превращают в эмбеддинги (числовые векторы), а поиск идёт по близости векторов, а не по точному совпадению слов.
Это и есть мост к RAG
Связка «векторная база + поиск релевантного + подстановка в контекст» — это RAG (Retrieval-Augmented Generation). Для агента долгосрочная память реализуется ровно так же: перед шагом достать из базы то, что относится к делу. Здесь курс про агентов смыкается с курсом про RAG.
| Краткосрочная | Долгосрочная | |
| Где живёт | в контексте модели | во внешней базе |
| Объём | ограничен окном | практически неограничен |
| Доступ | модель видит всё сразу | по поисковому запросу |
| Технология | список сообщений | векторная база (эмбеддинги) |
Поиск по «смыслу» на пальцах
Идею векторного поиска покажем грубо: представим документы наборами слов и будем искать самый похожий по числу общих слов (в настоящей базе вместо этого — близость эмбеддингов).
docs = {
"d1": "агент использует инструменты и цикл",
"d2": "векторная база хранит эмбеддинги",
"d3": "react чередует мысль действие наблюдение",
}
def retrieve(query, docs):
q = set(query.lower().split())
# «похожесть» = число общих слов (упрощённая замена векторной близости)
scored = [(name, len(q & set(text.split()))) for name, text in docs.items()]
scored.sort(key=lambda x: x[1], reverse=True)
return scored[0]
best, score = retrieve("что хранит векторная база", docs)
print("Нашли документ:", best, "| общих слов:", score)
print("Текст:", docs[best])
Вывод:
Нашли документ: d2 | общих слов: 3 Текст: векторная база хранит эмбеддинги
Принцип тот же, что в долгосрочной памяти агента: по запросу находим релевантный кусок и подкладываем его в контекст. Разница лишь в том, что настоящая база меряет близость по эмбеддингам и работает на миллионах документов.
Итог
- Краткосрочная память — история в окне модели; её приходится обрезать или суммаризировать.
- Долгосрочная память — внешнее хранилище (обычно векторная база), откуда достают релевантное по запросу.
- Долгосрочная память агента — это, по сути, RAG: поиск нужного и подстановка в контекст.