feat: новая функция
This commit is contained in:
@@ -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'
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user