202509
ai-systems

Integrate Multiple LLMs in Genkit Flows for Composable AI Apps

Explore integrating multiple LLMs using Genkit's flow-based orchestration, with JS/Go/Python support, tracing for debugging, and practical model switching strategies.

在构建可组合的 AI 应用时,多模型 LLM(大型语言模型)的集成是关键挑战之一。Genkit 作为 Firebase 推出的开源框架,提供了一种高效的方式,通过 Flows 机制实现多模型编排,支持 JavaScript/TypeScript、Go 和 Python(Alpha 版)等多种语言绑定。这种方法不仅简化了模型切换,还内置了追踪功能,便于生产环境调试。本文将聚焦于如何在 Genkit Flows 中集成多个 LLM,结合实际参数和落地清单,帮助开发者快速上手。

Genkit Flows 的多模型集成基础

Genkit 的核心优势在于其统一的 API 接口,能够无缝接入 Google、OpenAI、Anthropic 和 Ollama 等提供商的数百种模型。这使得开发者无需为每个模型编写自定义适配器,只需通过插件配置即可实现多模型协作。在 Flows 中,开发者可以将多个生成请求串联成工作流,例如先用一个模型处理用户输入,再用另一个模型生成结构化输出。这种流式组合避免了传统 LLM 编排框架(如 Haystack)的复杂性,特别适合全栈 AI 应用的开发。

例如,在一个推荐系统场景中,可以设计一个 Flow 先使用 OpenAI 的 GPT-4o 模型提取用户偏好,然后切换到 Google 的 Gemini 模型生成个性化建议。这种多模型策略提升了输出的准确性和多样性。根据 Genkit 文档,Flows 支持输入/输出 schema 定义,使用 Zod(JS/TS)或 Pydantic(Python)确保类型安全,避免运行时错误。

实现多模型 Flows 的步骤与代码示例

要集成多个 LLM,首先安装 Genkit SDK 和相关插件。以 JavaScript/TypeScript 为例,初始化 Genkit 时加载多个提供商:

import { genkit } from 'genkit';
import { googleAI } from '@genkit-ai/google-genai';
import { openAI } from '@genkit-ai/openai';

const ai = genkit({
  plugins: [googleAI(), openAI()],
});

定义一个多模型 Flow 时,使用 ai.defineFlow 封装逻辑。假设我们构建一个聊天机器人 Flow:先用 OpenAI 模型总结对话历史,再用 Gemini 模型生成回复。

import { z } from 'genkit';

const ChatInputSchema = z.object({
  history: z.array(z.string()),
  query: z.string(),
});

const ChatOutputSchema = z.object({
  summary: z.string(),
  response: z.string(),
});

export const multiModelChatFlow = ai.defineFlow(
  {
    name: 'multiModelChatFlow',
    inputSchema: ChatInputSchema,
    outputSchema: ChatOutputSchema,
  },
  async ({ history, query }) => {
    // 第一步:用 OpenAI 总结历史
    const { text: summary } = await ai.generate({
      model: openAI.model('gpt-4o-mini'),
      prompt: `Summarize this chat history: ${history.join('\n')}`,
    });

    // 第二步:用 Gemini 生成回复
    const { text: response } = await ai.generate({
      model: googleAI.model('gemini-1.5-flash'),
      prompt: `Based on summary: ${summary}\nUser query: ${query}\nProvide a helpful response.`,
    });

    return { summary, response };
  },
);

这个 Flow 的输入是对话历史和当前查询,输出是总结和回复。模型切换通过指定 model 参数实现,Genkit 会自动处理 API 调用差异。在 Go 语言中,类似地使用 genkit.DefineFlowgenkit.GenerateData 来定义结构化输出;在 Python 中,则用 @ai.flow 装饰器和 Pydantic 模型。

对于流式输出,支持多模型的场景尤为实用。例如,在长文本生成中,可以用一个模型处理前半部分,再流式切换到另一个模型完成。这种设计在 Genkit 中通过 ai.generateStreamsendChunk 回调实现,确保低延迟响应。

