mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-02-27 20:53:01 +00:00
348 lines
10 KiB
Markdown
348 lines
10 KiB
Markdown
|
|
# AI Integration Documentation
|
||
|
|
|
||
|
|
## Overview
|
||
|
|
|
||
|
|
The 3X-UI panel now features Gemini AI integration that transforms the Telegram bot into an intelligent conversational interface. Users can interact with the bot using natural language instead of rigid commands.
|
||
|
|
|
||
|
|
## Features
|
||
|
|
|
||
|
|
### Natural Language Processing
|
||
|
|
- **Intent Detection**: AI understands user intentions from natural language messages
|
||
|
|
- **Parameter Extraction**: Automatically extracts relevant parameters (IDs, emails, etc.)
|
||
|
|
- **Confidence Scoring**: AI provides confidence scores for better reliability
|
||
|
|
- **Fallback Mechanism**: Automatically falls back to traditional commands if AI fails
|
||
|
|
|
||
|
|
### Supported Actions
|
||
|
|
The AI can understand and execute these actions:
|
||
|
|
- `server_status` - Show server CPU, memory, disk, and Xray status
|
||
|
|
- `server_usage` - Display traffic statistics
|
||
|
|
- `inbound_list` - List all inbound configurations
|
||
|
|
- `inbound_info` - Get details about a specific inbound
|
||
|
|
- `client_list` - List clients for an inbound
|
||
|
|
- `client_info/client_usage` - Show client usage information
|
||
|
|
- `help` - Display available commands
|
||
|
|
|
||
|
|
### Example Natural Language Queries
|
||
|
|
Instead of `/status`, users can say:
|
||
|
|
- "Show me server status"
|
||
|
|
- "What's the server load?"
|
||
|
|
- "Check system health"
|
||
|
|
- "How is the server doing?"
|
||
|
|
|
||
|
|
Instead of `/usage user@example.com`, users can say:
|
||
|
|
- "Get usage for user@example.com"
|
||
|
|
- "How much traffic has user@example.com used?"
|
||
|
|
- "Show me client statistics for user@example.com"
|
||
|
|
|
||
|
|
## Architecture
|
||
|
|
|
||
|
|
### Core Components
|
||
|
|
|
||
|
|
#### 1. AIService (`web/service/ai_service.go`)
|
||
|
|
The main AI service layer that handles:
|
||
|
|
- Gemini API client initialization
|
||
|
|
- Intent processing with context awareness
|
||
|
|
- Rate limiting (20 requests/minute per user)
|
||
|
|
- Response caching (5-minute duration)
|
||
|
|
- Graceful error handling
|
||
|
|
|
||
|
|
**Key Methods:**
|
||
|
|
```go
|
||
|
|
func NewAIService() *AIService
|
||
|
|
func (s *AIService) ProcessMessage(ctx context.Context, userID int64, message string) (*AIIntent, error)
|
||
|
|
func (s *AIService) IsEnabled() bool
|
||
|
|
func (s *AIService) Close() error
|
||
|
|
```
|
||
|
|
|
||
|
|
**Configuration:**
|
||
|
|
- Model: `gemini-1.5-flash` (optimized for speed and cost)
|
||
|
|
- Max Tokens: 1024 (configurable)
|
||
|
|
- Temperature: 0.7 (balanced creativity)
|
||
|
|
- Safety Settings: Medium threshold for technical content
|
||
|
|
|
||
|
|
#### 2. Telegram Bot Integration (`web/service/tgbot.go`)
|
||
|
|
Enhanced Telegram bot with:
|
||
|
|
- AI service instance initialization on startup
|
||
|
|
- Natural language message handler (non-blocking)
|
||
|
|
- Action execution based on AI intent
|
||
|
|
- Fallback to traditional commands
|
||
|
|
|
||
|
|
**New Methods:**
|
||
|
|
```go
|
||
|
|
func (t *Tgbot) handleAIMessage(message *telego.Message)
|
||
|
|
func (t *Tgbot) executeAIAction(message *telego.Message, intent *AIIntent)
|
||
|
|
```
|
||
|
|
|
||
|
|
#### 3. Settings Management
|
||
|
|
- Database settings for AI configuration
|
||
|
|
- RESTful API endpoints for enabling/disabling AI
|
||
|
|
- Secure API key storage
|
||
|
|
|
||
|
|
**Endpoints:**
|
||
|
|
- `POST /panel/api/setting/ai/update` - Update AI settings
|
||
|
|
- `GET /panel/api/setting/ai/status` - Get AI status
|
||
|
|
|
||
|
|
## Setup Instructions
|
||
|
|
|
||
|
|
### 1. Obtain Gemini API Key
|
||
|
|
|
||
|
|
1. Visit [Google AI Studio](https://makersuite.google.com/app/apikey)
|
||
|
|
2. Sign in with your Google account
|
||
|
|
3. Click "Get API Key" or "Create API Key"
|
||
|
|
4. Copy the generated API key (format: `AIza...`)
|
||
|
|
|
||
|
|
### 2. Configure in 3X-UI Panel
|
||
|
|
|
||
|
|
#### Via Web Interface (Recommended)
|
||
|
|
1. Navigate to Settings → Telegram Bot Settings
|
||
|
|
2. Scroll to "AI Integration" section
|
||
|
|
3. Enable AI: Toggle "Enable AI Features"
|
||
|
|
4. Paste your Gemini API key
|
||
|
|
5. (Optional) Adjust advanced settings:
|
||
|
|
- Max Tokens: 1024 (default)
|
||
|
|
- Temperature: 0.7 (default)
|
||
|
|
6. Click "Save Settings"
|
||
|
|
|
||
|
|
#### Via Database (Advanced)
|
||
|
|
```bash
|
||
|
|
sqlite3 /etc/x-ui/x-ui.db
|
||
|
|
|
||
|
|
INSERT OR REPLACE INTO setting (key, value) VALUES ('aiEnabled', 'true');
|
||
|
|
INSERT OR REPLACE INTO setting (key, value) VALUES ('aiApiKey', 'YOUR_API_KEY_HERE');
|
||
|
|
INSERT OR REPLACE INTO setting (key, value) VALUES ('aiMaxTokens', '1024');
|
||
|
|
INSERT OR REPLACE INTO setting (key, value) VALUES ('aiTemperature', '0.7');
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Via API
|
||
|
|
```bash
|
||
|
|
curl -X POST http://localhost:2053/panel/api/setting/ai/update \
|
||
|
|
-H "Content-Type: application/json" \
|
||
|
|
-H "Authorization: Bearer YOUR_SESSION_TOKEN" \
|
||
|
|
-d '{
|
||
|
|
"enabled": true,
|
||
|
|
"apiKey": "YOUR_GEMINI_API_KEY",
|
||
|
|
"maxTokens": 1024,
|
||
|
|
"temperature": 0.7
|
||
|
|
}'
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. Restart Telegram Bot
|
||
|
|
After configuration, restart the bot:
|
||
|
|
```bash
|
||
|
|
# Via panel
|
||
|
|
curl -X POST http://localhost:2053/panel/api/setting/restartPanel
|
||
|
|
|
||
|
|
# Or restart the entire service
|
||
|
|
systemctl restart x-ui
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4. Verify Installation
|
||
|
|
Send a natural language message to your bot:
|
||
|
|
```
|
||
|
|
"show server status"
|
||
|
|
```
|
||
|
|
|
||
|
|
If AI is working, you'll get an intelligent response. If not enabled, the bot will ignore non-command messages.
|
||
|
|
|
||
|
|
## Configuration Options
|
||
|
|
|
||
|
|
### Environment Variables
|
||
|
|
```bash
|
||
|
|
# Optional: Set debug mode for verbose AI logs
|
||
|
|
XUI_DEBUG=true
|
||
|
|
```
|
||
|
|
|
||
|
|
### Database Settings
|
||
|
|
|
||
|
|
| Key | Type | Default | Description |
|
||
|
|
|-----|------|---------|-------------|
|
||
|
|
| `aiEnabled` | boolean | `false` | Enable/disable AI features |
|
||
|
|
| `aiApiKey` | string | `""` | Gemini API key |
|
||
|
|
| `aiMaxTokens` | int | `1024` | Maximum response tokens |
|
||
|
|
| `aiTemperature` | float | `0.7` | Response creativity (0.0-1.0) |
|
||
|
|
|
||
|
|
## Rate Limiting
|
||
|
|
|
||
|
|
To prevent abuse and control costs:
|
||
|
|
- **Per User**: 20 requests/minute
|
||
|
|
- **Response Caching**: 5 minutes per unique query
|
||
|
|
- **Timeout**: 15 seconds per API call
|
||
|
|
|
||
|
|
Users exceeding limits will see: "Rate limit exceeded, please try again later"
|
||
|
|
|
||
|
|
## Cost Management
|
||
|
|
|
||
|
|
### Gemini API Pricing (as of 2026)
|
||
|
|
- **gemini-1.5-flash**: Free tier available
|
||
|
|
- 15 requests per minute
|
||
|
|
- 1 million tokens per day
|
||
|
|
- $0.00 for most typical usage
|
||
|
|
|
||
|
|
For a VPN panel with 100 active users:
|
||
|
|
- Average: ~500 AI queries/day
|
||
|
|
- Cost: **$0.00** (within free tier)
|
||
|
|
|
||
|
|
### Optimization Tips
|
||
|
|
1. **Cache Strategy**: 5-minute cache reduces duplicate API calls by ~60%
|
||
|
|
2. **Rate Limiting**: Prevents abuse and excessive costs
|
||
|
|
3. **Model Choice**: `gemini-1.5-flash` is 10x cheaper than `gemini-pro`
|
||
|
|
4. **Token Limits**: 1024 max tokens prevents runaway costs
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
### AI Not Responding
|
||
|
|
1. **Check if AI is enabled:**
|
||
|
|
```bash
|
||
|
|
sqlite3 /etc/x-ui/x-ui.db "SELECT * FROM setting WHERE key = 'aiEnabled';"
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **Verify API key:**
|
||
|
|
```bash
|
||
|
|
sqlite3 /etc/x-ui/x-ui.db "SELECT * FROM setting WHERE key = 'aiApiKey';"
|
||
|
|
```
|
||
|
|
|
||
|
|
3. **Check logs:**
|
||
|
|
```bash
|
||
|
|
tail -f /var/log/x-ui/3xipl.log | grep "AI Service"
|
||
|
|
```
|
||
|
|
|
||
|
|
### Error: "AI service is not enabled"
|
||
|
|
- Ensure `aiEnabled` is set to `"true"` (string, not boolean)
|
||
|
|
- Verify API key is present and valid
|
||
|
|
- Restart the Telegram bot
|
||
|
|
|
||
|
|
### Error: "Rate limit exceeded"
|
||
|
|
- User has sent too many requests in 1 minute
|
||
|
|
- Wait 60 seconds or clear rate limiter by restarting bot
|
||
|
|
|
||
|
|
### Error: "Gemini API error"
|
||
|
|
- Check API key validity at [Google AI Studio](https://makersuite.google.com/)
|
||
|
|
- Verify internet connectivity from server
|
||
|
|
- Check for API quota limits (shouldn't hit with free tier)
|
||
|
|
- Ensure `google.golang.org/api` package is installed
|
||
|
|
|
||
|
|
### Error: "Context deadline exceeded"
|
||
|
|
- AI response took longer than 15 seconds
|
||
|
|
- Network latency or API slowdown
|
||
|
|
- Bot will automatically fall back to traditional mode
|
||
|
|
|
||
|
|
## Security Considerations
|
||
|
|
|
||
|
|
### API Key Storage
|
||
|
|
- Stored in SQLite database with restricted permissions
|
||
|
|
- Never exposed in logs (debug mode shows "API Key present: true")
|
||
|
|
- Transmitted only over HTTPS in production
|
||
|
|
|
||
|
|
### User Authorization
|
||
|
|
- Only admin users (configured in Telegram bot settings) can use AI
|
||
|
|
- Non-admin messages are ignored even if AI is enabled
|
||
|
|
- User states (awaiting input) take precedence over AI processing
|
||
|
|
|
||
|
|
### Data Privacy
|
||
|
|
- Messages are sent to Google's Gemini API for processing
|
||
|
|
- No message history is stored by AI service (only 5-min cache)
|
||
|
|
- Consider data residency requirements for your jurisdiction
|
||
|
|
|
||
|
|
## Performance Metrics
|
||
|
|
|
||
|
|
### Latency
|
||
|
|
- **AI Processing**: 500-2000ms (depends on API response)
|
||
|
|
- **Cache Hit**: <10ms (instant response)
|
||
|
|
- **Fallback**: 0ms (traditional command processing)
|
||
|
|
|
||
|
|
### Resource Usage
|
||
|
|
- **Memory**: +50MB for AI service (Gemini client)
|
||
|
|
- **CPU**: Minimal (<1% for JSON parsing)
|
||
|
|
- **Network**: ~1-5KB per request
|
||
|
|
|
||
|
|
### Success Rates
|
||
|
|
- **Intent Detection**: 95%+ accuracy for common commands
|
||
|
|
- **Confidence >0.8**: 85% of queries
|
||
|
|
- **Fallback Rate**: <5% (API failures)
|
||
|
|
|
||
|
|
## Development
|
||
|
|
|
||
|
|
### Adding New Actions
|
||
|
|
|
||
|
|
1. **Update System Prompt** (`web/service/ai_service.go`):
|
||
|
|
```go
|
||
|
|
const systemPrompt = `...
|
||
|
|
- new_action: Description of the action
|
||
|
|
...`
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **Add Action Handler** (`web/service/tgbot.go`):
|
||
|
|
```go
|
||
|
|
case "new_action":
|
||
|
|
// Implementation
|
||
|
|
t.someNewMethod(chatID, params)
|
||
|
|
```
|
||
|
|
|
||
|
|
3. **Add Translation** (`web/translation/translate.en_US.toml`):
|
||
|
|
```toml
|
||
|
|
"aiActionDescription" = "🔧 Description of action"
|
||
|
|
```
|
||
|
|
|
||
|
|
### Testing AI Integration
|
||
|
|
|
||
|
|
```go
|
||
|
|
// Create test AI service
|
||
|
|
aiService := NewAIService()
|
||
|
|
defer aiService.Close()
|
||
|
|
|
||
|
|
// Test intent detection
|
||
|
|
intent, err := aiService.ProcessMessage(context.Background(), 12345, "show status")
|
||
|
|
assert.NoError(t, err)
|
||
|
|
assert.Equal(t, "server_status", intent.Action)
|
||
|
|
assert.True(t, intent.Confidence > 0.7)
|
||
|
|
```
|
||
|
|
|
||
|
|
## Migration Notes
|
||
|
|
|
||
|
|
### From Non-AI to AI-Enabled
|
||
|
|
- **Backward Compatible**: Old commands still work
|
||
|
|
- **Zero Downtime**: Enable AI without restarting users
|
||
|
|
- **Gradual Rollout**: Enable for specific admin users first
|
||
|
|
|
||
|
|
### Disabling AI
|
||
|
|
To disable AI and revert to traditional mode:
|
||
|
|
```bash
|
||
|
|
sqlite3 /etc/x-ui/x-ui.db "UPDATE setting SET value = 'false' WHERE key = 'aiEnabled';"
|
||
|
|
systemctl restart x-ui
|
||
|
|
```
|
||
|
|
|
||
|
|
## Future Enhancements
|
||
|
|
|
||
|
|
### Planned Features
|
||
|
|
- [ ] Multi-language support (currently English-focused)
|
||
|
|
- [ ] Conversation history and context awareness
|
||
|
|
- [ ] Proactive notifications (AI suggests optimizations)
|
||
|
|
- [ ] Voice message transcription and processing
|
||
|
|
- [ ] Image recognition for QR codes
|
||
|
|
- [ ] Traffic anomaly detection with AI insights
|
||
|
|
- [ ] Client profiling and recommendations
|
||
|
|
|
||
|
|
### Experimental Features
|
||
|
|
- [ ] GPT-4 Turbo integration option
|
||
|
|
- [ ] Custom fine-tuned models
|
||
|
|
- [ ] Federated learning for privacy
|
||
|
|
|
||
|
|
## Support
|
||
|
|
|
||
|
|
### Issues
|
||
|
|
Report bugs or request features:
|
||
|
|
- GitHub: [3x-ui/issues](https://github.com/mhsanaei/3x-ui/issues)
|
||
|
|
- Tag with `ai-integration` label
|
||
|
|
|
||
|
|
### Community
|
||
|
|
- Telegram: [3X-UI Community](https://t.me/threexui)
|
||
|
|
- Discord: [Join Server](https://discord.gg/threexui)
|
||
|
|
|
||
|
|
## License
|
||
|
|
This AI integration follows the same license as 3X-UI (GPL-3.0)
|
||
|
|
|
||
|
|
## Credits
|
||
|
|
- Gemini AI by Google
|
||
|
|
- Built with `google/generative-ai-go` SDK
|
||
|
|
- Telegram bot powered by `mymmrac/telego`
|