Вы когда-нибудь пытались заставить GPT-4o или Llama 3 помнить, о чём вы говорили пять минут назад? У меня — да. И каждый раз это похоже на попытку объяснить коту, что диван — не его личная царапалка. Модели просто сбрасывают контекст, как только он превышает их «окно». Но это 2026 год, и проблема контекста уже не должна быть головной болью. Знакомьтесь: ContextForge — open-source SDK, который обещает бесконечный контекст и настоящую долгосрочную память для любой LLM.
Что это? ContextForge — это Python-библиотека, которая автоматически сжимает, индексирует и извлекает релевантные фрагменты предыдущих диалогов. Работает с любыми LLM — от локальных (llama.cpp, Ollama) до облачных (OpenAI, Anthropic). Никаких ограничений по длине истории, кроме объёма вашего хранилища.
Чем ContextForge отличается от «ещё одной памяти»?
На рынке уже есть решения вроде LCME — супербыстрая память на коленке, но документация там… скажем так, «для посвящённых». Или NGT Memory — персистентная, но заточена под строго локальные модели. А ещё есть те, кто до сих пор делает ручное управление контекстом — и это работает, но адски больно, когда диалогов тысяча.
ContextForge идёт по другому пути: он не просто хранит историю, а создаёт семантический индекс и при каждом запросе динамически собирает «пакет» релевантных кусков. Встроенная компрессия сжимает каждое сообщение до эмбеддинга, что экономит место и ускоряет поиск. И главное — он ничего не знает о модели. Вы просто подключаете его как прокси-слой:
import contextforge
# Инициализируем память (по умолчанию SQLite + FAISS)
memory = contextforge.Memory()
# Добавляем сообщение с метаданными
memory.add(
text="Меня зовут Иван, я разработчик из Москвы",
tags={"user": "user_123", "session": "abc"}
)
# Извлекаем релевантный контекст для нового вопроса
context = memory.query("Как зовут пользователя?", top_k=3)
# Вернёт текст: "Меня зовут Иван, я разработчик из Москвы"
print(context)
Быстрый старт: установка и первый запуск
Ставится за секунду (нужна Python 3.10+):
pip install contextforge[faiss]
Если у вас слабый ноутбук — не проблема. ContextForge отлично работает даже на 4 ГБ ОЗУ, а для продакшена рекомендую запускать на облачных GPU с нормальным объёмом RAM. Теперь давайте сделаем чат-бота, который помнит всё:
from contextforge import Memory
from openai import OpenAI
# Память
mem = Memory()
# Клиент (может быть локальный через Ollama)
llm = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
session_id = "session_1"
while True:
user_input = input("Вы: ")
# Сохраняем сообщение пользователя
mem.add(text=user_input, tags={"session": session_id, "role": "user"})
# Получаем историю (последние 10 сообщений + релевантные старые)
history = mem.get_recent(tags={"session": session_id}, n=10)
relevant = mem.query(user_input, top_k=5)
# Собираем контекст
full_context = "\n".join([msg["text"] for msg in history + relevant])
# Отправляем в LLM
response = llm.chat.completions.create(
model="qwen3.5:35b", # хотя бы Qwen 3.5, да?
messages=[{"role": "user", "content": full_context + "\nОтветь: " + user_input}]
).choices[0].message.content
# Сохраняем ответ
mem.add(text=response, tags={"session": session_id, "role": "assistant"})
print(f"Бот: {response}")
Важно: Не отправляйте всю историю целиком, если модель имеет лимит контекста. ContextForge сам сжимает и ранжирует — но настройки top_k и max_tokens лучше подбирать под свою модель. Иначе получите знакомую ошибку Available context size.
Сравнение: ContextForge vs альтернативы
| Критерий | ContextForge | LCME | NGT Memory | Ручное управление |
|---|---|---|---|---|
| Установка | pip install | Сборка из C++ | pip + настройка библиотеки | Скрипты любой сложности |
| Семантический поиск | Встроенный (FAISS) | Нет (только сжатие) | Есть (пользовательский) | Реализуется вручную |
| Совместимость с любыми LLM | Да | Только через llama.cpp | Только локальные | Любая модель |
| Документация | Отличная (Read the Docs) | Скудная | Средняя | Нет (ваш код) |
| Поддержка тегов и сессий | Из коробки | Нет | Частичная | Полная (пишете сами) |
Как видите, ContextForge берёт балансом: не требует плясок с бубном, как LCME, и не загоняет в угол только локальных моделей, как NGT Memory. А по сравнению с ручным управлением — просто подарок судьбы, особенно если вы не хотите каждый раз изобретать велосипед.
Продвинутые фичи: таймстемпы и компрессия
ContextForge умеет не только хранить, но и забывать. Настроив политику TTL (time-to-live), можно автоматически удалять сообщения старше недели или месяца. А встроенная компрессия эмбеддингов снижает размер памяти до 80% без потери точности — примерно как Binary KV cache, только для текста.
Вот пример с временными метками:
mem.add(
text="Сегодня 26 июня 2026, я решил написать книгу",
timestamp="2026-06-26T12:00:00",
tags={"project": "book"}
)
# Ищем записи за последние 7 дней
recent = mem.query("планы на книгу", time_range={"gte": "2026-06-20", "lte": "2026-06-27"})
print(recent)
Кому это реально нужно?
- Разработчики чат-ботов — если ваш бот забывает имя пользователя через два сообщения, ContextForge решит проблему.
- Создатели AI-агентов — агентам жизненно необходима история действий, особенно если они выполняют длительные сценарии.
- Локальные энтузиасты — на слабых машинах (даже с 4 ГБ VRAM) библиотека работает без тормозов — поиск занимает миллисекунды.
- Фанаты «вайб-кодинга» — если ваш проект на коленке перестал помещаться в контекст, почитайте как победить деградацию контекста — ContextForge тут главный герой.
Я уже перевёл на него пару своих проектов: один чат-бот для техподдержки, второй — RAG-система по внутренним документам. Результат — контекст перестал быть узким местом. Да, идеального SDK не существует (API местами сыроват, а документация могла бы больше примеров), но для опенсорса это уровень Enterprise. Советую присмотреться, особенно если вы уже пробовали настраивать локальную LLM для долгой памяти и намучились.
Неочевидный совет: не пытайтесь скормить ContextForge весь дамп чатов сразу — разбейте на сессии по тегам. И обязательно настройте buffer для одновременной записи/чтения, иначе на highload упадёте. В следующих версиях обещают поддержку Redis — тогда будет вообще огонь.