内置追踪与生产调试

Genkit 的 Flows 内置追踪机制,每一步生成请求(如 generatechat.send)都会记录为独立步骤,便于调试。这在多模型集成中至关重要,因为模型间输出可能不一致,导致级联错误。通过 Developer UI 或 CLI,可以可视化执行轨迹,包括输入提示、模型选择和输出细节。

例如,运行 genkit flow:run multiModelChatFlow '{"history": ["Hello"], "query": "Weather?"}' 后,在 UI 的 Inspect 标签下查看 traces。每个步骤显示延迟、错误率和令牌消耗,帮助识别瓶颈,如 OpenAI API 的高延迟。

在生产环境中,Genkit 集成 Firebase 监控仪表盘,追踪模型性能指标:请求量、延迟(目标 < 500ms)和错误率(< 1%)。对于模型切换,建议设置回退策略:如果 Gemini 超时(阈值 10s),自动切换到本地 Ollama 模型。风险包括 API 密钥泄露和配额超限,因此使用 Firebase Secrets 管理密钥,并设置每日调用限额(如 1000 次/模型)。

模型切换与优化参数

多模型编排的核心是动态切换。Genkit 支持条件逻辑,例如基于输入复杂度选择模型:短查询用轻量 GPT-4o-mini,长查询用 Gemini-1.5-pro。优化参数包括:

  • 温度与 Top-p:统一设置温度 0.7、Top-p 0.9,确保输出一致性;在多模型 Flow 中,第一个模型的温度设低(0.5)以获得稳定总结,后续模型可调高以增加创意。
  • 最大令牌:输入限 4096 令牌,输出限 1024,避免成本爆炸。监控总令牌使用,目标 < 5000/请求。
  • 系统提示:为每个模型定制系统提示,例如 OpenAI 用 “You are a concise summarizer”,Gemini 用 “You are an engaging responder”。
  • 错误处理:在 Flow 中添加 try-catch,失败时回滚到默认模型。设置重试机制:3 次重试,指数退避(初始 1s)。

落地清单:

  1. 环境准备:安装 SDK(npm install genkit @genkit-ai/google-genai),配置 API 密钥。
  2. Flow 定义:使用 schema 确保类型安全,测试单模型再扩展多模型。
  3. 调试迭代:用 Developer UI 运行 10+ 测试用例,检查 traces 中的模型切换点。
  4. 部署:用 Cloud Functions for Firebase 部署 Flow,支持 auth 策略(如 email_verified)。对于非 Google 环境,用 Express.js 的 startFlowServer 暴露 API 端点。
  5. 监控与回滚:集成 Firebase 仪表盘,设置警报阈值(延迟 > 2s)。准备回滚计划:如果多模型 Flow 出错,降级到单模型版本。
  6. 性能调优:A/B 测试模型组合,目标响应时间 < 1s,成本 < 0.01 USD/请求。

实际应用与局限性

在可组合 AI 应用中,这种多模型 Flows 适用于聊天机器人、内容生成和 RAG(检索增强生成)系统。例如,结合 Genkit 的 RAG 插件,先用嵌入模型(Gemini)检索文档,再用 LLM 生成答案。相比通用框架,Genkit 的多语言支持和 Firebase 集成更适合移动/Web 应用。

然而,Python SDK 仍为 Alpha 版,建议生产用 JS/Go。另一个局限是依赖提供商稳定性,建议混合本地模型(如 Ollama)以防 API downtime。

通过 Genkit Flows,多模型 LLM 集成变得高效且可维护。开发者可以快速构建生产级 AI 应用,利用追踪和参数优化确保可靠性。未来,随着更多插件支持,Genkit 将进一步简化 AI 编排。

(字数:约 1250 字)

引用:

  1. Genkit 官方文档:https://genkit.dev/docs/flows
  2. GitHub 仓库:https://github.com/firebase/genkit