使用 Azure Function(Node.js)通过托管标识调用 Azure OpenAI
首先
如果要使用Azure OpenAI,肯定希望能够安全地使用托管的身份验证进行操作,不想自己持有密钥之类的东西。虽然有许多相关信息,但关于如何从Node.js的函数中实现这一点的信息并不多,所以我把这篇文章留在这里作为参考。
使用Azure Function的Node.js代码来使用托管ID
这段代码是直接返回原始ChatGPT的返回值作为消息,没有进行任何异常处理。重点是使用了@azure/identity包,使用new DefaultAzureCredential()创建了一个客户端。环境变量包含了1.端点和2.模型名称(没有密钥)。
另外,所使用的库是@azure/openai。虽然有很多选择,但我选择了这个看起来最官方的版本来使用。
快速入门:使用 Azure OpenAI 服务开始使用 ChatGPT 和 GPT-4。
关于托管标识的信息,请参考此链接:https://learn.microsoft.com/ja-jp/javascript/api/overview/azure/openai-readme?view=azure-node-preview#using-an-azure-active-directory-credential
在这里,提到了作为Azure AD认证所需的租户ID等环境变量,但由于使用托管标识,与Azure AD相关的环境变量是不必要的。
module.exports = async function (context, req) {
const { OpenAIClient } = require("@azure/openai");
const { DefaultAzureCredential } = require("@azure/identity");
const client = new OpenAIClient(
process.env.OPENAI_API_ENDPOINT, //ここにエンドポイント
new DefaultAzureCredential()
);
const messages = [
{ role: "system", content: "You are an AI assistant." },
{ role: "user", content: "Hello" },
];
const result = await client.getChatCompletions(process.env.OPENAI_ENGINE, messages); //ここにモデル名
let message;
for (const choice of result.choices) {
message = choice.message;
}
context.res = {
status: 200,
body: { message: message },
headers: {
"Content-Type": "application/json",
},
};
};
在Azure函数中启用托管标识 (Managed Identity)。
只需从门户中,将“函数应用程序”的“ID”更改为“开启”,然后保存即可。
在Azure OpenAI服务中配置角色
在Azure OpenAI服务的「访问控制(IAM)」中点击「+添加」。
在分配角色时,我们将按照官方文档中明确指定的选择”Cognitive Service 用户”。(尽管 OpenAI 用户似乎更好,但我们会遵循官方文档中的规定。)
然后,将先前分配的Function作为托管ID指定。
以上了。 .)
总结
您可以从Azure Function(Node.js)中调用Azure OpenAI服务而无需使用密钥。
{
"message": {
"role": "assistant",
"content": "Hello! I'm an AI assistant, ready to help you with any questions or tasks you may have. How can I assist you today?"
}
}
尽管只是这样,但是在JavaScript中,存在很多OpenAI库,让人有些困惑,所以我整理了一下。Azure App Servcie等基本上都是相同的流程,而对于Python或.NET来说,使用不同的库和描述方法。
只需进行以下操作:给函数添加AAD身份验证,将其放入VNET,使用Azure OpenAI的私有终结点等等,即可创建一个完全安全的环境。目前,使用托管标识可以确保免受密钥泄露的困扰。