【文章翻譯】Announcing Genkit Dart: Build full-stack AI apps with Dart and Flutter

【文章內容使用 Gemini 2.5 Flash 自動翻譯產生】

隆重推出 Genkit Dart 預覽版,一個開源 AI 框架,用於為任何平台構建全端、AI 驅動的應用程式。

Dart 和 Flutter 社群一直都在突破螢幕所能實現的界限。您已經證明,構建高品質、多平台應用程式不需要犧牲開發人員體驗。現在,我們將相同的「一次編寫,隨處運行」理念帶到了 AI 驅動的功能和應用程式中。

我們非常興奮地宣布推出 Genkit Dart 的預覽版,這是一個為 Dart 和 Flutter 開發人員提供的開源 AI 框架。Genkit 已經可用於 TypeScript、Go 和 Python,現在它使您能夠為任何平台構建高品質、全端、AI 驅動的應用程式

隆重推出 Genkit Dart(預覽版)

為什麼選擇 Genkit Dart?

Genkit Dart 為您提供以下功能:

  • 模型無關 API: 開箱即用支援 Google、Anthropic、OpenAI 和與 OpenAI API 相容的模型。您永遠不會被鎖定在單一提供商。
  • 類型安全: 使用 Dart 強大的類型系統與 schemantic 套件,生成強類型資料並創建類型安全的 AI 流程。
  • 程式碼隨處運行: 編寫一次 AI 邏輯,並將其作為後端服務或直接在 Flutter 應用程式中運行。
  • 開發人員 UI: 包含一個 localhost 網頁 UI,您可以在其中測試提示、查看追蹤並調試您的流程。
  • 完整的 AI 工具包: 提供構建高品質 AI 功能所需的一切,包括結構化輸出、工具、多步驟流程、可觀察性等等。

模型無關 API

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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 流程

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

以下是一個使用強類型輸入和輸出模式以及工具呼叫的旅遊規劃器流程範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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 套件輕鬆地將您的流程公開為 API,並將其部署到任何支援 Dart 的平台。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 中進行原型開發

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

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

2. 從 Flutter 呼叫後端流程

當您的提示敏感或您的 AI 邏輯複雜時,您可以將整個流程移動到您的後端。然後,您的 Flutter 應用程式可以透過將其定義為「遠端動作」來呼叫此流程。由於後端和前端都是用 Dart 編寫的,因此它們可以共用相同的模式以實現端到端類型安全。

以下是一個範例,展示如何從您的 Flutter 應用程式呼叫我們之前定義的旅遊規劃器後端流程:

1
2
3
4
5
6
7
8
9
10
11
12
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),
);

3. 在 Flutter 中使用遠端模型

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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 應用程式中,使用遠端模型而不是直接模型外掛程式,傳遞伺服器所需的任何標頭。這可以避免公開您的 API 金鑰,並讓您對請求授權有更多控制權。

1
2
3
4
5
6
7
8
9
10
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:

1
genkit start -- dart run bin/server.dart

以下是開發人員 UI 中測試更進階版本的旅遊規劃器流程:

顯示正在運行流程的 Genkit 開發人員 UI

AI 編程輔助

為了在使用 Genkit Dart 搭配 Antigravity、Gemini CLI 或 Claude Code 等 AI 編碼工具時獲得最佳體驗,請安裝 Genkit Dart agent skill。這將使您的 AI 助理具備準確編寫和偵錯 AI 功能的知識。

將技能新增至您的專案:

1
npx skills add genkit-ai/skills

了解更多

此版本為早期預覽版。我們希望與 Dart 和 Flutter 開發人員合作,共同改進此框架。您今天可以在 pub.dev 上找到核心套件和提供商外掛程式。

我們迫不及待地想看到您使用 Genkit Dart 構建的成果!


隆重推出 Genkit Dart:使用 Dart 和 Flutter 構建全端 AI 應用程式 最初發佈於 Dart 上的 Medium,人們正在透過突出顯示和回應這個故事來繼續討論。