langchain 当与Azure OpenAI一起使用时,OpenAI回调具有欺骗性,

s6fujrry  于 2个月前  发布在  其他
关注(0)|答案(1)|浏览(28)

检查其他资源

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

问题描述和示例代码

Langchain似乎使用OpenAICallbackHandler计算OpenAI和AzureOpenAI模型的token使用情况和成本。然而,这依赖于API检索被调用模型的“完整”名称的事实,而在Azure OpenAI中并非如此。
在我订阅中,我有3个部署的gpt-3.5-turbo,分别对应于gpt-35-turbo-0613gpt-35-turbo-0312gpt-35-turbo-1106,以及2个部署的gpt-4,分别对应于gpt-4-1106-previewgpt-4-0613。然而,在进行推理时,无论版本如何,都会分别调用gpt-35-turbogpt-4的模型。然后,Langchain无法计算正确的成本,尽管没有抛出警告。这个字典中还包含一些由于上述原因永远不会使用的条目,例如这个。

from langchain_openai import AzureChatOpenAI

llm1 = AzureChatOpenAI(
        api_version="2023-08-01-preview",
        azure_endpoint="https://YOUR_ENDPOINT.openai.azure.com/",
        api_key="YOUR_KEY",
        azure_deployment="gpt-35-turbo-0613",
        temperature=0,
)

llm2 = AzureChatOpenAI(
        api_version="2023-08-01-preview",
        azure_endpoint="https://YOUR_ENDPOINT.openai.azure.com/",
        api_key="YOUR_KEY",
        azure_deployment="gpt-35-turbo-0312",
        temperature=0,
)

messages = [
    (
        "system",
        "You are a helpful assistant that translates English to French. Translate the user sentence.",
    ),
    ("human", "I love programming."),
]

llm1.invoke(messages).response_metadata['model_name'] # gpt-35-turbo
llm2.invoke(messages).response_metadata['model_name'] # gpt-35-turbo
wvyml7n5

wvyml7n51#

你需要使用参数model_version来获取正确的定价信息。

相关问题