Salta ai contenuti

AgentCore Harness

Genera un progetto Amazon Bedrock AgentCore Harness. Un Harness è un ciclo di agenti gestito alimentato da Strands Agents: possiede i valori predefiniti di distribuzione per il modello, il prompt di sistema, gli strumenti, la memoria, le competenze, gli ambienti, il troncamento, l’autorizzazione e i limiti di esecuzione, mentre il servizio accetta override per invocazione per i campi supportati. Riutilizzare lo stesso Runtime Session ID continua la stessa sessione Harness.

Terminal window
pnpm nx g @aws/nx-plugin:agentcore-harness
Puoi anche eseguire una prova per vedere quali file verrebbero modificati
Terminal window
pnpm nx g @aws/nx-plugin:agentcore-harness --dry-run
ParametroTipoPredefinitoDescrizione
name Obbligatoriostring-Il nome del tuo progetto AgentCore Harness. Deve contenere almeno un carattere non vuoto che possa essere normalizzato in un nome di progetto kebab-case (es. my-harness).
directory string-Directory padre dove viene posizionato il progetto harness. Il valore predefinito è packages. Deve essere un percorso relativo che non contenga segmenti di directory padre (..).
subDirectory string-La sotto-directory in cui viene posizionato il progetto. Il valore predefinito è il nome harness in kebab-case. Deve essere un percorso relativo che non contenga segmenti di directory padre (..).
infra agentcore | noneagentcoreIl tipo di infrastruttura da generare per l'hosting del tuo harness. Il valore predefinito è agentcore. Seleziona none per nessun hosting.
iac inherit | cdk | terraforminheritIl provider IaC preferito per l'infrastruttura harness generata. Il valore predefinito è inherit, che utilizza il provider configurato per il tuo workspace.
preferInstallDependencies boolean-Se preferire l'installazione delle dipendenze dopo l'esecuzione del generatore. Il valore predefinito è true. Imposta a false per differire l'installazione quando si eseguono più generatori in batch (un'installazione viene comunque eseguita se necessaria affinché i generatori successivi possano calcolare il grafo del progetto Nx); installa una volta alla fine.

Il generatore crea un progetto autonomo in packages/<name>/. Poiché AWS esegue il ciclo dell’agente per te, il progetto contiene solo il prompt che lo modella e uno script per comunicare con esso:

  • Directorypackages/<name>/
    • src/PROMPT.md Il prompt di sistema dell’Harness
    • scripts/chat.ts Client di chat multi-turno per l’Harness distribuito
    • project.json Aggiunge il target chat
    • README.md Istruzioni per la chat e la personalizzazione

L’infrastruttura viene generata quando infra è agentcore (il valore predefinito). Con infra: none non viene generata alcuna infrastruttura — imposta HARNESS_ARN per invocare un Harness gestito altrove e riesegui il generatore con infra: agentcore in seguito per aggiungere l’infrastruttura; i file di progetto esistenti (incluse le tue modifiche) vengono preservati.

Poiché questo generatore fornisce infrastruttura come codice basata sul tuo iac scelto, creerà un progetto in packages/common che include i costrutti CDK o i moduli Terraform pertinenti.

Il progetto comune di infrastruttura come codice è strutturato come segue:

  • Directorypackages/common/constructs
    • Directorysrc
      • Directoryapp/ Constructs for infrastructure specific to a project/generator
      • Directorycore/ Generic constructs which are reused by constructs in app
      • index.ts Entry point exporting constructs from app
    • project.json Project build targets and configuration
  • Directorypackages/common/constructs/src/app/harnesses/<name>/
    • <name>.ts Costrutto CDK contenente l’Harness e il ruolo di esecuzione

L’infrastruttura generata gestisce l’Harness attraverso la risorsa nativa (CDK aws_bedrockagentcore.CfnHarness, Terraform aws_bedrockagentcore_harness) con i tuoi valori predefiniti generati, crea un ruolo di esecuzione IAM con le autorizzazioni di base descritte di seguito e utilizza l’autorizzazione in entrata IAM (nessun autorizzatore JWT personalizzato è configurato per impostazione predefinita).

L’ARN dell’Harness è registrato in agentcore.harnesses.<ClassName> nella Configurazione Runtime, preservando eventuali voci esistenti.

Il generatore crea infrastruttura come codice CDK o Terraform in base al provider iac selezionato. Puoi utilizzarlo per distribuire il tuo Harness attraverso il tuo consueto flusso di lavoro dell’infrastruttura.

Il costrutto CDK per distribuire il tuo Harness si trova nella cartella common/constructs. Istanzialo da un’applicazione 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');
}
}

L’interfaccia props del costrutto (MyHarnessProps) estende Partial<Omit<CfnHarnessProps, 'executionRoleArn' | 'allowedTools'>>, quindi qualsiasi proprietà nativa dell’Harness può essere fornita e ha la precedenza sui valori predefiniti generati:

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

