В этом руководстве мы рассмотрим, как создать интеллектуального агента, который запоминает, учится и адаптируется к нам с течением времени. Мы реализуем систему постоянной памяти и персонализации, используя простую логику, основанную на правилах, чтобы имитировать, как современные фреймворки агентского ИИ хранят и вспоминают контекстуальную информацию.
По мере продвижения мы увидим, как ответы агента развиваются с опытом, как затухание памяти помогает предотвратить перегрузку и как персонализация повышает производительность. Наша цель — шаг за шагом понять, как постоянство превращает статического чат-бота в цифрового компаньона, осознающего контекст и эволюционирующего.
Основы долгосрочной памяти агента
Мы определяем класс MemoryItem для хранения каждой части информации и создаём MemoryStore с механизмом экспоненциального затухания. Мы начинаем закладывать основу для хранения и старения информации так же, как и в человеческой памяти.
«`python
class MemoryItem:
def init(self, kind: str, content: str, score: float = 1.0):
self.kind = kind
self.content = content
self.score = score
self.t = time.time()
class MemoryStore:
def init(self, decayhalflife=1800):
self.items: List[MemoryItem] = []
self.decayhalflife = decayhalflife
def decayfactor(self, item: MemoryItem):
dt = time.time() — item.t
return 0.5 (dt / self.decayhalflife)
«`
Добавление методов для вставки, поиска и очистки старых воспоминаний
Мы расширяем систему памяти, добавляя методы для вставки, поиска и очистки старых воспоминаний. Мы реализуем простую функцию подобия и процедуру очистки на основе затухания, позволяя агенту запоминать релевантные факты, автоматически забывая слабые или устаревшие.
«`python
def add(self, kind: str, content: str, score: float = 1.0):
self.items.append(MemoryItem(kind, content, score))
def search(self, query: str, topk=3):
scored = []
for it in self.items:
decay = self.decayfactor(it)
sim = len(set(query.lower().split()) & set(it.content.lower().split()))
final = (it.score * decay) + sim
scored.append((final, it))
scored.sort(key=lambda x: x[0], reverse=True)
return [it for , it in scored[:topk] if > 0]
def cleanup(self, min_score=0.1):
new = []
for it in self.items:
if it.score * self.decayfactor(it) > min_score:
new.append(it)
self.items = new
«`
Создание интеллектуального агента
Мы проектируем интеллектуального агента, который использует память для формирования своих ответов. Мы создаём имитацию работы языковой модели, которая адаптирует ответы на основе сохранённых предпочтений и тем. В то же время функция восприятия позволяет агенту динамически улавливать новые сведения о пользователе.
«`python
class Agent:
def init(self, memory: MemoryStore, name=»PersonalAgent»):
self.memory = memory
self.name = name
def llmsim(self, prompt: str, context: List[str]):
# …
def perceive(self, user_input: str):
# …
def act(self, user_input: str):
# …
«`
Оценка персонализации
Теперь мы наделяем нашего агента способностью действовать и оценивать себя. Мы позволяем ему вспоминать воспоминания для формирования контекстуальных ответов и добавляем небольшой цикл оценки, чтобы сравнить персонализированные ответы с базовыми без памяти, количественно определяя, насколько память помогает.
«`python
def evaluate_personalisation(agent: Agent):
# …
«`
В заключение мы демонстрируем, как добавление памяти и персонализации делает нашего агента более человечным, способным запоминать предпочтения, адаптировать планы и забывать устаревшие детали естественным образом. Мы наблюдаем, что даже простые механизмы, такие как затухание и извлечение, значительно улучшают релевантность агента и качество его ответов.
В итоге мы понимаем, что постоянная память — это основа агентского ИИ следующего поколения, который постоянно учится, разумно адаптирует опыт и динамически поддерживает контекст в полностью локальной, автономной настройке.
1. Какие механизмы используются для имитации затухания памяти в системе?
В системе используется механизм экспоненциального затухания. Класс `MemoryStore` имеет параметр `decayhalflife`, который определяет, как быстро будет снижаться важность элементов памяти. Метод `decayfactor` вычисляет коэффициент затухания на основе времени, прошедшего с момента добавления элемента в память.
2. Какие методы используются для добавления и поиска информации в системе памяти?
Для добавления информации используется метод `add`, который принимает вид `add(self, kind: str, content: str, score: float = 1.0)`. Для поиска информации используется метод `search`, который принимает вид `search(self, query: str, topk=3)`. Этот метод ищет элементы памяти, наиболее соответствующие заданному запросу, и возвращает их в виде списка.
3. Какие классы и методы используются для создания интеллектуального агента?
Для создания интеллектуального агента используются классы `MemoryItem` и `MemoryStore` для хранения и управления памятью, а также класс `Agent`, который использует память для формирования своих ответов. Методы `perceive` и `act` позволяют агенту воспринимать новые данные и действовать на основе имеющейся информации.
4. Как система оценивает персонализацию агента?
Система оценивает персонализацию агента путём сравнения персонализированных ответов с базовыми без памяти. Для этого используется функция `evaluate_personalisation`, которая количественно определяет, насколько память помогает улучшить качество ответов агента.
5. Какие преимущества даёт добавление памяти и персонализации агенту?
Добавление памяти и персонализации делает агента более человечным, способным запоминать предпочтения, адаптировать планы и забывать устаревшие детали естественным образом. Это значительно улучшает релевантность агента и качество его ответов.