我已将 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 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
)