Ir al contenido

AgentCore Harness

Genera un proyecto de Amazon Bedrock AgentCore Harness. Un Harness es un bucle de agente administrado impulsado por Strands Agents: posee valores predeterminados de implementación para el modelo, el prompt del sistema, las herramientas, la memoria, las habilidades, los entornos, el truncamiento, la autorización y los límites de ejecución, mientras que el servicio acepta anulaciones por invocación para los campos admitidos. Reutilizar el mismo Runtime Session ID continúa la misma sesión de Harness.

Terminal window
pnpm nx g @aws/nx-plugin:agentcore-harness
También puede realizar una ejecución en seco para ver qué archivos se cambiarían
Terminal window
pnpm nx g @aws/nx-plugin:agentcore-harness --dry-run
ParámetroTipoPredeterminadoDescripción
name Requeridostring-El nombre de tu proyecto AgentCore Harness. Debe contener al menos un carácter que no sea espacio en blanco y que pueda normalizarse en un nombre de proyecto en formato kebab-case (ej. my-harness).
directory string-Directorio padre donde se coloca el proyecto harness. Por defecto es packages. Debe ser una ruta relativa que no contenga segmentos de directorio padre (..).
subDirectory string-El subdirectorio donde se coloca el proyecto. Por defecto es el nombre del harness en formato kebab-case. Debe ser una ruta relativa que no contenga segmentos de directorio padre (..).
infra agentcore | noneagentcoreEl tipo de infraestructura a generar para alojar tu harness. Por defecto es agentcore. Selecciona none para no generar alojamiento.
iac inherit | cdk | terraforminheritEl proveedor IaC preferido para la infraestructura del harness generado. Por defecto es inherit, que utiliza el proveedor configurado para tu workspace.
preferInstallDependencies boolean-Si se prefiere instalar las dependencias después de que se ejecute el generador. Por defecto es true. Establece en false para diferir la instalación al agrupar múltiples generadores (la instalación aún se ejecuta si es necesaria para que los generadores subsiguientes puedan calcular el grafo de proyectos de Nx); instala una vez al final.

El generador crea un proyecto independiente en packages/<name>/. Debido a que AWS ejecuta el bucle de agente por ti, el proyecto solo contiene el prompt que lo configura y un script para comunicarse con él:

  • Directoriopackages/<name>/
    • src/PROMPT.md El prompt del sistema del Harness
    • scripts/chat.ts Cliente de chat multi-turno para el Harness implementado
    • project.json Agrega el objetivo chat
    • README.md Instrucciones de chat y personalización

La infraestructura se genera cuando infra es agentcore (el valor predeterminado). Con infra: none no se genera infraestructura — establece HARNESS_ARN para invocar un Harness administrado en otro lugar, y vuelve a ejecutar el generador con infra: agentcore más tarde para agregar infraestructura; los archivos de proyecto existentes (incluidas tus ediciones) se conservan.

Dado que este generador proporciona infraestructura como código basada en tu iac elegido, creará un proyecto en packages/common que incluye las construcciones CDK o módulos Terraform relevantes.

El proyecto común de infraestructura como código está estructurado de la siguiente manera:

  • Directoriopackages/common/constructs
    • Directoriosrc
      • Directorioapp/ Constructs for infrastructure specific to a project/generator
      • Directoriocore/ Generic constructs which are reused by constructs in app
      • index.ts Entry point exporting constructs from app
    • project.json Project build targets and configuration
  • Directoriopackages/common/constructs/src/app/harnesses/<name>/
    • <name>.ts Constructo CDK que contiene el Harness y el rol de ejecución

La infraestructura generada administra el Harness a través del recurso nativo (CDK aws_bedrockagentcore.CfnHarness, Terraform aws_bedrockagentcore_harness) con tus valores predeterminados generados, crea un rol de ejecución IAM con los permisos básicos descritos a continuación, y utiliza autorización entrante IAM (no se configura ningún autorizador JWT personalizado de forma predeterminada).

El ARN del Harness se registra en agentcore.harnesses.<ClassName> en Runtime Configuration, conservando cualquier entrada existente.

El generador crea infraestructura como código CDK o Terraform según tu proveedor iac seleccionado. Puedes usar esto para implementar tu Harness a través de tu flujo de trabajo de infraestructura habitual.

El constructo CDK para implementar tu Harness se encuentra en la carpeta common/constructs. Instáncialo desde una aplicación CDK:

packages/infra/src/stacks/application-stack.ts
import { MyHarness } from '@my-scope/common-constructs';
import { Stack, type StackProps } from 'aws-cdk-lib';
import type { Construct } from 'constructs';
export class ApplicationStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
new MyHarness(this, 'MyHarness');
}
}

La interfaz de props del constructo (MyHarnessProps) extiende Partial<Omit<CfnHarnessProps, 'executionRoleArn' | 'allowedTools'>>, por lo que cualquier propiedad nativa de Harness puede ser suministrada y tiene precedencia sobre los valores predeterminados generados:

const harness = new MyHarness(this, 'MyHarness', {
maxIterations: 20,
timeoutSeconds: 600,
});

