Ir al contenido

TypeScript Strands Agent a Base de Datos Relacional

El generador connection conecta un TypeScript Strands Agent a un proyecto de Base de Datos Relacional, haciendo que un cliente Prisma esté disponible dentro de tu fábrica de agentes.

Antes de usar este generador, asegúrate de tener:

  1. Un proyecto ts#strands-agent
  2. Un proyecto ts#rdb
  1. Instale el Nx Console VSCode Plugin si aún no lo ha hecho
  2. Abra la consola Nx en VSCode
  3. Haga clic en Generate (UI) en la sección "Common Nx Commands"
  4. Busque @aws/nx-plugin - connection
  5. Complete los parámetros requeridos
    • Haga clic en Generate

    Selecciona tu proyecto Strands Agent como origen y tu proyecto de base de datos relacional como destino. Si el proyecto contiene múltiples componentes de agente, especifica sourceComponent para desambiguar.

    Parámetro Tipo Predeterminado Descripción
    sourceProject Requerido string - El proyecto de origen
    targetProject Requerido string - El proyecto de destino al que conectar
    sourceComponent string - El componente de origen desde el que conectar (nombre del componente, ruta relativa a la raíz del proyecto de origen, o id del generador). Use '.' para seleccionar explícitamente el proyecto como origen.
    targetComponent string - El componente de destino al que conectar (nombre del componente, ruta relativa a la raíz del proyecto de destino, o id del generador). Use '.' para seleccionar explícitamente el proyecto como destino.

    El generador modifica un solo archivo:

    • Directoriopackages/my-service/src/my-agent
      • agent.ts Cliente Prisma obtenido dentro de getAgent y disponible para las herramientas

    Además, el objetivo <agent-name>-serve-local del agente se actualiza para depender del objetivo serve-local de la base de datos.

    El cliente Prisma se obtiene directamente dentro de getAgent() en lugar de pasarse a través de parámetros de función. Esto se alinea con cómo el runtime de strands-agent propaga el contexto de sesión — withSessionId envuelve getAgent y almacena en caché una instancia de Agent por sesión, por lo que getPrisma() se llama como máximo una vez por sesión.

    getAgent se actualiza para importar y llamar al getter de Prisma al inicio de su cuerpo:

    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 */ });
    };

    Ejecutar el generador nuevamente con un destino diferente agrega la segunda base de datos junto a la primera:

    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 */ });
    };

    El constructo de agente generado implementa IGrantable e IConnectable, por lo que puedes otorgar acceso de red e IAM a la base de datos directamente en el constructo.

    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 abre la regla del grupo de seguridad para que el runtime del agente pueda alcanzar el puerto de la base de datos. grantConnect otorga el permiso IAM rds-db:connect al rol de ejecución del agente.

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

    Esto inicia el agente y todas las bases de datos conectadas. La variable de entorno SERVE_LOCAL=true hace que cada cliente Prisma se conecte a su base de datos Docker local en lugar de Aurora.