Làm quen với Genkit bằng Go (alpha)

Bạn hiện có thể xem trước thư viện Firebase Genkit dành cho phiên bản Go! Vì Thư viện Go hiện đang ở giai đoạn Alpha, bạn có thể thấy các thay đổi về API và chức năng như sau: tiến trình phát triển của mình. Bạn chỉ nên sử dụng đối tượng này để tạo nguyên mẫu và khám phá.

Nếu bạn phát hiện có vấn đề với thư viện hoặc tài liệu này, vui lòng báo cáo chúng trong kho lưu trữ GitHub của chúng tôi.

Để bắt đầu sử dụng Genkit, hãy cài đặt Genkit CLI rồi chạy genkit init trong một dự án Go. Phần còn lại của trang này sẽ hướng dẫn bạn cách thực hiện.

Yêu cầu

  • Phiên bản 1.22 trở lên

  • Node.js 20 trở lên (dành cho CLI và Giao diện người dùng của Genkit)

    Đề xuất: nvm và Công cụ của nvm-windows là cách thuận tiện để cài đặt các phiên bản Nút cụ thể nếu chưa có trên hệ thống của bạn. Các công cụ này cài đặt Nút cho mỗi người dùng, vì vậy, bạn không cần thực hiện các thay đổi trên toàn hệ thống.

    Để cài đặt nvm trên một hệ thống giống Unix, chẳng hạn như macOS hoặc Linux, hãy chạy lệnh sau :

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
    

    Sau đó, để cài đặt Nút bằng nvm, hãy mở một shell mới và chạy lệnh sau :

    nvm install 20
    

Cách thực hiện

  1. Cài đặt Genkit CLI bằng cách chạy lệnh sau:

    npm i -g genkit
    

    Lệnh này sẽ cài đặt Genkit CLI vào thư mục cài đặt Nút để có thể sử dụng bên ngoài dự án Nút.

  2. Tạo thư mục dự án mới:

    mkdir genkit-intro && cd genkit-intro
    
  3. Khởi chạy dự án Genkit:

    genkit init
    
    1. Chọn Go làm môi trường thời gian chạy.

    2. Chọn mô hình của bạn:

      Gemini (AI của Google)

      Cách đơn giản nhất để bắt đầu là sử dụng Gemini API của Google AI. Đảm bảo đó là hoạt động ở khu vực của bạn.

      Tạo khoá API cho Gemini API thông qua Google AI Studio. Sau đó, đặt giá trị GOOGLE_GENAI_API_KEY biến môi trường vào khoá của bạn:

      export GOOGLE_GENAI_API_KEY=<your API key>
      

      Gemini (AI Vertex)

      Nếu Gemini API của Google AI không có ở khu vực của bạn, hãy cân nhắc dùng Vertex AI API, vốn cũng cung cấp Gemini và các mô hình khác. Bạn sẽ cần có một dự án Google Cloud có hỗ trợ thanh toán, bật AI API Nền tảng và đặt một số biến môi trường bổ sung:

      gcloud services enable aiplatform.googleapis.com
      export GCLOUD_PROJECT=<your project ID>
      export GCLOUD_LOCATION=us-central1
      

      Xem mức giá của Vertex AI.

    3. Chỉ định bất kỳ thông tin nào cho tên mô-đun. Ví dụ: example/genkit-intro

    4. Chọn câu trả lời mặc định cho các câu hỏi còn lại. Điều này sẽ khởi chạy thư mục dự án của bạn với một số mã mẫu.

    Lệnh genkit init tạo một mô-đun Go mẫu và cài đặt các phần phụ thuộc bắt buộc. Tệp main.go chứa một luồng duy nhất, menuSuggestionFlow để nhắc một LLM đề xuất một mục cho một nhà hàng có chủ đề nhất định.

    Tệp này có dạng như sau (các bước định cấu hình trình bổ trợ có thể trông khác nếu bạn chọn Vertex AI):

    package main
    
    import (
        "context"
        "errors"
        "fmt"
        "log"
    
        // Import Genkit and the Google AI plugin
        "github.com/firebase/genkit/go/ai"
        "github.com/firebase/genkit/go/genkit"
        "github.com/firebase/genkit/go/plugins/googleai"
    )
    
    func main() {
        ctx := context.Background()
    
        // Initialize the Google AI plugin. When you pass nil for the
        // Config parameter, the Google AI plugin will get the API key from the
        // GOOGLE_GENAI_API_KEY environment variable, which is the recommended
        // practice.
        if err := googleai.Init(ctx, nil); err != nil {
            log.Fatal(err)
        }
    
        // Define a simple flow that prompts an LLM to generate menu suggestions.
        genkit.DefineFlow("menuSuggestionFlow", func(ctx context.Context, input string) (string, error) {
            // The Google AI API provides access to several generative models. Here,
            // we specify gemini-1.5-flash.
            m := googleai.Model("gemini-1.5-flash")
            if m == nil {
                return "", errors.New("menuSuggestionFlow: failed to find model")
            }
    
            // Construct a request and send it to the model API (Google AI).
            resp, err := m.Generate(ctx,
                ai.NewGenerateRequest(
                    &ai.GenerationCommonConfig{Temperature: 1},
                    ai.NewUserTextMessage(fmt.Sprintf(`Suggest an item for the menu of a %s themed restaurant`, input))),
                nil)
            if err != nil {
                return "", err
            }
    
            // Handle the response from the model API. In this sample, we just
            // convert it to a string. but more complicated flows might coerce the
            // response into structured output or chain the response into another
            // LLM call.
            text, err := resp.Text()
            if err != nil {
                return "", fmt.Errorf("menuSuggestionFlow: %v", err)
            }
            return text, nil
        })
    
        // Initialize Genkit and start a flow server. This call must come last,
        // after all of your plug-in configuration and flow definitions. When you
        // pass a nil configuration to Init, Genkit starts a local flow server,
        // which you can interact with using the developer UI.
        if err := genkit.Init(ctx, nil); err != nil {
            log.Fatal(err)
        }
    }
    

    Khi xây dựng các tính năng AI cho ứng dụng của mình bằng Genkit, có thể bạn sẽ tạo có nhiều bước như xử lý trước đầu vào, phức tạp hơn tạo nhanh, tích hợp các nguồn thông tin bên ngoài cho tạo tăng cường truy xuất (RAG), v.v.

  4. Giờ đây, bạn có thể chạy và khám phá các tính năng của Genkit cũng như dự án mẫu trên thiết bị trên máy của bạn. Tải xuống và khởi động giao diện người dùng dành cho nhà phát triển Genkit:

    genkit start
    

    Chào mừng bạn đến với
