Salta ai contenuti

TypeScript Strands Agent a Database Relazionale

Il generatore connection collega un TypeScript Strands Agent a un progetto Relational Database, rendendo disponibile un client Prisma all’interno della tua agent factory.

Prima di utilizzare questo generatore, assicurati di avere:

  1. Un progetto ts#strands-agent
  2. Un progetto ts#rdb
  1. Installa il Nx Console VSCode Plugin se non l'hai già fatto
  2. Apri la console Nx in VSCode
  3. Clicca su Generate (UI) nella sezione "Common Nx Commands"
  4. Cerca @aws/nx-plugin - connection
  5. Compila i parametri richiesti
    • Clicca su Generate

    Seleziona il tuo progetto Strands Agent come sorgente e il tuo progetto di database relazionale come destinazione. Se il progetto contiene più componenti agent, specifica sourceComponent per disambiguare.

    Parametro Tipo Predefinito Descrizione
    sourceProject Obbligatorio string - Il progetto sorgente
    targetProject Obbligatorio string - Il progetto di destinazione a cui connettersi
    sourceComponent string - Il componente sorgente da cui connettersi (nome del componente, percorso relativo alla radice del progetto sorgente, o id del generatore). Usare '.' per selezionare esplicitamente il progetto come sorgente.
    targetComponent string - Il componente di destinazione a cui connettersi (nome del componente, percorso relativo alla radice del progetto di destinazione, o id del generatore). Usare '.' per selezionare esplicitamente il progetto come destinazione.

    Il generatore modifica un singolo file:

    • Directorypackages/my-service/src/my-agent
      • agent.ts Client Prisma recuperato all’interno di getAgent e disponibile per i tools

    Inoltre, il target <agent-name>-serve-local dell’agent viene aggiornato per dipendere dal target serve-local del database.

    Il client Prisma viene recuperato direttamente all’interno di getAgent() anziché essere passato attraverso i parametri delle funzioni. Questo si allinea con il modo in cui il runtime strands-agent propaga il contesto di sessione — withSessionId avvolge getAgent e memorizza nella cache un’istanza di Agent per sessione, quindi getPrisma() viene chiamato al massimo una volta per sessione.

    getAgent viene aggiornato per importare e chiamare il getter Prisma all’inizio del suo corpo:

    packages/my-service/src/my-agent/agent.ts
    import { getPrisma as getMyDb } from ':my-scope/my-db';
    export const getAgent = async () => {
    const myDb = await getMyDb();
    return new Agent({ /* use myDb in tools */ });
    };

    Eseguire nuovamente il generatore con una destinazione diversa aggiunge il secondo database accanto al primo:

    packages/my-service/src/my-agent/agent.ts
    import { getPrisma as getMyDb } from ':my-scope/my-db';
    import { getPrisma as getOtherDb } from ':my-scope/other-db';
    export const getAgent = async () => {
    const myDb = await getMyDb();
    const otherDb = await getOtherDb();
    return new Agent({ /* use both clients in tools */ });
    };

    Il costrutto agent generato implementa IGrantable e IConnectable, quindi puoi concedere l’accesso di rete e IAM al database direttamente sul costrutto.

    packages/infra/src/stacks/application-stack.ts
    import { MyDatabase } from ':my-scope/common-constructs';
    const db = new MyDatabase(this, 'Db', { vpc, ... });
    const myAgent = new MyAgent(this, 'MyAgent', { vpc, ... });
    db.allowDefaultPortFrom(myAgent);
    db.grantConnect(myAgent);

    allowDefaultPortFrom apre la regola del security group in modo che il runtime dell’agent possa raggiungere la porta del database. grantConnect concede il permesso IAM rds-db:connect al ruolo di esecuzione dell’agent.

    Terminal window
    pnpm nx <agent-name>-serve-local <project-name>

    Questo avvia l’agent e tutti i database connessi. La variabile d’ambiente SERVE_LOCAL=true fa sì che ogni client Prisma si connetta al suo database Docker locale invece che ad Aurora.