代码之家  ›  专栏  ›  技术社区  ›  deb

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

  •  0
  • deb  · 技术社区  · 2 年前

    我已经将我的开放人工智能服务放在Azure API管理网关后面,所以如果客户端必须访问开放人工智能,他们必须使用网关URL。假设网关URL是 [email protected] 。在网关将请求转发到OpenAI服务之前,它需要通过查看Authorization标头来验证客户端。因此,来自客户端的请求应该包含一个Authorization Header。我使用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生成嵌入,因为我能够 在请求中添加Authorization Header。我希望对以下代码也这样做。

    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。 有人有做类似事情的经验吗?

    0 回复  |  直到 2 年前
        1
  •  0
  •   Ram    2 年前

    您可以使用连接到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    
    )
    
        2
  •  0
  •   Chris Romp    2 年前

    将Azure API管理透明地放在Azure OpenAI前面的最佳方法是将订阅密钥从默认密钥更改为 Ocp-Apim-Subscription-Key api-key 以匹配AOAI语法。

    您可以在API设置下配置APIM使用的头名称>订阅>标头名称。

    Screenshot of APIM configuration

    推荐文章