Triển khai flow bằng Cloud Run

Bạn có thể triển khai các luồng Genkit dưới dạng điểm cuối HTTPS bằng Cloud Run. Cloud Run có một số tuỳ chọn triển khai, bao gồm cả triển khai dựa trên vùng chứa; trang này sẽ giải thích cách triển khai quy trình trực tiếp từ mã.

Trước khi bắt đầu

  • Cài đặt Google Cloud CLI.
  • Bạn nên nắm rõ khái niệm về luồng của Genkit và cách viết các luồng đó. Trang này giả định rằng bạn đã có các luồng mà bạn muốn triển khai.
  • Việc này sẽ rất hữu ích nhưng không bắt buộc nếu bạn đã từng sử dụng Google Cloud và Cloud Run.

1. Thiết lập dự án trên Google Cloud

Nếu bạn chưa thiết lập dự án Google Cloud, hãy làm theo các bước sau:

  1. Tạo dự án Google Cloud mới bằng Cloud Console hoặc chọn một dự án hiện có.

  2. Liên kết dự án với một tài khoản thanh toán (yêu cầu đối với Cloud Run).

  3. Định cấu hình Google Cloud CLI để sử dụng dự án của bạn:

    gcloud init

2. Chuẩn bị dự án Node để triển khai

Để có thể triển khai luồng, bạn cần thực hiện một số thay đổi nhỏ đối với mã dự án:

Thêm tập lệnh bắt đầu và bản dựng vào package.json

Khi triển khai dự án Node.js cho Cloud Run, các công cụ triển khai sẽ yêu cầu dự án của bạn có tập lệnh start và tuỳ chọn là tập lệnh build. Đối với một dự án TypeScript thông thường, các tập lệnh sau đây thường là đủ:

"scripts": {
  "start": "node lib/index.js",
  "build": "tsc"
},

Thêm mã để định cấu hình và khởi động máy chủ flow

Trong tệp do tập lệnh start chạy, hãy thêm lệnh gọi đến startFlowServer. Phương thức này sẽ khởi động một máy chủ Express được thiết lập để phân phát luồng dưới dạng điểm cuối web.

Khi bạn thực hiện lệnh gọi, hãy chỉ định các luồng mà bạn muốn phân phát:

ai.startFlowServer({
  flows: [menuSuggestionFlow],
});

Bạn cũng có thể chỉ định một số tham số không bắt buộc:

  • port: cổng mạng để nghe. Nếu không chỉ định, máy chủ sẽ nghe trên cổng được xác định trong biến môi trường PORT và nếu không đặt PORT, giá trị mặc định sẽ là 3400.
  • cors: Chính sách CORS của máy chủ luồng. Nếu sẽ truy cập vào các điểm cuối này từ một ứng dụng web, bạn có thể cần phải chỉ định điều này.
  • pathPrefix: tiền tố đường dẫn không bắt buộc để thêm vào trước các điểm cuối của luồng.
  • jsonParserOptions: các tuỳ chọn để truyền đến trình phân tích cú pháp nội dung JSON của Express

Không bắt buộc: Xác định chính sách uỷ quyền

Tất cả các luồng được triển khai đều phải yêu cầu một số hình thức uỷ quyền; nếu không, bất kỳ ai cũng có thể gọi các luồng AI tạo sinh có thể tốn kém của bạn.

Khi triển khai flow bằng Cloud Run, bạn có hai lựa chọn để uỷ quyền:

  • Uỷ quyền dựa trên Cloud IAM: Sử dụng các cơ sở quản lý quyền truy cập gốc của Google Cloud để kiểm soát quyền truy cập vào các điểm cuối của bạn. Hãy xem phần Xác thực trong tài liệu về Cloud Run để biết thông tin về cách cung cấp các thông tin xác thực này.

  • Chính sách uỷ quyền được xác định trong mã: Sử dụng tính năng chính sách uỷ quyền của quy trình Genkit để xác minh thông tin uỷ quyền bằng mã tuỳ chỉnh. Đây thường là uỷ quyền dựa trên mã thông báo, nhưng không nhất thiết phải là như vậy.

