Hands-On Guide

Implementación guiada del MVP

Esta página organiza la ejecución del MVP en una secuencia controlada: preparar entorno, desplegar la capa de datos, verificar retrieval, conectar la capa RAG y validar la experiencia final.

Referencias críticas

Antes de ejecutar, ubica el código fuente y la evidencia pública

Si esta guía se sigue sin estas referencias, el lector pierde contexto operativo. El live site valida la experiencia final. Los tres repositorios muestran la implementación real de cada capa.

Arquitectura

Antes de ejecutar, ubica la vista consolidada a nivel C2

01

Usuario y canal

El usuario ve una sola puerta de entrada: ai-agent-chat, la UI Angular que envía prompts y renderiza el stream.

02

`ai-agent-chat`

El frontend llama al endpoint público y mantiene compatibilidad con NDJSON tipado, texto y payloads legacy.

03

`ai-agent-rag`

Esta capa expone el Function URL, reenvía al orquestador y concentra translation, classifier, retrieval y generation.

04

`ai-agent-data`

El conocimiento se prepara upstream: S3, Batch, rag_context y OpenSearch quedan fuera del runtime conversacional.

Diagrama C2 consolidado

flowchart LR
    USER[Usuario]

    subgraph Chat["ai-agent-chat"]
        UI[Angular chat UI
stream rendering] end subgraph Rag["ai-agent-rag"] URL[Lambda Function URL] API[Node.js API handler] ORCH[LangGraph orchestrator
translation -> classifier -> retrieval -> generation] CTX[(S3 context responses)] URL --> API --> ORCH --> CTX end subgraph Data["ai-agent-data"] SRC[S3 source bucket] BATCH[AWS Batch processor] RAGJSON[processed/rag_context JSON] ING[OpenSearch ingestor] OS[(OpenSearch index)] SRC --> BATCH --> RAGJSON --> ING --> OS end USER --> UI UI --> URL ORCH --> OS ORCH -->|NDJSON tipado| UI

Usa esta vista para orientar el recorrido. Cuando se requiera mayor detalle, conviene derivar a ai-agent-data/docs/ARCHITECTURE.md o ai-agent-rag/docs/ARCHITECTURE.md y mantener esta página como vista consolidada.

Notas técnicas

Decisiones de implementación que el lector debería entender

Models

Modelos diferenciados por fase

La clasificación usa Amazon Nova Micro para devolver JSON corto y rápido. La generación final usa por defecto Amazon Nova Pro y la infraestructura permite cambiar el alias activo a claude, llama o nova.

Translate

La traducción cumple un rol funcional

El query suele nacer en español, mientras que el corpus de estándares y buena parte de los nombres de mensajes vive en inglés. Traducir antes de clasificar y buscar mejora la probabilidad de recuperar contexto útil.

Lambda limits

S3 absorbe el hit set intermedio

El retrieval guarda resultados en S3 y devuelve una referencia. Esa decisión evita payloads grandes entre Lambdas y mantiene el paso de generation enfocado en condensar contexto.

Signals

El stream incorpora señales de entendimiento

Antes de la salida final, el orquestador emite un evento meta con dominio, intención, cantidad de documentos y tipo de storage. Eso facilita observabilidad y depuración desde la UI.

Setup

Primero define tu workspace

Conviene partir de un workspace explícito para que los comandos, rutas y validaciones sean consistentes.

export WORKSHOP_ROOT="$HOME/work/ai-agent"
cd "$WORKSHOP_ROOT"

Dentro de ese root se asume que existen `ai-agent-data`, `ai-agent-rag` y `ai-agent-chat`.

Tooling

Instala las herramientas necesarias antes de usarlas

La preparación del entorno incluye declarar e instalar las herramientas que intervienen en el recorrido.

# macOS
brew install awscli
brew tap hashicorp/tap
brew install hashicorp/tap/terraform
brew install --cask docker
brew install node
brew install python
# Ubuntu / Debian
sudo apt-get update
sudo apt-get install -y awscli terraform docker.io nodejs npm python3 python3-pip
aws configure
aws sts get-caller-identity
terraform version
docker --version
node --version
npm --version
python --version

Delivery

Local primero, GitHub opcional

El recorrido principal del workshop está planteado en modo `local-first`. GitHub Actions puede complementar despliegues de equipo, pero no es indispensable para seguir el MVP.

ai-agent-data/.github/workflows/deploy-infrastructure.yml

ai-agent-rag/.github/workflows/infrastructure-dev.yml

ai-agent-chat/.github/workflows/deploy.yml

No existe un ai-agent-rag/.github/workflows/opensearch-dev.yml en el estado actual del repo.

ai-agent-data combina Terraform e imagen Batch. ai-agent-rag tiene workflow raíz para la infraestructura. ai-agent-chat despliega el frontend estático a S3 con OIDC y generación de API_URL en build.

Paso 1

Despliega `ai-agent-data`

La secuencia comienza en la capa de ingestión, donde se prepara el conocimiento que alimentará el runtime conversacional.

ai-agent-data/terraform/main.tf

ai-agent-data/terraform/outputs.tf

ai-agent-data/terraform/environments/dev.tfvars

cd "$WORKSHOP_ROOT/ai-agent-data/terraform"
terraform init \
  -backend-config="bucket=YOUR-STATE-BUCKET" \
  -backend-config="key=doc-processor/dev/terraform.tfstate" \
  -backend-config="region=us-east-1"
terraform apply -var-file=environments/dev.tfvars

Paso 2

Construye la imagen del processor

Antes de construir la imagen, conviene revisar el comportamiento del contenedor y sus responsabilidades.

ai-agent-data/src/batch/processor.py

