Google 如何尝试用 Genkit 为 AI 应用开发带来秩序
Firebase 团队的开发者开源了 Genkit——一个用于构建 AI 功能的框架。让我们来看看它是否能在单个项目中整合 Gemini、OpenAI 和 Ollama,而不会产生意大利面条式代码。
为什么我们需要另一个 AI 框架
如果你曾在后端添加过 LLM 调用,很可能经历过这样的过程。首先,你写一个简单的 fetch 调用来访问 OpenAI API。然后你需要从模型的响应中解析严格有效的 JSON,于是你用正则表达式来处理。接下来,业务方要求切换到 Gemini 或连接本地 Ollama 进行测试,但每个平台都有不同的 SDK。结果就是项目充满了自定义包装器、提示模板系统和分散的日志记录。
Python 社区通过 LangChain 或 LlamaIndex 来解决这个问题。但如果你的主要技术栈是 TypeScript 或 Go,直到最近才出现替代方案。Google Firebase 团队的工程师在内部遇到了同样的问题,并构建了 Genkit。现在这个项目已经开源了。

框架能做什么
Genkit 的概念很简单:提供统一的接口来调用不同的神经网络提供商,并处理常规工作。你不需要学习每个服务的特定 SDK,而是使用通用 API。
目前支持多种语言:
- JavaScript 和 TypeScript 已可投入生产
- Go 已可投入生产
- Python 处于 Beta 阶段
- Dart 处于预览阶段
开箱即用,支持的提供商包括 Google Gemini、OpenAI、Anthropic 和 Ollama。在模型间切换通常只需修改一行配置。
让我们看一个用 TypeScript 初始化和调用模型的最小示例:
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-flash-latest'),
prompt: 'What is the meaning of life?'
});
代码看起来很简洁,不会将后端与底层 HTTP 请求绑定。
类型化输出和工具调用
AI 服务开发中最常见的任务之一是让模型返回数据结构而不仅仅是文本。Genkit 在 TypeScript 中使用 Zod 模式,在其他语言中使用类似的机制。你描述响应模式,将其传递给模型,然后获得有效的对象返回。
第二个有用的功能是调用外部函数,即工具调用。如果模型需要检查当前天气或查询数据库,你可以注册一个工具并描述其输入参数。Genkit 自动将函数描述传递给 LLM,接收调用决策,并执行必要的代码。
框架还包括:
- 通过 Dotprompt 格式进行提示模板化
- 流式响应
- 用于知识库工作的向量搜索和 RAG
- 通过 Flows 机制进行调用链和代理
通过开发者 UI 进行本地调试
在开发复杂的 AI 功能时,最困难的部分是理解调用链具体在哪里中断了。模型返回了错误的格式吗?工具崩溃并报错了吗?提示词太长了吗?
Genkit 开发者创建了一个本地 CLI 工具和 GUI 用于调试。运行 genkit start 命令后,仪表板会在浏览器中打开。

这个 UI 允许你执行几项操作:
- 在交互式沙盒中手动运行提示和链
- 在相同提示下比较不同模型的结果
- 查看详细的追踪记录,包括逐步分解、时间戳以及每个阶段的精确输入和输出
拥有本地 UI 能显著加快迭代速度。不需要每次都部署到测试环境或编写日志脚手架。
部署位置和监控方式
尽管 Genkit 是在 Google 内部创建的,并与 Firebase Cloud Functions 和 Google Cloud Run 集成,但它不会将你锁定在 Google Cloud 基础设施上。你可以将应用部署在任何 Docker 容器中的 Node.js 或 Go 上,也可以部署在 Vercel、AWS 或你自己的服务器上。
在生产环境中,框架可以将指标和追踪发送到监控系统。你可以直接在 Firebase 控制台或通过基于 OpenTelemetry 的第三方解决方案中查看请求数量、延迟、错误和令牌成本。
谁应该尝试
Genkit 最终成为一个平衡的工具。与一些试图做所有事情的开源库不同,它展现了谨慎的工程方法。
如果符合以下情况,这个项目会很有用:
- 你用 TypeScript 或 Go 编写 AI 服务,不想切换到 Python
- 你需要对 OpenAI、Gemini 和本地模型进行统一的抽象层
- 你厌倦了在没有清晰追踪的情况下调试复杂的 AI 代理
Python 支持仍在 Beta 阶段,Dart 仍在开发中。但 Node.js 版本已经相当成熟,可以用于生产服务。你可以在官方 genkit.dev 网站或 genkit-ai/genkit GitHub 仓库中尝试示例并阅读文档。
相关项目