В этом руководстве мы создаём самоорганизующуюся систему памяти для агента, которая выходит за рамки простого хранения истории общения и структурирует взаимодействия в устойчивые, значимые единицы знаний. Мы проектируем систему так, чтобы рассуждения и управление памятью были чётко разделены, что позволяет выделенному компоненту извлекать, сжимать и организовывать информацию. В то же время основной агент фокусируется на ответах пользователю.
Мы используем структурированное хранилище с SQLite, группировку по сценам и консолидацию сводок, показывая, как агент может поддерживать полезный контекст в течение длительного времени, не полагаясь на непрозрачный поиск по векторам.
Основные компоненты системы
1. Импорт библиотек и сбор ключа API:
«`python
import sqlite3
import json
import re
from datetime import datetime
from typing import List, Dict
from getpass import getpass
from openai import OpenAI
OPENAIAPIKEY = getpass(«Enter your OpenAI API key: «).strip()
client = OpenAI(apikey=OPENAIAPI_KEY)
«`
2. Определение функции для взаимодействия с языковой моделью:
«`python
def llm(prompt, temperature=0.1, max_tokens=500):
return client.chat.completions.create(
model=»gpt-4o-mini»,
messages=[{«role»: «user», «content»: prompt}],
temperature=temperature,
maxtokens=maxtokens
).choices[0].message.content.strip()
«`
3. Создание класса `MemoryDB` для работы с базой данных:
«`python
class MemoryDB:
def init(self):
self.db = sqlite3.connect(«:memory:»)
self.db.row_factory = sqlite3.Row
self.initschema()
def initschema(self):
# Создание таблиц и индексов
# …
«`
Логика работы системы
- Извлечение ячеек памяти:
«`python
class MemoryManager:
def init(self, db: MemoryDB):
self.db = db
def extract_cells(self, user, assistant) -> List[Dict]:
# Извлечение ячеек памяти из взаимодействия
# …
«`
- Консолидация сцен:
«`python
def consolidate_scene(self, scene):
# Консолидация сцены в краткое резюме
# …
«`
- Обновление памяти:
«`python
def update(self, user, assistant):
# Обновление памяти новыми ячейками
# …
«`
Рабочий агент
«`python
class WorkerAgent:
def init(self, db: MemoryDB, mem_manager: MemoryManager):
self.db = db
self.memmanager = memmanager
def answer(self, user_input):
# Генерация ответа с учётом контекста памяти
# …
«`
В этом руководстве мы продемонстрировали, как агент может активно управлять своей памятью и превращать прошлые взаимодействия в стабильные, повторно используемые знания, а не в эфемерные журналы чата. Мы позволили памяти эволюционировать за счёт консолидации и выборочного вызова, что поддерживает более последовательное и обоснованное рассуждение в течение сессий. Этот подход обеспечивает практическую основу для построения долговечных агентских систем и может быть естественным образом расширен за счёт механизмов забывания, более богатой реляционной памяти или оркестровки на основе графов по мере роста сложности системы.
1. Какие основные компоненты включает в себя система памяти для агента, способного к долгосрочному мышлению в AI?
Система включает в себя несколько основных компонентов:
— Импорт библиотек и сбор ключа API для взаимодействия с языковой моделью.
— Определение функции для взаимодействия с языковой моделью (например, `llm` для работы с OpenAI).
— Создание класса `MemoryDB` для работы с базой данных (например, SQLite).
— Класс `MemoryManager` для управления памятью и извлечения ячеек памяти.
— Функции для консолидации сцен и обновления памяти.
— Рабочий агент (`WorkerAgent`), который использует `MemoryDB` и `MemoryManager` для генерации ответов с учётом контекста памяти.
2. Какие методы используются для структурирования взаимодействий в устойчивые, значимые единицы знаний?
В статье предлагается использовать структурированное хранилище с SQLite для хранения данных и группировку по сценам. Также упоминается консолидация сводок, которая позволяет агенту поддерживать полезный контекст в течение длительного времени.
3. Какие преимущества даёт разделение рассуждений и управления памятью в системе?
Разделение рассуждений и управления памятью позволяет выделенному компоненту эффективно извлекать, сжимать и организовывать информацию. Это освобождает основной агент от необходимости заниматься управлением памятью, что позволяет ему сосредоточиться на ответах пользователю.
4. Какие дополнительные механизмы можно внедрить в систему для улучшения её функциональности?
В статье предлагается несколько направлений для расширения системы:
— Механизмы забывания для более гибкого управления памятью.
— Более богатая реляционная память для более сложных взаимодействий.
— Оркестровка на основе графов для управления более сложными системами.
5. Какие инструменты и библиотеки используются для реализации системы памяти в AI?
В статье используются следующие инструменты и библиотеки:
— SQLite для работы с базой данных.
— OpenAI для взаимодействия с языковой моделью.
— Python для написания кода.
— Библиотеки `sqlite3`, `json`, `re`, `datetime`, `typing`, `getpass` и другие для выполнения различных задач.