ragflow/example/websocket/README.md
SmartDever02 e300873288 feat: Add WebSocket API for streaming responses
- Add WebSocket endpoint at /v1/ws/chat for real-time streaming
- Support multiple authentication methods (API token, user session, query params)
- Enable bidirectional communication for platforms like WeChat Mini Programs
- Implement streaming chat completions with incremental responses
- Add comprehensive error handling and connection management
- Include extensive inline documentation and comments

New files:
- api/apps/websocket_app.py: Main WebSocket API implementation
- docs/guides/websocket_api.md: Complete API documentation
- example/websocket/python_client.py: Python example client
- example/websocket/index.html: Web-based demo client
- example/websocket/README.md: Examples documentation

Features:
- Persistent WebSocket connections for multi-turn conversations
- Session management for conversation continuity
- Real-time streaming with low latency
- Compatible with WeChat Mini Programs and mobile apps
- Health check endpoint for connectivity testing
- Backward compatible with existing SSE endpoints

Resolves: #11683
2025-12-03 06:49:36 -03:00

203 lines
4.8 KiB
Markdown

# RAGFlow WebSocket Examples
This directory contains example implementations for using RAGFlow's WebSocket API for real-time streaming responses.
## 📁 Files
- **`python_client.py`** - Python WebSocket client with interactive mode
- **`index.html`** - Web-based demo with interactive UI
## 🚀 Quick Start
### Python Client
#### Prerequisites
```bash
pip install websocket-client
```
#### Single Question Mode
```bash
python python_client.py \
--url ws://localhost/v1/ws/chat \
--token ragflow-your-api-token \
--chat-id your-chat-id \
--question "What is RAGFlow?"
```
#### Interactive Mode
```bash
python python_client.py \
--url ws://localhost/v1/ws/chat \
--token ragflow-your-api-token \
--chat-id your-chat-id \
--interactive
```
#### Continue Existing Session
```bash
python python_client.py \
--url ws://localhost/v1/ws/chat \
--token ragflow-your-api-token \
--chat-id your-chat-id \
--session-id existing-session-id \
--question "Follow-up question?"
```
### Web Demo
1. Open `index.html` in your web browser
2. Enter your RAGFlow server URL, API token, and chat ID
3. Click "Connect"
4. Start chatting!
The web demo features:
- Real-time streaming responses
- Session persistence
- Error handling
- Auto-reconnection support
- Settings saved in localStorage
## 📖 Usage Examples
### Python Client Features
**Interactive conversation:**
```bash
python python_client.py --url ws://localhost/v1/ws/chat \
--token your-token \
--chat-id your-chat-id \
--interactive
# Then type questions interactively
👤 You: What is machine learning?
🤖 Answer: Machine learning is a subset of artificial intelligence...
✓ Stream completed
👤 You: Can you give examples?
🤖 Answer: Sure! Here are some examples...
```
**Debug mode:**
```bash
python python_client.py --url ws://localhost/v1/ws/chat \
--token your-token \
--chat-id your-chat-id \
--question "Hello" \
--debug
```
### Web Demo Features
**Auto-save settings:**
The web demo automatically saves your connection settings to localStorage, so you don't need to enter them every time.
**Session continuity:**
The demo maintains the session ID, allowing multi-turn conversations without reconnecting.
**Visual feedback:**
- Connection status indicator
- Streaming animation
- Error messages
- Message timestamps
## 🔧 Configuration
### Environment Variables
You can also use environment variables with the Python client:
```bash
export RAGFLOW_WS_URL="ws://localhost/v1/ws/chat"
export RAGFLOW_API_TOKEN="ragflow-your-token"
export RAGFLOW_CHAT_ID="your-chat-id"
python python_client.py --question "Hello"
```
### SSL/TLS
For secure connections, use `wss://` instead of `ws://`:
```bash
python python_client.py --url wss://your-ragflow-host/v1/ws/chat ...
```
## 📚 Documentation
For complete documentation, see:
- [WebSocket API Guide](../../docs/guides/websocket_api.md)
- [RAGFlow API Documentation](https://ragflow.io/docs/api)
## 🐛 Troubleshooting
### Connection Refused
**Problem:** `WebSocket error: Connection refused`
**Solution:**
1. Verify RAGFlow server is running
2. Check the WebSocket URL is correct
3. Ensure no firewall is blocking the connection
### Authentication Failed
**Problem:** `Error 401: Authentication required`
**Solution:**
1. Verify your API token is correct
2. Check token hasn't expired
3. Ensure proper token format: `ragflow-xxxxx`
### Invalid Chat ID
**Problem:** `Error 404: Dialog not found`
**Solution:**
1. Verify the chat ID exists
2. Check you have access to the dialog
3. Ensure you're using the correct tenant
### SSL Certificate Error
**Problem:** Certificate verification failed with `wss://`
**Solution:**
For Python client, disable SSL verification (development only):
```python
# In websocket.WebSocketApp
ws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})
```
For production, use valid SSL certificates.
## 🎯 Best Practices
1. **Reuse connections**: Don't create new WebSocket for each message
2. **Handle reconnection**: Implement exponential backoff for reconnection
3. **Validate inputs**: Check all parameters before sending
4. **Error handling**: Always handle connection errors gracefully
5. **Clean up**: Close WebSocket when done
## 📝 License
Copyright 2024 The InfiniFlow Authors. All Rights Reserved.
Licensed under the Apache License, Version 2.0.
## 🤝 Support
For issues or questions:
- GitHub Issues: https://github.com/infiniflow/ragflow/issues
- Documentation: https://ragflow.io/docs
- Community: Join our Discord/Slack
## 🌟 Contributing
We welcome contributions! Please see our [Contributing Guide](../../docs/contribution/README.md) for details.