#2639·ag-ui

[功能]: 在 InputContentSource 中添加一个提供者文件句柄分支

作者: tombeckenham创建于 2026年9月4日更新于 2026年9月14日

问题

" 输入源 " 可以将媒体表达为内含基数64( " 数据 " )或URL( " URL " ),但不能表达为提供者签发的文件手柄

每个主要提供者现在都有一个文件/存储 API , 您可以上传一个资产一次, 用一个不透明的手柄来引用它 :

提供商 参考文献 | -- -- -- -- -- -- -- OpenAI(答复) 输入-图像' /输入-文件' 有`文件-id' ' 。 Anthropic QQ 类型:"文件",文件 id QQ消息源 ('files-api-2025-04-14') QQ [永久失效連結] [永久失效連結] 腾讯网. QQ Fal 存储 URL QQ

这些武器不能同现有的两只武器相取舍:

  • OpenAI或Anthropicfile id'是一个**opaque id**,不是URL,所以不能用url'进行。
  • Gemini文件 URI * 看起来像一个URL,但具有认证权,只对Gemini有意义——把它放入`url'邀请任何其他消费者试图取回它。
  • 输入“数据”是完全错误的;没有字节。

手柄的整点是字节是重发,所以"数据"打败了这个特性并"url"错误地描述它.

这咬到哪里了

在 [TanStack AI] (https://GitHub.com/TanStack/ai)中,我们增加了一个QQ类型: 'file' QQ内容源,包含每个提供者的参考记录,适配器将其映射到每个提供者的本土领域. 它在服务器方面运作良好,但我们的AG-UI序列器(UiMessages ToWire ' )-RunAgentInput.messages')是客户端-我们的 " useChat " 钩子的服务器运输,一个文件来源无法跨越它。 目前我们在那里投出一个明显的错误,而不是默不作声地丢弃该部分或将其错误地编码为URL. 这意味着浏览器无法持有一个手柄并跨转弯来参考它——手柄必须在呼叫者自己的有效载荷中行走出带外并被重建服务器一端,这绕行协议.

任何框架通过 AG-UI 线接一个提供者文件 API,都会击中同一墙.

建议

sdks/TypeScript/packages/core/src/types.ts ' (和同级SDKs)中,在投入源代码 ' /`投入源代码 ' 中加上第三个臂。 大约:

Const 输入连接文件SourceSchema = z.obobject({ 类型:z.literal ("文件"), //提供方名称 - > 该提供方的引用(文件 id,文件URI,存储 URL). 参考文献:z.record(z.string (),z.string ()), mimeType: z. string (. optional (), , (中文). ) (中文(简体) ).


由提供者事项键入:上传到两个提供者的同一个字节合并成一个源,正确路径到其中之一,消费者只读到自己没有的条目和出错——而不是猜测一个不透明字符串是否属于它. 如果一个记录比光谱想要的要多,一个单一的QQ提供者,参考QQ对也会起作用;关键部分是,该参考是**解释性的提供者手柄**,与可取取的URL相区别.

由于`投入源 ' 是一个在运行时间得到验证的受歧视的工会,这就需要改变计划,而不仅仅是改变类型,从而将其提升到这里,而不是在下游工作。

关联

- 126号 - 原件
. . . . . . .

内容来源: ag-ui-protocol/ag-ui