作者:Alem Tuzlak, Jack Herrington, 和 Tanner Linsley,发布于 2025 年 12 月 19 日。

自从我们发布 TanStack AI 的第一个 Alpha 版本以来,已经过去了两个星期。对我们来说,感觉像是过了几十年。我们已经原型化了 5-6 种不同的内部架构,以为您带来最佳体验。
我们的目标很简单:摆脱单体适配器及其复杂性,同时扩展我们公共 API 的灵活性和强大功能。此版本实现了这两点。
我们希望支持 AI 提供商提供的所有功能。图像生成、视频、音频、文本转语音、转录。而无需同时更新每个适配器。
我们是一个小团队。为图像添加支持不应该意味着扩展 BaseAdapter,更新 5+ 提供商的实现,确保每个模型的类型安全,并手动梳理文档。这需要每个提供商一周的时间。乘以 20 个提供商和 6 种模态。
所以我们拆分了单体。
以前是
import { openai } from '@tanstack/ai-openai'
现在是
import { openaiText, openaiImage, openaiVideo } from '@tanstack/ai-openai'
增量功能支持。 本周为 OpenAI 添加图像生成,下周为 Gemini,再下周为第三个提供商添加视频。更小的发布,相同的节奏。
更易于维护。 我们的适配器抽象已经增长到 7 个类型泛型,仅支持文本、摘要和嵌入。添加 6 种其他模态会使复杂性激增。现在每个适配器都专注于一个目标。最多 3 个泛型。
更小的包体积。 您控制引入的内容。只想使用文本?导入 openaiText。想要文本和图像?同时导入两者。您的包,您的选择。
更快的贡献。 几百行代码即可添加您最喜欢的提供商的支持。我们可以快速审查和合并它。
我们现在支持什么?
您有使用 AI 的用例吗?我们支持它。
我们进行了破坏性变更。以下是原因和内容。
之前
chat({
adapter: openai(),
model: 'gpt-4',
// now you get typesafety...
})
之后
chat({
adapter: openaiText('gpt-4'),
// immediately get typesafety
})
更少的步骤来自动完成。不再因为忘记定义模型而出现类型错误。
快速术语解释
以前的 providerOptions 与模型相关联,而不是提供商。从 gpt-4 更改为 gpt-3.5-turbo 会更改这些选项。所以我们将其重命名为
chat({
adapter: openaiText('gpt-4'),
modelOptions: {
text: {},
},
})
例如 temperature 这样的设置适用于所有提供商。我们的其他模态已经将配置放在根目录
generateImage({
adapter,
numberOfImages: 3,
})
所以我们将聊天也调整为一致
chat({
adapter: openaiText('gpt-4'),
modelOptions: {
text: {},
},
temperature: 0.6,
})
开始输入以查看可用内容。
chat({
- adapter: openai(),
+ adapter: openaiText("gpt-4"),
- model: "gpt-4",
- providerOptions: {
+ modelOptions: {
text: {}
},
- options: {
- temperature: 0.6
- },
+ temperature: 0.6
})
标准 Schema 支持。 我们正在取消对工具和结构化输出的 Zod 约束。使用您自己的 Schema 验证库。
路线图上
欢迎社区贡献。
我们已经发布了一个重大的架构调整、所有模态的新功能以及更简洁的 API。适配器易于制作、易于维护且易于理解。您的包体积保持最小。
我们对这个方向充满信心。我们认为您也会喜欢它。