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

h7appiyu  于 2023-11-21  发布在  Python
关注(0)|答案(2)|浏览(214)

我已经将我的Open AI服务置于Azure API管理网关之后,因此,如果客户端必须访问Open AI服务,则必须使用网关URL。假设网关URL为**email protected(https://stackoverflow.com/cdn-cgi/l/email-protection)**在网关将请求转发到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生成嵌入,因为我可以在请求中添加授权头。我希望对下面的代码做同样的事情。

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

lvjbypge

lvjbypge1#

你可以使用连接到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    
)

字符串

ctrmrzij

ctrmrzij2#

将Azure API管理透明地置于Azure OpenAI之前的最佳方法是将订阅密钥从默认的Ocp-Apim-Subscription-Key更改为api-key以匹配AOAI语法。
您可以在API设置>订阅>头名称中配置APIM使用的头名称。


的数据

相关问题