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

循环中使用Await调用getEmbedding后未获取嵌入值的问题排查

问题排查:GPT3嵌入生成后字段为空的问题

核心问题出在getEmbedding函数的返回逻辑上——你在axios.post的then回调里返回了嵌入结果,但这个return只属于回调函数本身,并没有成为getEmbedding函数的返回值,导致函数最终返回undefined,所以section.embedding字段为空。

修复方案

方案1:改用async/await+try/catch写法(推荐)

这种写法更直观,避免回调嵌套问题:

async function getEmbedding(textSample){
    const embeddingModel = "text-search-davinci-doc-001";

    if(DEBUGGING){
        console.log(`DEBUG: getEmbedding(${textSample})`);
    }

    const OPENAI_REQEST_HEADERS = {
        "Content-Type":"application/json",
        "Authorization":`Bearer ${OPENAI_API_KEY}`
    }

    let data = {
        "input"         :   textSample,
        "model"         :   embeddingModel
    };

    try {
        const response = await axios.post(EMBEDDINGS, data, {headers:OPENAI_REQEST_HEADERS});
        if(DEBUGGING) {
            console.log("   Embedding:  " + response.data.data[0].embedding);
        }
        // 直接返回嵌入结果
        return response.data.data[0].embedding;
    } catch (error) {
        console.log("Error posting to OpenAI:");
        console.log(error.response.data);
        // 可根据需求返回默认值或抛出错误
        return null;
    }
}

方案2:保留then/catch,调整返回逻辑

如果要保留原有的then/catch结构,需要把嵌入结果存储到外部变量,最后返回该变量:

async function getEmbedding(textSample){
    const embeddingModel = "text-search-davinci-doc-001";

    if(DEBUGGING){
        console.log(`DEBUG: getEmbedding(${textSample})`);
    }

    const OPENAI_REQEST_HEADERS = {
        "Content-Type":"application/json",
        "Authorization":`Bearer ${OPENAI_API_KEY}`
    }

    let data = {
        "input"         :   textSample,
        "model"         :   embeddingModel
    };

    let embeddingResult = null;
    await axios.post(EMBEDDINGS, data, {headers:OPENAI_REQEST_HEADERS})
    .then((response) => {
        if(DEBUGGING) {
            console.log("   Embedding:  " + response.data.data[0].embedding);
        }
        embeddingResult = response.data.data[0].embedding;
    })
    .catch((error) => {
        console.log("Error posting to OpenAI:");
        console.log(error.response.data);
    });
    // 返回存储的结果
    return embeddingResult;
}

额外检查点

  • 确认Section类是否正确定义,允许动态添加embedding属性,或者构造函数中已包含该属性
  • 确保DEBUGGING为true时,控制台确实打印了嵌入内容,验证API请求成功获取到数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:51:13