最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何正确获取 OpenAI Embeddings API 返回的向量数据
时间:2026-06-23 09:37:52 编辑:袖梨 来源:一聚教程网
本文详解 OpenAI Embeddings API 响应结构,解决因错误解构导致的 TypeError: undefined is not iterable 问题,并提供可靠、可复用的向量提取方法。
本文详解 openai embeddings api 响应结构,解决因错误解构导致的 `typeerror: undefined is not iterable` 问题,并提供可靠、可复用的向量提取方法。
OpenAI 的 Embeddings API(如 text-embedding-ada-002)返回的响应结构为标准 JSON 格式,其嵌套层级为:{ data: [{ embedding: [...], index: 0, object: "embedding" }] }。关键点在于:embeddingResponse.data 是一个数组,且每个请求(即使只传入单个字符串)都对应数组中的一个元素——它不是 { data: { embedding: [...] } } 或 embeddingResponse.data.data 这样的双层嵌套。
你原代码中使用了:
const [{ embedding }] = embeddingResponse.data.data; // ❌ 错误:data 没有 data 属性
这会导致 embeddingResponse.data.data 为 undefined,进而触发 TypeError: undefined is not iterable。正确做法是直接访问 embeddingResponse.data[0].embedding(因为单次请求仅生成一个 embedding 对象):
const documents = [ "Cooper codes is a youtuber with 5,300 subscribers", "Cooper codes likes clam chowder", "Cooper codes has a video", "Cooper codes has a web site called coopercodes.com"];for (const document of documents) { const input = document.replace(/n/g, ''); const parameters = { model: 'text-embedding-ada-002', input }; const embeddingResponse = await openai.embeddings.create(parameters); // ✅ 正确提取:data 是数组,取首项的 embedding 字段 const embedding = embeddingResponse.data[0].embedding; console.log('Embedding vector length:', embedding.length); // 通常为 1536(ada-002) console.log('First 5 values:', embedding.slice(0, 5)); // 示例:插入 Supabase(取消注释前请确保已配置 client) // await supabaseClient.from('documents').insert({ // content: document, // embedding // });}
⚠️ 注意事项:
- 不要假设 data.data 存在:OpenAI Embeddings API 响应中只有 data(数组),没有 data.data;
- 始终校验响应结构:可在 console.log(embeddingResponse) 后检查实际返回内容,避免硬编码依赖;
- 批量处理更高效:若需嵌入多个文本,建议将 input 设为字符串数组(如 input: documents),一次请求获取全部向量,而非循环发起多次请求(减少延迟与 token 开销);
- 错误处理不可省略:生产环境应包裹 try/catch,并检查 embeddingResponse.data?.[0]?.embedding 是否存在,防止空响应导致崩溃。
✅ 总结:牢记 embeddingResponse.data 是数组,用 embeddingResponse.data[0].embedding 安全取值;避免解构赋值时对未定义属性进行迭代。此模式适用于所有 OpenAI v1.x SDK 版本(@openai/openai)。
相关文章
- 魅族20pro安兔兔能跑多少分 06-23
- 有哪些值得推荐的小众软件 良心的小众软件精选 06-23
- 哪个奢侈品app平台性价比最高 值得推荐的奢侈品app平台有哪些 06-23
- 汽车模拟驾驶软件都有哪些 好用的模拟驾驶软件推荐 06-23
- 便捷的手机制作表格软件盘点 实用的制表软件汇总 06-23
- 邮政快递包裹动态入口在哪 06-23