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
+371
View File
@@ -0,0 +1,371 @@
# Frontend WebSocket Chatbot Implementation Prompt
Create a modern, responsive frontend application for a real-time chatbot system using Socket.IO. The chatbot is designed for an Electrical Power Panels (تابلو برق) e-commerce platform that provides product guidance in Persian/Farsi.
## Technical Requirements
### 1. WebSocket Connection Setup
- **Connection Path**: `/ws-chatbot`
- **Library**: Use Socket.IO client library (socket.io-client)
- **Connection Options**:
- Support both authenticated (with JWT token) and anonymous connections
- Token can be provided via:
- Query parameter: `?token=YOUR_JWT_TOKEN`
- Authorization header: `Authorization: Bearer YOUR_JWT_TOKEN`
- For anonymous users, the system uses a ULID stored in cookies (`chatbot_session_id`)
- CORS is enabled with credentials support
### 2. WebSocket Events to Implement
#### Connection Events
- `connect` - Socket connected successfully
- `disconnect` - Socket disconnected
- `connection_failed` - Connection failed
#### Authentication Events
- **Emit**: `authenticate` (if using token-based auth)
- **Listen**: `authenticated` - Authentication successful
```json
{
"message": "authenticated",
"userId": "user_id",
"timestamp": "2024-01-01T00:00:00.000Z"
}
```
- **Listen**: `unauthorized` - Authentication failed
```json
{
"message": "error_message",
"timestamp": "2024-01-01T00:00:00.000Z"
}
```
#### Session Management Events
- **Emit**: `create_session` - Create a new chat session
- **Listen**: `session_created` - Session created successfully
```json
{
"status": "success",
"data": {
"id": "session_ulid",
"status": "active",
"createdAt": "2024-01-01T00:00:00.000Z",
"lastMessageAt": "2024-01-01T00:00:00.000Z",
"messages": []
},
"timestamp": "2024-01-01T00:00:00.000Z"
}
```
- **Emit**: `join_chat` - Join an existing chat session (pass sessionId as string)
- **Listen**: `chat_joined` - Successfully joined chat session
```json
{
"status": "success",
"data": {
"id": "session_ulid",
"status": "active",
"createdAt": "2024-01-01T00:00:00.000Z",
"lastMessageAt": "2024-01-01T00:00:00.000Z",
"messages": [
{
"id": "message_ulid",
"content": "message content",
"type": "user" | "bot" | "system",
"status": "sent" | "delivered" | "read" | "failed",
"createdAt": "2024-01-01T00:00:00.000Z",
"responseToId": "optional_message_id",
"metadata": {},
"tokensUsed": 0
}
]
},
"timestamp": "2024-01-01T00:00:00.000Z"
}
```
- **Emit**: `leave_chat` - Leave a chat session (pass sessionId as string)
- **Listen**: `chat_left` - Successfully left chat session
#### Message Events
- **Emit**: `send_message` - Send a regular message
```json
{
"content": "user message text",
"sessionId": "session_ulid",
"responseToId": "optional_message_id_to_reply_to",
"metadata": {}
}
```
- **Emit**: `send_message_stream` - Send a message and receive streaming response
```json
{
"content": "user message text",
"sessionId": "session_ulid",
"responseToId": "optional_message_id_to_reply_to",
"metadata": {}
}
```
- **Listen**: `message_received` - User message received and saved
```json
{
"status": "success",
"data": {
"id": "message_ulid",
"content": "message content",
"type": "user",
"status": "sent",
"createdAt": "2024-01-01T00:00:00.000Z",
"responseToId": null,
"metadata": {},
"tokensUsed": 0
},
"timestamp": "2024-01-01T00:00:00.000Z"
}
```
#### Streaming Response Events (for `send_message_stream`)
- **Listen**: `bot_response_start` - Bot started generating response
```json
{
"status": "success",
"data": {
"userMessageId": "message_ulid"
},
"timestamp": "2024-01-01T00:00:00.000Z"
}
```
- **Listen**: `bot_response_chunk` - Receive a chunk of bot response (streaming)
```json
{
"status": "success",
"data": {
"chunk": "partial text chunk",
"userMessageId": "message_ulid"
},
"timestamp": "2024-01-01T00:00:00.000Z"
}
```
- **Listen**: `bot_response_end` - Bot finished generating response
```json
{
"status": "success",
"data": {
"userMessageId": "message_ulid",
"fullResponse": "complete bot response text"
},
"timestamp": "2024-01-01T00:00:00.000Z"
}
```
#### Non-Streaming Bot Response (for `send_message`)
- **Listen**: `bot_response` - Complete bot response received
```json
{
"status": "success",
"data": {
"id": "message_ulid",
"content": "complete bot response",
"type": "bot",
"status": "sent",
"createdAt": "2024-01-01T00:00:00.000Z",
"responseToId": "user_message_ulid",
"metadata": {
"confidence": 0.95,
"sources": [],
"llmContext": {}
},
"tokensUsed": 150
},
"timestamp": "2024-01-01T00:00:00.000Z"
}
```
#### Typing Indicators
- **Emit**: `typing_start` - User started typing (pass sessionId as string)
- **Emit**: `typing_stop` - User stopped typing (pass sessionId as string)
- **Listen**: `typing_start` - Another user started typing
- **Listen**: `typing_stop` - Another user stopped typing
#### User Presence Events
- **Listen**: `user_joined` - Another user joined the session
- **Listen**: `user_left` - Another user left the session
#### Error Events
- **Listen**: `error` - General error
- **Listen**: `websocket_error` - WebSocket connection error
- **Listen**: `session_error` - Session-related error
- **Listen**: `message_error` - Message-related error
All error events follow this format:
```json
{
"status": "error",
"message": "error message",
"timestamp": "2024-01-01T00:00:00.000Z"
}
```
### 3. REST API Endpoints (Optional - for session management)
The backend also provides REST endpoints that can be used for session management:
- `POST /chatbot/sessions` - Create a new chat session
- `GET /chatbot/sessions?limit=10` - Get user's chat sessions (paginated)
- `GET /chatbot/sessions/:sessionId` - Get a specific chat session with messages
- `POST /chatbot/messages` - Send a message (non-streaming)
- `POST /chatbot/messages/stream` - Send a message and get Server-Sent Events (SSE) streaming
- `PUT /chatbot/sessions/:sessionId/close` - Close a chat session
- `PUT /chatbot/sessions/:sessionId/messages/read` - Mark messages as read
### 4. UI/UX Requirements
#### Design
- Modern, clean, and responsive design
- Support for Persian/Farsi (RTL) text direction
- Mobile-first approach with desktop support
- Dark mode support (optional but recommended)
- Smooth animations and transitions
#### Chat Interface Components
1. **Session List Sidebar** (optional)
- List of all chat sessions
- Show last message preview
- Show unread message count
- Show session status (active/closed)
- Create new session button
2. **Chat Window**
- Message list with scroll-to-bottom functionality
- Message bubbles:
- User messages: Right-aligned (or left in RTL), distinct styling
- Bot messages: Left-aligned (or right in RTL), distinct styling
- System messages: Centered, muted styling
- Show message timestamps (relative or absolute)
- Show message status indicators (sent, delivered, read, failed)
- Support for message replies (if responseToId is provided)
- Markdown rendering for bot messages (if applicable)
- Copy message functionality
3. **Input Area**
- Text input field with character counter (max 2000 characters)
- Send button
- Support for Enter key to send (Shift+Enter for new line)
- Typing indicator display
- File upload support (if needed in future)
- Emoji picker (optional)
4. **Streaming Response Display**
- Show typing indicator when `bot_response_start` is received
- Display streaming text character-by-character or word-by-word as chunks arrive
- Smooth animation for streaming text
- Show completion when `bot_response_end` is received
- Handle errors gracefully during streaming
5. **Connection Status**
- Visual indicator for connection status (connected/disconnected/reconnecting)
- Auto-reconnect functionality with exponential backoff
- Show connection errors to user
6. **Error Handling**
- Display user-friendly error messages
- Retry mechanisms for failed operations
- Toast notifications for errors
- Persian/Farsi error messages
#### Features
- **Real-time Updates**: All messages should appear in real-time
- **Message Persistence**: Load previous messages when joining a session
- **Auto-scroll**: Automatically scroll to bottom when new messages arrive
- **Typing Indicators**: Show when bot is generating response
- **Message Status**: Display sent/delivered/read status for user messages
- **Session Management**: Create, join, leave, and close sessions
- **Responsive Design**: Works on mobile, tablet, and desktop
- **Accessibility**: WCAG 2.1 AA compliance
- **Performance**: Optimize for smooth scrolling with many messages (virtual scrolling if needed)
### 5. State Management
Implement proper state management for:
- WebSocket connection state
- Current active session
- Message list for current session
- Session list
- Typing indicators
- Connection status
- Error states
### 6. Technical Stack Recommendations
- **Framework**: React, Vue, or Angular (your choice)
- **State Management**: Redux, Zustand, Pinia, or Context API
- **WebSocket**: socket.io-client
- **Styling**: Tailwind CSS, Material-UI, or styled-components
- **Icons**: React Icons, Heroicons, or similar
- **Date Formatting**: date-fns or moment.js
- **HTTP Client**: Axios or fetch API
- **Build Tool**: Vite, Create React App, or Next.js
### 7. Implementation Notes
- Handle reconnection automatically
- Store ULID in cookies for anonymous users
- Implement proper cleanup on component unmount
- Debounce typing indicators (send `typing_stop` after 3 seconds of inactivity)
- Implement message queuing for offline scenarios
- Add loading states for all async operations
- Implement proper error boundaries
- Add analytics/tracking (optional)
- Support for keyboard shortcuts (optional)
### 8. Testing Requirements
- Unit tests for WebSocket event handlers
- Integration tests for message flow
- E2E tests for critical user flows
- Test reconnection scenarios
- Test error handling
- Test streaming response display
### 9. Additional Features (Optional)
- Message search within a session
- Export chat history
- Share session link
- Voice input (speech-to-text)
- Message reactions
- Rich text formatting in messages
- Product cards/embeds in bot responses
- Quick reply buttons
### 10. Example Flow
1. User opens the application
2. Application connects to WebSocket (`/ws-chatbot`)
3. If authenticated, token is sent; otherwise, ULID is used from cookie or generated
4. User creates a new session or joins an existing one
5. Previous messages are loaded and displayed
6. User types a message and sends it
7. Message appears immediately in the chat
8. Bot response starts streaming (if using streaming) or arrives as complete message
9. User can continue the conversation
10. Connection is maintained and auto-reconnects if dropped
## Deliverables
Create a complete, production-ready frontend application with:
- Clean, maintainable code structure
- Comprehensive error handling
- Responsive design
- Real-time WebSocket integration
- TypeScript support (recommended)
- Documentation and comments
- README with setup instructions
@@ -4,280 +4,62 @@ export const CHATBOT_CONSTANTS = {
DEFAULT_MAX_TOKENS: 2000, DEFAULT_MAX_TOKENS: 2000,
MAX_CONVERSATION_HISTORY: 20, MAX_CONVERSATION_HISTORY: 20,
// General system prompt focused on company guidance // General system prompt focused on Electrical Power Panels product guidance
SYSTEM_PROMPT: `شما یک دستیار هوشمند AI برای پلتفرم DZone هستید که در راهنمایی کاربران درباره شرکت‌ها و صنایع تخصص دارید. شما باید تمامی پاسخ‌ها را به زبان فارسی ارائه دهید. 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: { ERROR_MESSAGES: {
SESSION_NOT_FOUND: "جلسه چت یافت نشد", SESSION_NOT_FOUND: "جلسه چت یافت نشد",
+9 -4
View File
@@ -16,19 +16,24 @@ export class LLMService {
constructor(@inject(IOCTYPES.ChatbotDataContextService) private dataContextService: DataContextService) { constructor(@inject(IOCTYPES.ChatbotDataContextService) private dataContextService: DataContextService) {
this.logger = new Logger("LLMService"); this.logger = new Logger("LLMService");
this.config = { this.config = {
model: process.env.OPENAI_MODEL || CHATBOT_CONSTANTS.DEFAULT_MODEL, model: process.env.OPENAI_MODEL || "openai/gpt-4o-mini",
temperature: Number(process.env.OPENAI_TEMPERATURE || CHATBOT_CONSTANTS.DEFAULT_TEMPERATURE), temperature: Number(process.env.OPENAI_TEMPERATURE || "0.7"),
maxTokens: Number(process.env.OPENAI_MAX_TOKENS || CHATBOT_CONSTANTS.DEFAULT_MAX_TOKENS), maxTokens: Number(process.env.OPENAI_MAX_TOKENS || "2000"),
topP: Number(process.env.OPENAI_TOP_P || "0.95"), 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) { if (!this.config.apiKey) {
throw new Error("OPENAI_API_KEY is required"); 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({ this.openai = new OpenAI({
apiKey: this.config.apiKey, apiKey: this.config.apiKey,
baseURL: baseURL,
}); });
} }