2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家
如果你曾使用大型语言模型构建过代理工作流——即那种模型调用工具、对结果进行推理并循环往复以获取更多信息的工作流——你一定撞上过那堵墙。这不是概念上的障碍,而是一堵真实存在且代价高昂的墙:你的代理可能在第 47 轮对话时因模型返回 503 错误而崩溃;或者在无限循环中静默地重复调用同一个搜索工具,白白烧掉 12 美元;又或者将本可压缩至 2 万令牌(token)的上下文,硬塞进一个包含 20 万令牌的请求中。
这些并非边缘案例。它们是任何运行时间足够长的代理循环的默认行为。而在此之前,解决方案每次都如出一辙:用 try/catch 包裹所有代码,添加一个轮次计数器,然后祈祷好运。
现在有了更好的方法。谷歌的 Genkit 刚刚发布了一个 generateMiddleware() 应用程序接口(API),让你能够在各个层级拦截并修改人工智能生成过程——包括模型调用、工具执行以及整个生成循环。你可以将其视为专为大型语言模型推理设计的 Express 中间件。它彻底改变了你构建高韧性代理的方式。
基于此,我构建了三个中间件——softFail(软失败)、smartMaxTurns(智能最大轮次)和 contextCompression(上下文压缩)——它们解决了我在生产环境中反复遇到的三个问题。本文将深入探讨该中间件 API 本身、其重要性以及每个中间件的工作原理。
中间件 API:拦截一切
Genkit 的 generateMiddleware() 为你提供了接入生成过程三个层级的钩子:
import { generateMiddleware } from 'genkit/beta';
const myMiddleware = generateMiddleware(
{
name: 'myMiddleware',
configSchema: z.object({ /* 每次调用的配置 */ }),
},
({ config, pluginConfig, ai }) => ({
// 包裹每次模型调用(请求 → 响应)
model: async (req, ctx, next) => {
// 修改请求,调用 next(),修改响应
return next(req, ctx);
},
// 包裹生成循环的每一轮
generate: async (envelope, ctx, next) => 免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。