Google Genkit:Firebase 出品的全栈 AI 应用开发框架
一个框架、多种语言、统一接口,零门槛构建生产级 AI 应用。
2024 年,Google Firebase 团队开源了一个 AI 应用开发框架——Genkit。当时正值 LangChain、LlamaIndex 等框架打得火热,Genkit 的出现并没有引起太多关注。但一年多过去了,这个框架悄然成熟,于 2026 年 4 月 15 日发布了 v0.5.0 稳定版,GitHub 上积累了大量生产级用例,Discord 社区活跃度持续攀升。
作为一个写过 LangChain 也踩过坑的开发者,我认真体验了 Genkit,想把它的真实感受写出来。
Genkit 是什么
Genkit 是一个全栈 AI 应用开发框架,由 Google Firebase 团队构建并开源,Apache 2.0 协议。
核心定位:让你用熟悉的代码方式构建 AI 功能,而不是被 Prompt 工程和 API 调用细节淹没。
官方文档开篇就说得很直白:
Genkit simplifies AI integration with an open-source SDK and unified APIs that work across various model providers and programming languages.
支持三种编程语言,成熟度不同:
| 语言 | 成熟度 | 定位 |
|---|---|---|
| JavaScript / TypeScript | 🟢 生产就绪 | 全功能支持 |
| Go | 🟢 生产就绪 | 全功能支持 |
| Python | 🟡 Alpha | 核心功能可用 |
快速上手:几行代码跑起来
Genkit 的设计哲学是极简 API,看看这段代码有多干净:
import { genkit } from 'genkit';
import { googleAI } from '@genkit-ai/google-genai';
const ai = genkit({ plugins: [googleAI()] });
const { text } = await ai.generate({
model: googleAI.model('gemini-2.5-flash'),
prompt: 'Why is Firebase awesome?'
});
这就是调用 Gemini 的全部代码。不需要手动处理 API 封装,不需要管理会话,没有额外的复杂度。
核心能力拆解
1. 多模型统一接口
Genkit 提供了模型抽象层,一个接口兼容多个模型提供商:
// 切换模型只需要换一行配置
const { text } = await ai.generate({
model: googleAI.model('gemini-2.5-flash'),
prompt: '...'
});
// 换成 OpenAI?
import { openAIAI } from '@genkit-ai/openai';
const ai = genkit({ plugins: [openAIAI()] });
支持的模型提供商:
- Google: Gemini 系列(内置,最新支持 Gemini 2.5)
- OpenAI: GPT-4o、GPT-4o-mini
- Anthropic: Claude 3.5
- Ollama: 本地模型(Llama、Mistral 等)
- 以及更多通过插件接入的模型
这个设计解决了 AI 开发中的最大痛点——锁定提供商就意味着失去议价能力和灵活性。用 Genkit,你可以随时切换模型,而不需要重写业务逻辑。
2. Flows:带类型的 AI 工作流
这是 Genkit 最核心的概念。
AI 工作流通常不只是调用一次模型,而是包含:检索上下文、格式化输入、验证输出、处理多步对话等。Flow 就是用来封装这些逻辑的。
import { genkit, z } from 'genkit';
import { googleAI } from '@genkit-ai/google-genai';
const ai = genkit({
plugins: [googleAI()],
});
export const menuSuggestionFlow = ai.defineFlow(
{
name: 'menuSuggestionFlow',
inputSchema: z.object({ theme: z.string() }),
outputSchema: z.object({
dishname: z.string(),
description: z.string(),
}),
},
async ({ theme }) => {
const { output } = await ai.generate({
model: googleAI.model('gemini-2.5-flash'),
prompt: `Invent a menu item for a ${theme} themed restaurant.`,
output: { schema: MenuItemSchema },
});
if (output == null) {
throw new Error("Response doesn't satisfy schema.");
}
return output;
}
);
Flow 的设计有几个关键优势:
类型安全:输入输出用 Zod 定义,编译期校验 + 运行时校验。TypeScript 会在编译阶段就发现类型不匹配。
零抽象:Flow 就是普通的 TypeScript 函数,没有任何魔法。你可以像写普通代码一样调试、测试、打日志。
一键部署:定义好的 Flow 可以直接部署到 Cloud Functions for Firebase 或 Cloud Run,不需要额外的适配代码。
流式输出支持:
export const streamingFlow = ai.defineFlow(
{
name: 'streamingFlow',
inputSchema: z.object({ theme: z.string() }),
streamSchema: z.string(),
outputSchema: z.object({ result: z.string() }),
},
async ({ theme }, { sendChunk }) => {
const { stream, response } = ai.generateStream({
model: googleAI.model('gemini-2.5-flash'),
prompt: `Tell me a story about ${theme}`,
});
for await (const chunk of stream) {
sendChunk(chunk.text); // 实时发送流式内容
}
const { text } = await response;
return { result: text };
}
);
3. Dotprompt:Prompt 即代码
Genkit 引入了一个叫 Dotprompt 的提示词管理格式。它的核心理念是:Prompt 也是代码,应该纳入版本控制,而不是散落在各处的字符串。
Dotprompt 文件以 .prompt 为扩展名,放在项目的 prompts/ 目录下:
---
model: googleai/gemini-2.5-flash
config:
temperature: 0.9
input:
schema:
location: string
style?: string
name?: string
default:
location: a restaurant
---
You are the world's most welcoming AI assistant and are currently working at {{location}}.
Greet a guest{{#if name}} named {{name}}{{/if}}{{#if style}} in the style of {{style}}{{/if}}.
前端是 YAML 元数据(模型选择、参数配置、输入 schema),后端是 Handlebars 模板语法。
这样设计的好处:
- Prompt 迭代更快:可以在 Developer UI 中直接调试,看到实时效果
- 版本可控:所有 Prompt 都在 Git 里,可以 Code Review
- 多模型适配:同一个 Prompt 可以配置不同的模型,测试哪个效果更好
4. RAG:开箱即用的检索增强
RAG(Retrieval-Augmented Generation)是企业级 AI 应用的核心需求。Genkit 提供了完整的 RAG 抽象层:
- Indexer:将文档索引到向量数据库
- Embedder:将文本转换为向量表示
- Retriever:根据查询检索相关文档
import {
devLocalIndexerRef,
devLocalVectorstore,
} from '@genkit-ai/dev-local-vectorstore';
import { googleAI } from '@genkit-ai/google-genai';
import { z, genkit } from 'genkit';
const ai = genkit({
plugins: [
googleAI(),
devLocalVectorstore([
{
indexName: 'menuQA',
embedder: googleAI.embedder('gemini-embedding-001'),
},
]),
],
});
// 索引 PDF 文档
export const menuPdfIndexer = devLocalIndexerRef('menuQA');
支持的向量数据库:
- 本地测试:dev-local-vectorstore
- 云服务:Pinecone、Vertex AI Vector Search、Chroma DB、Astra DB
- 图数据库:Neo4j(支持向量检索)
- SQL:Cloud SQL PostgreSQL (pgvector)、PostgreSQL (pgvector)
Genkit 对 RAG 的理解很务实:它不绑定具体实现,只定义抽象接口,你可以选择任何满足需求的向量数据库。
5. Tool Calling:让 AI 调用你的代码
Tool Calling(函数调用)是让 LLM 和你的应用系统交互的标准方式。Genkit 提供了统一的 Tool 定义接口:
const getWeather = ai.defineTool(
{
name: 'getWeather',
description: 'Gets the current weather in a given location',
inputSchema: z.object({
location: z.string().describe('The location to get the current weather for'),
}),
outputSchema: z.string(),
},
async (input) => {
// 这里调用真实的天气 API
return `The current weather in ${input.location} is 63°F and sunny.`;
}
);
使用 Tool 的场景:
- 实时信息查询:股票价格、天气、新闻
- 业务系统集成:查订单、查库存、用户信息
- 确定性操作:绕过 LLM 的"幻觉",直接返回准确数据
- 执行动作:订餐、控制智能家居、发送通知
Genkit 的 Tool Calling 会自动处理循环调用——LLM 决定何时调用 Tool,应用执行后返回结果,整个过程对开发者是透明的。
6. 开发者工具链
Genkit 提供了一套本地开发工具,能显著提升调试效率:
# 安装 CLI
npm install -g genkit-cli
# 启动开发 UI
genkit start -- tsx --watch src/index.ts
启动后会自动打开本地 Web UI,包含三个核心功能:
Run:在 Playground 中测试 Flow、Prompt、Tool,实时看到输出结果。
Inspect:查看历史执行的完整追踪记录,包括每个步骤的输入输出、时间消耗、Token 用量。对于调试复杂的多步 Flow 非常有用。
Evaluate:对 Flow 运行评估测试,对比不同模型或 Prompt 版本的效果差异。
这套工具的体验和 LangSmith 类似,但原生集成在框架里,不需要额外的注册和配置。
7. 生产级可观测性
部署到生产环境后,Genkit 提供开箱即用的监控能力:
- 模型性能追踪:延迟、错误率、Token 用量
- 请求量监控:按 Flow、模型、时间段聚合
- 自定义指标:集成到 Firebase Console 或其他监控平台
8. 跨端 SDK
Genkit 不只是后端框架,还提供了客户端 SDK:
- Firebase Client SDK:与 Firebase 深度集成,适合移动和 Web 应用
- 支持 Next.js、React:服务端组件和客户端组件都有对应支持
- 移动端:iOS、Android 客户端库正在完善中
技术架构
Genkit 的整体架构分为几层:
┌─────────────────────────────────────┐
│ Developer Tools │
│ CLI + Developer UI │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ Core SDK (Flows, Tools, RAG, etc.) │
│ TypeScript / Go / Python │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ Model Plugins │
│ Google Gemini / OpenAI / Ollama ... │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ Deploy Targets │
│ Firebase / Cloud Run / Any Node.js │
└─────────────────────────────────────┘
仓库结构也很清晰:
genkit-ai/genkit
├── js/ # TypeScript SDK
├── go/ # Go SDK
├── docs/ # 文档
├── docs-go/ # Go 文档
├── genkit-tools/# CLI 工具
├── samples/ # 示例代码
└── plugins/ # 插件生态
与竞品对比
| 特性 | Genkit | LangChain | LlamaIndex |
|---|---|---|---|
| 多语言 | JS/TS + Go + Python | Python + JS | Python 为主 |
| Prompt 管理 | Dotprompt(原生) | 字符串拼接 | 模板引擎 |
| RAG | 原生支持多后端 | LangChain DB | LlamaIndex 核心 |
| 开发者工具 | 内置 UI + CLI | LangSmith(需注册) | 内置调试器 |
| Firebase 集成 | 深度集成 | 第三方 | 第三方 |
| 生产监控 | 原生 | LangSmith | 第三方 |
| 模型抽象 | 统一接口 | 统一接口 | 向量化为主 |
| 学习曲线 | 较低 | 中等 | 中等 |
LangChain 的优势在于生态更成熟、文档更丰富、社区更大。Genkit 的优势在于:Google 原厂维护、与 Firebase 生态无缝集成、开发者工具开箱即用。
对于已经在用 Firebase 或 Google Cloud 的团队,Genkit 是更自然的选择。
适用场景
Genkit 非常适合:
- 需要快速原型到生产的 AI 功能
- 使用 Firebase/Google Cloud 的团队
- 对类型安全有要求的工程团队
- 需要 RAG + Tool Calling 的复杂 AI 应用
- 想要统一管理多个 AI 模型的项目
Genkit 不太适合:
- 只需要简单调用 LLM 的场景(直接用 SDK 更轻量)
- 极度依赖 Python 生态的场景(Python 版还在 Alpha)
- 追求最大社区和文档的场景(LangChain 生态更成熟)
快速开始
安装:
npm install genkit @genkit-ai/google-genai
配置 API Key:
export GEMINI_API_KEY=your_api_key
运行:
npx genkit start
浏览器会自动打开 http://localhost:4000,进入 Developer UI。
总结
Genkit v0.5.0 的发布标志着这个框架进入了成熟期。它的设计哲学很务实:不追求最全的功能覆盖,而是把核心场景做到极致好用。
Flows 的类型安全、Dotprompt 的提示词工程化、开发者工具的原生集成、Firebase 的深度绑定——这些组合在一起,形成了一个端到端覆盖 AI 应用开发全流程的框架。
如果你在寻找一个结构清晰、工具完善、生产可用的 AI 开发框架,Genkit 值得认真考虑。尤其是如果你的技术栈和 Firebase/Google Cloud 有交集,它的集成体验会让你满意。
项目地址: https://github.com/genkit-ai/genkit
官方文档: https://genkit.dev
相关链接:
- Genkit Examples — 交互式示例
- Firebase 官方博客 — Firebase 团队博客
- dotprompt 仓库 — Dotprompt 规范实现