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

Python3.8调用GPT嵌入API时遇'type' object is not subscriptable错误

问题解决:嵌入GPT模型时的TypeError错误

问题描述

按照OpenAI官方教程实现数据集嵌入时,运行以下代码:

def get_embedding(text: str, model: str=EMBEDDING_MODEL) -> list[float]:
    result = openai.Embedding.create(
      model=model,
      input=text
    )
    return result["data"][0]["embedding"]

def compute_doc_embeddings(df: pd.DataFrame) -> dict[tuple[str, str], list[float]]:
    """
    Create an embedding for each row in the dataframe using the OpenAI Embeddings API.
    
    Return a dictionary that maps between each embedding vector and the index of the row that it corresponds to.
    """
    return {
        idx: get_embedding(r.content) for idx, r in df.iterrows()
    }

触发如下错误:

TypeError                                 Traceback (most recent call last)
Cell In[24], line 1
----> 1 def get_embedding(text: str, mode: str=EMBEDDING_MODEL) -> list[float]:
      2     result = openai.Embedding.create(
      3       model=model,
      4       input=text
      5     )
      6     return result["data"][0]["embedding"]

TypeError: 'type' object is not subscriptable

已尝试升级Python、改用List类型,问题仍未解决。

解决方案

1. 适配Python版本修正类型注解

Python 3.9及以上才支持直接用list[float]、dict[...]这类原生泛型注解,3.8及以下版本必须从typing模块导入对应泛型类型:

from typing import List, Dict, Tuple

随后将函数中的类型注解替换为:

  • list[float] → List[float]
  • dict[tuple[str, str], list[float]] → Dict[Tuple[str, str], List[float]]

2. 修复参数名笔误

错误栈显示函数定义时参数名写为mode: str=EMBEDDING_MODEL,但函数内部使用的是model,这会导致后续执行时出现变量未定义错误,需将参数名修正为model。

修正后完整代码

from typing import List, Dict, Tuple
import pandas as pd
import openai

# 定义嵌入模型名称
EMBEDDING_MODEL = "text-embedding-ada-002"

def get_embedding(text: str, model: str=EMBEDDING_MODEL) -> List[float]:
    result = openai.Embedding.create(
      model=model,
      input=text
    )
    return result["data"][0]["embedding"]

def compute_doc_embeddings(df: pd.DataFrame) -> Dict[Tuple[str, str], List[float]]:
    """
    Create an embedding for each row in the dataframe using the OpenAI Embeddings API.
    
    Return a dictionary that maps between each embedding vector and the index of the row that it corresponds to.
    """
    return {
        idx: get_embedding(r.content) for idx, r in df.iterrows()
    }

说明

  • 报错核心原因是Python版本不支持原生泛型下标注解,3.8及以下版本需通过typing模块引入泛型类型。
  • 同时修正参数名笔误,避免后续出现NameError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:47:45