Giao diện người dùng dành cho nhà phát triển Genkit

    Giao diện người dùng dành cho nhà phát triển Genkit hiện đang chạy trên máy của bạn. Khi bạn chạy mô hình hoặc luồng ở bước tiếp theo, máy của bạn sẽ thực hiện các nhiệm vụ điều phối cần thiết để các bước trong quy trình hoạt động cùng nhau; lệnh gọi đến các nguồn bên ngoài các dịch vụ như Gemini API sẽ tiếp tục được triển khai để so sánh máy chủ.

    Ngoài ra, do bạn đang ở trong môi trường nhà phát triển, nên Genkit sẽ lưu trữ dấu vết và trạng thái luồng trong tệp cục bộ.

  5. Giao diện người dùng dành cho nhà phát triển Genkit sẽ tự động tải xuống và mở khi bạn chạy Lệnh genkit start.

    Giao diện người dùng dành cho nhà phát triển cho phép bạn xem những quy trình mà bạn đã xác định và các mô hình mà bạn đã định cấu hình, chạy chúng và kiểm tra dấu vết của các lần chạy trước đó. Hãy thử một vài các tính năng này:

    • Trên thẻ Run (Chạy), bạn sẽ thấy danh sách tất cả các quy trình mà bạn có đã xác định và bất kỳ mô hình nào đã được định cấu hình bởi trình bổ trợ.

      Nhấp vào menusuggestedionFlow và thử chạy với một số văn bản nhập (cho ví dụ: "cat"). Nếu mọi việc đều tốt đẹp, bạn sẽ nhận được một thực đơn gợi ý cho một nhà hàng chủ đề mèo.

    • Trên thẻ Inspect (Kiểm tra), bạn sẽ thấy nhật ký thực thi luồng. Đối với mỗi luồng, bạn có thể xem các tham số đã được truyền đến luồng và một dấu vết của từng bước trong quá trình chạy.