在Langchain python中使用AzureChatOpenAI时发送额外的标头

问题描述 投票:0回答:1

我已将 Open AI 服务放在 Azure API 管理网关后面,因此如果客户端必须访问 Open AI 服务,则必须使用网关 URL。假设网关 URL 是 [电子邮件受保护]。在网关将请求转发到 OpenAI 服务之前,它需要通过查看 Authorization 标头来对客户端进行身份验证。所以来自客户端的请求应该包含一个授权标头。我能够使用 openai 官方 python 库来实现这一点。代码如下:

import openai
import logging
import os

os.environ["AZURE_OPENAI_API_TYPE"] = "azure"
os.environ["AZURE_OPENAI_API_KEY"] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
os.environ["API_BASE"] = f"[email protected]"
os.environ["AZURE_OPENAI_API_VERSION"] = "2022-12-01"
os.environ["AZURE_OPENAI_EMBEDDING_DEPLOYMENT"] = "model-deployment-name"

def embed_documents(text):
        logging.info("embed_documents [" + text + "]")
        openai.api_type    = os.getenv("AZURE_OPENAI_API_TYPE")
        token              = os.getenv("AZURE_OPENAI_API_KEY")    
        openai.api_key     = token
        openai.api_base    = os.getenv("API_BASE")
        openai.api_version = os.getenv("AZURE_OPENAI_API_VERSION")
        
        AZURE_OPENAI_EMBEDDING_DEPLOYMENT = os.getenv("AZURE_OPENAI_EMBEDDING_DEPLOYMENT")
        response = openai.Embedding.create(input=text, 
                                           engine=AZURE_OPENAI_EMBEDDING_DEPLOYMENT,
                                            headers={
                                                'Authorization': f'{token}'
                                                }
                                           )
        logging.info("embed_documents complete")
        embeddings = response['data'][0]['embedding']
        print(embeddings)
        return embeddings

        if __name__ == "__main__":
          embed_documents("MY first text")

在上面的代码片段中,我可以使用网关 URL 生成嵌入,因为我能够 在请求中添加授权标头。我希望对以下代码执行相同的操作。

import os
from langchain.chat_models import AzureChatOpenAI
from langchain.schema import HumanMessage

model = AzureChatOpenAI(
    openai_api_base="https://openai003.openai.azure.com/",
    openai_api_version="2023-05-15",
    deployment_name="semantic-query-expansion",
    openai_api_key="XXXXXXXXXXXXXXXXXXXXXXXXXX",
    openai_api_type="azure",
)


model(
    [
        HumanMessage(
            content="Translate this sentence from English to Bengali. I love programming."
        )
    ]
)

请注意,上面的代码取自链接https://python.langchain.com/docs/integrations/chat/azure_chat_openai,当我直接点击azure openAI URL时工作正常,但我还没有找到任何方法添加授权标头,因此我无法使用网关 URL。 有人有做过类似事情的经验吗?

azure-api-management openai-api langchain py-langchain azure-openai
1个回答
0
投票

您可以使用连接到Azure APIM的LangChain。技巧是使用不同的标头来传递

api-key

llm = AzureOpenAI(    
    headers={"Ocp-Apim-Subscription-Key": os.environ["OPENAI_API_KEY"]},    
    openai_api_base=APIM_BASE_URL,    
    model_name=COMPLETION_MODEL,    
    deployment_name=COMPLETION_DEPLOYMENT,    
    max_tokens=SUMMARY_MAX_TOKENS,    
    temperature=SUMMARY_TEMPERATURE    
)
© www.soinside.com 2019 - 2024. All rights reserved.