Долгая память для OpenClaw: настройка Telegram Business Bot и векторной БД | Гайд 2026 | AiManual
AiManual Logo Ai / Manual.
03 Мар 2026 Гайд

Настраиваем долгую память для OpenClaw: Telegram Business Bot и локальная векторная база

Полный гайд по интеграции долгосрочной памяти в OpenClaw через локальную векторную базу и Telegram Business API. Экономьте до 75% токенов с актуальными инструме

Память, которая не сжирает бюджет: зачем это нужно

Открою счет за февраль 2026. $312 за OpenClaw Pro. Половина токенов ушла на то, чтобы агент помнил, как я вчера ругался с заказчиком. Абсурд? Да. Знакомо? Наверняка. В нашей статье "OpenClaw vs память-ориентированные агенты" мы разобрали архитектурную войну. Суть проста: OpenClaw тащит весь контекст в промпт, и вы платите $2.1 за каждую тысячу токенов воспоминаний. Каждый день. Всегда.

Локальная векторная база режет этот счет на 75%. Вместо того чтобы кормить модель историей целиком, вы храните ее в дешевом хранилище (Chroma, Weaviate) и достаете оттуда только релевантные куски по запросу. Стоимость хранения падает до $0.8/K токенов, и это разово. А еще память становится практически бесконечной. Звучит как магия, но это просто инженерия. Грязная, сложная, но рабочая.

Telegram Business Bot здесь не случайность. Это канал коммуникации, где агент работает с реальными людьми. Он запоминает предпочтения клиентов, историю заказов, детали проектов. Без долгой памяти он каждый раз начинает диалог с чистого листа - и выглядит как беспомощный идиот.

Арсенал: что берем в бой в марте 2026

Инструменты должны быть острыми. И актуальными. Вот стек, который работает прямо сейчас.

  • OpenClaw Kraken-1.5 (или новее). На 03.03.2026 это последняя стабильная версия с контекстом 128K. Если вышли Kraken-2.0 - берите ее. Главное - поддержка внешних плагинов и API.
  • MemU MemNet v2. Библиотека для управления векторной памятью. В феврале 2026 вышло второе поколение с улучшенными эмбеддингами и кэшированием. Берем только его.
  • Chroma DB 0.5.x. Локальная векторная база, которая не требует танцев с облаками. Простая, на Python, идеально для наших целей. Альтернативы - Weaviate или Qdrant, но они сложнее.
  • Telegram Business API. Да, он уже вышел и стабилен. Позволяет ботам работать в официальном аккаунте бизнеса с расширенными метками и меню. Ключевой момент - авторизация через BotFather с флагом business.
  • Python 3.11+. Старые версии не возьмем - будут тормоза с асинхронностью.
💡
Если вы запускаете всё на своем железе, загляните в гайд "ClawdBot без облачных API". Там про оптимизацию под RTX 5090 и Groq. Это сэкономит еще и на инференсе.

1Готовим базу: ставим Chroma и MemU

Сначала локальное хранилище. Устанавливаем Chroma - она будет лежать в вашей файловой системе, никаких внешних сервисов.

pip install chromadb==0.5.0 memu-net==2.3.1 openai

Почему именно эти версии? Chroma 0.5.0 исправила критические базы с индексацией, которые были в 0.4.x. MemU 2.3.1 - последняя стабильная на март 2026, с поддержкой новых моделей эмбеддингов от OpenAI и Cohere. Если поставите старую - получите ошибку Invalid embedding dimension.

Теперь инициализируем базу. Создадим Python скрипт init_memory.py:

import chromadb
from memu import MemuClient

# Создаем персистентный клиент Chroma
chroma_client = chromadb.PersistentClient(path="./openclaw_memory")

# Коллекция для долгосрочной памяти
collection = chroma_client.get_or_create_collection(
    name="openclaw_conversations",
    metadata={"hnsw:space": "cosine"}  # Используем косинусную схожесть
)

# Инициализируем клиент MemU
memu = MemuClient(
    collection=collection,
    embedding_model="text-embedding-3-large",  # Актуальная модель от OpenAI на 2026
    auto_flush=True  # Автосохранение
)
print("Векторная база готова. Путь: ./openclaw_memory")

Не используйте устаревшую модель text-embedding-ada-002. Она дает менее точные эмбеддинги и медленнее. text-embedding-3-large - текущий стандарт. Если хотите сэкономить, есть text-embedding-3-small, но для бизнес-бота лучше брать точность.

2Пришиваем память к OpenClaw

Теперь нужно заставить OpenClaw обращаться к векторной базе. Открываем конфигурационный файл OpenClaw (обычно config/agents.yaml). Ищем секцию memory и меняем ее.

Было (типичная конфигурация):

memory:
  type: "in_context"
  max_tokens: 128000

Стало:

memory:
  type: "external"
  module: "memu_integration"
  params:
    db_path: "./openclaw_memory"
    collection_name: "openclaw_conversations"
    top_k: 5  # Сколько фрагментов памяти доставать для контекста
    similarity_threshold: 0.78  # Порог релевантности. Ниже - игнорируем

Создаем сам модуль интеграции. Файл memu_integration.py в папке плагинов OpenClaw:

import sys
sys.path.append('.')
from memu import MemuClient
import chromadb
import yaml

class MemuIntegration:
    def __init__(self, params):
        self.client = chromadb.PersistentClient(path=params['db_path'])
        self.collection = self.client.get_collection(params['collection_name'])
        self.memu = MemuClient(
            collection=self.collection,
            embedding_model="text-embedding-3-large"
        )
        self.top_k = params['top_k']
        self.threshold = params['similarity_threshold']
    
    def remember(self, query: str, user_id: str):
        """Ищет в памяти релевантные фрагменты для пользователя."""
        results = self.memu.search(
            query=query,
            user_id=user_id,
            limit=self.top_k,
            min_score=self.threshold
        )
        return [res['text'] for res in results]
    
    def memorize(self, text: str, user_id: str, metadata: dict = None):
        """Сохраняет новый фрагмент в память."""
        self.memu.add(
            text=text,
            user_id=user_id,
            metadata=metadata or {}
        )

