Codi de Python
# =============================================================================
# PROJECTE: CHATBOT INTEL·LIGENT PER A GOOGLE SITES
# Autor: [El teu nom]
# Descripció: Aquest script crea un servidor intermediari (backend) que connecta
# una interfície web amb la IA Gemini de Google.
# =============================================================================
# 1. INSTAL·LACIÓ DE LES LLIBRERIES NECESSÀRIES
# Flask: El framework per crear el servidor web.
# flask-cors: Permet que la web (Google Sites) faci peticions al servidor sense bloquejos de seguretat.
# pyngrok: Crea un túnel per fer que el servidor local sigui accessible des d'Internet.
!pip install flask flask-cors pyngrok
import os
import requests
from flask import Flask, request, jsonify
from flask_cors import CORS
from pyngrok import ngrok
from google.colab import userdata
# 2. INICIALITZACIÓ DE L'APLICACIÓ
# Creem el servidor Flask i activem el protocol CORS per a comunicació externa.
app = Flask(__name__)
CORS(app)
# 3. CONFIGURACIÓ DE SEGURETAT (API KEYS)
# Recuperem la clau de Google des dels "Secrets" de Colab per seguretat (no escrita al codi).
API_KEY = userdata.get('GOOGLE_API_KEY')
# Configurem el token d'autenticació de Ngrok per poder aixecar el túnel dinàmic.
NGROK_TOKEN = "3B4KlnKFUgUPjVxUhYdbNWo2dDY_663jvfi4zNBDsUWoWUUC5"
ngrok.set_auth_token(NGROK_TOKEN)
# 4. DEFINICIÓ DE LA RUTA DEL XAT (/ask)
# Aquest és el punt on la nostra web enviarà les preguntes mitjançant un mètode POST.
@app.route('/ask', methods=['POST'])
def ask_gemini():
try:
# Extraiem el missatge que ha enviat l'usuari des del format JSON.
data = request.json
pregunta = data.get("message")
# URL de l'API de Google fent servir el model Gemini 1.5 Flash.
# S'ha escollit el model 1.5 per la seva gran velocitat i eficiència.
url = f"https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent?key={API_KEY}"
# Preparem l'estructura de dades (payload) que demana Google.
payload = {"contents": [{"parts": [{"text": pregunta}]}]}
# Enviem la pregunta a Google i rebem la resposta de la IA.
response = requests.post(url, json=payload)
res_data = response.json()
# Validem si la resposta de Google és correcta i extraiem el text de la IA.
if "candidates" in res_data:
texto_ia = res_data["candidates"][0]["content"]["parts"][0]["text"]
return jsonify({"reply": texto_ia.strip()})
else:
# En cas d'error de quota o de l'API, ho imprimim a la consola per depurar.
print(f"❌ Error de Google: {res_data}")
return jsonify({"error": "Error de quota o configuració a Google Studio."}), 500
except Exception as e:
# Captura qualsevol error inesperat per evitar que el servidor s'aturi.
print(f"💥 Error en el servidor: {str(e)}")
return jsonify({"error": str(e)}), 500
# 5. EXECUCIÓ I OBERTURA DEL TÚNEL PÚBLIC
# Netegem connexions velles, obrim el port 5000 i generem la URL pública de Ngrok.
ngrok.kill()
public_url = ngrok.connect(5000)
print(f"\n✅ SERVIDOR BACKEND EN MARXA!")
print(f"🌐 COPIA AQUESTA URL AL TEU CODI HTML DE GOOGLE SITES:")
print(f"👉 {public_url.public_url}/ask")
print("-" * 60)
# Iniciem el servidor Flask en el port 5000.
if __name__ == '__main__':
app.run(port=5000)
Justificació
Prompt utilitzats (Gemini)
- Hola, soc un estudiant d’informàtica de Grau Mitjà (SMX) i estic treballant en un repte de crear un bot de suport per a una LAN Party. Necessito que em facis un codi en Python que compleixi aquests requisits: Llegeixi un arxiu anomenat faqs.json que conté preguntes i respostes (camps: “pregunta”, “resposta”, “categoria”).Permeti a l’usuari escriure una pregunta per consola. Busqui la pregunta en el JSON. Si hi ha una coincidència, que mostri la resposta. Si no la troba, que digui: ‘No entenc el teu dubte, contacta amb un organitzador’. El programa ha de funcionar en un bucle fins que l’usuari escrigui ‘sortir’. Tambien cra un exemple de l’arxiu faqs.json amb 3 preguntes típiques d’una LAN Party (horaris, Wi-Fi, menjar).
- El codi ha de poder comunicar-se amb un frontend amb les llibrerias de flask i ngrok basicamente hem de fer que es comuniqui el back end (github, google colab) amb gemini i que el backend vagi al frontend (google sites)