This commit is contained in:
morteza-mortezai
2025-11-30 11:52:38 +03:30
parent ace84fcfb2
commit 9a8515d7ab
3 changed files with 424 additions and 266 deletions
@@ -4,280 +4,62 @@ export const CHATBOT_CONSTANTS = {
DEFAULT_MAX_TOKENS: 2000,
MAX_CONVERSATION_HISTORY: 20,
// General system prompt focused on company guidance
SYSTEM_PROMPT: `شما یک دستیار هوشمند AI برای پلتفرم DZone هستید که در راهنمایی کاربران درباره شرکت‌ها و صنایع تخصص دارید. شما باید تمامی پاسخ‌ها را به زبان فارسی ارائه دهید.
// General system prompt focused on Electrical Power Panels product guidance
SYSTEM_PROMPT: `شما یک دستیار هوشمند AI برای پلتفرم فجر تابلو مرکزی هستید که در راهنمایی کاربران برای یافتن و انتخاب تابلوهای برق (Electrical Power Panels) تخصص دارید. شما باید تمامی پاسخ‌ها را به زبان فارسی ارائه دهید.
## وظایف اصلی شما:
🏢 **راهنمایی شرکت‌ها**: کمک به کاربران برای یافتن شرکت‌های مناسب و اطلاعات تماس آن‌ها
🏭 **معرفی صنایع**: ارائه اطلاعات کامل درباره صنایع مختلف و شرکت‌های فعال در هر حوزه
💼 **محصولات و خدمات**: راهنمایی درباره محصولات و خدمات ارائه شده توسط شرکت‌ها
🔍 **جستجو و مقایسه**: کمک به انتخاب بهترین شرکت برای نیازهای خاص کاربران
📞 **اطلاعات تماس**: ارائه اطلاعات کامل تماس شامل تلفن، ایمیل و آدرس شرکت‌ها
**راهنمایی محصولات تابلو برق**: کمک به کاربران برای یافتن تابلوهای برق مناسب بر اساس نیازهایشان
🔌 **مشاوره فنی**: ارائه اطلاعات فنی درباره انواع تابلوهای برق، ظرفیت، ولتاژ و مشخصات
🏭 **معرفی تولیدکنندگان**: معرفی شرکت‌های تولیدکننده تابلو برق و محصولات آن‌ها
💡 **مشاوره انتخاب**: کمک به انتخاب بهترین تابلو برق بر اساس کاربرد، ظرفیت و بودجه
📋 **مشخصات فنی**: ارائه جزئیات کامل فنی شامل ولتاژ، جریان، ابعاد، استانداردها و گواهینامه‌ها
📞 **اطلاعات تماس**: ارائه اطلاعات تماس تولیدکنندگان و فروشندگان
## انواع تابلوهای برق که باید درباره آن‌ها اطلاعات داشته باشید:
🔹 **تابلو برق فشار ضعیف (LV Panel)**: برای مصارف خانگی، تجاری و صنعتی
🔹 **تابلو برق فشار متوسط (MV Panel)**: برای شبکه‌های توزیع برق
🔹 **تابلو برق کنترل و فرمان**: برای کنترل موتورها و سیستم‌های اتوماسیون
🔹 **تابلو برق توزیع**: برای توزیع برق در ساختمان‌ها و کارخانه‌ها
🔹 **تابلو برق خازنی**: برای اصلاح ضریب توان
🔹 **تابلو برق UPS**: برای سیستم‌های برق اضطراری
🔹 **تابلو برق روشنایی**: برای کنترل روشنایی
🔹 **تابلو برق آسانسور**: برای سیستم‌های آسانسور
## اطلاعات مهم برای راهنمایی کاربران:
✅ **ولتاژ کاری**: 220V, 380V, 400V, 6.6kV, 11kV, 20kV و غیره
✅ **جریان نامی**: آمپر مورد نیاز (از 10A تا چند هزار آمپر)
✅ **نوع نصب**: دیواری، ایستاده، توکار، روکار
✅ **درجه حفاظت**: IP54, IP65, IP66 و غیره
✅ **استانداردها**: IEC, VDE, DIN, IEEE و استانداردهای ملی
✅ **کاربرد**: مسکونی، تجاری، صنعتی، بیمارستانی، دیتاسنتر
✅ **ابعاد و ابعاد**: اندازه فیزیکی مناسب برای محل نصب
✅ **قابلیت‌های اضافی**: سیستم‌های مانیتورینگ، SCADA، کنترل از راه دور
## اصول پاسخگویی:
✅ همیشه به زبان فارسی پاسخ دهید
✅ از اطلاعات پایگاه داده شرکت‌ها و صنایع برای پاسخ‌های دقیق استفاده کنید
در صورت سوال درباره شرکت خاص، اطلاعات کامل آن را ارائه دهید
همیشه اطلاعات تماس (تلفن، ایمیل، آدرس) شرکت‌ها را اضافه کنید
✅ از اطلاعات پایگاه داده محصولات و شرکت‌ها برای پاسخ‌های دقیق استفاده کنید
سوالات کاربر را برای درک بهتر نیازش بپرسید (ولتاژ، جریان، کاربرد، بودجه)
✅ اطلاعات فنی دقیق و قابل اعتماد ارائه دهید
✅ در صورت نیاز، چند گزینه مختلف با مشخصات و قیمت ارائه دهید
✅ اگر چیزی نمی‌دانید، صادقانه اعتراف کنید و راه حل جایگزین پیشنهاد دهید
✅ از ایموجی‌ها برای بهتر کردن تجربه کاربر استفاده کنید
✅ پاسخ‌های خود را ساختاربندی و خوانا ارائه دهید
## قالب پاسخ برای شرکت‌ها:
📍 **نام شرکت**: [نام کامل]
📞 **تلفن**: [شماره تماس]
📧 **ایمیل**: [آدرس ایمیل]
🏠 **آدرس**: [آدرس کامل]
🏭 **صنعت**: [نوع صنعت]
💼 **محصولات/خدمات**: [فهرست محصولات و خدمات]
## قالب پاسخ برای محصولات تابلو برق:
**نام محصول**: [نام کامل محصول]
🏭 **تولیدکننده**: [نام شرکت]
📊 **مشخصات فنی**:
- ولتاژ: [مثلاً 380V]
- جریان نامی: [مثلاً 400A]
اگر اطلاعات شرکت‌ها یا صنایع مربوطه از پایگاه داده در دسترس است، حتماً از آن استفاده کرده و منبع آن را مشخص کنید.`,
- درجه حفاظت: [مثلاً IP54]
- استاندارد: [مثلاً IEC 61439]
💼 **کاربرد**: [مثلاً صنعتی، تجاری، مسکونی]
💰 **قیمت**: [در صورت موجود بودن]
// New company guidance system prompt
COMPANY_GUIDANCE_SYSTEM_PROMPT: `شما یک دستیار هوشمند برای راهنمایی کاربران درباره شرکت‌ها و صنایع موجود در پلتفرم DZone هستید.
## ماموریت شما:
- راهنمایی کاربران برای یافتن شرکت‌های مناسب
- ارائه اطلاعات کامل درباره شرکت‌ها، محصولات و خدمات
- معرفی صنایع مختلف و شرکت‌های فعال در هر حوزه
- کمک به انتخاب بهترین شرکت برای نیازهای کاربران
## اطلاعات شرکت‌ها و صنایع:
{context}
## تاریخچه مکالمه:
{conversation_history}
## سوال کاربر:
{question}
## دستورالعمل پاسخ:
بر اساس اطلاعات شرکت‌ها و صنایع موجود، پاسخی جامع و کاربردی به زبان فارسی ارائه دهید:
**نکات مهم:**
- اگر کاربر درباره شرکت خاصی سوال می‌پرسد، اطلاعات کامل آن شرکت (نام، آدرس، تلفن، محصولات، خدمات) را ارائه دهید
- اگر سوال درباره صنعت خاصی است، شرکت‌های فعال در آن صنعت را معرفی کنید
- در صورت جستجوی محصول یا خدمت، شرکت‌های مرتبط را پیشنهاد دهید
- همیشه اطلاعات تماس (تلفن، ایمیل، آدرس) شرکت‌ها را ارائه دهید
- از ایموجی‌های مناسب برای بهتر شدن خوانایی استفاده کنید
- پاسخ خود را ساختاربندی و منظم ارائه دهید
پاسخ شما:`,
// Company data templates
COMPANY_DATA_TEMPLATES: {
COMPANY_INFO: `نام شرکت: {name}
مدیر عامل: {ceo}
ایمیل: {email}
تلفن: {phone}
شماره ثبت: {registrationNumber}
تاریخ تاسیس: {establishmentDate}
آدرس: {address}
وب‌سایت: {website}
توضیحات: {description}
صنعت فعالیت: {industry}
وضعیت: {status}
کسب و کار والد: {business}
این شرکت در پلتفرم DZone ثبت شده و آماده ارائه خدمات و محصولات خود به مشتریان می‌باشد.`,
COMPANY_PRODUCT: `محصول شرکت {companyName}:
نام محصول: {productTitle}
شرکت تولیدکننده: {companyName}
صنعت: {industry}
توضیحات شرکت: {companyDescription}
آدرس شرکت: {companyAddress}
تلفن تماس: {companyPhone}
ایمیل: {companyEmail}
این محصول توسط شرکت {companyName} در صنعت {industry} تولید و ارائه می‌شود.`,
COMPANY_SERVICE: `خدمات شرکت {companyName}:
نام خدمت: {serviceTitle}
شرکت ارائه‌دهنده: {companyName}
صنعت: {industry}
توضیحات شرکت: {companyDescription}
آدرس شرکت: {companyAddress}
تلفن تماس: {companyPhone}
ایمیل: {companyEmail}
این خدمت توسط شرکت {companyName} در صنعت {industry} ارائه می‌شود.`,
INDUSTRY_INFO: `صنعت: {title}
وضعیت: {status}
تعداد شرکت‌های فعال: {companiesCount}
کسب و کار والد: {business}
شرکت‌های فعال در این صنعت:
{companiesList}
این صنعت شامل شرکت‌هایی است که در حوزه {title} فعالیت می‌کنند و خدمات و محصولات مختلفی ارائه می‌دهند.`,
},
// Company guidance documents
COMPANY_GUIDANCE_DOCUMENTS: {
COMPANY_GUIDE: `راهنمای شرکت‌ها در پلتفرم DZone:
🏢 **اطلاعات شرکت‌ها**:
در پلتفرم DZone شرکت‌های مختلفی در صنایع متنوع فعالیت می‌کنند. هر شرکت دارای اطلاعات کاملی شامل:
- نام و مشخصات کامل شرکت
- اطلاعات تماس (تلفن، ایمیل، آدرس)
- صنعت فعالیت و حوزه کاری
- محصولات و خدمات ارائه شده
- وضعیت فعالیت و مجوزهای لازم
💼 **محصولات و خدمات**:
هر شرکت می‌تواند محصولات و خدمات متنوعی ارائه دهد:
- محصولات: کالاها و تولیدات شرکت
- خدمات: سرویس‌ها و راهکارهای ارائه شده
- اطلاعات تماس برای استعلام و سفارش
- جزئیات کامل درباره هر محصول و خدمت
🏭 **دسته‌بندی صنایع**:
شرکت‌ها بر اساس صنعت فعالیت دسته‌بندی شده‌اند:
- هر صنعت شامل شرکت‌های مرتبط
- امکان جستجو بر اساس نوع صنعت
- مشاهده تمام شرکت‌های یک صنعت خاص
- اطلاعات کامل درباره حوزه فعالیت`,
COMPANY_FAQ: `سوالات متداول درباره شرکت‌ها:
❓ **چگونه اطلاعات یک شرکت را پیدا کنم؟**
می‌توانید با ذکر نام شرکت یا صنعت مورد نظر، اطلاعات کامل شامل آدرس، تلفن و محصولات آن را دریافت کنید.
❓ **چه شرکت‌هایی در یک صنعت خاص فعالیت می‌کنند؟**
با ذکر نام صنعت، لیست کامل شرکت‌های فعال در آن حوزه را مشاهده خواهید کرد.
❓ **چگونه با یک شرکت تماس بگیرم؟**
اطلاعات تماس شامل تلفن، ایمیل و آدرس تمام شرکت‌ها در پلتفرم موجود است.
❓ **چه محصولات و خدماتی ارائه می‌شود؟**
هر شرکت لیست کاملی از محصولات و خدمات خود ارائه داده که قابل مشاهده است.
❓ **چگونه شرکت مناسب برای نیاز خودم پیدا کنم؟**
با توصیف نیاز خود یا نوع محصول/خدمت مورد نظر، شرکت‌های مرتبط را معرفی خواهم کرد.`,
SEARCH_GUIDE: `راهنمای جستجو و یافتن شرکت‌ها:
🔍 **نحوه جستجو**:
- جستجو بر اساس نام شرکت
- جستجو بر اساس نوع صنعت
- جستجو بر اساس محصول یا خدمت
- جستجو بر اساس منطقه جغرافیایی
📊 **اطلاعات قابل دریافت**:
- اطلاعات کامل شرکت (نام، آدرس، تلفن)
- لیست محصولات و توضیحات
- لیست خدمات ارائه شده
- صنعت و حوزه فعالیت
- وضعیت فعالیت شرکت
🎯 **توصیه‌های مفید**:
- برای یافتن شرکت مناسب، نیاز خود را واضح بیان کنید
- از کلمات کلیدی مرتبط با صنعت استفاده کنید
- در صورت نیاز، اطلاعات تماس برای پیگیری بیشتر درخواست کنید
- برای مقایسه، چندین شرکت در یک صنعت را بررسی کنید`,
INDUSTRY_GUIDE: `راهنمای صنایع و حوزه‌های فعالیت:
🏭 **انواع صنایع موجود**:
در پلتفرم DZone شرکت‌های مختلفی در صنایع متنوع حضور دارند:
- صنایع تولیدی و ساختمانی
- خدمات فناوری اطلاعات
- صنایع غذایی و کشاورزی
- خدمات مالی و بیمه
- حمل و نقل و لجستیک
- آموزش و تربیت
- سلامت و درمان
- و سایر صنایع
💡 **مزایای دسته‌بندی صنعتی**:
- یافتن آسان شرکت‌های مرتبط
- مقایسه خدمات در یک صنعت
- انتخاب بهترین گزینه برای نیاز شما
- دسترسی به اطلاعات تخصصی هر حوزه
📈 **نحوه استفاده**:
- ابتدا صنعت مورد نظر خود را مشخص کنید
- سپس شرکت‌های فعال در آن صنعت را بررسی کنید
- محصولات و خدمات مناسب را انتخاب کنید
- برای اطلاعات بیشتر با شرکت تماس بگیرید`,
},
// Logging messages for LangChain service
LANGCHAIN_MESSAGES: {
LOADING_DATA: "Loading company and industry data for model training...",
NO_DATA_FOUND: "No data found for model training",
DOCUMENTS_SPLIT: "{totalDocs} documents split into {chunks} chunks",
VECTOR_STORE_READY: "Vector store successfully initialized - ready to guide users about companies and industries",
VECTOR_STORE_ERROR: "Error initializing vector store",
DOCUMENTS_LOADED: "{count} documents loaded from company and industry database",
LOADING_ERROR: "Error loading company and industry documents",
SERVICE_NOT_INITIALIZED: "LangChain service is not initialized",
RESPONSE_ERROR: "Error generating LangChain response",
STREAM_RESPONSE_ERROR: "Error generating LangChain stream response",
REFRESHING_VECTOR_STORE: "Refreshing vector store with new company and industry data...",
},
// Source type labels in Farsi
SOURCE_TYPE_LABELS: {
company: "شرکت",
product: "محصول",
service: "خدمت",
industry: "صنعت",
company_guide: "راهنمای شرکت‌ها",
company_faq: "سوالات متداول",
search_guide: "راهنمای جستجو",
industry_guide: "راهنمای صنایع",
},
// Default values for missing data
DEFAULT_VALUES: {
NO_WEBSITE: "ندارد",
UNSPECIFIED: "مشخص نشده",
ACTIVE: "فعال",
INACTIVE: "غیرفعال",
},
// WEBSOCKET_EVENTS: {
// // Connection events
// CONNECT: "connect",
// DISCONNECT: "disconnect",
// CONNECTION_ERROR: "connection_failed",
// // Authentication events
// AUTHENTICATE: "authenticate",
// AUTHENTICATED: "authenticated",
// UNAUTHORIZED: "unauthorized",
// // Session events
// CREATE_SESSION: "create_session",
// SESSION_CREATED: "session_created",
// JOIN_CHAT: "join_chat",
// CHAT_JOINED: "chat_joined",
// LEAVE_CHAT: "leave_chat",
// CHAT_LEFT: "chat_left",
// // Message events
// SEND_MESSAGE: "send_message",
// MESSAGE_RECEIVED: "message_received",
// BOT_RESPONSE_START: "bot_response_start",
// BOT_RESPONSE_CHUNK: "bot_response_chunk",
// BOT_RESPONSE_END: "bot_response_end",
// BOT_RESPONSE: "bot_response",
// // Status events
// TYPING_START: "typing_start",
// TYPING_STOP: "typing_stop",
// USER_JOINED: "user_joined",
// USER_LEFT: "user_left",
// // Error events
// ERROR: "error",
// WEBSOCKET_ERROR: "websocket_error",
// SESSION_ERROR: "session_error",
// MESSAGE_ERROR: "message_error",
// },
اگر اطلاعات محصولات تابلو برق یا پایگاه داده در دسترس است، حتماً از آن استفاده کرده و منبع آن را مشخص کنید.`,
ERROR_MESSAGES: {
SESSION_NOT_FOUND: "جلسه چت یافت نشد",
+9 -4
View File
@@ -16,19 +16,24 @@ export class LLMService {
constructor(@inject(IOCTYPES.ChatbotDataContextService) private dataContextService: DataContextService) {
this.logger = new Logger("LLMService");
this.config = {
model: process.env.OPENAI_MODEL || CHATBOT_CONSTANTS.DEFAULT_MODEL,
temperature: Number(process.env.OPENAI_TEMPERATURE || CHATBOT_CONSTANTS.DEFAULT_TEMPERATURE),
maxTokens: Number(process.env.OPENAI_MAX_TOKENS || CHATBOT_CONSTANTS.DEFAULT_MAX_TOKENS),
model: process.env.OPENAI_MODEL || "openai/gpt-4o-mini",
temperature: Number(process.env.OPENAI_TEMPERATURE || "0.7"),
maxTokens: Number(process.env.OPENAI_MAX_TOKENS || "2000"),
topP: Number(process.env.OPENAI_TOP_P || "0.95"),
apiKey: process.env.OPENAI_API_KEY || "",
apiKey:
process.env.OPENAI_API_KEY ||
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiI2OTFlMzBjOGI1NDRmYzJkY2JlMTQ2MGUiLCJ0eXBlIjoiYWlfa2V5IiwiaWF0IjoxNzYzNTg2MjQ4fQ.XRMe-TVV9FXCMdueI_xbxycBLj7KJEACXYlkxv3QZrE",
};
if (!this.config.apiKey) {
throw new Error("OPENAI_API_KEY is required");
}
const baseURL = process.env.OPENAI_BASE_URL || "https://ai.liara.ir/api/v1/691e30a204c9b93ad278578b";
this.openai = new OpenAI({
apiKey: this.config.apiKey,
baseURL: baseURL,
});
}