# πŸ”§ ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ Π΄Π»ΠΈΠ½Ρ‹ ΠΏΠΎΠ»Π΅ΠΉ ## πŸ“‹ ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния ВсС настройки Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния: ### ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π»ΠΈΠΌΠΈΡ‚Ρ‹ | ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ | ОписаниС | По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ | |------------|----------|--------------| | `LCG_MAX_SYSTEM_PROMPT_LENGTH` | Максимальная Π΄Π»ΠΈΠ½Π° систСмного ΠΏΡ€ΠΎΠΌΠΏΡ‚Π° | 2000 | | `LCG_MAX_USER_MESSAGE_LENGTH` | Максимальная Π΄Π»ΠΈΠ½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ сообщСния | 4000 | | `LCG_MAX_PROMPT_NAME_LENGTH` | Максимальная Π΄Π»ΠΈΠ½Π° названия ΠΏΡ€ΠΎΠΌΠΏΡ‚Π° | 2000 | | `LCG_MAX_PROMPT_DESC_LENGTH` | Максимальная Π΄Π»ΠΈΠ½Π° описания ΠΏΡ€ΠΎΠΌΠΏΡ‚Π° | 5000 | | `LCG_MAX_COMMAND_LENGTH` | Максимальная Π΄Π»ΠΈΠ½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹/ΠΎΡ‚Π²Π΅Ρ‚Π° | 8000 | | `LCG_MAX_EXPLANATION_LENGTH` | Максимальная Π΄Π»ΠΈΠ½Π° объяснСния | 20000 | ## πŸš€ ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования ### Установка Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния ```bash # Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π»ΠΈΠΌΠΈΡ‚ систСмного ΠΏΡ€ΠΎΠΌΠΏΡ‚Π° Π΄ΠΎ 3ΠΊ символов export LCG_MAX_SYSTEM_PROMPT_LENGTH=3000 # Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π»ΠΈΠΌΠΈΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ сообщСния Π΄ΠΎ 2ΠΊ символов export LCG_MAX_USER_MESSAGE_LENGTH=2000 # Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π»ΠΈΠΌΠΈΡ‚ названия ΠΏΡ€ΠΎΠΌΠΏΡ‚Π° Π΄ΠΎ 3000 символов export LCG_MAX_PROMPT_NAME_LENGTH=3000 ``` ### Установка Π² .env Ρ„Π°ΠΉΠ»Π΅ ```bash # .env Ρ„Π°ΠΉΠ» LCG_MAX_SYSTEM_PROMPT_LENGTH=2000 LCG_MAX_USER_MESSAGE_LENGTH=4000 LCG_MAX_PROMPT_NAME_LENGTH=2000 LCG_MAX_PROMPT_DESC_LENGTH=5000 LCG_MAX_COMMAND_LENGTH=8000 LCG_MAX_EXPLANATION_LENGTH=20000 ``` ### Установка Π² systemd сСрвисС ```ini [Unit] Description=Linux Command GPT After=network.target [Service] Type=simple User=lcg WorkingDirectory=/opt/lcg ExecStart=/opt/lcg/lcg serve Environment=LCG_MAX_SYSTEM_PROMPT_LENGTH=2000 Environment=LCG_MAX_USER_MESSAGE_LENGTH=4000 Environment=LCG_MAX_PROMPT_NAME_LENGTH=2000 Restart=always [Install] WantedBy=multi-user.target ``` ### Установка Π² Docker ```dockerfile FROM golang:1.21-alpine AS builder # ... build steps ... FROM alpine:latest COPY --from=builder /app/lcg /usr/local/bin/ ENV LCG_MAX_SYSTEM_PROMPT_LENGTH=2000 ENV LCG_MAX_USER_MESSAGE_LENGTH=4000 CMD ["lcg", "serve"] ``` ```yaml # docker-compose.yml version: '3.8' services: lcg: image: lcg:latest environment: - LCG_MAX_SYSTEM_PROMPT_LENGTH=2000 - LCG_MAX_USER_MESSAGE_LENGTH=4000 - LCG_MAX_PROMPT_NAME_LENGTH=2000 ports: - "8080:8080" ``` ## πŸ” Π“Π΄Π΅ примСняСтся валидация ### 1. Консольная Ρ‡Π°ΡΡ‚ΡŒ (main.go) - βœ… Валидация ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ сообщСния - βœ… Валидация систСмного ΠΏΡ€ΠΎΠΌΠΏΡ‚Π° - βœ… Π¦Π²Π΅Ρ‚Π½Ρ‹Π΅ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ### 2. API эндпоинты - βœ… `/execute` - валидация ΠΏΡ€ΠΎΠΌΠΏΡ‚Π° ΠΈ систСмного ΠΏΡ€ΠΎΠΌΠΏΡ‚Π° - βœ… `/api/save-result` - валидация всСх ΠΏΠΎΠ»Π΅ΠΉ - βœ… `/api/add-to-history` - валидация всСх ΠΏΠΎΠ»Π΅ΠΉ ### 3. Π’Π΅Π±-интСрфСйс - βœ… Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° выполнСния - валидация Π² JavaScript ΠΈ Π½Π° сСрвСрС - βœ… Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΌΠΏΡ‚Π°ΠΌΠΈ - валидация всСх ΠΏΠΎΠ»Π΅ΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ ### 4. JavaScript валидация - βœ… ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠ°Ρ валидация ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ - βœ… ДинамичСскиС Π»ΠΈΠΌΠΈΡ‚Ρ‹ ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ - βœ… ΠŸΠΎΠ½ΡΡ‚Π½Ρ‹Π΅ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ## πŸ› οΈ ВСхничСскиС Π΄Π΅Ρ‚Π°Π»ΠΈ ### Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ```go type ValidationConfig struct { MaxSystemPromptLength int // LCG_MAX_SYSTEM_PROMPT_LENGTH MaxUserMessageLength int // LCG_MAX_USER_MESSAGE_LENGTH MaxPromptNameLength int // LCG_MAX_PROMPT_NAME_LENGTH MaxPromptDescLength int // LCG_MAX_PROMPT_DESC_LENGTH MaxCommandLength int // LCG_MAX_COMMAND_LENGTH MaxExplanationLength int // LCG_MAX_EXPLANATION_LENGTH } ``` ### Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ ```go // ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ validation.ValidateSystemPrompt(prompt) validation.ValidateUserMessage(message) validation.ValidatePromptName(name) validation.ValidatePromptDescription(description) validation.ValidateCommand(command) validation.ValidateExplanation(explanation) // Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ validation.TruncateSystemPrompt(prompt) validation.TruncateUserMessage(message) validation.FormatLengthInfo(systemPrompt, userMessage) ``` ### ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок - **API**: HTTP 400 с JSON сообщСниСм ΠΎΠ± ошибкС - **Π’Π΅Π±-интСрфСйс**: HTTP 400 с тСкстовым сообщСниСм - **Консоль**: Π¦Π²Π΅Ρ‚Π½Ρ‹Π΅ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… - **JavaScript**: Alert с ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ ## πŸ“ ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ сообщСний ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ``` ❌ Ошибка: system_prompt: систСмный ΠΏΡ€ΠΎΠΌΠΏΡ‚ слишком Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ: 2500 символов (максимум 2000) ❌ Ошибка: user_message: ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅ сообщСниС слишком Π΄Π»ΠΈΠ½Π½ΠΎΠ΅: 4500 символов (максимум 4000) ❌ Ошибка: prompt_name: Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΌΠΏΡ‚Π° слишком Π΄Π»ΠΈΠ½Π½ΠΎΠ΅: 2500 символов (максимум 2000) ``` ## πŸ”„ ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΡ с ТСстко Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Если Ρ€Π°Π½Π΅Π΅ использовались ТСстко Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ значСния Π² ΠΊΠΎΠ΄Π΅, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½ΠΈ автоматичСски Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° значСния ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ: ```go // Π‘Ρ‚Π°Ρ€Ρ‹ΠΉ ΠΊΠΎΠ΄ if len(prompt) > 2000 { return errors.New("too long") } // Новый ΠΊΠΎΠ΄ if err := validation.ValidateSystemPrompt(prompt); err != nil { return err } ``` ## 🎯 Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ настройкС ### Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ```bash export LCG_MAX_SYSTEM_PROMPT_LENGTH=2000 export LCG_MAX_USER_MESSAGE_LENGTH=4000 export LCG_MAX_PROMPT_NAME_LENGTH=2000 export LCG_MAX_PROMPT_DESC_LENGTH=5000 ``` ### Для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π° ```bash export LCG_MAX_SYSTEM_PROMPT_LENGTH=2000 export LCG_MAX_USER_MESSAGE_LENGTH=4000 export LCG_MAX_PROMPT_NAME_LENGTH=2000 export LCG_MAX_PROMPT_DESC_LENGTH=5000 ``` ### Для высоконагруТСнных систСм ```bash export LCG_MAX_SYSTEM_PROMPT_LENGTH=1000 export LCG_MAX_USER_MESSAGE_LENGTH=2000 export LCG_MAX_PROMPT_NAME_LENGTH=1000 export LCG_MAX_PROMPT_DESC_LENGTH=2500 ``` --- **ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅**: ВсС значСния Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊΠΎ всСм частям прилоТСния (консоль, Π²Π΅Π±-интСрфСйс, API).