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 建構的幾種方式:
- 完全在 Flutter 中進行原型開發
您可以將所有 Genkit 邏輯,包括模型呼叫,直接撰寫在您的 Flutter 應用程式中。這非常適合原型或使用者提供自己的 API keys 且 prompts 不屬於私密的應用程式。
警告:您絕不應發布將您的 API key 嵌入原始程式碼中的應用程式,因為它可能被他人提取和使用。
- 從 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),
);
- 在 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 產品經理
