Projecte de Final de Grau – Enginyeria Informàtica
Autor: Arnau Planas Bernet
Tutor acadèmic: Pere Barberan Agut
Curs: 2024–2025
Aquest projecte consisteix en el desenvolupament complet d’un sistema d’assistència per veu en temps real, integrable com a snippet web en qualsevol entorn corporatiu. L’objectiu és simular una conversa natural entre l’usuari i un assistent virtual basat en el model GPT-4o d’OpenAI, utilitzant àudio com a canal principal d’interacció.
La solució inclou:
- Captura i transmissió de veu en temps real via WebRTC i WebSockets
- Integració amb la Realtime API d’OpenAI per transcripció, resposta i síntesi de veu
- Execució de Function Calling amb accés a una knowledge base modular
- Interfície d’usuari en React + TypeScript
- Backend en Python (FastAPI), desplegat a AWS EC2
- Comunicació totalment xifrada via HTTPS
project/
├── client/ # Frontend (React + TypeScript)
│ ├── public/ # Lògica de processament d'audio
│ └── src/ # Components i lògica del client web
├── server/ # Backend Python (FastAPI)
│ ├── main.py # Entrypoint del servidor WebSocket
│ ├── openai_session.py# Creació de sessions amb OpenAI
│ ├── handlers.py # Gestió de missatges amb OpenAI
│ ├── config.py # Gestió de la configuració de la sessió amb OpenAI
│ ├── audio_utils.py # Conversió d’àudio PCM a WAV
│ └── requirements.txt # Dependències del backend
├── documents/ # Mòdul de knowledge base (fitxers .txt temàtics)
└── README.md # Aquest fitxer
Aquest projecte no inclou cap token d’autenticació per a l’API d’OpenAI. Per poder establir connexió amb el servei de veu en temps real, és imprescindible disposar d’una clau d’API vàlida proporcionada per OpenAI i definir-la manualment al fitxer .env del backend: OPENAI_API_KEY=sk-... Sense aquest valor, el servidor no podrà generar sessions amb la Realtime API i la funcionalitat principal no estarà disponible.
Aquesta clau s'ha d'afegir en un nou fitxer anomenat .env a l'arrel del projecte
- Python 3.10+
- venv
- Node.js + npm
- React + TypeScript
cd server
python3 -m venv venv
source venv/bin/activate # o .\venv\Scripts\activate a Windows
pip install -r requirements.txt
cd ..
uvicorn server.main:app --host 0.0.0.0 --port 8000 --reload
Assegura’t d’haver creat un fitxer
.env
amb la teva clau d’API d’OpenAI:
OPENAI_API_KEY=sk-...
cd client
npm install
npm run dev
El sistema ha estat desplegat amb:
- Backend a AWS EC2 (instància
t2.micro
) - Client web a Netlify
- Snippet web a Netlify
- Domini dinàmic gestionat amb DuckDNS
- Xifrat HTTPS via Let's Encrypt (Nginx)
main.py
: entrada principal del servidor, gestiona connexions i àudiouseCall.ts
: hook de React que gestiona connexió i cues d’àudioCallWidget.tsx
: component de trucada per a la interfície d’usuariopenai_session.py
: configuració i creació de la sessió amb OpenAIdocuments/
: mòdul que carrega respostes contextuals segons la temàtica
S’han realitzat proves en entorns locals i desplegats, garantint:
- Comunicació contínua via WebSocket
- Latència baixa en la resposta per veu
- Compatibilitat amb navegadors moderns
- Reproducció fluïda d’àudio amb cues i gestió de buffer
Aquest projecte ha estat desenvolupat com a part del Treball de Final de Grau. Qualsevol ús comercial o reutilització ha de comptar amb el permís explícit de l’autor.
- A la meva família i amistats pel suport constant
- A Hubtype per confiar en mi per aquest projecte pilot
- Al Tecnocampus i al meu tutor per l’acompanyament tècnic i acadèmic