Теперь OpenClaw будет при каждом запросе сначала искать в памяти релевантные прошлые разговоры, и только потом формировать промпт. Токены экономятся дико.

3Telegram Business Bot: не просто обертка

Обычный бот - это скучно. Business Bot дает метки, категории, быстрые ответы. Но главное - у него официальный статус. Создаем через BotFather:

/newbot
Имя: YourCompany Assistant
Username: yourcompany_assistant_bot
Теперь включаем бизнес-режим:
/setbusiness — и следуем инструкциям.

Получаем токен. Теперь пишем интегратор на Python с библиотекой python-telegram-bot==21.0 (актуальная на 2026).

Основной скрипт бота (bot_core.py):

from telegram import Update, BusinessMessage
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
from openclaw import OpenClawClient  # Предполагаем, что есть клиент OpenClaw
from memu_integration import MemuIntegration
import asyncio

# Инициализация
openclaw = OpenClawClient(api_key="your_key")
memory = MemuIntegration({
    'db_path': './openclaw_memory',
    'collection_name': 'openclaw_conversations',
    'top_k': 5,
    'similarity_threshold': 0.78
})

async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
    user_id = str(update.effective_user.id)
    user_message = update.message.text
    
    # Шаг 1: Ищем в памяти релевантное
    relevant_memories = memory.remember(user_message, user_id)
    memory_context = "\n".join(relevant_memories) if relevant_memories else ""
    
    # Шаг 2: Формируем промпт с памятью
    prompt = f"""Контекст из прошлых разговоров:
{memory_context}

Текущий запрос пользователя: {user_message}
"""
    
    # Шаг 3: Отправляем в OpenClaw
    response = await openclaw.async_generate(prompt, user_id=user_id)
    
    # Шаг 4: Сохраняем новый диалог в память
    memory.memorize(
        text=f"Пользователь: {user_message}\nАссистент: {response}",
        user_id=user_id,
        metadata={"type": "dialog"}
    )
    
    # Шаг 5: Отправляем ответ
    await update.message.reply_text(response)

async def main():
    application = Application.builder().token("YOUR_BOT_TOKEN").build()
    application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
    await application.run_polling()

if __name__ == "__main__":
    asyncio.run(main())

Бот теперь не просто пересылает запросы. Он помнит. Если клиент спросит "напомни, что мы обсуждали про дизайн логотипа", бот найдет в памяти все разговоры про логотипы и даст связный ответ. Без необходимости тащить в контекст всю историю переписки.

Подводные камни, о которые спотыкаются 9 из 10 инженеров

Теория гладкая. Практика - ухабистая. Вот что сломает вам систему, если не знать.

  • Эмбеддинги ломают структуру. MemU по умолчанию разбивает текст на чанки. Если вы сохраняете длинный диалог, он может разрезать реплику пополам. Решение: настраивайте chunk_size и chunk_overlap в MemuClient. Для диалогов я ставлю chunk_size=500 и overlap=50.
  • Порог релевантности - черная магия. Поставите similarity_threshold=0.9 - память почти никогда не сработает. Поставите 0.5 - в контекст полезут случайные фрагменты. Золотая середина 0.75-0.8, но тестируйте на своих данных. Запустите eval-скрипт, который проверяет точность поиска.
  • Telegram Business API лимитирует. Нельзя отправлять больше 30 сообщений в секунду на один бот. Если у вас тысячи клиентов, ставьте очередь (message queue). Я использую Redis + RQ для асинхронной обработки.
  • OpenClaw может "забыть" про внешнюю память. Если в конфиге указан type: "external", но модуль не загружен, агент просто проигнорирует память и будет работать в режиме короткого контекста. Всегда проверяйте логи при старте: там должно быть Loaded external memory module: memu_integration.
💡
Для сложных интеграций с корпоративными системами вроде Битрикс24 есть отдельный гайд: "OpenClaw в Битрикс24". Там про токены, вебхуки и безопасность.

FAQ: ответы на вопросы, которые вы постесняетесь задать

ВопросОтвет
Сколько это стоит в деньгах?Хранение 1 млн токенов в Chroma: ~$0.8. В OpenClaw (in-context) это стоило бы $2100 каждый месяц. Локальная база - разово.
А если сервер упадет?Chroma хранит данные на диске. Поднимите заново - память на месте. Сделайте бэкап папки openclaw_memory.
Можно ли использовать русские эмбеддинги?Да. MemU v2 поддерживает мультиязычные модели, например intfloat/multilingual-e5-large. Укажите ее в embedding_model.
Бот будет помнить каждого пользователя отдельно?Да, если передавать user_id в MemU. Память изолирована. Можно сделать и общую память для всех - просто не указывайте user_id.
Это замедлит ответы?На 50-100 мс из-за поиска по векторной базе. Но вы сэкономите секунды на генерации (меньше токенов в промпте). В целом - быстрее.

И последнее. Не делайте память слишком умной. Если она будет сохранять каждый чих, в контекст начнут попадать мусорные фрагменты. Настройте фильтрацию: сохраняйте только диалоги длиннее 50 символов, где есть существительные и глаголы. MemU v2 умеет это из коробки через параметр min_significance_score. Используйте.

Теперь ваш OpenClaw помнит всё. И не требует за это дополнительных денег. Разве что за электричество, если крутите на своей железяке. Но это уже другая история.

Подписаться на канал