核验清单
- ✓把全部向量库的用量加在一起,再减免费的 1GB。分库不会各送一份免费额度。计的是解析后的分块和嵌入,用原文件大小去对会偏。
- ✓零查询的那一天,只要超出免费额度,存储列仍然应该在。不要用「今天没有
file_search_call」去解释存储费。 - ✓调用次数数返回里的
file_search_call条目,不要数请求里有没有把工具写进tools。这条调用费文档写在 Responses API。 - ✓把
max_num_results调小之后,对的是模型输入 token 变少,调用那一列不按结果条数打折。 - ✓要停存储费,确认向量库已经过期或被删除,索引文件不在了。已经按天记过的费用不会因为事后删除而退回。
1. 存储计的不是你上传的那个文件
检索说明把向量库写成语义搜索的容器。文件加进去之后会被自动分块、嵌入、建索引。存储费按全部向量库的合计来算,依据是解析后的分块以及对应嵌入的体积,不是 Files API 里那个原始对象的字节数。同一份 PDF,分块更碎、重叠更多,索引可以比原文件更大。拿上传前的文件大小去除以天数,对不上是预期。
免费额度也是合计,不是按库。文档写明:全部向量库加起来,前 1GB 免费,超出部分按天计。核验于 2026-10-23 的定价页把超出部分写成每 GB 每天 0.10 美元,并把这里的 GB 定义成二进制的 2^30 字节。把一个大库拆成五个小库,免费的那 1GB 不会变成 5GB。当天没有任何人调用搜索,只要合计还在免费额度以上,存储列照样走。这口时钟挂在库上,不挂在请求上。
对象还要分开。file 是 Files API 里的文件,微调和其他用途也会用它。vector_store.file 才是已经被分块、嵌入、挂进某个向量库的那一层。只上传、没放进向量库,不进入这条存储口径。放进库之后,就算没有任何一次检索,解析结果也占着那 1GB 的合计。
2. 挂上工具不等于发生了一次调用
文件搜索说明把它定义成 Responses API 上的托管工具。模型决定要不要用。用了之后,返回里会出现两类输出:一条 file_search_call,以及一条带 file_citation 的 message。请求的 tools 里写了 type: file_search,只说明这个工具可用。对调用费,要数返回里的 file_search_call,不要数你有没有把工具声明写进去。示例里的 queries 是这一次调用带着的查询字符串。文档没有把这个数组的长度写成计费次数,不要用字符串条数去乘单价。
定价页把文件搜索拆成两行:存储,以及工具调用。核验当日,工具调用写成每 1000 次 2.50 美元,并注明这条调用价只适用于 Responses API。检索说明里另外有直接对向量库做 search 的接口,那是另一条路径。定价页没有把那条路径写成同一档调用价。存储费则跟你用哪条查询路径无关,库还在,合计就在。
模型可以在一轮里多次决定搜索,于是返回里有多条 file_search_call。每一条都是一次调用的证据。把工具留在默认工具列表里,模型自己多搜几次,调用列会跟着长。这和「我只问了一句话」不是同一列。
3. 少取几条,省的是输入 token
文件搜索说明写明,max_num_results 可以减少 token 用量和延迟,代价是答案质量可能下降。这说的是送进模型的检索结果变少,不是调用费按结果条数打折。调成 2,调用那一列仍然按这一次 file_search_call 计。省下来的是后面那截输入。
检索说明里的 score_threshold 越高,返回的分块越少,可能丢掉有用结果。分块少了,模型看到的上下文就短。定价页写明:内置工具用掉的 token,按所选模型的输入和输出单价计。检索到的文本是喂给模型的内容,和你自己写的提示加在同一次请求的输入里。回答里的 file_citation 是注释,不是第四种费用。可见的引用很短,输入 token 可以很长,因为被检索进来的分块在注释里并不展开。
所以一次检索最少有两列,库还在就有第三列。调用费看 file_search_call。模型费看这次请求的输入和输出,输入里包含检索结果。存储费看全部库的解析体积有没有超过共享的 1GB,跟这一次取了几条无关。三列用同一个「文件搜索」名字,不能加在一起跟模型账单对平。
4. 过期删的是索引,不是已经记过的账
检索说明允许用 expires_after 给向量库设过期。示例里的锚点是 last_active_at,天数是 7。文档写明:向量库一旦过期,关联的 vector_store.file 会被删除,之后不再为它们计费。锚点叫最近活跃,说明这条策略的时钟不是上传日。文档没有把每一种 API 动作都定义成会刷新 last_active_at,所以不要假设「只有用户提问才算活跃」或「任何列表请求都会续期」。要停这口存储,以库已经过期、索引文件不在为准。
手动删除是另一条路。定价按仍存在的向量库合计。删掉库,是把这批解析结果从合计里拿掉。过期文档那句「不再计费」说的是删除之后的存储,不是把已经按天记过的费用退回来。今天删库,今天之前超出 1GB 的那些天还在账单上。
分块策略会改变你到底占了多少。重叠越大,同一段文本在索引里出现得越多,解析体积越容易顶过那 1GB。为了召回把 chunk_overlap_tokens 拉高,存储列会变,调用列不会因此变便宜。免费额度用原文件大小估算,经常会低估。
5. 充值换不来这三列的合并
对账按三列走。第一列是全部向量库的解析体积减去共享的 1GB,超出部分按天,跟当天有没有查询无关。第二列是 Responses 返回里的 file_search_call 条数,工具声明本身不计。第三列是模型用量,输入里要能对上检索进来的分块,而不是只对回答里那几条引用。单价以定价页为准,核验日是 2026-10-23,之后以控制台和最新文档为准。
给 OpenAI 账户充值发生在这三列扣款之前。链上把稳定币换成能充进账户的资产,不会把按天的存储并进 token,也不会让零查询的那一天变成免费,更不会让 max_num_results 开始抵调用费。需要这一步时,可以用无需注册、非托管的 AllSwap 完成链上兑换。兑换成功只说明资产换了手。向量库还在,超出免费额度的存储按天还是会出现。