- Контекст диалога хранит Mastra Memory (LibSQL, memory.db рядом с DB_PATH), тред на чат - Бюджет истории — messageHistory.maxTokens (CONTEXT_TOKEN_LIMIT, по умолчанию 12000) - ToolCallFilter: результаты инструментов не попадают в прошлые реплики, внутри ответа — только свежий шаг - Системный промпт стабилен для всего чата (кешируется провайдером); автор и упоминания — в <turn author_name> - Фото передаются через context и не сохраняются в памяти - maxSteps и maxOutputTokens (ANSWER_TOKEN_LIMIT) — в defaultOptions агента - /context и /clear работают через Memory recall/deleteThread - Удалены свои dialog_messages, dialog-repository и dialog-service Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
31 lines
1.3 KiB
TypeScript
31 lines
1.3 KiB
TypeScript
import { LibSQLStore } from "@mastra/libsql";
|
||
import { Memory } from "@mastra/memory";
|
||
import { ensureParentDir } from "../../libs/db.js";
|
||
|
||
interface AssistantMemoryOptions {
|
||
path: string;
|
||
/** Бюджет токенов на весь промпт: сверх него Mastra срезает самые старые реплики диалога. */
|
||
maxTokens: number;
|
||
}
|
||
|
||
/**
|
||
* Контекст диалога с ботом — Mastra Memory: тред на каждый чат, только история сообщений.
|
||
* Архив переписки чата живёт отдельно (SQLite бота) и читается инструментами.
|
||
*/
|
||
export const createAssistantMemory = ({ path, maxTokens }: AssistantMemoryOptions): Memory => {
|
||
ensureParentDir(path);
|
||
|
||
return new Memory({
|
||
storage: new LibSQLStore({ id: "boltun-memory", url: `file:${path}` }),
|
||
options: {
|
||
messageHistory: { maxTokens },
|
||
semanticRecall: false,
|
||
workingMemory: { enabled: false },
|
||
generateTitle: false,
|
||
},
|
||
});
|
||
};
|
||
|
||
/** Один тред на чат: вопросы разных админов и ответы бота — общий диалог (шаблон Mastra для групповых чатов). */
|
||
export const chatThreadId = (chatId: number): string => `chat:${chatId}`;
|