掌握 Genkit 中间件在代理应用程序中的应用

最后更新: 六月22 ,2026
  • Genkit 的中间件允许您使用模型钩子、工具和通用流程来拦截和修改 AI 生成周期。
  • 它包含自动重试、模型间回退、文件控制和人工工具审批等原生功能。
  • 它与 TypeScript、Go 和 Dart 兼容,可以轻松创建多层安全性和可观测性,而无需更改业务逻辑。

Genkit 中间件

如果你开发过人工智能应用,你就会知道,编写完美的提示并非全部。从原型到实际生产环境,你会遇到各种障碍,例如 API 超时、配额限制,或者需要人工验证关键操作。这时,Genkit Middleware就派上了用场。Genkit Middleware 是谷歌推出的一项解决方案,旨在让开发者无需重写所有代理代码即可添加多层控制。

基本上,我们讨论的是一个围绕生成调用放置的拦截器系统,而不是包装每个函数。 generate() 在手动控制模块中,您可以定义请求必须经历的一系列步骤。这使得您的代理架构可以…… 更简洁、更模块化将应用程序逻辑与系统安全、可观测性和弹性等横切关注点分离。

拦截系统究竟是如何运作的?

Genkit 中间件架构

为了更好地理解这一点,可以考虑一下 Genkit 中请求的生命周期。通常,模型会生成响应,决定是否需要使用某个工具,执行该工具,然后重新处理结果。Genkit 的中间件并非仅仅是一个瓶颈;它提供了三个不同的锚点,可以介入这个过程:

  • 生成钩子: 它每个世代周期只运行一次。它是理想的站点,用于…… 向系统中注入指令 或者在信息发送前对其进行修改。
  • 模特钩子: 它封装了对模型 API 的直接调用。这对于管理至关重要。 自动重试实现缓存或记录 LLM 的响应时间。
  • 钩形工具: 它的作用就像工具即将运行一样。它非常适合用于创建 审批系统 代理人删除文件或付款前,必须经过人工批准。
  Bluefish IDE 是什么?开源 Web 编辑器完整指南

这种结构类似于 Express 或 Koa 等框架中的中间件,其工作原理如同洋葱:请求从外层进入,到达中心(模型),然后再次退出,以相反的顺序遍历各层。最棒的是,您可以将多个中间件堆叠在一个数组中,从而定义精确的执行顺序。

预装中间件目录

Genkit 中间件函数

为了避免重复发明轮子,我们采用了这种包装方式。 @genkit-ai/middleware 它已经预装了几个现成的工具。其中一个最有用的工具是…… 重试它使用带抖动的指数回退算法。这可以防止我们在出现瞬态错误(例如)时导致 API 过载。 RESOURCE_EXHAUSTED o UNAVAILABLE提交申请 更坚固耐用 以应对瞬时故障。

如果主模型的配额用完,备用中间件就能派上用场。它允许您配置一个备用模型列表,这样,如果主模型出现故障,请求会自动路由到容量更小或成本更低的模型,从而避免最终用户看到错误信息。这对于在高需求环境中维持服务连续性至关重要。

关于安全性,我们有中间件 工具审批该系统会创建一个安全工具白名单;任何不在名单上的操作都会触发错误。 ToolInterruptError强制系统暂停,直到有人确认操作。中间件加剧了这种情况。 文件系统这使得模型能够访问本地文件,但 严格限制 限制到根目录,以防止人工智能窥探不应窥探的地方。

  什么是 Java:编程语言的完整介绍

Genkit 工具管理

最后,我们还有以下功能: 技能此中间件扫描文件夹中的文件。 SKILL.md 并将它们注入到系统提示符中。这是一种非常优雅的代理知识管理方式,使其能够…… 上传特定技能 按需提供,无需在主提示中填充不必要的文本。

创建自定义中间件

定制中间件开发

当原生选项不足时,Genkit 允许我们使用函数构建自己的拦截器。 generateMiddleware该工具允许我们使用 Zod 定义配置方案,确保我们传递的参数是 正确且已输入我们可以创建从记录每次出入的简单日志记录器到用于写入敏感数据 (PII) 的复杂系统等各种东西。

一个非常强大的用例是实现内容过滤。您可以创建一个模型钩子来分析响应,如果检测到禁用词或内部定价数据,则在响应到达用户之前将其阻止或清理。此外,还可以通过在生成钩子中查询数据库来管理每个用户的配额,然后再允许调用继续进行。

实现方式与生态系统之间的差异

Genkit 多平台支持

虽然概念是通用的,但根据编程语言的不同,细节也会有所差异。在 TypeScript 中,该系统非常动态,允许在文件中定义中间件。 .prompt 穿过田野 use在 Go 语言中,实现方式更加严格,因为它是一种编译型语言,这需要创建…… 中间件注册 能够在运行时将文本名称转换为函数对象。

需要注意的是,不要将 Genkit 与 Google 的代理开发工具包 (ADK) 混淆。ADK 专为构建在 GCP 基础架构上的复杂且资源密集型的多代理系统而设计,而 Genkit 则是为现有应用程序(Web、移动应用等)添加代理功能的理想选择。此外,您可以通过Genkit 开发者 UI监控整个中间件流程,从而精确追踪是哪个钩子修改了请求以及请求到达最终结果所经过的路径。

  面向对象编程中的继承

该系统的出现将生成功能转变为一个真正可组合的流程。通过将错误处理、文件安全和人工验证集成到一个独立的层中,代理开发变得更加专业化,并且在生产环境中发生灾难性错误的可能性也大大降低。