编程 Google Genkit:Firebase 出品的全栈 AI 应用开发框架

2026-04-18 09:17:44 +0800 CST views 10

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/     # 插件生态

与竞品对比

特性GenkitLangChainLlamaIndex
多语言JS/TS + Go + PythonPython + JSPython 为主
Prompt 管理Dotprompt(原生)字符串拼接模板引擎
RAG原生支持多后端LangChain DBLlamaIndex 核心
开发者工具内置 UI + CLILangSmith(需注册)内置调试器
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

相关链接:

复制全文 生成海报 AI Google Genkit Firebase TypeScript 开源框架

推荐文章

PHP设计模式:单例模式
2024-11-18 18:31:43 +0800 CST
Vue 中如何处理跨组件通信?
2024-11-17 15:59:54 +0800 CST
手机导航效果
2024-11-19 07:53:16 +0800 CST
如何在Rust中使用UUID?
2024-11-19 06:10:59 +0800 CST
API 管理系统售卖系统
2024-11-19 08:54:18 +0800 CST
html流光登陆页面
2024-11-18 15:36:18 +0800 CST
Rust 高性能 XML 读写库
2024-11-19 07:50:32 +0800 CST
git使用笔记
2024-11-18 18:17:44 +0800 CST
JavaScript 的模板字符串
2024-11-18 22:44:09 +0800 CST
JavaScript中设置器和获取器
2024-11-17 19:54:27 +0800 CST
php strpos查找字符串性能对比
2024-11-19 08:15:16 +0800 CST
使用Ollama部署本地大模型
2024-11-19 10:00:55 +0800 CST
总结出30个代码前端代码规范
2024-11-19 07:59:43 +0800 CST
程序员茄子在线接单