import { HumanMessage, AIMessage, SystemMessage, BaseMessage } from '@langchain/core/messages'; import { ChatPromptTemplate, MessagesPlaceholder } from '@langchain/core/prompts'; import { createReactAgent } from '@langchain/langgraph/prebuilt'; import { MemorySaver } from '@langchain/langgraph'; import gigachat from './gigachat'; export interface SupportAgentConfig { temperature?: number; threadId?: string; } export interface SupportResponse { content: string; success: boolean; error?: string; } export class SupportAgent { private llm: any; private memorySaver: MemorySaver; private agent: any; private systemPrompt: string; private threadId: string; private isFirstMessage: boolean; constructor(config: SupportAgentConfig = {}) { this.systemPrompt = this.getDefaultSystemPrompt(); this.threadId = config.threadId || 'default'; this.memorySaver = new MemorySaver(); this.isFirstMessage = true; // Настраиваем модель с заданной температурой this.llm = gigachat; if (config.temperature !== undefined) { this.llm.temperature = config.temperature; } // Создаем агента без инструментов для простого чата this.agent = createReactAgent({ llm: this.llm, tools: [], checkpointSaver: this.memorySaver }); } /** * Получить системный промпт по умолчанию для агента поддержки */ private getDefaultSystemPrompt(): string { return `Ты - профессиональный агент службы поддержки. Твои основные задачи: - Помогать пользователям решать их вопросы и проблемы - Отвечать вежливо, профессионально и по существу - Предоставлять четкие и понятные инструкции - Проявлять эмпатию к проблемам пользователей - Если не знаешь ответ, честно сообщить об этом и предложить альтернативные способы получения помощи Всегда отвечай на русском языке и старайся быть максимально полезным.`; } /** * Обработать сообщение пользователя и получить ответ */ public async processMessage(userMessage: string): Promise { try { // Создаем массив сообщений const messages: BaseMessage[] = []; // Добавляем системный промпт только в первом сообщении if (this.isFirstMessage) { messages.push(new SystemMessage(this.systemPrompt)); this.isFirstMessage = false; } // Добавляем сообщение пользователя messages.push(new HumanMessage(userMessage)); // Получаем ответ от агента const response = await this.agent.invoke({ messages: messages }, { configurable: { thread_id: this.threadId } }); // Извлекаем последнее сообщение от ассистента const lastMessage = response.messages[response.messages.length - 1]; return { content: lastMessage.content || 'Извините, не удалось сформировать ответ.', success: true }; } catch (error) { console.error('Ошибка при обработке сообщения:', error); return { content: 'Извините, произошла ошибка при обработке вашего запроса. Попробуйте позже.', success: false, error: error instanceof Error ? error.message : 'Неизвестная ошибка' }; } } /** * Очистить историю диалога */ public async clearHistory(): Promise { this.memorySaver = new MemorySaver(); this.agent = createReactAgent({ llm: this.llm, tools: [], checkpointSaver: this.memorySaver }); // Сбрасываем флаг первого сообщения this.isFirstMessage = true; } }