ai-agent-data/src/pdf_processor.py

ECR_URL=$(terraform output -raw ecr_repository_url)
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $ECR_URL
cd "$WORKSHOP_ROOT/ai-agent-data/src"
docker build -t $ECR_URL:latest -f batch/Dockerfile .
docker push $ECR_URL:latest

Paso 3

Usa el source set canónico

En esta etapa conviene trabajar con el source set canónico para mantener trazabilidad entre documentos, metadata y resultados esperados.

ai-agent-data/docs/WORKSHOP_DEMO_SOURCE_SET.md

cd "$WORKSHOP_ROOT/ai-agent-data/terraform"
BUCKET=$(terraform output -raw source_bucket)
aws s3 cp ./s3/pdfs_iso/ISO20022_MDRPart2_PaymentsInitiation_2023_2024_v1.pdf s3://$BUCKET/ --metadata domain="iso 20022",document_type="specification",standard="ISO 20022"
aws s3 cp ./s3/docxs_iso/ISO20022_MDRPart1_PaymentsInitiation_2023_2024_v2.docx s3://$BUCKET/ --metadata domain="iso 20022",document_type="specification",standard="ISO 20022"
aws s3 cp ./s3/pdfs_iso/ISO20022_MDRPart2_Bank-to-CustomerCashManagement_2023_2024_v1.pdf s3://$BUCKET/ --metadata domain="iso 20022",document_type="specification",standard="ISO 20022"

La metadata forma parte del retrieval path. pdf_processor.py y el contrato de rag_context la utilizan junto con el contenido extraído por Docling y segmentado con HybridChunker.

Paso 4

Confirma el disparo y el `rag_context`

ai-agent-data/src/lambda/dispatcher.py

aws logs tail /aws/lambda/doc-processor-dispatcher-dev --follow
aws logs tail /aws/batch/doc-processor --follow
aws s3 ls s3://$BUCKET/processed/ --recursive
aws s3 cp s3://$BUCKET/processed/rag_context/YOUR_FILE.json /tmp/workshop-rag-context.json
cat /tmp/workshop-rag-context.json

Paso 5

Verifica la indexación en OpenSearch

INGESTOR_FN=$(terraform output -raw opensearch_ingestor_function_name)
aws logs tail /aws/lambda/$INGESTOR_FN --follow

La indexación downstream valida schema_version y construye bulk actions por chunk. Eso deja explícito que el contrato útil para RAG opera sobre chunks tipados, no sobre documentos completos.

Paso 6

Despliega `ai-agent-rag`

ai-agent-rag/data.tf

ai-agent-rag/variables.tf

cd "$WORKSHOP_ROOT/ai-agent-rag"
export TF_VAR_aws_region=us-east-1
export TF_VAR_project_name=ai-agent-bank
export TF_VAR_environment=dev
export TF_VAR_terraform_state_bucket='your-terraform-state-bucket'
export TF_VAR_ai_agent_data_state_key='doc-processor/dev/terraform.tfstate'
export TF_VAR_response_generation_model_alias='nova'
terraform init \
  -backend-config="bucket=YOUR-RAG-STATE-BUCKET" \
  -backend-config="key=infra/dev/terraform.tfstate" \
  -backend-config="region=us-east-1"
terraform apply

En el estado actual del proyecto, el root module de ai-agent-rag todavía no deja resueltas por Terraform las variables OPENSEARCH_HOST, OPENSEARCH_USERNAME, OPENSEARCH_ADMIN_PASSWORD y OPENSEARCH_INDEX de la Lambda de retrieval. El workshop debe presentar ese punto como una configuración posterior requerida.

También es conveniente dejar visible que la generación final corre sobre un alias de modelo configurable, mientras que la clasificación usa internamente amazon.nova-micro-v1:0.

Paso 7

Valida el stream tipado

ai-agent-rag/modules/lambda/orchestrator-wa/lambda_langgraph_orchestrator-wa.py

python -m pytest modules/lambda/tests/test_langgraph_orchestrator.py -q

En esta etapa también se observa otra decisión relevante: el orquestador no solo entrega chunks finales; emite un evento de understanding con dominio, intención y resumen del contexto recuperado.

Paso 8

Ejecuta `ai-agent-chat`

ai-agent-chat/src/app/chat.service.ts

cd "$WORKSHOP_ROOT/ai-agent-rag"
export API_URL="$(terraform output -raw api_endpoint_url)"
cd "$WORKSHOP_ROOT/ai-agent-chat"
npm install
npm start

ai-agent-chat genera sus environment files desde API_URL en scripts/set-env.sh. Para desarrollo local, el comando alineado con la implementación actual es npm start.

Paso 9

Prueba los prompts canónicos

Prompt principal

Necesito un contrato OpenAPI para iniciar pagos basado en ISO 20022. Quiero request y response en application/json y una propuesta inicial en YAML.

Prompt explicativo

Explicame la estructura de un mensaje de estado de pagos en ISO 20022 y los campos principales que deberia considerar.

Prompt de borde

Genera un contrato API completo basado en BIAN para customer onboarding y devuelvelo en OpenAPI.

Debe marcar el cambio de alcance o reenmarcar la respuesta dentro del dominio actualmente cubierto.

Code Map

Los 5 archivos que más enseñan

`dispatcher.py`

Explica cómo un upload en S3 termina en un job de AWS Batch.

`processor.py`

Explica cómo se producen Markdown y `rag_context`.

`pdf_processor.py`

Explica el contrato de metadata que retrieval necesita.

`lambda_langgraph_orchestrator-wa.py`

Explica el flujo autoritativo y el stream NDJSON tipado.

`chat.service.ts`

Explica cómo la UI consume y presenta el stream.