DEV M5 · Accelerators & IP Contribution — Resumen de estudio

Curso 5 de 5 · 25 pantallas, 9 checkpoints

"El punto donde el código empieza a funcionar es donde empieza el trabajo de este módulo." Que funcione no basta: tiene que poder reutilizarse, contribuirse, desplegarse con versión fijada y defenderse ante procurement y seguridad.


1. Empaquetar para reutilizar (accelerators)

Un accelerator es una solución empaquetada para que el siguiente proyecto la configure en vez de reconstruirla. Separa lo reutilizable de lo específico del cliente y expón lo específico como parámetros con valores por defecto documentados. Hazlo mientras el build está fresco.

Tipo de assetQué agrupaEmpaquetado correcto
Agent templateSystem prompt, schemas de tools, estructura del loopLos valores del dominio van a configuración con defaults documentados
MCP server packageLas tools que expone, sus inputs y el alcanceDocumenta cada input; el equipo que instala define el alcance, sin editar código
Eval suiteEl set calificado + la rúbrica del juezSe entregan juntos. El mismo eval es el gate de despliegue contra un baseline fijo
AssetParametrizarDocumentarPara auditoría
TemplatePrompts, rutas, alcances, credenciales por referencia, umbralesSupuestos, inputs, fallos manejados, evalDatos, identidad, log
MCP serverAlcances, credenciales por referencia, rutasInputs por tool, límites de alcance, fallosDatos, identidad, log
Eval suiteUmbrales, rutas del datasetLógica de la rúbrica, significado de los puntajes, baselineDatos, identidad, log

⚠️ Watch out: un template con la ruta del repo, el modelo, los umbrales y fragmentos de prompt hardcodeados, sin docs ni eval. El segundo equipo tuvo que reescribirlo. Que un template funcione no significa que esté empaquetado. Señales de alarma: sin parámetros, sin documentación de supuestos, sin eval.

Checkpoint 1: el valor hardcodeado es repo_path="/home/acme/checkout-service" → def build_review_agent(repo_path): … repo_path=repo_path.


2. Contribuir de vuelta al ecosistema

⚠️ Watch out: un PR de 3 semanas sin revisión. "Funciona, lo uso a diario", pero no tenía test, ni ejemplo, ni supuestos. Un PR se estanca en lo que el revisor no puede verificar.

Checkpoint 2:


3. Requisitos y ciclo de vida

Ciclo de vida:

  1. Requirements
  2. Design: plataforma, modelo, trust boundaries.
  3. Build: agente, tools, prompts.
  4. Test: evals, unit, integration, e2e.
  5. Deploy: fijar la versión, gate de promoción con el eval.
  6. Operate: costo, latencia, errores, guardrails.
  7. Iterate: lo aprendido en producción vuelve a los requisitos.

Gates entre fases: no pasas de design a build sin cumplir la residencia; no promueves a producción sin pasar el eval contra el baseline. Un experimento puede saltarse fases; un despliegue regulado no.

Checkpoint 3: funcional = B (un humano aprueba el resumen antes de guardarlo) · infraestructura = C (los datos se procesan en la UE). Checkpoint 4: (a) fijar el modelo y retener el anterior = deploy · (b) gate con el eval = deploy · (c) región de datos = requirements · (d) instrumentar costo y latencia = operate · (e) elegir Bedrock por la postura de compliance = design.


4. Plataforma de despliegue y versionado

La nube del cliente suele decidir la plataforma. Las 6 plataformas:

PlataformaIdentidad y datosCuándoVersión fijada
First-party Claude APIIdentidad y términos de Anthropic; features nuevas primeroSin restricción de nube o residenciaID completo + retener el anterior
Claude Platform on AWSTérminos de Anthropic vía la cuenta AWS; la inferencia la opera Anthropic, fuera del límite de AWSEn AWS pero quiere los IDs, el ciclo de vida y la paridad de la API de AnthropicMismo formato de ID que la API
Claude in Amazon BedrockMessages API en /anthropic/v1/messages; paridad amplia (hay una lista de features no soportadas); los datos se quedan en el límite de AWSEn AWS con postura de compliance ahíID con prefijo anthropic.; las fechas de retiro del partner difieren
Claude on Bedrock (legacy)InvokeModel/Converse; IDs versionados por ARNIntegraciones existentes sin migrarPor ARN
Google Vertex AIIAM de Google Cloud; endpoints regionales o globalesEn GCP con postura de compliance ahíFormato de Vertex; fechas de retiro distintas
Terceros (p. ej. Microsoft Foundry)Identidad y billing del producto. Foundry: Hosted on Azure (Opus 4.8, Sonnet 5, Haiku 4.5; todo en Azure) vs Hosted on Anthropic (el resto)El cliente ya usa ese productoSegún los controles de la plataforma

⚠️ Watch out: con model="opus", el alias avanzó, cambió la forma del output, el parser falló (KeyError "summary") y no había versión anterior a la que volver. Se arregló el parser, pero el despliegue siguió sin versión fijada.

Checkpoint 5 (AWS + residencia + rollback): Amazon Bedrock + identidad de AWS + ID completo fijado + retener la versión anterior.


5. Comparar plataformas: latencia, compliance y costo

⚠️ Watch out: se eligió la plataforma "conocida" y fue rechazada en la revisión de seguridad por residencia → hubo que reconstruir todo. Fácil de construir ≠ permitido para desplegar.

Checkpoint 6: Opción 2. Volver a medir la latencia desde EU-west y elegir la plataforma cuya región cumple la residencia solo-UE (el rechazo fue por residencia, no por velocidad ni por costo).


6. Apps multi-componente y trust boundaries

ComponenteAportaFrontera en su uniónControl
First-party APIOrquesta y es el punto de entradaEl request que entra desde fueraValidación del input + identidad
Tarea de Claude CodeTrabajo agentic; puede traer contenido externoLo que trajo (no confiable aguas abajo)Tratarlo como datos en la siguiente unión
MCP serverLee o actúa sobre el sistema del clienteEl acceso que tiene en nombre de la appLeast privilege + log del acceso

⚠️ Watch out: "los 3 componentes pasan sus tests, solo los conecté". El contenido de la página del cliente pasó como instrucciones a la siguiente llamada.

Checkpoint 7: next_call(input=treat_as_data(fetched)) · MCP server con scope=least_privilege_read_only (distractores: run_as_instructions, full_access).


Tarea acumulativa (3 defectos, 3 capas)

  1. Empaquetado: repo_path="/home/acme/checkout" hardcodeado → def build_agent(repo_path).
  2. Despliegue y versionado: model="opus" (alias que se mueve) → ID completo de Bedrock fijado (us.anthropic.claude-opus-4-8) + retain_previous_pinned_version=True.
  3. Trust boundary: next_call(input=fetched) → treat_as_data(fetched).

Además: assert eval_suite.run(model=...) >= baseline_score como gate antes de promover.

Para recordar

  1. Empaqueta mientras el build está fresco: parámetros documentados + eval + audit log.
  2. Un maintainer acepta lo que puede verificar: el canal correcto, código enfocado, ejemplo, test, supuestos y derechos primero.
  3. Fija lo que despliegas: plataforma según la nube y el compliance del cliente; ID fijado y versión anterior conservada.
  4. Mide la dimensión que decide la ubicación: latencia desde la región del cliente, compliance (pasa o no pasa) y costo total.
  5. Marca cada punto de unión como frontera: el contenido traído es datos; least privilege; lo que no se puede asegurar se escala a un humano.