El constructo también acepta:

  • allowedTools — las herramientas que el Harness puede usar. El Harness se implementa sin ninguna a menos que las proporciones, consulta Configurar herramientas.
  • executionRole — un rol IAM existente para usar en lugar del rol generado. Un rol proporcionado se usa tal cual: los permisos básicos no se le agregan, y su ARN siempre alimenta el Harness (la cadena executionRoleArn sin procesar no se puede anular).
  • modelResourceArns — los ARN del modelo de Bedrock y del perfil de inferencia que el rol de ejecución generado puede invocar, reemplazando la lista predeterminada.
  • vpc, vpcSubnets y securityGroups — ejecuta el Harness en una VPC para que pueda alcanzar recursos privados, consulta Ejecutar en una VPC.

Sus miembros públicos son harness (el CfnHarness), executionRole, grantPrincipal, el getter harnessArn, connections (en una VPC), addToRolePolicy(statement) para extensiones del rol de ejecución, y grantInvokeAccess(grantee) para autorizar llamadores.

Implementa el stack con tu proyecto de infraestructura como de costumbre — consulta la guía de infraestructura CDK.

Puedes otorgar a un llamador permisos para invocar el harness de la siguiente manera:

const harness = new MyHarness(this, 'MyHarness');
harness.grantInvokeAccess(caller);

Un llamador necesita tanto bedrock-agentcore:InvokeHarness como bedrock-agentcore:InvokeAgentRuntime en el ARN del Harness, que es exactamente lo que grantInvokeAccess otorga.

El objetivo chat generado ejecuta scripts/chat.ts, llevándote a un chat de terminal interactivo con tu Harness implementado:

Terminal window
pnpm nx run <project>:chat

Cada turno de una ejecución comparte una sesión, por lo que el Harness mantiene el contexto de la conversación hasta que salgas. Las credenciales provienen de la cadena de proveedores de credenciales estándar del SDK de AWS, y la región de AWS se deriva del ARN del Harness.

El ARN del Harness se resuelve en este orden:

  1. HARNESS_ARN (no vacío): se usa directamente, sin leer Runtime Configuration:

    Terminal window
    HARNESS_ARN=<harness-arn> pnpm nx run <project>:chat
  2. RUNTIME_CONFIG_APP_ID: resuelve el ARN de la entrada agentcore.harnesses.<ClassName> publicada por la infraestructura implementada:

    Terminal window
    RUNTIME_CONFIG_APP_ID=<application-id> pnpm nx run <project>:chat

Sin ninguno establecido, el script falla con un error nombrando ambas opciones.

src/PROMPT.md es el prompt del sistema del Harness: edítalo y vuelve a implementar para cambiar cómo se comporta el Harness. Todo lo demás se configura donde instancias la infraestructura, o editando el constructo o módulo generado directamente. Volver a ejecutar el generador nunca sobrescribe archivos existentes (solo agrega archivos faltantes y fusiona metadatos del proyecto), por lo que tus ediciones al prompt y a la infraestructura generada se conservan.

Cada propiedad nativa de Harness del módulo aws-cdk-lib/aws-bedrockagentcore fijado está disponible a través de las props del constructo — proveedores de modelos alternativos, definiciones de herramientas, memoria, habilidades, configuración de entorno, truncamiento, autorización JWT personalizada y límites de ejecución — y las props explícitas tienen precedencia sobre los valores predeterminados generados. Alternativamente, edita el constructo generado en packages/common/constructs/src/app/harnesses/<name>/<name>.ts.

Omitir la configuración del autorizador (el valor predeterminado) significa autorización entrante IAM; configura un autorizador JWT personalizado a través del campo nativo para cambiar eso.

El Harness se implementa sin herramientas, por lo que comienza con la menor capacidad. Opta por las herramientas que puede usar:

new MyHarness(this, 'Harness', { allowedTools: ['@builtin'] });

Reduce @builtin a patrones específicos como @builtin/file_operations para restringir lo que el bucle de agente puede hacer. Consulta Herramientas de Harness para las herramientas integradas que puedes agregar.

Proporciona una vpc para ejecutar el Harness dentro de ella, de modo que pueda alcanzar recursos privados como una base de datos. El constructo implementa IConnectable, por lo que esos recursos le otorgan acceso de la misma manera que lo harían con cualquier otro:

const harness = new MyHarness(this, 'MyHarness', { vpc });
database.connections.allowDefaultPortFrom(harness, 'Harness to database');

El Harness se coloca en las subredes privadas de la VPC con salida, en un grupo de seguridad creado para él. Anula cualquiera de los dos con vpcSubnets y securityGroups. Ambos requieren vpc, y connections solo está disponible cuando el Harness se ejecuta en una VPC.

Los valores configurados en la infraestructura son valores predeterminados de implementación. El servicio también acepta anulaciones por invocación para campos de Harness admitidos (como modelos, herramientas y habilidades) en la solicitud InvokeHarness; los valores predeterminados de implementación se aplican donde un campo no se anula.