Codi de Python
# =============================================================================
# # ==============================================================
# 1. INSTAL·LACIÓ DE LLIBRERIES
# ==============================
# Instal·lem les eines necessàries per a la IA, el servidor web i el túnel
!pip install -U google-genai flask-cors pyngrok
import os, time, json
from flask import Flask, request, jsonify
from flask_cors import CORS
from pyngrok import ngrok
from google import genai
from google.colab import userdata
# ==============================================================
# 2. CONFIGURACIÓ DE CREDENCIALS
# ==============================
# Agafem les claus guardades a la icona de la clau (🔑) de Colab
GOOGLE_API_KEY = userdata.get("GOOGLE_API_KEY")
NGROK_TOKEN = userdata.get("token_ngrok")
# Creem el client de Google per poder parlar amb la IA
client = genai.Client(api_key=GOOGLE_API_KEY)
# ==============================================================
# 3. CONFIGURACIÓ DE LA IA (PERSONALITAT)
# ==============================
# Definim com s'ha de comportar el bot i quina és la seva feina
system_instruction = """
Ets l'assistent virtual oficial de la LAN Party EcoTech 2026.
La teva missió és ajudar els participants amb dubtes tècnics i organitzatius.
Informació CRÍTICA de l'esdeveniment:
1. Ubicació: Els Costals, Castellbisbal.
2. Horari d'Inici: Divendres, 10 d'abril a les 18:00h.
3. Horari de Finalització: Diumenge, 12 d'abril a les 18:00h.
4. Xarxa: Cada taula té una connexió RJ45. La IP s'assigna per DHCP.
5. Sostenibilitat (EcoTech): Som una LAN residu zero. Prohibit el plàstic d'un sol ús.
6. Suport Tècnic: Qualsevol incidència de xarxa s'ha de reportar al HelpDesk.
To de veu: Tècnic (SMX), però amable i disposat a ajudar.
Ets un expert de Castellbisbal i vols que la LAN surti perfecta.
"""
# Iniciem la sessió de xat amb el model d'IA escollit
chat = client.chats.create(
model="gemini-2.5-flash", # El model d'IA més modern i ràpid
config=genai.types.GenerateContentConfig(
system_instruction=system_instruction, # Li donem les instruccions
temperature=0.7, # Creativitat (0.7 és equilibrat)
max_output_tokens=1000 # Límit de llargada de la resposta
)
)
# ==============================================================
# 4. CREACIÓ DEL SERVIDOR (BACKEND)
# ==============================
app = Flask(__name__) # Creem l'aplicació del servidor
CORS(app) # Permetem que webs externes (Google Sites) s'hi connectin
@app.route('/ask', methods=['POST', 'OPTIONS'])
def ask():
# Gestió de seguretat del navegador (CORS)
if request.method == 'OPTIONS':
return jsonify({"status": "ok"}), 200
try:
# Rebrem la pregunta que l'usuari escriu al xat del front-end
data = request.json
prompt = data.get("message", "").strip()
# Enviem la pregunta a la sessió de xat de Gemini
resposta = chat.send_message(prompt)
# Enviem la resposta de tornada al xat de la web
return jsonify({"reply": resposta.text.strip()})
except Exception as e:
# Si hi ha un error (com falta de quota), l'avisem per consola
print(f"⚠️ Error: {e}")
return jsonify({"reply": "Error de connexió amb la IA."}), 500
# ==============================================================
# 5. EXECUCIÓ I TÚNEL PÚBLIC
# ==============================
if __name__ == '__main__':
# Tanquem qualsevol procés anterior per evitar que el port estigui ocupat
os.system("fuser -k 5000/tcp")
time.sleep(1)
# Configurem i activem Ngrok per crear una URL pública (https://...)
ngrok.kill()
ngrok.set_auth_token(NGROK_TOKEN)
public_url = ngrok.connect(5000).public_url
# Mostrem la URL final que has de copiar al teu codi de Google Sites
print(f"\n" + "="*60)
print(f"✅ SERVIDOR ACTIU")
print(f"🌐 COPIA AQUESTA URL AL FRONT-END: {public_url}/ask")
print("="*60 + "\n")
# Posem en marxa el servidor de Flask
app.run(port=5000, host='0.0.0.0', debug=False, use_reloader=False)
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)