Il costrutto accetta anche:

  • allowedTools — gli strumenti che l’Harness può utilizzare. L’Harness viene distribuito senza strumenti a meno che tu non li fornisca, vedi Configurazione degli strumenti.
  • executionRole — un ruolo IAM esistente da utilizzare al posto del ruolo generato. Un ruolo fornito viene utilizzato così com’è: le autorizzazioni di base non vengono aggiunte ad esso e il suo ARN alimenta sempre l’Harness (la stringa executionRoleArn grezza non può essere sovrascritta).
  • modelResourceArns — gli ARN del modello Bedrock e del profilo di inferenza che il ruolo di esecuzione generato può invocare, sostituendo l’elenco predefinito.
  • vpc, vpcSubnets e securityGroups — esegui l’Harness in un VPC in modo che possa raggiungere risorse private, vedi Esecuzione in un VPC.

I suoi membri pubblici sono harness (il CfnHarness), executionRole, grantPrincipal, il getter harnessArn, connections (in un VPC), addToRolePolicy(statement) per le estensioni del ruolo di esecuzione e grantInvokeAccess(grantee) per autorizzare i chiamanti.

Distribuisci lo stack con il tuo progetto di infrastruttura come al solito — vedi la guida all’infrastruttura CDK.

Concessione dell’accesso per invocare l’harness

Sezione intitolata “Concessione dell’accesso per invocare l’harness”

Puoi concedere a un chiamante le autorizzazioni per invocare l’harness come segue:

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

Un chiamante necessita sia di bedrock-agentcore:InvokeHarness che di bedrock-agentcore:InvokeAgentRuntime sull’ARN dell’Harness, che è esattamente ciò che grantInvokeAccess concede.

Il target chat generato esegue scripts/chat.ts, portandoti in una chat interattiva da terminale con il tuo Harness distribuito:

Terminal window
pnpm nx run <project>:chat

Ogni turno di un’esecuzione condivide una sessione, quindi l’Harness mantiene il contesto della conversazione fino a quando non esci. Le credenziali provengono dalla catena di provider di credenziali standard dell’AWS SDK e la regione AWS è derivata dall’ARN dell’Harness.

L’ARN dell’Harness viene risolto in questo ordine:

  1. HARNESS_ARN (non vuoto): utilizzato direttamente, senza leggere la Configurazione Runtime:

    Terminal window
    HARNESS_ARN=<harness-arn> pnpm nx run <project>:chat
  2. RUNTIME_CONFIG_APP_ID: risolve l’ARN dalla voce agentcore.harnesses.<ClassName> pubblicata dall’infrastruttura distribuita:

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

Se nessuno dei due è impostato, lo script fallisce con un errore che nomina entrambe le opzioni.

src/PROMPT.md è il prompt di sistema dell’Harness: modificalo e ridistribuisci per cambiare il comportamento dell’Harness. Tutto il resto è configurato dove istanzi l’infrastruttura, o modificando direttamente il costrutto o il modulo generato. Rieseguire il generatore non sovrascrive mai i file esistenti (aggiunge solo i file mancanti e unisce i metadati del progetto), quindi le tue modifiche al prompt e all’infrastruttura generata vengono preservate.

Ogni proprietà nativa dell’Harness del modulo aws-cdk-lib/aws-bedrockagentcore bloccato è disponibile attraverso le props del costrutto — provider di modelli alternativi, definizioni di strumenti, memoria, competenze, configurazione dell’ambiente, troncamento, autorizzazione JWT personalizzata e limiti di esecuzione — e le props esplicite hanno la precedenza sui valori predefiniti generati. In alternativa, modifica il costrutto generato in packages/common/constructs/src/app/harnesses/<name>/<name>.ts.

Omettere la configurazione dell’autorizzatore (il valore predefinito) significa autorizzazione in entrata IAM; configura un autorizzatore JWT personalizzato attraverso il campo nativo per cambiarlo.

L’Harness viene distribuito senza strumenti, quindi inizia con la minima capacità. Opta per gli strumenti che può utilizzare:

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

Restringi @builtin a pattern specifici come @builtin/file_operations per limitare ciò che il ciclo dell’agente può fare. Vedi Strumenti Harness per gli strumenti integrati che puoi aggiungere.

Fornisci un vpc per eseguire l’Harness al suo interno, in modo che possa raggiungere risorse private come un database. Il costrutto implementa IConnectable, quindi quelle risorse gli concedono l’accesso nello stesso modo in cui lo farebbero con qualsiasi altro:

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

L’Harness viene posizionato nelle subnet private del VPC con egress, in un gruppo di sicurezza creato per esso. Sovrascrivi uno dei due con vpcSubnets e securityGroups. Entrambi richiedono vpc, e connections è disponibile solo quando l’Harness viene eseguito in un VPC.

I valori configurati nell’infrastruttura sono valori predefiniti di distribuzione. Il servizio accetta anche override per invocazione per i campi Harness supportati (come modelli, strumenti e competenze) nella richiesta InvokeHarness; i valori predefiniti di distribuzione si applicano ovunque un campo non venga sovrascritto.