当传递整数列表与[str]时,LangChain AzureOpenAIEmbeddings出现问题,

vuktfyat  于 4个月前  发布在  其他
关注(0)|答案(2)|浏览(56)

检查其他资源

  • 为这个问题添加了一个非常描述性的标题。
  • 使用集成搜索在LangChain文档中进行了搜索。
  • 使用GitHub搜索找到了一个类似的问题,但没有找到。
  • 我确信这是LangChain中的一个bug,而不是我的代码。
  • 通过更新到LangChain的最新稳定版本(或特定集成包)无法解决此错误。

示例代码

def set_embed(self, query: str) -> None:
    # Load model configurations
    load_dotenv(self.model_conf)
    
    # Load app configurations
    config = ConfigParser(interpolation=None) 
    config.read('app.ini')
    apim_params = config['apim']
    
    # Set env variables
    os.environ["OPENAI_API_KEY"] = apim_params['OPENAI_API_KEY']
    
    # Set emb_model name variables
    #embed_model = os.getenv('EMBEDDING_MODEL_TYPE')
    embed_model = os.getenv('MODEL_TYPE_EMBEDDING')
    print(embed_model)
    
    # Set apim request parameters
    params: Mapping[str, str] = {
        'api-version': os.getenv('OPENAI_API_VERSION')
    }   
    headers: Mapping[str, str] = {
        'Content-Type': apim_params['CONTENT_TYPE'],
        'Ocp-Apim-Subscription-Key': os.getenv('OCP-APIM-SUBSCRIPTION-KEY')
    }
    client = httpx.Client(
        base_url = os.getenv('AZURE_OPENAI_ENDPOINT'),
        params = params,
        headers = headers,
        verify = apim_params['CERT_PATH']
    )
    
    print(client.params)
    print(client.headers)
    try:
        # Load embedding model
        self.embed = AzureOpenAIEmbeddings(
            model = 'text-embedding-ada-002',
                                        azure_deployment=embed_model,
                                        azure_deployment='text-embedding-ada-002',
                                        chunk_size=2048,
                                        http_client=client)
        print (self.embed)
        result = self.embed.embed_query(query)
        
        print (f'{embed_model} model initialized')
    
    except Exception as e:
        raise Exception(f'ApimUtils-set_embed : Error while initializing embedding model - {e}')

错误信息和堆栈跟踪(如果适用)

ApimUtils-set_embed : 初始化嵌入模型时出错 - 错误代码:400 - {'statusCode': 400, 'message': "无法从传入请求中解析和估计标记。请确保传入请求是以下类型之一:'Chat Completion','Completion','Embeddings',并与当前提示估计模式'Auto'一起工作。"}

描述

在使用AzureOpenAIEmbedding类与我们的Azure APIM服务结合的Azure OpenAI服务时,它会在我们的APIM策略中中断,该策略会从请求中捕获/计算提示/完成标记。我们认为这是由于AzureOpenAIEmbedding类如何将整数列表(例如 b'{"input": 3923, 374, 279, 4611, 96462, 46295, 58917, 30, "model": "text-embedding-ada-002", "encoding_format": "base64"}' vs [str] 从查询文本中发送。

系统信息

系统信息

操作系统:Windows
OS版本:10.0.22631
Python版本:3.11.5 (tags/v3.11.5:cce6ba9, Aug 24 2023, 14:38:34) [MSC v.1936 64 bit (AMD64)]

软件包信息

langchain_core: 0.2.5
langchain: 0.2.3
langchain_community: 0.2.4
langsmith: 0.1.75
langchain_openai: 0.1.8
langchain_text_splitters: 0.2.1

d4so4syb

d4so4syb1#

我也遇到了这个问题。我设置了 azure-openai-emit-token-metric APIM API策略。当APIM设置为支持自定义指标时,会出现这个错误。当我禁用自定义指标时,这个错误就不会发生。当我直接使用 openai python library to get embeddings 时,到目前为止没有出现错误。所以解决方法是,如果你想继续使用 azure-openai-emit-token-metric APIM API策略,可以直接使用openai python库进行嵌入。

up9lanfz

up9lanfz2#

另一个解决方法似乎很简单,只需设置 check_embedding_ctx_length=False;请参阅 https://api.python.langchain.com/en/latest/embeddings/langchain_openai.embeddings.base.OpenAIEmbeddings.html#langchain_openai.embeddings.base.OpenAIEmbeddings.check_embedding_ctx_length

相关问题