From 3af82f74787f28da146c9acd9d35f6b811d56801 Mon Sep 17 00:00:00 2001 From: Max Date: Fri, 13 Jun 2025 19:44:45 +0300 Subject: [PATCH] fix system prompt --- .../sber_mobile/support-ai-agent/README.md | 63 ------------------- .../support-ai-agent/support-agent.ts | 42 +++++-------- .../kfu-m-24-1/sber_mobile/supportApi.js | 42 +------------ 3 files changed, 20 insertions(+), 127 deletions(-) delete mode 100644 server/routers/kfu-m-24-1/sber_mobile/support-ai-agent/README.md diff --git a/server/routers/kfu-m-24-1/sber_mobile/support-ai-agent/README.md b/server/routers/kfu-m-24-1/sber_mobile/support-ai-agent/README.md deleted file mode 100644 index ccad3cd..0000000 --- a/server/routers/kfu-m-24-1/sber_mobile/support-ai-agent/README.md +++ /dev/null @@ -1,63 +0,0 @@ -# AI Support Agent - -AI-агент поддержки интегрирован в существующий `supportApi.js`. - -## Структура - -``` -support-ai-agent/ -├── gigachat.ts # Конфигурация GigaChat -├── support-agent.ts # Основной класс агента -└── README.md # Документация -``` - -## API - -### POST `/support` -Отправить сообщение в службу поддержки (теперь с AI-агентом). - -**Запрос:** -```json -{ - "user_id": "string", // Обязательно - "message": "string", // Обязательно - "system_prompt": "string" // Опционально - настройка поведения агента -} -``` - -**Ответ:** -```json -{ - "reply": "Ответ AI-агента", - "success": true -} -``` - -### POST `/support/configure` -Настроить системный промпт для конкретного пользователя. - -### DELETE `/support/history/:userId` -Очистить историю диалога пользователя. - -## Возможности - -- 🤖 Интеллектуальные ответы на основе GigaChat -- 💾 Сохранение всех сообщений в базу данных Supabase -- 🧠 Память контекста диалога для каждого пользователя -- ⚙️ Настраиваемые системные промпты -- 📊 Поддержка множественных пользователей - -## Примеры системных промптов - -### Техническая поддержка -``` -Ты - специалист технической поддержки мобильного приложения "Умный дом". -Помогай пользователям решать проблемы, объясняй функции простым языком, -проводи диагностику пошагово. Всегда будь дружелюбным и терпеливым. -``` - -### Общая поддержка клиентов -``` -Ты - профессиональный агент службы поддержки. Помогай решать вопросы -пользователей, отвечай вежливо и по существу, проявляй эмпатию. -``` \ No newline at end of file diff --git a/server/routers/kfu-m-24-1/sber_mobile/support-ai-agent/support-agent.ts b/server/routers/kfu-m-24-1/sber_mobile/support-ai-agent/support-agent.ts index 514a3c8..3ea39b7 100644 --- a/server/routers/kfu-m-24-1/sber_mobile/support-ai-agent/support-agent.ts +++ b/server/routers/kfu-m-24-1/sber_mobile/support-ai-agent/support-agent.ts @@ -5,7 +5,6 @@ import { MemorySaver } from '@langchain/langgraph'; import gigachat from './gigachat'; export interface SupportAgentConfig { - systemPrompt?: string; temperature?: number; threadId?: string; } @@ -22,11 +21,13 @@ export class SupportAgent { private agent: any; private systemPrompt: string; private threadId: string; + private isFirstMessage: boolean; constructor(config: SupportAgentConfig = {}) { - this.systemPrompt = config.systemPrompt || this.getDefaultSystemPrompt(); + this.systemPrompt = this.getDefaultSystemPrompt(); this.threadId = config.threadId || 'default'; this.memorySaver = new MemorySaver(); + this.isFirstMessage = true; // Настраиваем модель с заданной температурой this.llm = gigachat; @@ -58,30 +59,24 @@ export class SupportAgent { Всегда отвечай на русском языке и старайся быть максимально полезным.`; } - /** - * Обновить системный промпт - */ - public updateSystemPrompt(newPrompt: string): void { - this.systemPrompt = newPrompt; - } - /** - * Получить текущий системный промпт - */ - public getSystemPrompt(): string { - return this.systemPrompt; - } /** * Обработать сообщение пользователя и получить ответ */ public async processMessage(userMessage: string): Promise { try { - // Создаем сообщения с системным промптом - const messages = [ - new SystemMessage(this.systemPrompt), - new HumanMessage(userMessage) - ]; + // Создаем массив сообщений + 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({ @@ -120,12 +115,9 @@ export class SupportAgent { tools: [], checkpointSaver: this.memorySaver }); + // Сбрасываем флаг первого сообщения + this.isFirstMessage = true; } - /** - * Изменить ID потока (для работы с разными пользователями) - */ - public setThreadId(threadId: string): void { - this.threadId = threadId; - } + } \ No newline at end of file diff --git a/server/routers/kfu-m-24-1/sber_mobile/supportApi.js b/server/routers/kfu-m-24-1/sber_mobile/supportApi.js index de908a8..88f488c 100644 --- a/server/routers/kfu-m-24-1/sber_mobile/supportApi.js +++ b/server/routers/kfu-m-24-1/sber_mobile/supportApi.js @@ -8,15 +8,12 @@ const userAgents = new Map(); /** * Получить или создать агента для пользователя */ -function getUserAgent(userId, systemPrompt) { +function getUserAgent(userId) { if (!userAgents.has(userId)) { const config = { threadId: userId, temperature: 0.7 }; - if (systemPrompt) { - config.systemPrompt = systemPrompt; - } userAgents.set(userId, new SupportAgent(config)); } return userAgents.get(userId); @@ -25,7 +22,7 @@ function getUserAgent(userId, systemPrompt) { // POST /api/support router.post('/support', async (req, res) => { const supabase = getSupabaseClient(); - const { user_id, message, system_prompt } = req.body; + const { user_id, message } = req.body; if (!user_id || !message) { return res.status(400).json({ error: 'user_id и message обязательны' }); @@ -42,12 +39,7 @@ router.post('/support', async (req, res) => { } // Получаем агента для пользователя - const agent = getUserAgent(user_id, system_prompt); - - // Обновляем системный промпт если передан - if (system_prompt) { - agent.updateSystemPrompt(system_prompt); - } + const agent = getUserAgent(user_id); // Получаем ответ от AI-агента const aiResponse = await agent.processMessage(message); @@ -89,35 +81,7 @@ router.post('/support', async (req, res) => { } }); -// POST /api/support/configure - Настройка системного промпта -router.post('/support/configure', async (req, res) => { - const { user_id, system_prompt } = req.body; - - if (!user_id) { - return res.status(400).json({ error: 'user_id обязателен' }); - } - try { - const agent = getUserAgent(user_id, system_prompt); - - if (system_prompt) { - agent.updateSystemPrompt(system_prompt); - } - - res.json({ - message: 'Конфигурация агента обновлена', - current_system_prompt: agent.getSystemPrompt(), - success: true - }); - - } catch (error) { - console.error('Ошибка в /support/configure:', error); - res.status(500).json({ - error: 'Внутренняя ошибка сервера', - success: false - }); - } -}); // DELETE /api/support/history/:userId - Очистка истории диалога router.delete('/support/history/:userId', async (req, res) => {