拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Genkit Dart Google GenAI 插件实战:用 Gemini API 完成文本生成、Embedding、图像生成与 TTS

Genkit Dart Google GenAI 插件实战用 Gemini API 完成文本生成、Embedding、图像生成与 TTS【免费下载链接】skillsAgent Skills for Google products and technologies项目地址: https://gitcode.com/GitHub_Trending/skills29/skills导读本文以 genkit_google_genai.md 为骨架系统讲解 Genkit Dart 中genkit_google_genai插件的完整用法从初始化googleAI()、通过googleAI.gemini()引用 Gemini 模型做文本生成到text-embedding-004向量化、gemini-2.5-flash-image图像生成以及gemini-2.5-flash-preview-tts语音合成含多说话人配置。读完本文你将能在 Dart/Flutter 应用中用统一 API 驱动 Google AI Gemini 的多模态能力并结合 Genkit 的 Flow、CLI 与 Trace 机制完成可观测、可验证的 AI 应用开发。genkit_google_genai是 Genkit Dart 生态中最核心的模型插件它为官方 Google AI Gemini API 提供了一致的接入层是 Genkit Dart Skill 中大多数示例文本生成、Agent、MCP、Dotprompt默认使用的模型来源。插件定位Genkit 与 Gemini API 之间的桥梁Genkit Dart 本身是一个不绑定具体模型供应商的 AI SDK所有生成式 AI 能力都通过插件 模型引用的方式注入。genkit_google_genai插件正是这一机制的 Google 实现它把官方 Google AI Gemini API 封装为 Genkit 的模型Model、Embedder文本向量化等标准动作让上层代码无需关心底层 HTTP 调用细节。从 genkit.md 可以看出插件的角色是提供ModelRef模型引用例如model: googleAI.gemini(gemini-flash-latest), // Needs a model reference from a plugin这种设计使得同一个ai.generate调用只需更换模型引用即可在googleAI、anthropic、openAI分别对应 genkit_anthropic.md、genkit_openai.md之间切换业务逻辑零改动。同时仓库中 genkit_firebase_ai.md 展示了面向 Vertex AI 路径的firebaseAI()插件二者的模型引用写法完全同构。说明仓库内 Anthropic/OpenAI 插件在初始化时显式接收 API Key例如anthropic(apiKey: Platform.environment[ANTHROPIC_API_KEY]!)、openAI(apiKey: Platform.environment[OPENAI_API_KEY])。Google AI 插件同样面向需要凭据的官方 Gemini API实际运行时的鉴权配置请以所安装的插件包版本与当前环境的配置说明为准。快速开始初始化与文本生成genkit_google_genai的使用路径非常短先创建带插件注册的Genkit实例再通过ai.generate发起生成。import package:genkit/genkit.dart; import package:genkit_google_genai/genkit_google_genai.dart; void main() async { // Initialize Genkit with the Google AI plugin final ai Genkit(plugins: [googleAI()]); // Generate text final response await ai.generate( model: googleAI.gemini(gemini-flash-latest), prompt: Tell me a joke about a developer., ); print(response.text); }要点拆解Genkit(plugins: [googleAI()])把插件注册进 Genkit 注册表之后googleAI.gemini(...)返回的模型引用才可解析。这也是 agents.md 中在共享Genkit实例上注册 Agent 所需插件的标准做法final ModelRef defaultModel googleAI.gemini(gemini-flash-latest); final ModelRef liteModel googleAI.gemini(gemini-flash-lite-latest); final Genkit ai Genkit( plugins: [googleAI(), RetryPlugin()], model: defaultModel, );可见googleAI.gemini(...)产生的ModelRef既可以显式传给每次generate也可以作为实例级默认模型甚至拆成默认模型 轻量模型两档供不同任务复用。response.textGenerateResponseHelper提供的便捷访问器直接返回拼接后的文本。更丰富的访问方式response.media、response.toolRequests、response.output等在 genkit.md 的Data Models一节中有完整示例。进阶流式输出与结构化输出同一模型引用还可以直接配合 Genkit 的流式与结构化能力无需任何插件层改动// 流式 final stream ai.generateStream( model: googleAI.gemini(gemini-flash-latest), prompt: Write a short story about a robot learning to paint., ); await for (final chunk in stream) { print(chunk.text); } // 结构化输出强制模型返回符合 schema 的 JSON final response await ai.generate( model: googleAI.gemini(gemini-flash-latest), prompt: Generate a person named John Doe, age 30, outputSchema: Person.$schema, ); final person response.output; // 强类型对象结构化输出依赖 schemantic 库定义Schema()抽象类并运行dart run build_runner build生成.g.dart详见 schemantic.md注意需要同时添加schemantic_builder到 dev 依赖否则会成功但 0 输出。这也正是 SKILL.md 强调 schemantic 是使用 Genkit Dart 的关键技能的原因。Embeddings文本向量化插件内置对 Gemini Embedding 模型的支持通过googleAI.textEmbedding(...)返回 embedder 引用再交给ai.embedMany执行final embeddings await ai.embedMany( embedder: googleAI.textEmbedding(text-embedding-004), documents: [ DocumentData(content: [TextPart(text: Hello world)]), ], );文档示例中的text-embedding-004是官方文本向量模型DocumentData与TextPart是 Genkit 标准的文档/内容片段数据模型同一套类型也用于多模态消息构造见 genkit.md 的 Data Models 部分。生成的向量通过embeddings.first.embedding获取可用于语义检索、相似度计算、RAG 等场景。图像生成以 Nano Banana 为例插件同样支持图像生成模型例如gemini-2.5-flash-image。由于图像属于多模态输出实践中通常把它包进一个 Flow返回类型定义为Media.$schema方便复用与观测// Define an image generation flow ai.defineFlow( name: imageGenerator, inputSchema: .string(defaultValue: A banana riding a bike), outputSchema: Media.$schema, fn: (input, context) async { final response await ai.generate( model: googleAI.gemini(gemini-2.5-flash-image), prompt: input, ); if (response.media null) { throw Exception(No media generated); } return response.media!; }, );关于返回结果文档给出了关键提示The media (url field) contain base64 encoded data uri. You can decode it and save it as a file.也就是说Media对象的url字段承载的是 base64 编码的 data URI如data:image/png;base64,...需要解码后才能落盘为真实图片文件。这也与 genkit.md 中MediaPart(media: Media(url: ..., contentType: image/png))的数据结构一致——contentType与url共同描述了一段媒体内容。配合 genkit.md 的 Streaming Flows 模式图像生成同样可以接context.sendChunk(...)输出进度增强体验。文本转语音TTS插件支持使用 TTS 模型从文本生成音频。示例使用gemini-2.5-flash-preview-tts生成结果同样封装在Media对象中其 data URI 包含 base64 编码的 PCM 音频// Define a TTS flow ai.defineFlow( name: textToSpeech, inputSchema: .string(defaultValue: Genkit is an amazing AI framework!), outputSchema: Media.$schema, fn: (prompt, _) async { final response await ai.generate( model: googleAI.gemini(gemini-2.5-flash-preview-tts), prompt: prompt, config: GeminiTtsOptions( responseModalities: [AUDIO], speechConfig: SpeechConfig( voiceConfig: VoiceConfig( prebuiltVoiceConfig: PrebuiltVoiceConfig(voiceName: Puck), ), ), ), ); if (response.media ! null) { return response.media!; } throw Exception(No audio generated); }, );这段代码展示了插件为 Gemini 提供的 TTS 专属配置项结构分层清晰GeminiTtsOptionsTTS 请求的顶层配置。responseModalities: [AUDIO]显式声明只返回音频模态不返回文本是 TTS 调用的关键开关。SpeechConfig语音合成配置容器内嵌voiceConfig。VoiceConfig语音选择层示例使用prebuiltVoiceConfig预置音色。PrebuiltVoiceConfig(voiceName: Puck)指定具体的预置音色名示例中的Puck。可用的音色名称以 Google AI API 提供的预置音色清单为准。多说话人 TTSMulti-Speaker文档明确指出 Google AI 还支持多说话人 TTS将MultiSpeakerVoiceConfig配置进SpeechConfig即可替代单说话人的PrebuiltVoiceConfig从而在一段音频中模拟多个不同角色的声音例如播客、对话式旁白、多角色有声内容。VoiceConfig内部正是通过选择预置音色或多说话人配置来切换单/多角色模式。实战串联把 Gemini 插件用进完整 Genkit 工作流genkit_google_genai的价值远不止单次调用它与 Genkit 的 Flow、CLI、Dotprompt、Agent、MCP 等机制深度协同Flow 封装将上文图像生成、TTS 等能力包进ai.defineFlow后即可用 Genkit CLI 直接验证。由于genkit flow:run只运行 Flow 而非 Agent见 agents.md快速自测时可这样执行genkit flow:run imageGenerator A banana riding a bike -- dart run main.dartgenkit start -- dart run main.dart会启动 Developer UI默认 http://localhost:4000并捕获 Tracegenkit trace:list/genkit trace:get traceId可查看模型输入输出与延迟。SKILL.md 强调直接dart run不会捕获 Trace务必通过 CLI 运行以便调试。Dotprompt 中引用 Gemini.prompt文件的 frontmatter 里可直接写model: googleai/gemini-flash-latest把模型选择从代码中剥离见 dotprompt.md--- model: googleai/gemini-flash-latest input: schema: name: string style: string --- {{role system}} You are a {{style}} greeter. {{role user}} Greet {{name}}.Agent 默认模型在Genkit(plugins: [googleAI()], model: defaultModel)上注册插件后ai.defineAgent无需再指定模型即可使用 Gemini如需低成本任务可传入model: liteModel覆盖agents.md。MCP 场景下的模型接入genkit_mcp.md 中的 Host/Client 示例均用googleAI.gemini(gemini-flash-latest)作为消费 MCP 工具的模型说明该插件天然适合Gemini 模型 外部工具协议的组合。小结genkit_google_genai插件将 Google AI Gemini API 的文本生成、Embedding、图像生成与 TTS 能力统一收敛进 Genkit 的模型/embedder 抽象中。开发者只需注册googleAI()插件、持有googleAI.gemini(...)/googleAI.textEmbedding(...)引用即可在 Flow、Agent、Dotprompt、MCP 等任何 Genkit 场景中复用并借助 Genkit CLI 的 Trace 机制完成可观测验证。上手路径建议从本文的文本生成示例起步依次尝试流式与结构化输出再通过 Flow 封装图像生成与 TTS最后把模型引用接入 Agent 或 Dotprompt即可构建完整的 Dart 多模态 AI 应用。【免费下载链接】skillsAgent Skills for Google products and technologies项目地址: https://gitcode.com/GitHub_Trending/skills29/skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门