Aller au contenu

Agent TypeScript Strands vers Base de Données Relationnelle

Le générateur connection connecte un Agent TypeScript Strands à un projet de Base de Données Relationnelle, rendant un client Prisma disponible à l’intérieur de votre factory d’agent.

Avant d’utiliser ce générateur, assurez-vous d’avoir :

  1. Un projet ts#strands-agent
  2. Un projet ts#rdb
  1. Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
  2. Ouvrez la console Nx dans VSCode
  3. Cliquez sur Generate (UI) dans la section "Common Nx Commands"
  4. Recherchez @aws/nx-plugin - connection
  5. Remplissez les paramètres requis
    • Cliquez sur Generate

    Sélectionnez votre projet Strands Agent comme source et votre projet de base de données relationnelle comme cible. Si le projet contient plusieurs composants d’agent, spécifiez sourceComponent pour lever l’ambiguïté.

    Paramètre Type Par défaut Description
    sourceProject Requis string - Le projet source
    targetProject Requis string - Le projet cible auquel se connecter
    sourceComponent string - Le composant source depuis lequel se connecter (nom du composant, chemin relatif à la racine du projet source, ou identifiant du générateur). Utilisez '.' pour sélectionner explicitement le projet comme source.
    targetComponent string - Le composant cible auquel se connecter (nom du composant, chemin relatif à la racine du projet cible, ou identifiant du générateur). Utilisez '.' pour sélectionner explicitement le projet comme cible.

    Le générateur modifie un seul fichier :

    • Répertoirepackages/my-service/src/my-agent
      • agent.ts Client Prisma récupéré dans getAgent et disponible pour les outils

    De plus, la cible <agent-name>-serve-local de l’agent est mise à jour pour dépendre de la cible serve-local de la base de données.

    Le client Prisma est récupéré directement à l’intérieur de getAgent() plutôt que d’être passé à travers les paramètres de fonction. Cela s’aligne avec la façon dont le runtime strands-agent propage le contexte de session — withSessionId enveloppe getAgent et met en cache une instance Agent par session, donc getPrisma() est appelé au maximum une fois par session.

    getAgent est mis à jour pour importer et appeler le getter Prisma au début de son corps :

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

    Exécuter le générateur à nouveau avec une cible différente ajoute la deuxième base de données à côté de la première :

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

    Le construct d’agent généré implémente IGrantable et IConnectable, vous pouvez donc accorder l’accès réseau et IAM à la base de données directement sur le construct.

    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 ouvre la règle du groupe de sécurité afin que le runtime de l’agent puisse atteindre le port de la base de données. grantConnect accorde la permission IAM rds-db:connect au rôle d’exécution de l’agent.

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

    Cela démarre l’agent et toutes les bases de données connectées. La variable d’environnement SERVE_LOCAL=true fait en sorte que chaque client Prisma se connecte à sa base de données Docker locale au lieu d’Aurora.