Контекст диалога на Mastra Memory вместо своей таблицы
- Контекст диалога хранит 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>
This commit is contained in:
30
src/services/assistant/memory.ts
Normal file
30
src/services/assistant/memory.ts
Normal file
@@ -0,0 +1,30 @@
|
||||
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}`;
|
||||
Reference in New Issue
Block a user