重要
适用于 Azure Functions 的 Azure OpenAI 扩展目前为预览版。
适用于 Azure Functions 的 Azure OpenAI 扩展实现了一组触发器和绑定,使你可以轻松地将 Azure OpenAI 服务的功能和行为集成到函数代码执行中。
Azure Functions 是事件驱动的计算服务,它提供一组触发器和绑定,可轻松与其他 Azure 服务连接。
通过 Azure OpenAI 与 Functions 之间的集成,可以构建具有以下功能的函数:
操作 | 触发器/绑定类型 |
---|---|
使用标准文本提示补全内容 | Azure OpenAI 文本补全输入绑定 |
响应助手请求以调用函数 | Azure OpenAI 助手触发器 |
创建助手 | Azure OpenAI 助手创建输出绑定 |
向助手发送消息 | Azure OpenAI 助手发布输入绑定 |
获取助手历史记录 | Azure OpenAI 助手查询输入绑定 |
读取文本嵌入 | Azure OpenAI 嵌入输入绑定 |
写入矢量数据库 | Azure OpenAI 嵌入存储输出绑定 |
从矢量数据库读取 | Azure OpenAI 语义搜索输入绑定 |
安装扩展
你安装的扩展 NuGet 包取决于你在函数应用中使用的 C# 模式进程内或独立工作进程:
通过安装 Microsoft.Azure.Functions.Worker.Extensions.OpenAI NuGet 包,将 Azure OpenAI 扩展添加到项目,可以使用 .NET CLI 执行此操作:
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.OpenAI --prerelease
使用矢量数据库存储内容时,还应至少安装其中一个 NuGet 包:
- Azure AI 搜索:Microsoft.Azure.Functions.Worker.Extensions.OpenAI.AzureAISearch
- Azure Cosmos DB for MongoDB vCore: Microsoft.Azure.Functions.Worker.Extensions.OpenAI.CosmosDBSearch
- Azure Cosmos DB for NoSQL: Microsoft.Azure.Functions.Worker.Extensions.OpenAI.CosmosDBSearch
- Azure 数据资源管理器:Microsoft.Azure.Functions.Worker.Extensions.OpenAI.Kusto
安装捆绑包
可以通过在 host.json
文件中添加或替换以下代码来添加预览扩展,该代码专门面向包含 OpenAI 扩展的 4.x 捆绑包的预览版本:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle.Preview",
"version": "[4.*, 5.0.0)"
}
}
连接到 OpenAI
若要使用 Azure OpenAI 绑定扩展,需要指定与 OpenAI 的连接。 此连接是使用应用程序设置和 AIConnectionName
触发器或绑定的属性定义的。 还可以使用环境变量来定义基于密钥的连接。
建议使用基于托管标识的连接和 AIConnectionName
属性。
OpenAI 绑定具有一个 AIConnectionName
属性,可用于指定 <ConnectionNamePrefix>
用于定义与 Azure OpenAI 的连接的应用设置组:
设置名 | 说明 |
---|---|
<CONNECTION_NAME_PREFIX>__endpoint |
设置 Azure OpenAI 服务的 URI 终结点。 此设置始终是必需的。 |
<CONNECTION_NAME_PREFIX>__clientId |
设置获取访问令牌时要使用的特定用户分配标识。 需要将 <CONNECTION_NAME_PREFIX>__credential 设置为 managedidentity 。 该属性接受与分配给应用程序的用户分配的标识对应的客户端 ID。 同时指定资源 ID 和客户端 ID 是无效的。 如果未指定,则使用系统分配的标识。 在本地开发方案中使用时,此属性的使用方式不同,且不应设置 credential 。 |
<CONNECTION_NAME_PREFIX>__credential |
定义如何为连接获取访问令牌。 用于 managedidentity 托管标识身份验证。 仅当托管标识在托管环境中可用时,此值才有效。 |
<CONNECTION_NAME_PREFIX>__managedIdentityResourceId |
当 credential 设置为 managedidentity 时,此属性可以设为指定在获取令牌时要使用的资源标识符。 该属性接受与用户定义的托管标识的资源 ID 对应的资源标识符。 同时指定资源 ID 和客户端 ID 是无效的。 如果两者都没有指定,则会使用系统分配的标识。 在本地开发方案中使用时,此属性的使用方式不同,且不应设置 credential 。 |
<CONNECTION_NAME_PREFIX>__key |
设置使用基于密钥的身份验证访问 Azure OpenAI 服务的终结点所需的共享密钥。 作为安全最佳做法,应始终将 Microsoft Entra ID 与托管标识一起使用进行身份验证。 |
在将 AIConnectionName
属性设置为 myAzureOpenAI
以下情况下,请考虑以下托管标识连接设置:
myAzureOpenAI__endpoint=https://contoso.openai.azure.com/
myAzureOpenAI__credential=managedidentity
myAzureOpenAI__clientId=aaaaaaaa-bbbb-cccc-1111-222222222222
在运行时,主机将这些设置统一解释为如下所示的单个 myAzureOpenAI
设置:
"myAzureOpenAI":
{
"endpoint": "https://contoso.openai.azure.com/",
"credential": "managedidentity",
"clientId": "aaaaaaaa-bbbb-cccc-1111-222222222222"
}
使用托管标识时,请确保将标识添加到 认知服务 OpenAI 用户 角色。
在本地运行时,必须将这些设置添加到 local.settings.json 项目文件。 有关详细信息,请参阅 使用基于标识的连接进行本地开发。
有关详细信息,请参阅使用应用程序设置。