feat: новая функция

This commit is contained in:
2025-11-12 22:34:39 +03:00
parent 6cca7b7c0c
commit c45f98160a
6 changed files with 40 additions and 6 deletions

View File

@@ -115,6 +115,7 @@ const app = express();
// Указываем хост явно // Указываем хост явно
app.set('host', '0.0.0.0'); app.set('host', '0.0.0.0');
app.set('port', process.env.PORT || 8000); app.set('port', process.env.PORT || 8000);
app.set('trust proxy', true);
// Настройка CORS // Настройка CORS
const corsOrigins = process.env.NODE_ENV === 'production' const corsOrigins = process.env.NODE_ENV === 'production'

View File

@@ -112,7 +112,7 @@ class AIAssistant {
let userNameForProfile = null; let userNameForProfile = null;
let shouldAskForName = false; let shouldAskForName = false;
let profileAnalysis = null; let profileAnalysis = null;
if (userId && (typeof userId !== 'string' || !userId.toString().startsWith('guest_'))) { if (userId && !userContextService.isGuestId(userId)) {
try { try {
profileAnalysis = await profileAnalysisService.analyzeUserMessage(userId, userQuestion); profileAnalysis = await profileAnalysisService.analyzeUserMessage(userId, userQuestion);
const tagsDisplay = profileAnalysis.currentTagNames && profileAnalysis.currentTagNames.length > 0 const tagsDisplay = profileAnalysis.currentTagNames && profileAnalysis.currentTagNames.length > 0
@@ -266,7 +266,7 @@ class AIAssistant {
// 5. Генерируем LLM ответ // 5. Генерируем LLM ответ
const { generateLLMResponse } = require('./ragService'); const { generateLLMResponse } = require('./ragService');
// Получаем актуальную информацию о пользователе для LLM // Получаем актуальную информацию о пользователе для LLM
if (!userNameForProfile && userId && (typeof userId !== 'string' || !userId.toString().startsWith('guest_'))) { if (!userNameForProfile && userId && !userContextService.isGuestId(userId)) {
try { try {
const userContext = await userContextService.getUserContext(userId); const userContext = await userContextService.getUserContext(userId);
if (userContext) { if (userContext) {

View File

@@ -426,7 +426,7 @@ async function analyzeUserMessage(userId, message) {
logger.info(`[ProfileAnalysis] Сообщение пользователя ${userId}: "${message.substring(0, 100)}${message.length > 100 ? '...' : ''}"`); logger.info(`[ProfileAnalysis] Сообщение пользователя ${userId}: "${message.substring(0, 100)}${message.length > 100 ? '...' : ''}"`);
const DEFAULT_TAG_NAME = 'Без лицензии'; const DEFAULT_TAG_NAME = 'Без лицензии';
const isGuest = typeof userId === 'string' && userId.startsWith('guest_'); const isGuest = userContextService.isGuestId(userId);
let currentContext = null; let currentContext = null;
let currentName = null; let currentName = null;

View File

@@ -40,7 +40,7 @@ async function getUserTags(userId) {
} }
// Гостевые пользователи не имеют тегов // Гостевые пользователи не имеют тегов
if (typeof userId === 'string' && userId.startsWith('guest_')) { if (isGuestId(userId)) {
return []; return [];
} }
@@ -164,7 +164,7 @@ async function getUserContext(userId) {
} }
// Гостевые пользователи // Гостевые пользователи
if (typeof userId === 'string' && userId.startsWith('guest_')) { if (isGuestId(userId)) {
return { return {
id: userId, id: userId,
name: null, name: null,
@@ -227,6 +227,26 @@ async function getUserContext(userId) {
} }
} }
/**
* Проверяет, является ли идентификатор гостевым (строковым)
* @param {unknown} userId
* @returns {boolean}
*/
function isGuestId(userId) {
if (typeof userId !== 'string') {
return false;
}
const normalized = userId.trim();
return (
normalized.startsWith('guest_') ||
normalized.startsWith('web:guest_') ||
normalized.startsWith('telegram:guest_') ||
normalized.startsWith('email:guest_') ||
normalized.includes(':guest_')
);
}
/** /**
* Инвалидация кэша для пользователя * Инвалидация кэша для пользователя
* @param {number} userId - ID пользователя * @param {number} userId - ID пользователя
@@ -270,6 +290,7 @@ module.exports = {
getUserContext, getUserContext,
invalidateUserCache, invalidateUserCache,
clearCache, clearCache,
getCacheStats getCacheStats,
isGuestId
}; };

View File

@@ -54,6 +54,9 @@ http {
limit_req zone=api_limit_per_ip burst=100 nodelay; limit_req zone=api_limit_per_ip burst=100 nodelay;
proxy_pass http://${BACKEND_CONTAINER}:8000/api/; proxy_pass http://${BACKEND_CONTAINER}:8000/api/;
proxy_connect_timeout 120s;
proxy_send_timeout 120s;
proxy_read_timeout 600s;
proxy_set_header Host $host; proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
@@ -71,6 +74,9 @@ http {
proxy_http_version 1.1; proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade; proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade"; proxy_set_header Connection "upgrade";
proxy_connect_timeout 120s;
proxy_send_timeout 120s;
proxy_read_timeout 600s;
proxy_set_header Host $host; proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

View File

@@ -135,6 +135,9 @@ http {
limit_req zone=api_limit_per_ip burst=10 nodelay; limit_req zone=api_limit_per_ip burst=10 nodelay;
proxy_pass http://${BACKEND_CONTAINER}:8000/api/; proxy_pass http://${BACKEND_CONTAINER}:8000/api/;
proxy_connect_timeout 120s;
proxy_send_timeout 120s;
proxy_read_timeout 600s;
proxy_set_header Host $host; proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
@@ -152,6 +155,9 @@ http {
proxy_http_version 1.1; proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade; proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade"; proxy_set_header Connection "upgrade";
proxy_connect_timeout 120s;
proxy_send_timeout 120s;
proxy_read_timeout 600s;
proxy_set_header Host $host; proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;