add support ai-agent
This commit is contained in:
@@ -1,16 +1,151 @@
|
||||
const router = require('express').Router();
|
||||
const { getSupabaseClient } = require('./supabaseClient');
|
||||
const { SupportAgent } = require('./support-ai-agent/support-agent');
|
||||
|
||||
// Хранилище агентов для разных пользователей
|
||||
const userAgents = new Map();
|
||||
|
||||
/**
|
||||
* Получить или создать агента для пользователя
|
||||
*/
|
||||
function getUserAgent(userId, systemPrompt) {
|
||||
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);
|
||||
}
|
||||
|
||||
// POST /api/support
|
||||
router.post('/support', async (req, res) => {
|
||||
const supabase = getSupabaseClient();
|
||||
const { user_id, message } = req.body;
|
||||
if (!user_id || !message) return res.status(400).json({ error: 'user_id и message обязательны' });
|
||||
const { error } = await supabase
|
||||
.from('support')
|
||||
.insert({ user_id, message, is_from_user: true });
|
||||
if (error) return res.status(400).json({ error: error.message });
|
||||
res.json({ reply: 'Спасибо за ваше сообщение! Служба поддержки свяжется с вами в ближайшее время.' });
|
||||
const { user_id, message, system_prompt } = req.body;
|
||||
|
||||
if (!user_id || !message) {
|
||||
return res.status(400).json({ error: 'user_id и message обязательны' });
|
||||
}
|
||||
|
||||
try {
|
||||
// Сохраняем сообщение пользователя в базу данных
|
||||
const { error: insertError } = await supabase
|
||||
.from('support')
|
||||
.insert({ user_id, message, is_from_user: true });
|
||||
|
||||
if (insertError) {
|
||||
return res.status(400).json({ error: insertError.message });
|
||||
}
|
||||
|
||||
// Получаем агента для пользователя
|
||||
const agent = getUserAgent(user_id, system_prompt);
|
||||
|
||||
// Обновляем системный промпт если передан
|
||||
if (system_prompt) {
|
||||
agent.updateSystemPrompt(system_prompt);
|
||||
}
|
||||
|
||||
// Получаем ответ от AI-агента
|
||||
const aiResponse = await agent.processMessage(message);
|
||||
|
||||
if (!aiResponse.success) {
|
||||
console.error('Ошибка AI-агента:', aiResponse.error);
|
||||
return res.status(500).json({
|
||||
error: 'Ошибка при генерации ответа',
|
||||
reply: 'Извините, произошла ошибка. Попробуйте позже.'
|
||||
});
|
||||
}
|
||||
|
||||
// Сохраняем ответ агента в базу данных
|
||||
const { error: responseError } = await supabase
|
||||
.from('support')
|
||||
.insert({
|
||||
user_id,
|
||||
message: aiResponse.content,
|
||||
is_from_user: false
|
||||
});
|
||||
|
||||
if (responseError) {
|
||||
console.error('Ошибка сохранения ответа:', responseError);
|
||||
// Не возвращаем ошибку пользователю, так как ответ уже сгенерирован
|
||||
}
|
||||
|
||||
// Возвращаем ответ пользователю
|
||||
res.json({
|
||||
reply: aiResponse.content,
|
||||
success: true
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
console.error('Ошибка в supportApi:', error);
|
||||
res.status(500).json({
|
||||
error: 'Внутренняя ошибка сервера',
|
||||
reply: 'Извините, произошла ошибка. Попробуйте позже.'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// 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) => {
|
||||
const { userId } = req.params;
|
||||
|
||||
try {
|
||||
if (userAgents.has(userId)) {
|
||||
const agent = userAgents.get(userId);
|
||||
await agent.clearHistory();
|
||||
|
||||
res.json({
|
||||
message: 'История диалога очищена',
|
||||
success: true
|
||||
});
|
||||
} else {
|
||||
res.json({
|
||||
message: 'Агент для данного пользователя не найден',
|
||||
success: true
|
||||
});
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error('Ошибка в /support/history:', error);
|
||||
res.status(500).json({
|
||||
error: 'Внутренняя ошибка сервера',
|
||||
success: false
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user