В этом руководстве мы создаём слой управления памятью для ИИ-агента, который отделяет краткосрочный рабочий контекст от долгосрочной векторной памяти и эпизодических следов.
Основные этапы
1. Реализация семантического хранения с помощью встраиваний и FAISS для быстрого поиска по сходству.
2. Добавление эпизодической памяти, которая фиксирует, что работало, что не удалось и почему, чтобы агент мог повторно использовать успешные шаблоны, а не изобретать их заново.
3. Определение практических политик для хранения данных (значимость + новизна + закреплённые ограничения), ранжирования поиска (гибридный семантический + эпизодический с учётом использования) и консолидации краткосрочных сообщений в долговременную память.
Код
«`python
import os, re, json, time, math, uuid
from dataclasses import dataclass, asdict
from typing import List, Dict, Any, Optional, Tuple
from datetime import datetime
import sys, subprocess
def pip_install(pkgs: List[str]):
subprocess.check_call([sys.executable, «-m», «pip», «install», «-q»] + pkgs)
pip_install([
«sentence-transformers>=2.6.0»,
«faiss-cpu>=1.8.0»,
«numpy»,
«pandas»,
«scikit-learn»
])
«`
Определение данных
Мы определяем чёткие структуры данных для краткосрочной, долгосрочной и эпизодической памяти с помощью типизированных схем.
«`python
@dataclass
class ShortTermItem:
ts: str
role: str
content: str
meta: Dict[str, Any]
@dataclass
class LongTermItem:
mem_id: str
ts: str
kind: str
text: str
tags: List[str]
salience: float
usage: int
meta: Dict[str, Any]
@dataclass
class Episode:
ep_id: str
ts: str
task: str
constraints: Dict[str, Any]
plan: List[str]
actions: List[Dict[str, Any]]
result: str
outcome_score: float
lessons: List[str]
failure_modes: List[str]
tags: List[str]
meta: Dict[str, Any]
«`
Реализация
Мы реализуем основной механизм памяти, который объединяет встраивания, хранение, обрезку и индексацию в единую систему.
«`python
class MemoryEngine:
def init(self, embed_model: str = «sentence-transformers/all-MiniLM-L6-v2», policy: Optional[MemoryPolicy] = None):
self.policy = policy or MemoryPolicy()
self.embedder = SentenceTransformer(embed_model)
self.dim = self.embedder.getsentenceembedding_dimension()
self.short_term: List[ShortTermItem] = []
self.ltm: Dict[str, LongTermItem] = {}
self.episodes: Dict[str, Episode] = {}
self.ltm_index = VectorIndex(self.dim)
self.episode_index = VectorIndex(self.dim)
def _now(self) -> str:
return datetime.utcnow().isoformat() + «Z»
def _embed(self, texts: List[str]) -> np.ndarray:
v = self.embedder.encode(texts, normalizeembeddings=True, showprogress_bar=False)
return np.array(v, dtype=np.float32)
def st_add(self, role: str, content: str, meta):
self.shortterm.append(ShortTermItem(ts=self.now(), role=role, content=content, meta=dict(meta)))
if len(self.shortterm) > self.policy.stmax_items:
self.shortterm = self.shortterm[-self.policy.stmaxitems:]
«`
Заключение
Мы создали полный стек памяти, который позволяет нашему агенту запоминать факты и предпочтения в долгосрочной векторной памяти, сохранять извлечённые «уроки» в виде эпизодических следов и сохранять только наиболее релевантный недавний контекст в краткосрочной памяти.
Это руководство демонстрирует, как гибридный поиск улучшает ответы, как штрафы за использование уменьшают повторение и как консолидация превращает шумные журналы взаимодействия в компактные, повторно используемые знания.
С этой основой мы можем расширить систему до уровня производственного поведения ИИ-агентов, добавив более строгие бюджеты, более богатое извлечение, лучшие оценщики и схемы памяти для конкретных задач.
1. Какие основные этапы включает в себя создание ИИ-агентов с памятью согласно тексту?
Ответ: создание ИИ-агентов с памятью включает в себя реализацию семантического хранения с помощью встраиваний и FAISS, добавление эпизодической памяти, определение практических политик для хранения данных, ранжирования поиска и консолидации краткосрочных сообщений в долговременную память.
2. Какие структуры данных используются для краткосрочной, долгосрочной и эпизодической памяти?
Ответ: для краткосрочной памяти используется класс `ShortTermItem`, для долгосрочной — класс `LongTermItem`, а для эпизодической — класс `Episode`.
3. Какие компоненты включает в себя класс `MemoryEngine`?
Ответ: класс `MemoryEngine` включает в себя следующие компоненты: инициализацию с моделью для встраивания, политикой хранения, списком краткосрочных элементов, словарём долгосрочных элементов, словарём эпизодов, индексами для долгосрочного и эпизодического хранения, методы для работы со временем, встраиваниями и добавлением элементов в краткосрочную память.
4. Какие методы используются для реализации основного механизма памяти?
Ответ: для реализации основного механизма памяти используются методы для встраивания текстов, добавления элементов в краткосрочную память, работы со временем и встраиваниями.
5. Какие преимущества даёт гибридный поиск в контексте ИИ-агентов с памятью?
Ответ: гибридный поиск улучшает ответы ИИ-агентов, так как позволяет более эффективно находить нужную информацию в долгосрочной и эпизодической памяти.