Initial commit: PymesBot Demo with IA integration
- FastAPI backend with WebSocket chat - SQLite database for products - Z.AI (GLM-4.7) integration for AI responses - Docker deployment ready - Caddy proxy configuration
This commit is contained in:
176
README.md
Normal file
176
README.md
Normal file
@@ -0,0 +1,176 @@
|
||||
# PymesBot Demo - Asistente de Ventas con IA
|
||||
|
||||
Demo funcional de asistente de ventas para librería con integración de IA.
|
||||
|
||||
## Características
|
||||
|
||||
- Chat en tiempo real con WebSocket
|
||||
- Búsqueda de productos en base de datos SQLite
|
||||
- Confirmación de ventas
|
||||
- IA integrada con Z.AI (GLM-4.7)
|
||||
- Interfaz web responsive
|
||||
|
||||
## Tech Stack
|
||||
|
||||
- **Backend**: FastAPI + Python 3.11
|
||||
- **Base de datos**: SQLite
|
||||
- **Frontend**: HTML/JS vanilla
|
||||
- **IA**: Z.AI API (GLM-4.7)
|
||||
- **Proxy**: Caddy
|
||||
|
||||
## Estructura
|
||||
|
||||
```
|
||||
pymesbot/
|
||||
├── backend/
|
||||
│ ├── main.py # FastAPI app
|
||||
│ ├── Dockerfile # Imagen Docker
|
||||
│ ├── requirements.txt # Dependencias
|
||||
│ └── templates/
|
||||
│ └── chat.html # Interfaz
|
||||
└── data/ # Base de datos SQLite
|
||||
```
|
||||
|
||||
## Deployment
|
||||
|
||||
### Prerrequisitos
|
||||
|
||||
- Docker y Docker Compose
|
||||
- Acceso a API de Z.AI (u otro provider)
|
||||
- Servidor con Caddy (u otro proxy)
|
||||
|
||||
### Variables de Entorno
|
||||
|
||||
```bash
|
||||
# API de Z.AI (requerido)
|
||||
ZAI_API_KEY=tu_api_key_aqui
|
||||
ANTHROPIC_MODEL=glm-4.7
|
||||
```
|
||||
|
||||
### Paso 1: Clonar el repositorio
|
||||
|
||||
```bash
|
||||
git clone https://gitea.cbcren.online/renato97/demo.git
|
||||
cd demo
|
||||
```
|
||||
|
||||
### Paso 2: Configurar variables de entorno
|
||||
|
||||
Crear archivo `.env`:
|
||||
```bash
|
||||
ZAI_API_KEY=tu_api_key
|
||||
```
|
||||
|
||||
### Paso 3: Iniciar contenedores
|
||||
|
||||
```bash
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
### Paso 4: Configurar Caddy (proxy)
|
||||
|
||||
Agregar al Caddyfile:
|
||||
```caddy
|
||||
demo.tudominio.com {
|
||||
reverse_proxy localhost:8201
|
||||
}
|
||||
```
|
||||
|
||||
Reiniciar Caddy:
|
||||
```bash
|
||||
docker exec caddy-ingress caddy reload
|
||||
```
|
||||
|
||||
## API Endpoints
|
||||
|
||||
| Método | Endpoint | Descripción |
|
||||
|--------|----------|-------------|
|
||||
| GET | `/health` | Health check |
|
||||
| GET | `/stock/search?q=producto` | Buscar productos |
|
||||
| POST | `/venta/confirmar` | Confirmar venta |
|
||||
| GET | `/stats/ventas?periodo=hoy` | Estadísticas |
|
||||
| WS | `/chat/ws/{session_id}` | Chat en tiempo real |
|
||||
|
||||
### Ejemplo de búsqueda de productos
|
||||
|
||||
```bash
|
||||
curl "http://localhost:8201/stock/search?q=birome"
|
||||
```
|
||||
|
||||
### Ejemplo de confirmar venta
|
||||
|
||||
```bash
|
||||
curl -X POST "http://localhost:8201/venta/confirmar" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"producto_id": 1,
|
||||
"cantidad": 2,
|
||||
"precio_vendido": 850,
|
||||
"vendedor": "test"
|
||||
}'
|
||||
```
|
||||
|
||||
## Credenciales
|
||||
|
||||
- **PIN vendedor**: 1234
|
||||
- **Admin**: /admin (password: admin123)
|
||||
|
||||
## Configuración de IA
|
||||
|
||||
El sistema usa la API de Z.AI directamente. Para cambiar el modelo o API:
|
||||
|
||||
Editar `main.py` línea ~40:
|
||||
```python
|
||||
ZAI_API_KEY = "tu_api_key"
|
||||
ZAI_API_URL = "https://api.z.ai/api/anthropic/v1"
|
||||
MODEL = "glm-4.7"
|
||||
```
|
||||
|
||||
## Known Issues / Bugs
|
||||
|
||||
### 1. Búsqueda limitada
|
||||
- **Problema**: La búsqueda en DB solo soporta términos simples
|
||||
- **Solución**: Usar la IA para búsquedas más complejas
|
||||
|
||||
### 2. Plurales no detectados
|
||||
- **Problema**: "lápices" no encuentra "lápiz"
|
||||
- **Workaround**: El sistema ahora tiene mapeo de plurales básico
|
||||
|
||||
### 3. Timeout en WebSocket
|
||||
- **Problema**: La conexión puede cerrarse por inactividad
|
||||
- **Solución**: El frontend reconecta automáticamente
|
||||
|
||||
### 4. Scope operator.write en OpenClaw
|
||||
- **Problema**: OpenClaw Gateway requiere scopes específicos para usar el agente
|
||||
- **Solución actual**: Se usa la API de Z.AI directamente en lugar de OpenClaw Gateway
|
||||
- **Nota**: Para usar OpenClaw Gateway, configurar con `scopes: ["operator.read", "operator.write", "agent"]`
|
||||
|
||||
### 5. PicoClaw no conecta
|
||||
- **Problema**: PicoClaw no reconoce modelos MiniMax
|
||||
- **Solución**: Usar OpenClaw o API directa
|
||||
|
||||
## Mantenimiento
|
||||
|
||||
### Ver logs
|
||||
```bash
|
||||
docker logs pygmesbot_backend
|
||||
```
|
||||
|
||||
### Reiniciar servicio
|
||||
```bash
|
||||
docker restart pygmesbot_backend
|
||||
```
|
||||
|
||||
### Ver productos en DB
|
||||
```bash
|
||||
docker exec pygmesbot_backend python3 -c "
|
||||
import sqlite3
|
||||
conn = sqlite3.connect('/app/data/stock.db')
|
||||
for row in conn.execute('SELECT nombre, stock FROM productos LIMIT 5'):
|
||||
print(row)
|
||||
"
|
||||
```
|
||||
|
||||
##Licencia
|
||||
|
||||
MIT
|
||||
Reference in New Issue
Block a user