← 返回首頁
Google for Developers
Google for Developers
@googledevs
348🔁 55
𝕏 (Twitter)🔥

Genkit Dart:使用 Dart 和 Flutter 建構全端人工智慧應用程式

Dart 和 Flutter 社群一直以來都在不斷拓展跨螢幕的可能性。你們已經證明,建構高品質、多平台應用程式無需犧牲開發者體驗。現在,我們將相同的「一次撰寫,隨處執行」理念帶入人工智慧驅動的功能和應用程式中。

我們很高興宣布 Genkit Dart 的預覽版發布,這是一個專為 Dart 和 Flutter 開發者設計的開源人工智慧框架。Genkit 已支援 TypeScript、Go 和 Python,現在它能讓您為任何平台建構高品質、全端、人工智慧驅動的應用程式。

為何選擇 Genkit Dart?

Genkit Dart 提供您以下功能:

  • 模型無關的 API:開箱即用支援 Google、Anthropic、OpenAI 和與 OpenAI API 相容的模型。您永遠不會被鎖定在單一供應商。

  • 型別安全:使用 Dart 強大的型別系統與 schemantic package 來產生強型別資料並建立型別安全的 AI flows。

  • 隨處執行程式:一次撰寫您的 AI 邏輯,並將其作為後端服務或直接在您的 Flutter 應用程式中執行。

  • 開發者 UI:包含一個 localhost 網頁 UI,您可以在其中測試 prompts、檢視 traces 並偵錯您的 flows。

  • 完整 AI 工具包:提供您建構高品質 AI 功能所需的一切,包括結構化輸出、工具、多步驟 flows、可觀察性等等。

模型無關的 API

Genkit 旨在支援任何 LLM 供應商,此版本開箱即用支援 Google、Anthropic、OpenAI 和與 OpenAI API 相容的模型。這讓您只需最少的程式碼變更即可在不同供應商之間切換。

import 'package:genkit/genkit.dart';
import 'package:genkit_google_genai/genkit_google_genai.dart';
import 'package:genkit_anthropic/genkit_anthropic.dart';

void main() async {
  // Initialize Genkit with plugins
  final ai = Genkit(plugins: [
    googleAI(),
    anthropic(),
  ]);

  // Call Google Gemini
  final geminiResponse = await ai.generate(
    model: googleAI.gemini('gemini-3.1-pro-preview'),
    prompt: 'Hello from Gemini',
  );

  // Call Anthropic Claude
  final claudeResponse = await ai.generate(
    model: anthropic.model('claude-opus-4.6'),
    prompt: 'Hello from Claude',
  );
}

型別安全的 AI flows

Genkit 讓您可以將您的 AI 邏輯包裝成可測試、可觀察、可部署的函數,稱為 flows。

以下是一個使用強型別輸入和輸出 schemas,並帶有工具呼叫的旅行規劃器 flow 範例:

import 'package:genkit/genkit.dart';
import 'package:genkit_google_genai/genkit_google_genai.dart';
import 'package:schemantic/schemantic.dart';

part 'travel_flow.g.dart';

// Define flow input schema with schemantic
@Schema()
abstract class $TripRequest {
  String get destination;
  int get days;
}

// Define tool input schema
@Schema()
abstract class $WeatherRequest {
  @Field(description: 'The city name')
  String get city;
}

void main() async {
  // Initialize Genkit and register the Google AI plugin
  final ai = Genkit(plugins: [googleAI()]);

  // Define a tool the model can invoke to fetch live data
  ai.defineTool(
    name: 'fetchWeather',
    description: 'Retrieves the current weather forecast for a given city',
    inputSchema: WeatherRequest.$schema,
    fn: (request, _) async => request.city.toLowerCase() == 'seattle' ? 'Rainy' : 'Sunny', 
  );

  // Construct a strongly-typed, observable flow
  final tripPlannerFlow = ai.defineFlow(
    name: 'planTrip',
    inputSchema: TripRequest.$schema,
    outputSchema: .string(),
    fn: (request, _) async {
      // Generate content using the model and tool
      final response = await ai.generate(
        model: googleAI.gemini('gemini-3.1-pro-preview'),
        prompt: 'Build a ${request.days}-day travel itinerary for ${request.destination}. '
                'Make sure to check the weather forecast first to suggest appropriate activities.',
        toolNames: ['fetchWeather'],
      );
      
      return response.text;
    },
  );

  // Run the flow
  final itinerary = await tripPlannerFlow(
    TripRequest(destination: 'Seattle', days: 3)
  );
  print(itinerary);
}

準備就緒後,您可以使用 genkit_shelf package 輕鬆地將您的 flow 作為 API 公開,並將其部署到任何支援 Dart 的平台。

import 'package:genkit_shelf/genkit_shelf.dart';
import 'package:shelf_router/shelf_router.dart';
import 'package:shelf/shelf_io.dart' as io;

