Pràctica PR5071/01: Chatbot en Català amb Rasa i Docker
Objectius
En acabar aquesta pràctica sereu capaços de:
- Configurar un entorn Rasa complet utilitzant Docker
- Crear intents i entitats en català per a un domini d'ús real
- Definir stories i rules per gestionar fluxos de conversa
- Entrenar i avaluar la qualitat del chatbot
- Desplegar el chatbot i interactuar-hi via API REST
- Personalitzar el chatbot amb el vostre nom com a identificador únic
Prerequisits
| Requisit | Detalls |
|---|---|
| Temps estimat | 6 hores (3 sessions de 2h) |
| Docker Desktop | Versió 24.x o superior instal·lada i en execució |
| RAM mínima | 4 GB disponibles per a Docker |
| Espai en disc | 3 GB lliures (imatge Rasa + dades) |
| Coneixements | YAML bàsic, terminal de comandes, conceptes de chatbot |
| Sistema operatiu | Windows 10/11 amb WSL2, macOS o Linux |
Docker Desktop a Windows
Assegureu-vos que WSL2 estigui activat a Windows i que Docker Desktop tingui accés a WSL2. Si treballeu a l'aula, comproveu que el proxy no bloqueja el registre de Docker (registry-1.docker.io).
Introducció
Rasa: el framework de chatbots de codi obert
Rasa és el framework de codi obert més estès per a la construcció de chatbots i assistents virtuals conversacionals. Creat el 2016, és usat per empreses com Adobe, Allianz, Deutsche Telekom i centenars d'organitzacions que necessiten desplegaments on-premise o en núvol privat sense dependre d'APIs de tercers.
A diferència dels models de llenguatge grans (LLMs) com GPT-4 o Claude, Rasa no és un model generatiu: és un framework d'enteniment del llenguatge natural (NLU) + gestió del diàleg. Funciona reconeixent intents i entitats a les frases de l'usuari i executant accions predefinides basant-se en regles i stories d'entrenament.
Quan usar Rasa en lloc d'un LLM?
| Criteri | Rasa | LLM (GPT-4, Claude...) |
|---|---|---|
| Privadesa de dades | Alt: tot on-premise | Baix: dades enviades al núvol |
| Control del comportament | Alt: determinista | Mig: pot al·lucinar |
| Cost operacional | Baix: servidor propi | Alt: cost per token |
| Flexibilitat | Limitada al domini definit | Alta: qualsevol tema |
| Integració amb BBDD | Molt bona: accions Python | Possible però complex |
| Temps d'entrenament | Minuts | No requereix (inferència) |
| Regulació (AI Act) | Fàcilment auditable | Requereix esforç extra |
| Casos d'us ideals | FAQ, formularis, processos estructurats | Consultes obertes, creativitat |
Rasa continua sent la millor elecció per a chatbots d'atenció al client amb fluxos de conversa ben definits, especialment en entorns regulats (sanitat, banca, administració pública) on la previsibilitat i l'auditabilitat del comportament són crítics.
El cas d'ús: Assistent d'Institut
En aquesta pràctica construirem un chatbot que actuï com a assistent virtual d'un institut de formació professional. Respondrà preguntes sobre horaris, assignatures, professorat i tràmits administratius. Es tracta d'un cas d'ús ideal per a Rasa: domini ben definit, respostes estructurades i necessitat de privadesa (no volem enviar dades dels alumnes a APIs externes).
Part 1: Configuració de l'entorn
1.1. Creació del directori de treball
Substituïu joan-garcia pel vostre nom real (en minúscules i amb guions):
# Crear i entrar al directori del projecte
mkdir chatbot-joan-garcia
cd chatbot-joan-garcia
# Verificar que Docker esta en execucio
docker version
1.2. Descàrrega de la imatge Rasa
# Descarregar la imatge oficial de Rasa
# Nota: la versio 3.6.20 es estable i ben documentada
docker pull rasa/rasa:3.6.20
# Verificar que la imatge s'ha descarregat correctament
docker images | grep rasa
La descàrrega pot trigar 5-10 minuts (la imatge ocupa aproximadament 1,2 GB).
1.3. Inicialització del projecte
# Inicialitzar un projecte Rasa buit al directori actual
# --user root: necessari per crear fitxers dins del volum muntat
# --no-prompt: no fa preguntes interactives
docker run --name rasa-init-joan-garcia \
--user root \
-v $(pwd):/app \
rasa/rasa:3.6.20 \
init --no-prompt
# Netejar el contenidor d'inicialitzacio (ja no el necessitem)
docker rm rasa-init-joan-garcia
Alternativa a Windows PowerShell
Si useu PowerShell en lloc de Git Bash, substituïu $(pwd) per ${PWD}. Si useu el Símbol del Sistema (cmd.exe), useu %cd%.
1.4. Verificació de l'estructura creada
Hauria de mostrar:
./
├── actions/
│ └── actions.py
├── data/
│ ├── nlu.yml
│ ├── rules.yml
│ └── stories.yml
├── models/
├── tests/
├── config.yml
├── credentials.yml
├── domain.yml
└── endpoints.yml
Part 2: Estructura del Projecte Rasa
Abans de crear el contingut en català, enteneu la funció de cada fitxer:
domain.yml
Defineix el domini del chatbot: els intents que pot reconèixer, les entitats que pot extreure, els slots (memòria), les respostes que pot donar i les accions que pot executar. És el "cervell" de la configuració.
data/nlu.yml
Conté els exemples d'entrenament NLU: parelles (text, intent) i exemples d'entitats. El model NLU aprèn d'aquests exemples a classificar frases noves en intents i a extreure entitats.
data/stories.yml
Defineix fluxos de conversa complets: seqüències d'intents i accions que el bot ha après a seguir. Les stories permeten al model aprendre com conduir converses de múltiples torns.
data/rules.yml
Defineix regles deterministes: respostes que han de produir-se sempre, sense variació, quan es detecta un intent determinat. Ideals per a salutacions, comiats i accions crítiques.
config.yml
Configura el pipeline NLU (com es processen les frases) i les políticas de diàleg (com el bot decideix l'acció següent). Inclou la selecció del model de llengua.
credentials.yml
Configura les connexions amb canals externs: Slack, Telegram, Facebook Messenger, i el canal REST (que usarem per a les proves).
endpoints.yml
Configura les URL dels serveis externs: servidor d'accions personalitzades, tracker store, event broker...
Part 3: Crear el Chatbot en Català
3.1. Fitxer config.yml
Substituïu el contingut de config.yml per la configuració optimitzada per al català:
# config.yml
# Configuració del pipeline NLU per a català
# Alumne: Joan Garcia - Institut Sa Palomera
recipe: default.v1
language: ca # Catala
pipeline:
# Tokenitzacio: divideix el text en paraules
- name: WhitespaceTokenizer
# Extractor de subparaules (captura variants morfologiques)
- name: CountVectorsFeaturizer
analyzer: char_wb
min_ngram: 1
max_ngram: 4
# Vectors de paraules per capturar semantica
- name: CountVectorsFeaturizer
# Classificador d'intents (DIET: Dual Intent Entity Transformer)
- name: DIETClassifier
epochs: 150
constrain_similarities: true
entity_recognition: true
# Extractor d'entitats basades en expressions regulars
- name: RegexEntityExtractor
use_lookup_tables: true
# Detector de frases fora de domini
- name: FallbackClassifier
threshold: 0.65
ambiguity_threshold: 0.1
policies:
# Politica de memoritzacio: recorda stories exactes
- name: MemoizationPolicy
max_history: 5
# Politica de regles: segueix les rules.yml
- name: RulePolicy
core_fallback_threshold: 0.4
core_fallback_action_name: "action_default_fallback"
enable_fallback_prediction: true
# Politica TED: aprèn de les stories
- name: TEDPolicy
max_history: 8
epochs: 100
constrain_similarities: true
3.2. Fitxer domain.yml
# domain.yml
# Domini del chatbot de l'Institut Sa Palomera
# Nom del bot: Assistent_Joan_Garcia
version: "3.1"
intents:
- salutacio
- comiat
- horaris
- assignatures
- professorat
- matricula
- aules
- fora_de_domini
entities:
- dia_setmana
- nom_assignatura
- nom_professor
slots:
dia_consultat:
type: text
mappings:
- type: from_entity
entity: dia_setmana
responses:
utter_salutacio:
- text: "Hola! Sóc l'Assistent_Joan_Garcia, el chatbot de l'Institut Sa Palomera. En què et puc ajudar?"
- text: "Benvingut a l'Institut Sa Palomera! Sóc l'Assistent_Joan_Garcia. Estic aquí per ajudar-te."
utter_comiat:
- text: "Fins aviat! Si tens més preguntes, estaré aquí. Bon dia!"
- text: "Adéu! Ha estat un plaer ajudar-te. Fins la propera!"
utter_horaris:
- text: |
L'institut obre de dilluns a divendres:
- **Matí**: 8:00 - 14:30
- **Tarda**: 15:00 - 21:00 (alguns dies)
- **Secretaria**: 9:00 - 14:00 i dimarts de 16:00 - 18:00
Pots consultar l'horari complet al tauler d'anuncis o a la web de l'institut.
utter_assignatures:
- text: |
Les assignatures del curs d'IA i Big Data (IABD) són:
- **Mòdul 5071**: Models d'Intel·ligència Artificial (66h)
- **Mòdul 5072**: Sistemes d'Aprenentatge Automàtic (66h)
- **Mòdul 5073**: Programació d'Intel·ligència Artificial (165h)
- **Mòdul 5074**: Sistemes de Big Data (99h)
- **Mòdul 5075**: Big Data Aplicat (99h)
- **C088**: Projecte d'IA i Big Data (105h)
Vols saber més sobre alguna assignatura en concret?
utter_professorat:
- text: |
El professorat del cicle IABD és:
- **Francesc Barragán**: Models IA, Programació IA, Sistemes ML
- **Departament de Informàtica**: Big Data i Projecte
Per a tutories, consulta el tauler d'anuncis o al correu de secretaria.
utter_matricula:
- text: |
Per a informació sobre matrícula:
📋 **Secretaria** de l'institut: planta baixa
🕘 **Horari**: dilluns a divendres de 9:00 a 14:00
📧 **Correu**: secretaria@insapalomera.cat
📞 **Telèfon**: 972 33 00 XX
Porta el DNI i la documentació acadèmica requerida.
utter_aules:
- text: |
Les aules del cicle IABD es troben a la primera planta:
- **Aula 1.1**: Classes teòriques i pràctiques
- **Aula 1.2**: Laboratori d'ordinadors (36 PC)
- **Sala de servidors**: accés restringit al professorat
Consulta el tauler per si hi ha canvis d'aula puntuals.
utter_fora_de_domini:
- text: "Ho sento, no tinc informació sobre aquest tema. Pots preguntar sobre horaris, assignatures, professorat, matrícula o aules."
- text: "Aquesta pregunta va més enllà del que sé. Et recomano consultar directament amb la secretaria de l'institut."
utter_default:
- text: "No he entès bé la teva pregunta. Pots reformular-la? Puc ajudar-te amb horaris, assignatures, professorat, matrícula i aules."
actions:
- utter_salutacio
- utter_comiat
- utter_horaris
- utter_assignatures
- utter_professorat
- utter_matricula
- utter_aules
- utter_fora_de_domini
- utter_default
session_config:
session_expiration_time: 60
carry_over_slots_to_new_session: true
3.3. Fitxer data/nlu.yml
# data/nlu.yml
# Exemples d'entrenament NLU en català
# Alumne: Joan Garcia
version: "3.1"
nlu:
- intent: salutacio
examples: |
- Hola
- Bon dia
- Bona tarda
- Bona nit
- Hola, com estàs?
- Ola!
- Ei, hola
- Buenas
- Salut
- Hola, necessito ajuda
- Hola bot
- Benvingut
- Hey
- intent: comiat
examples: |
- Adéu
- Fins aviat
- A reveure
- Gràcies, adéu
- Fins demà
- Fins la propera
- Ens veiem
- Gràcies per l'ajuda, adéu
- Fins aviat, gràcies
- Bye
- Fins!
- Moltes gràcies, fins aviat
- intent: horaris
examples: |
- Quins són els horaris de l'institut?
- A quina hora obre la secretaria?
- Quan tanca l'institut?
- Horari de l'escola
- A quina hora comencen les classes?
- Fins quina hora hi ha classes a la tarda?
- L'institut obre dissabtes?
- Quin és l'horari d'atenció al públic?
- A quina hora obre el centre?
- Quan obre secretaria?
- Horaris d'atenció
- Fins quan puc anar a secretaria?
- Horari de dilluns
- Classes al matí o a la tarda?
- intent: assignatures
examples: |
- Quines assignatures hi ha al curs d'IA?
- Quins mòduls té el cicle d'IABD?
- Quantes assignatures té el curs?
- Informació sobre el mòdul de Big Data
- Que s'estudia al cicle d'intel·ligència artificial?
- Quines matèries té el curs?
- Em pots dir els mòduls del cicle?
- Continguts del cicle IABD
- Que aprendré al curs?
- Descripció de les assignatures
- Quantes hores té el curs?
- Temari del cicle
- Que és el mòdul 5073?
- intent: professorat
examples: |
- Qui és el professor del cicle d'IA?
- Quin professorat té el curs?
- Qui ensenya Big Data?
- Professors de l'IABD
- Com es diu el tutor del curs?
- Qui imparteix la part de programació?
- Tutors del cicle
- Informació sobre els professors
- Qui és el professor de models IA?
- Professorat responsable del curs
- Com puc contactar amb el tutor?
- Qui fa les classes de machine learning?
- intent: matricula
examples: |
- Com em puc matricular?
- Informació sobre la matrícula
- On he d'anar per matricular-me?
- Documentació necessaria per matricular-se
- On és secretaria?
- Termini de matrícula
- Preu del curs
- Cost de la matrícula
- Quan s'obre la matrícula?
- Requisits per accedir al cicle
- Com puc sol·licitar plaça?
- On puc informar-me sobre l'admissió?
- Quina documentació necessito?
- intent: aules
examples: |
- On és l'aula d'informàtica?
- On es fan les classes d'IA?
- On queda el laboratori d'ordinadors?
- Quines aules fan servir per al cicle IABD?
- Planta on hi ha les classes?
- On és l'aula del curs?
- Hi ha laboratori d'ordinadors?
- Equipament de les aules
- On es fan les pràctiques?
- Instal·lacions del centre
- intent: fora_de_domini
examples: |
- Quantes estrelles té el sol?
- Recomanació de restaurants a Blanes
- Quin temps farà demà?
- Preus de l'autobús
- Historia de Catalunya
- Ajuda'm amb els deures de matemàtiques
- Digues-me un acudit
- Com puc aprendre a cuinar?
- Compra en línia
3.4. Fitxer data/stories.yml
# data/stories.yml
# Fluxos de conversa per al chatbot de l'Institut Sa Palomera
version: "3.1"
stories:
- story: Conversa basica de salutacio i comiat
steps:
- intent: salutacio
- action: utter_salutacio
- intent: comiat
- action: utter_comiat
- story: Consulta d horaris despres de salutacio
steps:
- intent: salutacio
- action: utter_salutacio
- intent: horaris
- action: utter_horaris
- intent: comiat
- action: utter_comiat
- story: Consulta d assignatures despres de salutacio
steps:
- intent: salutacio
- action: utter_salutacio
- intent: assignatures
- action: utter_assignatures
- story: Consulta combinada assignatures i professorat
steps:
- intent: salutacio
- action: utter_salutacio
- intent: assignatures
- action: utter_assignatures
- intent: professorat
- action: utter_professorat
- intent: comiat
- action: utter_comiat
- story: Consulta de matricula
steps:
- intent: salutacio
- action: utter_salutacio
- intent: matricula
- action: utter_matricula
- intent: horaris
- action: utter_horaris
- intent: comiat
- action: utter_comiat
- story: Consulta d aules
steps:
- intent: aules
- action: utter_aules
- story: Pregunta fora del domini
steps:
- intent: salutacio
- action: utter_salutacio
- intent: fora_de_domini
- action: utter_fora_de_domini
- intent: horaris
- action: utter_horaris
- story: Conversa completa d informacio del curs
steps:
- intent: salutacio
- action: utter_salutacio
- intent: assignatures
- action: utter_assignatures
- intent: professorat
- action: utter_professorat
- intent: aules
- action: utter_aules
- intent: matricula
- action: utter_matricula
- intent: comiat
- action: utter_comiat
3.5. Fitxer data/rules.yml
# data/rules.yml
# Regles deterministes - s'apliquen sempre que es detecta l'intent
version: "3.1"
rules:
- rule: Respondre sempre a la salutacio
steps:
- intent: salutacio
- action: utter_salutacio
- rule: Respondre sempre al comiat
steps:
- intent: comiat
- action: utter_comiat
- rule: Gestionar preguntes fora del domini
steps:
- intent: fora_de_domini
- action: utter_fora_de_domini
- rule: Fallback quan no s entén la pregunta
steps:
- intent: nlu_fallback
- action: utter_default
Part 4: Entrenament i Prova
4.1. Entrenament del model
# Entrenar el model NLU i el gestor de dialeg
# El model es guardara a la carpeta models/
docker run --name rasa-train-joan-garcia \
--user root \
-v $(pwd):/app \
rasa/rasa:3.6.20 \
train \
--domain domain.yml \
--data data/ \
--out models/ \
--fixed-model-name chatbot_joan_garcia
# Eliminar el contenidor un cop acabat
docker rm rasa-train-joan-garcia
L'entrenament pot trigar entre 3 i 10 minuts depenent del maquinari. Hauries de veure missatges com:
Finished training policies.
NLU model trained successfully.
Your Rasa model is trained and saved at 'models/chatbot_joan_garcia.tar.gz'
4.2. Prova en mode shell (consola interactiva)
# Iniciar el chatbot en mode shell interactiu
docker run --name rasa-shell-joan-garcia \
--user root \
-v $(pwd):/app \
-p 5005:5005 \
-it \
rasa/rasa:3.6.20 \
shell \
--model models/chatbot_joan_garcia.tar.gz
Provar les frases següents per verificar el comportament:
Tu: Hola
Bot: Hola! Sóc l'Assistent_Joan_Garcia...
Tu: Quins horaris teniu?
Bot: L'institut obre de dilluns a divendres...
Tu: I les assignatures del curs?
Bot: Les assignatures del curs d'IA i Big Data...
Tu: Qui fa les classes?
Bot: El professorat del cicle IABD...
Tu: Adéu!
Bot: Fins aviat! Si tens més preguntes...
Per sortir del shell: escriu /stop o prem Ctrl+C.
4.3. Avaluació del model
# Avaluar el model amb les stories de test
docker run --name rasa-eval-joan-garcia \
--user root \
-v $(pwd):/app \
rasa/rasa:3.6.20 \
test \
--model models/chatbot_joan_garcia.tar.gz \
--stories data/stories.yml \
--out results/
docker rm rasa-eval-joan-garcia
Part 5: Prova de l'API REST
5.1. Iniciar el servidor REST
# Iniciar el servidor Rasa en segon pla
docker run --name rasa-server-joan-garcia \
--user root \
-v $(pwd):/app \
-p 5005:5005 \
-d \
rasa/rasa:3.6.20 \
run \
--model models/chatbot_joan_garcia.tar.gz \
--enable-api \
--cors "*" \
--debug
Espereu uns 10 segons perquè el servidor arrenqui completament.
5.2. Provar l'API amb curl
# Prova 1: Salutació
curl -X POST http://localhost:5005/webhooks/rest/webhook \
-H "Content-Type: application/json" \
-d '{"sender": "joan_garcia", "message": "Hola!"}'
# Resposta esperada:
# [{"recipient_id":"joan_garcia","text":"Hola! Sóc l'Assistent_Joan_Garcia..."}]
# Prova 2: Horaris
curl -X POST http://localhost:5005/webhooks/rest/webhook \
-H "Content-Type: application/json" \
-d '{"sender": "joan_garcia", "message": "Quins horaris teniu?"}'
# Prova 3: Assignatures
curl -X POST http://localhost:5005/webhooks/rest/webhook \
-H "Content-Type: application/json" \
-d '{"sender": "joan_garcia", "message": "Quines assignatures té el cicle IABD?"}'
# Prova 4: Pregunta fora del domini
curl -X POST http://localhost:5005/webhooks/rest/webhook \
-H "Content-Type: application/json" \
-d '{"sender": "joan_garcia", "message": "Quin temps farà demà?"}'
# Prova 5: Comiat
curl -X POST http://localhost:5005/webhooks/rest/webhook \
-H "Content-Type: application/json" \
-d '{"sender": "joan_garcia", "message": "Gràcies, fins aviat!"}'
Visualitzar la resposta formatada
Instal·la jq per veure les respostes JSON formatades: curl ... | jq .
A Windows, pots instal·lar jq via winget install jqlang.jq.
5.3. Consultar el tracker (memòria de la conversa)
# Consultar l'historial de la conversa de l'usuari joan_garcia
curl http://localhost:5005/conversations/joan_garcia/tracker | jq .
5.4. Aturar el servidor
Part 6: Ampliació Opcional (Puntuació Extra)
6.1. Afegir un nou intent: consulta de notes
Afegiu a domain.yml un nou intent consulta_notes i la seva resposta, afegiu exemples a nlu.yml, i afegiu una story i una rule corresponents. Reentreneu el model i proveu el nou intent.
6.2. Acció personalitzada amb lògica Python
Rasa permet crear accions personalitzades en Python que poden consultar bases de dades, fer càlculs o integrar-se amb APIs externes. Exemple bàsic:
# actions/actions.py
from typing import Any, Text, Dict, List
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher
import datetime
class AccioHorariActual(Action):
"""Informa de l'horari de secretaria en funcio del dia i hora actual."""
def name(self) -> Text:
return "action_horari_actual"
def run(self, dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
ara = datetime.datetime.now()
dia_setmana = ara.weekday() # 0=dilluns, 6=diumenge
hora = ara.hour
if dia_setmana >= 5:
missatge = "Avui és cap de setmana. La secretaria és tancada."
elif 9 <= hora < 14:
missatge = f"Ara és les {ara.strftime('%H:%M')}. La secretaria és OBERTA ara mateix!"
else:
missatge = (f"Ara és les {ara.strftime('%H:%M')}. "
f"La secretaria és tancada ara. Obre de 9:00 a 14:00.")
dispatcher.utter_message(text=missatge)
return []
Preguntes de Reflexió
Reflexió final
-
Comparativa de paradigmes: Quines limitacions concretes té Rasa en comparació amb un LLM com GPT-4 per a un chatbot d'institut? Pensa en casos on Rasa fallaria però GPT-4 respondria bé, i viceversa.
-
Casos d'ús òptims: Per a quins 3 casos d'ús reals (en empreses, administracions o serveis) Rasa seria clarament millor que un LLM? Justifica la resposta considerant: cost, privadesa, predictibilitat, regulació.
-
Escalabilitat: Com caldria modificar l'arquitectura d'aquest chatbot per a donar servei a 10.000 usuaris simultanis? Quins components caldria afegir o modificar? (Pensa en load balancers, múltiples instàncies Docker, Kubernetes, bases de dades per al tracker...)
-
Qualitat del NLU: Com afecta el nombre d'exemples per intent a la qualitat de les prediccions? Quants exemples mínims recomana la documentació oficial de Rasa? Quin és l'impacte de la variació lingüística (dialectes, incorreccions ortogràfiques)?
-
Ètica del chatbot: El vostre chatbot ha de ser honest sobre el fet que és una IA. Com heu implementat aquesta transparència? Quins problemes ètics podria causar un chatbot d'institut que no s'identifiqués com a tal?
Lliurament
Estructura del fitxer a lliurar
Comprimiu tot el directori del projecte en un fitxer amb el vostre nom:
# Des del directori pare del projecte
zip -r PR5071/01_joan_garcia.zip chatbot-joan-garcia/ \
--exclude "chatbot-joan-garcia/.rasa/*" \
--exclude "chatbot-joan-garcia/models/*"
El fitxer comprimit ha de dir-se PR5071/01_[nom]_[cognoms].zip (exemple: PR5071/01_joan_garcia.zip).
Contingut mínim
- Tots els fitxers de configuració Rasa (
domain.yml,config.yml,credentials.yml,endpoints.yml) - Tots els fitxers de dades (
nlu.yml,stories.yml,rules.yml) - Evidència de l'entrenament (captura de pantalla o log)
- Evidència de les proves (captures de les 5 trucades curl o del shell interactiu)
- Fitxer
README_joan_garcia.mdamb: instruccions per executar el projecte, decisions de disseny preses i respostes a les preguntes de reflexió
Criteris de qualitat
- El nom del bot ha de ser exactament
Assistent_[Nom]_[Cognoms](exemple:Assistent_Joan_Garcia) - Mínim 5 intents, tots en català
- Mínim 10 exemples per intent
- Mínim 5 stories
- Totes les comandes Docker han d'incloure el nom de l'alumne (
--name rasa-joan-garcia) - Les proves API han de mostrar l'
senderamb el nom de l'alumne
Rúbrica
Consulteu la rúbrica completa a Rúbrica PR5071/01 per als criteris detallats d'avaluació.