Nếu bạn muốn xác định chính sách uỷ quyền trong mã, hãy sử dụng tham số authPolicy trong định nghĩa luồng:

const myFlow = ai.defineFlow(
  {
    name: "myFlow",
    authPolicy: (auth, input) => {
      if (!auth) {
        throw new Error("Authorization required.");
      }
      // Custom checks go here...
    },
  },
  async () => {
    // ...
  }
);

Tham số auth của chính sách uỷ quyền đến từ thuộc tính auth của đối tượng yêu cầu. Thông thường, bạn sẽ đặt thuộc tính này bằng cách sử dụng phần mềm trung gian Express. Xem phần Uỷ quyền và tính toàn vẹn.

Cung cấp thông tin xác thực API cho các flow đã triển khai

Sau khi triển khai, các luồng của bạn cần có một số cách để xác thực với mọi dịch vụ từ xa mà chúng dựa vào. Hầu hết các luồng sẽ cần ít nhất thông tin xác thực để truy cập vào dịch vụ API mô hình mà chúng sử dụng.

Đối với ví dụ này, hãy làm theo một trong những cách sau, tuỳ thuộc vào nhà cung cấp mô hình mà bạn chọn:

Gemini (AI của Google)

  1. Đảm bảo công nghệ AI của Google có ở khu vực của bạn.

  2. Tạo khoá API cho Gemini API bằng Google AI Studio.

  3. Cung cấp khoá API trong môi trường Cloud Run:

    1. Trong Cloud Console, hãy bật Secret Manager API.
    2. Trên trang Trình quản lý khoá bí mật, hãy tạo một khoá bí mật mới chứa khoá API của bạn.
    3. Sau khi bạn tạo khoá bí mật, trên cùng một trang, hãy cấp cho tài khoản dịch vụ điện toán mặc định quyền truy cập vào khoá bí mật bằng vai trò Trình truy cập khoá bí mật của Trình quản lý khoá bí mật. (Bạn có thể tra cứu tên của tài khoản dịch vụ điện toán mặc định trên trang IAM.)

    Trong bước sau, khi triển khai dịch vụ, bạn sẽ cần tham chiếu tên của khoá bí mật này.

Gemini (Vertex AI)

  1. Trong Cloud Console, hãy Bật API Vertex AI cho dự án của bạn.

  2. Trên trang IAM, hãy đảm bảo rằng Tài khoản dịch vụ điện toán mặc định được cấp vai trò Người dùng Vertex AI.

Bí mật duy nhất bạn cần thiết lập cho hướng dẫn này là dành cho nhà cung cấp mô hình, nhưng nói chung, bạn phải làm tương tự cho từng dịch vụ mà luồng của bạn sử dụng.

3. Triển khai luồng cho Cloud Run

Sau khi chuẩn bị dự án để triển khai, bạn có thể triển khai dự án đó bằng công cụ gcloud.

Gemini (AI của Google)

gcloud run deploy --update-secrets=GOOGLE_GENAI_API_KEY=<your-secret-name>:latest

Gemini (Vertex AI)

gcloud run deploy

Công cụ triển khai sẽ nhắc bạn cung cấp mọi thông tin cần thiết.

Khi được hỏi liệu bạn có muốn cho phép các lệnh gọi chưa được xác thực hay không:

  • Trả lời Y nếu bạn không sử dụng IAM và đã xác định chính sách uỷ quyền trong mã.
  • Trả lời N để định cấu hình dịch vụ của bạn yêu cầu thông tin xác thực IAM.

Không bắt buộc: Thử quy trình đã triển khai

Sau khi triển khai xong, công cụ này sẽ in URL dịch vụ. Bạn có thể kiểm thử bằng curl:

curl -X POST https://<service-url>/menuSuggestionFlow \
  -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
  -H "Content-Type: application/json" -d '{"data": "banana"}'