void main() async {
  // ... initialize Genkit and define tripPlannerFlow ...

  final router = Router()
    ..post(
      '/api/planTrip',
      shelfHandler(tripPlannerFlow),
    );

  await io.serve(router.call, 'localhost', 8080);
}

Dart 執行之處皆可執行

大多數複雜的 AI 邏輯都在伺服器上執行。然而,由於 Dart 可以在前端和後端運作,Genkit 讓您可以輕鬆地在伺服器和 Flutter 應用程式之間移動您的 AI 程式。

以下是使用 Genkit Dart 建構的幾種方式:

  1. 完全在 Flutter 中進行原型開發

您可以將所有 Genkit 邏輯,包括模型呼叫,直接撰寫在您的 Flutter 應用程式中。這非常適合原型或使用者提供自己的 API keys 且 prompts 不屬於私密的應用程式。

警告:您絕不應發布將您的 API key 嵌入原始程式碼中的應用程式,因為它可能被他人提取和使用。

  1. 從 Flutter 呼叫後端 flows

當您的 prompts 敏感或 AI 邏輯複雜時,您可以將整個 flow 移至後端。您的 Flutter 應用程式可以透過將其定義為「遠端 action」來呼叫此 flow。由於後端和前端都是用 Dart 撰寫,它們可以共用相同的 schemas 以實現端到端型別安全。

以下範例展示如何從您的 Flutter 應用程式呼叫我們之前定義的旅行規劃器後端 flow:

import 'package:genkit/client.dart';
import 'package:my_shared_models/models.dart'; // Shared schema

final tripPlannerFlow = defineRemoteAction(
  url: 'https://your-server.com/api/planTrip',
  inputSchema: TripRequest.$schema,
  outputSchema: .string(),
);

final itinerary = await tripPlannerFlow(
  input: TripRequest(destination: 'Tokyo', days: 5),
);
  1. 在 Flutter 中使用遠端模型

為了保護您的 API keys,同時將核心 AI 邏輯保留在您的 Flutter 應用程式中,您可以建立一個小型 Genkit 後端,該後端使用自訂授權邏輯將請求代理到模型供應商。透過此後端公開的模型是遠端模型。

import 'package:genkit_google_genai/genkit_google_genai.dart';
import 'package:genkit_shelf/genkit_shelf.dart';
import 'package:shelf_router/shelf_router.dart';
import 'package:shelf/shelf_io.dart' as io;

// Backend securely proxies requests to the model
void main() async {
  final geminiApi = googleAI();
  final targetModel = geminiApi.model('gemini-3.1-flash-lite-preview');
  final router = Router()
    ..post(
      '/api/gemini-model',
      shelfHandler(
        targetModel,
        // Insert custom authorization logic here
        contextProvider: (req) async => {'customAuth': true}, 
      ),
    );
  await io.serve(router.call, 'localhost', 8080);
}

在您的 Flutter 應用程式中,使用遠端模型而不是直接的模型 plugin,並傳遞您的伺服器所需的任何 headers。這可以避免您暴露 API keys,並讓您對請求授權有更多控制權。

import 'package:genkit/genkit.dart';

// Flutter app communicates with the proxy server
final ai = Genkit();
final secureModel = ai.defineRemoteModel(
  name: 'secureModel',
  url: 'https://api.yourdomain.com/api/gemini-model',
  headers: (context) => {'Authorization': 'Bearer ${fetchSessionToken()}'}, 
);
final response = await ai.generate(model: secureModel, prompt: 'Write me a poem.');

強大的 AI 開發工具

建構高品質的 AI 應用程式需要徹底的測試和持續的迭代才能獲得可靠的結果。為了幫助實現這一點,Genkit 提供了一個強大的本地開發者 UI。

您可以透過使用 Genkit CLI 執行您的應用程式來啟動開發者 UI,使其與您的程式碼同時運作:

genkit start -- dart run bin/server.dart

以下是我們在開發者 UI 中測試更進階版旅行規劃器 flow 的畫面:

AI 程式撰寫協助

為了獲得使用 Genkit Dart 與 Antigravity、Gemini CLI 或 Claude Code 等 AI 程式撰寫工具的最佳體驗,請安裝 Genkit Dart Agent skill。這將賦予您的 AI 助理準確撰寫和偵錯您的 AI 功能的知識。

將 skill 加入您的專案:

npx skills add genkit-ai/skills

了解更多

此版本為早期預覽版。我們希望與 Dart 和 Flutter 開發者合作改進此框架。您今天就可以在 pub.dev 上找到核心 packages 和 provider plugins。

  • 開始使用:閱讀我們的快速入門指南。

  • 加入社群:加入我們的 Discord 伺服器,提問並與團隊交流。

  • 保持更新:在 X 和 LinkedIn 上關注我們。

  • 提供回饋:在我們的 GitHub repository 上提出 issue,以報告錯誤或請求功能。

我們迫不及待想看到您使用 Genkit Dart 建構出什麼!

作者:Christopher Gill,Google 產品經理