Bỏ qua để đến nội dung

TypeScript Strands Agent tới Cơ sở dữ liệu quan hệ

Generator connection kết nối một TypeScript Strands Agent với dự án Relational Database, làm cho Prisma client có sẵn bên trong agent factory của bạn.

Trước khi sử dụng generator này, hãy đảm bảo bạn có:

  1. Một dự án ts#strands-agent
  2. Một dự án ts#rdb
  1. Cài đặt Nx Console VSCode Plugin nếu bạn chưa cài đặt
  2. Mở Nx Console trong VSCode
  3. Nhấp Generate (UI) trong phần "Common Nx Commands"
  4. Tìm kiếm @aws/nx-plugin - connection
  5. Điền các tham số bắt buộc
    • Nhấp Generate

    Chọn dự án Strands Agent của bạn làm nguồn và dự án cơ sở dữ liệu quan hệ của bạn làm đích. Nếu dự án chứa nhiều agent component, hãy chỉ định sourceComponent để phân biệt.

    Tham số Kiểu Mặc định Mô tả
    sourceProject Bắt buộc string - Dự án nguồn
    targetProject Bắt buộc string - Dự án đích để kết nối tới
    sourceComponent string - Component nguồn để kết nối từ đó (tên component, đường dẫn tương đối so với thư mục gốc của dự án nguồn, hoặc generator id). Sử dụng '.' để chọn rõ ràng dự án làm nguồn.
    targetComponent string - Component đích để kết nối tới (tên component, đường dẫn tương đối so với thư mục gốc của dự án đích, hoặc generator id). Sử dụng '.' để chọn rõ ràng dự án làm đích.

    Generator sửa đổi một file duy nhất:

    • Thư mụcpackages/my-service/src/my-agent
      • agent.ts Prisma client được lấy bên trong getAgent và có sẵn cho các công cụ

    Ngoài ra, target <agent-name>-serve-local của agent được cập nhật để phụ thuộc vào target serve-local của cơ sở dữ liệu.

    Prisma client được lấy trực tiếp bên trong getAgent() thay vì được truyền qua các tham số hàm. Điều này phù hợp với cách strands-agent runtime truyền ngữ cảnh phiên — withSessionId bao bọc getAgent và lưu vào bộ nhớ cache một instance Agent cho mỗi phiên, vì vậy getPrisma() được gọi tối đa một lần cho mỗi phiên.

    getAgent được cập nhật để import và gọi Prisma getter ở đầu phần thân của nó:

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

    Chạy generator lần nữa với một đích khác sẽ thêm cơ sở dữ liệu thứ hai bên cạnh cơ sở dữ liệu đầu tiên:

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

    Construct agent được tạo ra triển khai IGrantableIConnectable, vì vậy bạn có thể cấp quyền truy cập mạng và IAM cho cơ sở dữ liệu trực tiếp trên 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 mở quy tắc security group để agent runtime có thể truy cập cổng cơ sở dữ liệu. grantConnect cấp quyền IAM rds-db:connect cho execution role của agent.

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

    Lệnh này khởi động agent và tất cả các cơ sở dữ liệu được kết nối. Biến môi trường SERVE_LOCAL=true khiến mỗi Prisma client kết nối với cơ sở dữ liệu Docker cục bộ của nó thay vì Aurora.