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

如何修改OpenAI Embeddings API的嵌入输出维度?

如何限制text-embedding-ada-002返回的嵌入向量长度

text-embedding-ada-002模型本身固定返回1536维的嵌入向量,OpenAI官方接口没有提供直接修改向量长度的参数,你需要在获取到完整向量后自行处理,以下是两种可行方案:

方案一:直接截断向量

最简单的方式是截取向量的前N个元素,快速得到目标长度的向量,适合对计算效率要求高的场景:

import { Configuration, OpenAIApi } from 'openai';

const configuration = new Configuration({
  apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);

async function getTruncatedEmbedding(text, targetLength) {
  const parameters = {
    model: 'text-embedding-ada-002',
    input: text,
  };
  const resp = await openai.createEmbedding(parameters);
  const fullEmbedding = resp.data.data[0].embedding;
  // 若目标长度大于原向量长度,直接返回原向量;否则截取前targetLength个元素
  return fullEmbedding.slice(0, targetLength);
}

// 调用示例:获取长度为512的嵌入向量
const truncatedEmbedding = await getTruncatedEmbedding('需要生成嵌入的文本', 512);

方案二:使用降维算法保留关键信息

如果希望尽可能保留向量的核心特征,可以用PCA(主成分分析)等降维算法,需要引入第三方机器学习库(比如ml.js):

import { Configuration, OpenAIApi } from 'openai';
import { PCA } from 'ml-pca';

const configuration = new Configuration({
  apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);

async function getReducedEmbedding(text, targetLength) {
  const parameters = {
    model: 'text-embedding-ada-002',
    input: text,
  };
  const resp = await openai.createEmbedding(parameters);
  const fullEmbedding = resp.data.data[0].embedding;
  
  // 初始化PCA并训练(单向量训练仅作演示,实际场景建议用批量数据训练PCA模型)
  const pca = new PCA([fullEmbedding]);
  // 将向量降维到目标长度
  const reducedEmbedding = pca.predict(fullEmbedding, { nComponents: targetLength });
  return reducedEmbedding;
}

// 调用示例:将向量降维到512维
const reducedEmbedding = await getReducedEmbedding('需要生成嵌入的文本', 512);

两种方案对比

  • 截断法:实现简单、计算快,但可能丢失尾部维度的信息,适合对精度要求不高的场景。
  • 降维法:能保留更多关键特征,但需要额外的计算资源和依赖库,适合对向量精度有要求的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:53:01