Ошибки и уроки OpenClaw
Фиксирую ошибки чтобы не повторять. Новые — сверху.
2026-06-25 | MemOS: extraction пишет на китайском
Симптом: MemOS add_message сохраняет память на китайском, хотя запрос на русском. search_memory возвращает китайский текст — агент не понимает.
Root cause: Промпты MemOS в templates/mem_reader_prompts.py содержат правила языка только для английского и китайского: 如果输入是中文,请输出中文 / 若输入对话为英文,则用英文. Для русского нет правила — модель видит китайский контекст в промпте и уходит в китайский.
Решение: Пропатчил 4 места в mem_reader_prompts.py — добавил If the input is in Russian, output in Russian + 如果输入是俄文,请输出俄文. После рестарта MemOS extraction работает на русском.
Урок: MemOS — китайский продукт, промпты заточены под zh/en. При деплое для русскоязычных агентов нужно патчить промпты. Патч теряется при pip install --upgrade MemoryOS.
Сервер: assistai (43.245.226.189), conda env memos, MemoryOS 2.0.20
2026-06-25 | MemOS: MCP integration — cloud плагин не работает, MCP работает
Симптом: @memtensor/memos-cloud-openclaw-plugin установлен и пропатчен (PR #73), но recall не происходит — агент не получает данные из MemOS.
Root cause: Cloud плагин рассчитан на MemOS Cloud (memos.memtensor.cn). PR #73 добавляет self-hosted support, но патчи ломаются: index.js проверяет apiKey до callApi(), serverMode не доходит до agentCfg через buildConfig return. Multiple layers of breakage.
Решение: Снёс cloud плагин. Поставил @memtensor/memos-api-mcp (MCP-сервер) + FastAPI proxy на :8001 (транслирует cloud API → product API) + Caddy rewrite /api/openmem/v1/* → :8001. В OpenClaw config mcp.servers.memos (в корне, НЕ в acpx). В AGENTS.md Дедуса добавлена инструкция: «Перед ответом ВСЕГДА вызывай search_memory».
Урок: MCP tools — ручной режим, агент должен сам вызвать tool. Auto-recall как в плагине — нет. Нужна инструкция в system prompt. mcp.servers живёт в корне конфига, НЕ в plugins.entries.acpx.config.mcpServers.
Сервер: assistai (43.245.226.189)
2026-06-24 | MemOS: Neo4j internal_info десериализация
Симптом: MemOS search возвращает 0 результатов, в логах pydantic.ValidationError: metadata.internal_info — Input should be a valid dictionary, input_type=str
Root cause: Neo4j физически не может хранить вложенные Map как property values (только примитивы и массивы примитивов). MemOS _sanitize_neo4j_value() в neo4j.py:75 сериализует dict → JSON-строка при записи. Но при чтении _parse_node() и TextualMemoryItem.from_dict() не десериализуют обратно — получают строку, pydantic падает.
Решение: два патча:
graph_dbs/neo4j.py→_parse_node()—json.loads()дляinternal_infoиinfoесли строкаmemories/textual/item.py→field_validator("internal_info", "info", mode="before")— дополнительная защита на уровне модели
Урок: При обновлении MemoryOS (pip) — патчи в site-packages затираются. Нужно проверять и повторять. Записано в MEMORY.md (L0) и project-state.md (L2) для надёжности.
Сервер: assistai (43.245.226.189), conda env memos, MemoryOS 2.0.20