You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python调用OpenAI Embeddings时向量维度不一致问题排查

解决思路
  • 修正向量合并逻辑:错误里的维度是3072的整数倍(30720=3072×10,21504=3072×7),说明你把单个JSON拆分后所有片段的向量直接拼接成了一维数组。余弦相似度要求两个向量维度完全一致,这种拼接方式会让不同JSON对应不同长度的“长向量”,自然无法计算。
    • 正确方向:要么对单个JSON的所有片段向量做聚合处理(比如取均值、最大值),生成一个3072维度的全局向量,保证每个JSON对应唯一的同维度向量;要么计算相似度时,采用两两片段匹配(比如算出两个JSON所有片段间的相似度后取均值或最大值)。
  • 检查拆分结果一致性:确认两个JSON被RecursiveJsonSplitter拆分后的片段数量是否不同?如果是拆分规则导致的差异,可调整拆分参数(比如固定chunk大小、限制拆分深度),让每个JSON拆分出的片段数统一,但这种方式灵活性差,不如聚合方案实用。
  • 完善自定义余弦函数的输入校验:在函数开头加入校验逻辑,比如检查输入是否为二维数组(每行对应一个片段的3072维向量)。如果是二维数组,就用矩阵运算计算相似度,而非flatten成一维。
    • 示例:若输入vec1是(10,3072)、vec2是(7,3072),可通过numpy计算两两相似度:cos_sim = np.dot(vec1, vec2.T) / (np.linalg.norm(vec1, axis=1)[:, None] * np.linalg.norm(vec2, axis=1)),再根据需求取均值或最大值。
  • 规范向量数据库的使用方式:用ChromaDB/Weaviate时,要把每个JSON拆分后的单个片段作为独立文档存入,而非拼接整个JSON的所有向量。查询时,用目标JSON的片段向量匹配数据库中的片段,再通过元数据关联到原JSON,最后聚合结果得到JSON间的相似度。

内容的提问来源于stack exchange,提问作者Ken Tola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 16:43:11