Google 发布 Genkit Dart 1.0,用 Dart 和 Flutter 构建智能体应用
Genkit Dart 1.0: Build production-ready agentic apps with Dart and Flutter
Google 发布 Genkit Dart 1.0,这是其面向 Dart 和 Flutter 的开源 AI 应用框架首个稳定版本,可通过 dart pub add genkit 安装。
宣布 Genkit Dart 稳定版 1.0 发布,这是一个开源框架,用于使用 Dart 和 Flutter 构建 AI 驱动的功能和智能体工作流。
2026年10月8日 · 6 分钟阅读

Dart 和 Flutter 让你能够从单一代码库为移动端、Web 和桌面端构建高质量应用。借助 Genkit Dart,你可以将同样的生产力带到全栈、智能体应用中。
今天,我们宣布 Genkit Dart 1.0,这是 Google 开源框架的首个稳定、可用于生产环境的版本,用于在 Dart 中构建 AI 驱动的功能和智能体。自今年早些时候我们的 预览版发布 以来,Dart 和 Flutter 社区的反馈帮助我们完善了 API,并扩展了用于生产工作负载的工具包。
要开始使用,请将 genkit 添加到你的项目中:
shell
dart pub add genkit
你还可以安装 agent skill,让 Antigravity、Claude Code 和 Codex 等 AI 编码助手获得关于 Genkit Dart API 和最佳实践的最新知识:
shell
npx skills add genkit-ai/skills
为什么选择 Genkit Dart
Genkit 提供跨模型提供商的统一 API、服务器与客户端之间的端到端类型安全,以及用于测试和调试 AI 工作流的本地工具。
用一个 API 使用任意模型
Genkit 通过单一接口支持 Google Gemini、Anthropic Claude、OpenAI 以及兼容 OpenAI 的模型。你将模型提供商注册为插件,即可在模型之间切换,而无需重写应用逻辑:
dart
final ai = Genkit(plugins: [googleAI(), anthropic()]);
final prompt = 'Suggest a weekend getaway from San Francisco.';
final fromGemini = await ai.generate(
model: googleAI.gemini('gemini-flash-latest'),
prompt: prompt,
);
final fromClaude = await ai.generate(
model: anthropic.model('claude-sonnet-5-5'),
prompt: prompt,
);
使用 flows 实现端到端类型安全
Genkit 让你可以将 AI 逻辑封装到 flows 中:强类型、可观测的函数,易于测试并可作为 HTTP 端点部署。使用
schemantic 包,你可以在 Dart 中一次性定义数据 schema,从模型生成结构化输出,并在后端和 Flutter 应用之间共享这些完全相同的类型:
dart
// shared/lib/models.dart (used by both server and app)
@Schema()
abstract class $TripRequest {
String get destination;
int get days;
}
// ...plus an Itinerary schema for the result.
// server/bin/server.dart
final planTrip = ai.defineFlow(
name: 'planTrip',
inputSchema: TripRequest.$schema,
outputSchema: Itinerary.$schema,
fn: (request, _) async {
final response = await ai.generate(
model: googleAI.gemini('gemini-flash-latest'),
prompt: 'Plan a ${request.days}-day trip to ${request.destination}.',
outputSchema: Itinerary.$schema,
);
return response.output!;
},
);
await (GenkitRouter()..addAction(planTrip)).serve(port: 8080); // POST /planTrip
// app/lib/main.dart
final planTrip = defineRemoteAction(
url: 'https://api.example.com/planTrip', // Your Genkit endpoint
inputSchema: TripRequest.$schema,
outputSchema: Itinerary.$schema,
);
final itinerary = await planTrip(
input: TripRequest(destination: 'Kyoto', days: 5),
);
在任何 Dart 运行的地方运行
由于你的 AI 逻辑是用标准 Dart 编写的,你可以通过热重载快速迭代,并灵活地在适合你架构的任何地方运行代码:
- 直接在 Flutter 中:直接从你的应用调用模型,用于快速原型设计或自带密钥体验(切勿在已发布的客户端应用中嵌入私有 API 密钥)。
-
在 Dart 服务器上:运行复杂的 flows,并将敏感提示保留在后端,然后如上所示使用
defineRemoteAction从 Flutter 调用它们。 - 在 Flutter 中使用远程模型:将 AI 逻辑保留在 Flutter 应用中,同时通过轻量级 Genkit 后端路由模型请求,以保护你的 API 密钥并强制执行授权:
dart
// server/bin/server.dart
final genkit = GenkitRouter()
..addAction(
googleAI().model('gemini-flash-latest'),
path: '/gemini',
// Runs before the model; throw a GenkitException to reject the request.
contextProvider: (request) async =>
{'user': await verifyUser(request.headers['authorization'])},
);
await genkit.serve(port: 8080);
// app/lib/main.dart
final ai = Genkit();
final gemini = ai.defineRemoteModel(
name: 'gemini',
url: 'https://api.example.com/gemini',
headers: (context) async => {'Authorization': 'Bearer ${await getIdToken()}'},
);
final response = await ai.generate(
model: gemini,
prompt: 'Suggest a packing list for Kyoto in April.',
);
使用 Developer UI 进行测试和调试
Genkit 包含一个本地开发者 UI,用于测试流程、试验 提示词,并逐步检查执行轨迹。使用 Genkit CLI 将其与你的 Dart 进程一起启动:
shell
genkit start -- dart run bin/server.dart
为智能体工作流而构建
自预览版发布以来,我们为 Genkit Dart 扩展了专为 多步骤智能体工作流设计的能力,包括人在回路中断、 生成中间件、提示词管理和生产遥测。
通过人在回路中断为模型提供工具
工具让模型可以调用你的 Dart 函数来获取数据或触发操作,
例如搜索航班或预订酒店。当某个操作需要用户
确认时,工具可以通过返回
.interrupt(...) 而不是 .response(...) 来暂停生成循环:
dart
final bookHotel = ai.defineTool(
name: 'bookHotel',
description: 'Books a hotel room for the user.',
inputSchema: HotelBooking.$schema,
fn: (input, ctx) async {
// Ask the user to confirm before charging their card.
if (ctx.resumed == null) {
return .interrupt({'hotel': input.hotelName, 'total': input.totalPrice});
}
final confirmation = await hotels.book(input);
return .response(confirmation.id);
},
);
将审批检查放在工具内部可确保模型无法
绕过它。当 generate 带着 FinishReason.interrupted 返回时,你的
Flutter 应用可以提示用户确认,并从
暂停处恢复执行。
用中间件扩展生成
中间件直接挂接到 generate 循环中,以拦截模型调用、
注入工具,或修改请求和响应。使用 genkit 和
genkit_middleware,你可以
将预打包的能力(如自动重试、动态 SKILL.md
加载和工具审批规则)附加到任何 generate 调用:
dart
final ai = Genkit(plugins: [googleAI(), SkillsPlugin(), ToolApprovalPlugin()]);
final response = await ai.generate(
model: googleAI.gemini('gemini-flash-latest'),
prompt: 'Move my Kyoto hotel check-in to Friday.',
tools: [findBookings, updateBooking],
use: [
retry(maxRetries: 3),
skills(skillPaths: ['./skills']),
toolApproval(approved: ['findBookings', 'use_skill']),
],
);
你还可以使用 defineGenerateMiddleware 编写自定义中间件,以实现
日志记录、缓存或模型回退等横切逻辑。
用 Dotprompt 管理提示词
Dotprompt 让你可以在 .prompt
文件中一起管理提示词模板、模型配置和输入/输出模式。Genkit 会自动从你的 prompts/ 目录加载提示词,
以便你可以在 Dart 中将它们作为可调用函数调用:
dotprompt
---
model: googleai/gemini-flash-latest
input:
schema:
destination: string
---
Write a friendly, two-sentence introduction to {{destination}} for a first-time visitor.
dart
final introPrompt = await ai.prompt('destinationIntro');
final response = await introPrompt({'destination': 'Kyoto'});
在生产环境中监控你的应用
当你准备好部署时,
genkit_otel 包会使用 OpenTelemetry GenAI 语义
约定导出轨迹、
token 使用量和延迟指标,并直接与你现有的可观测性后端集成:
dart
import 'package:dartastic_opentelemetry/dartastic_opentelemetry.dart';
import 'package:genkit/telemetry.dart';
import 'package:genkit_otel/genkit_otel.dart';
await OTel.initialize();
configureInstrumentation(GenAiInstrumentation());
下一步:有状态智能体和生成式 UI
除了稳定的 1.0 核心之外,我们正在 package:genkit/experimental.dart 导入下开发更高级的智能体 API,
以便你可以提前试用它们,
并帮助塑造其设计。
有状态智能体将模型、工具、系统指令和状态组合成
单次 defineAgent 调用。对话通过会话存储跨轮次和应用
重启持久保留,你可以使用 remoteAgent 将任务
委托给子智能体,或通过 HTTP 暴露智能体以连接你的 Flutter 应用:
dart
import 'package:genkit/experimental.dart';
final travelAgent = ai.defineAgent(
name: 'travelAgent',
model: googleAI.gemini('gemini-flash-latest'),
system: 'You help users plan and book trips.',
tools: [searchFlights, bookHotel],
store: FirestoreSessionStore(collection: 'sessions'),
);
final chat = travelAgent.chat(sessionId: 'user-123');
final response = await chat.send(text: 'Find me a weekend in Lisbon.');
使用 A2UI 的生成式 UI让智能体能够流式传输交互式 UI 界面,
而非纯文本。借助 genkit_a2ui,
智能体可以发出日期选择器、表单和确认卡片等组件,
你的 Flutter 应用会将其作为原生组件逐步渲染。查看
A2UI 指南了解更多。
开始使用
Genkit Dart 1.0 现已在 pub.dev 上发布。感谢 Dart 和 Flutter 社区中的每一位, 你们使用预览版进行构建、报告问题并贡献拉取请求, 帮助 Genkit Dart 达到 1.0。
- 开始使用:请遵循 快速入门指南。
- 探索示例:浏览 GitHub 上的示例应用。
- 加入社区:在 Discord 上与团队交流。
- 保持关注:在 X 和 LinkedIn 上关注 Genkit。
- 提供反馈:在 GitHub 仓库上提交 issue。
我们迫不及待想看到你用 Genkit Dart 1.0 构建的作品!
更多来自 Flutter
来源:Hacker News · flutter.dev