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

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

我已经将我的Open AI服务置于Azure API管理网关之后,因此,如果客户端必须访问Open AI服务,则必须使用网关URL。假设网关URL为**email protected(https://stackoverflow.com/cdn-cgi/l/email-protection)**在网关将请求转发到OpenAI服务之前,它需要通过查看Authorization头来验证客户端。因此,来自客户端的请求应该包含Authorization Header。我能够使用openai官方python库实现,代码如下:

  1. import openai
  2. import logging
  3. import os
  4. os.environ["AZURE_OPENAI_API_TYPE"] = "azure"
  5. os.environ["AZURE_OPENAI_API_KEY"] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
  6. os.environ["API_BASE"] = f"[email protected]"
  7. os.environ["AZURE_OPENAI_API_VERSION"] = "2022-12-01"
  8. os.environ["AZURE_OPENAI_EMBEDDING_DEPLOYMENT"] = "model-deployment-name"
  9. def embed_documents(text):
  10. logging.info("embed_documents [" + text + "]")
  11. openai.api_type = os.getenv("AZURE_OPENAI_API_TYPE")
  12. token = os.getenv("AZURE_OPENAI_API_KEY")
  13. openai.api_key = token
  14. openai.api_base = os.getenv("API_BASE")
  15. openai.api_version = os.getenv("AZURE_OPENAI_API_VERSION")
  16. AZURE_OPENAI_EMBEDDING_DEPLOYMENT = os.getenv("AZURE_OPENAI_EMBEDDING_DEPLOYMENT")
  17. response = openai.Embedding.create(input=text,
  18. engine=AZURE_OPENAI_EMBEDDING_DEPLOYMENT,
  19. headers={
  20. 'Authorization': f'{token}'
  21. }
  22. )
  23. logging.info("embed_documents complete")
  24. embeddings = response['data'][0]['embedding']
  25. print(embeddings)
  26. return embeddings
  27. if __name__ == "__main__":
  28. embed_documents("MY first text")

字符串
在上面的代码片段中,我可以使用网关URL生成嵌入,因为我可以在请求中添加授权头。我希望对下面的代码做同样的事情。

  1. import os
  2. from langchain.chat_models import AzureChatOpenAI
  3. from langchain.schema import HumanMessage
  4. model = AzureChatOpenAI(
  5. openai_api_base="https://openai003.openai.azure.com/",
  6. openai_api_version="2023-05-15",
  7. deployment_name="semantic-query-expansion",
  8. openai_api_key="XXXXXXXXXXXXXXXXXXXXXXXXXX",
  9. openai_api_type="azure",
  10. )
  11. model(
  12. [
  13. HumanMessage(
  14. content="Translate this sentence from English to Bengali. I love programming."
  15. )
  16. ]
  17. )


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

lvjbypge

lvjbypge1#

你可以使用连接到Azure APIM的LangChain。诀窍是使用不同的头来传递api-key

  1. llm = AzureOpenAI(
  2. headers={"Ocp-Apim-Subscription-Key": os.environ["OPENAI_API_KEY"]},
  3. openai_api_base=APIM_BASE_URL,
  4. model_name=COMPLETION_MODEL,
  5. deployment_name=COMPLETION_DEPLOYMENT,
  6. max_tokens=SUMMARY_MAX_TOKENS,
  7. temperature=SUMMARY_TEMPERATURE
  8. )

字符串

ctrmrzij

ctrmrzij2#

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


的数据

相关问题