跳转到内容

Python Agent 到关系数据库

connection 生成器将 Python Agent 连接到 Python 关系数据库 项目,使数据库会话在您的 agent 工具中可用。

在使用此生成器之前,请确保您拥有:

  1. 一个 py#agent 项目
  2. 一个 py#rdb 项目
  1. 安装 Nx Console VSCode Plugin 如果您尚未安装
  2. 在VSCode中打开Nx控制台
  3. 点击 Generate (UI) 在"Common Nx Commands"部分
  4. 搜索 @aws/nx-plugin - connection
  5. 填写必需参数
    • 点击 Generate

    选择您的 Agent 项目作为源,选择您的关系数据库项目作为目标。如果项目包含多个 agent 组件,请指定 sourceComponent 以消除歧义。

    参数类型默认值描述
    sourceProject 必需string-源项目
    targetProject 必需string-要连接到的目标项目
    sourceComponent string-要从其连接的源组件(组件名称、相对于源项目根目录的路径或生成器 ID)。使用 '.' 显式选择项目作为源。
    targetComponent string-要连接到的目标组件(组件名称、相对于目标项目根目录的路径或生成器 ID)。使用 '.' 显式选择项目作为目标。
    preferInstallDependencies booleantrue是否在生成器运行后优先安装依赖项。设置为 false 可在批量运行多个生成器时延迟安装(如果后续生成器需要计算 Nx 项目图,仍会运行安装);在最后统一安装一次。
    • 文件夹packages/my_service
      • project.json 添加从 my_agent-dev 到数据库的 dev 目标的依赖
      • pyproject.toml 将数据库包添加为工作区依赖项
      • 文件夹my_service
        • 文件夹my_agent
          • Dockerfile 添加用于直接 Aurora 连接的 RDS CA 证书包

    从您的数据库包中导入 session_context 并在您的 agent 工具中使用它:

    packages/my_service/my_service/my_agent/agent.py
    from sqlmodel import select
    from my_scope.my_db import session_context
    from my_scope.my_db.models.example import ExampleModel
    from strands import tool
    @tool
    async def list_examples() -> list:
    """List all example records."""
    async with session_context() as session:
    return [item.model_dump() for item in (await session.execute(select(ExampleModel))).all()]

    生成的 agent 构造实现了 IGrantableIConnectable,因此您可以直接在构造上授予对数据库的网络和 IAM 访问权限。

    packages/infra/src/stacks/application-stack.ts
    import { RuntimeNetworkConfiguration } from 'aws-cdk-lib/aws-bedrockagentcore';
    import { MyDatabase } from ':my-scope/common-constructs';
    const db = new MyDatabase(this, 'Db', { vpc, ... });
    const myAgent = new MyAgent(this, 'MyAgent', {
    networkConfiguration: RuntimeNetworkConfiguration.usingVpc(this, {
    vpc,
    vpcSubnets: { subnetType: SubnetType.PRIVATE_WITH_EGRESS },
    }),
    });
    db.allowDefaultPortFrom(myAgent);
    db.grantConnect(myAgent);

    allowDefaultPortFrom 打开安全组规则,使 agent 运行时可以访问数据库端口。grantConnect 向 agent 的执行角色授予 IAM rds-db:connect 权限。

    不使用 RDS Proxy 连接时的 SSL 要求

    Section titled “不使用 RDS Proxy 连接时的 SSL 要求”

    当 agent 直接连接到 Aurora 集群(不使用 RDS Proxy)时,连接生成器会更新生成的 agent Dockerfile,将 Amazon RDS CA 证书包安装到系统信任存储中:

    ADD https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem /usr/local/share/ca-certificates/rds-global-bundle.crt
    RUN update-ca-certificates

    使用 RDS Proxy 时,您无需在 agent 运行时中配置 RDS CA 证书包。

    Terminal window
    pnpm nx <agent-name>-dev <project-name>

    这将启动 agent 和所有连接的数据库。LOCAL_DEV=true 环境变量使数据库客户端连接到其本地 Docker 数据库而不是 Aurora。