Azure Functions 的 Azure OpenAI 文本完成输入绑定

重要

适用于 Azure Functions 的 Azure OpenAI 扩展目前为预览版。

Azure OpenAI 文本完成输入绑定允许将结果文本完成 API 引入代码执行。 可以定义绑定以将预定义提示与参数一起使用,或传递整个提示。

如需了解有关 Azure OpenAI 扩展的设置和配置详细信息,请参阅适用于 Azure Functions 的 Azure OpenAI 扩展。 若要了解有关 Azure OpenAI 完成的详细信息,请参阅 了解如何生成或作文本

注释

仅提供了适用于 Node.js v4 模型的参考和示例。

注释

仅提供了适用于 Python v2 模型的参考和示例。

注释

虽然支持这两个 C# 进程模型,但仅 提供了独立的辅助角色模型 示例。

示例:

此示例演示 模板化 模式,其中 HTTP 触发器函数采用参数 name 并将其嵌入文本提示中,然后通过扩展将其发送到 Azure OpenAI 完成 API。 对提示的回复在 HTTP 响应中返回。

[Function(nameof(WhoIs))]
public static IActionResult WhoIs(
    [HttpTrigger(AuthorizationLevel.Function, Route = "whois/{name}")] HttpRequestData req,
    [TextCompletionInput("Who is {name}?", ChatModel = "%CHAT_MODEL_DEPLOYMENT_NAME%")] TextCompletionResponse response)
{
    return new OkObjectResult(response.Content);
}

此示例将提示作为输入,将其直接发送到完成 API,并将响应作为输出返回。

[Function(nameof(GenericCompletion))]
public static IActionResult GenericCompletion(
    [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req,
    [TextCompletionInput("{Prompt}", ChatModel = "%CHAT_MODEL_DEPLOYMENT_NAME%")] TextCompletionResponse response,
    ILogger log)
{
    string text = response.Content;
    return new OkObjectResult(text);
}

此示例演示 模板化 模式,其中 HTTP 触发器函数采用参数 name 并将其嵌入文本提示中,然后通过扩展将其发送到 Azure OpenAI 完成 API。 对提示的回复在 HTTP 响应中返回。

@FunctionName("WhoIs")
public HttpResponseMessage whoIs(
    @HttpTrigger(
        name = "req", 
        methods = {HttpMethod.GET},
        authLevel = AuthorizationLevel.ANONYMOUS, 
        route = "whois/{name}") 
        HttpRequestMessage<Optional<String>> request,
    @BindingName("name") String name,
    @TextCompletion(prompt = "Who is {name}?", chatModel = "%CHAT_MODEL_DEPLOYMENT_NAME%", name = "response", isReasoningModel = false) TextCompletionResponse response,
    final ExecutionContext context) {
    return request.createResponseBuilder(HttpStatus.OK)
        .header("Content-Type", "application/json")
        .body(response.getContent())
        .build();
}

此示例将提示作为输入,将其直接发送到完成 API,并将响应作为输出返回。

@FunctionName("GenericCompletion")
public HttpResponseMessage genericCompletion(
    @HttpTrigger(
        name = "req", 
        methods = {HttpMethod.POST},
        authLevel = AuthorizationLevel.ANONYMOUS) 
        HttpRequestMessage<Optional<String>> request,
    @TextCompletion(prompt = "{prompt}", chatModel = "%CHAT_MODEL_DEPLOYMENT_NAME%", name = "response", isReasoningModel = false) TextCompletionResponse response,
    final ExecutionContext context) {
    return request.createResponseBuilder(HttpStatus.OK)
        .header("Content-Type", "application/json")
        .body(response.getContent())
        .build();
}

此示例演示 模板化 模式,其中 HTTP 触发器函数采用参数 name 并将其嵌入文本提示中,然后通过扩展将其发送到 Azure OpenAI 完成 API。 对提示的回复在 HTTP 响应中返回。

const { app, input } = require("@azure/functions");

// This OpenAI completion input requires a {name} binding value.
const openAICompletionInput = input.generic({
    prompt: 'Who is {name}?',
    maxTokens: '100',
    type: 'textCompletion',
    chatModel: '%CHAT_MODEL_DEPLOYMENT_NAME%'
})

app.http('whois', {
    methods: ['GET'],
    route: 'whois/{name}',
    authLevel: 'function',
    extraInputs: [openAICompletionInput],
    handler: async (_request, context) => {
        var response = context.extraInputs.get(openAICompletionInput)
        return { body: response.content.trim() }
    }
});

此示例演示 模板化 模式,其中 HTTP 触发器函数采用参数 name 并将其嵌入文本提示中,然后通过扩展将其发送到 Azure OpenAI 完成 API。 对提示的回复在 HTTP 响应中返回。

import { app, input } from "@azure/functions";

// This OpenAI completion input requires a {name} binding value.
const openAICompletionInput = input.generic({
    prompt: 'Who is {name}?',
    maxTokens: '100',
    type: 'textCompletion',
    chatModel: '%CHAT_MODEL_DEPLOYMENT_NAME%'
})

app.http('whois', {
    methods: ['GET'],
    route: 'whois/{name}',
    authLevel: 'function',
    extraInputs: [openAICompletionInput],
    handler: async (_request, context) => {
        var response: any = context.extraInputs.get(openAICompletionInput)
        return { body: response.content.trim() }
    }
});

此示例演示 模板化 模式,其中 HTTP 触发器函数采用参数 name 并将其嵌入文本提示中,然后通过扩展将其发送到 Azure OpenAI 完成 API。 对提示的回复在 HTTP 响应中返回。

的 function.json 文件如下所示TextCompletionResponse

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "route": "whois/{name}",
      "methods": [
        "get"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    },
    {
      "type": "textCompletion",
      "direction": "in",
      "name": "TextCompletionResponse",
      "prompt": "Who is {name}?",
      "maxTokens": "100",
      "chatModel": "%CHAT_MODEL_DEPLOYMENT_NAME%"
    }
  ]
}

有关 function.json 文件属性的详细信息,请参阅配置部分。

代码只是将完成 API 中的文本作为响应返回:

using namespace System.Net

param($Request, $TriggerMetadata, $TextCompletionResponse)

Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
        StatusCode = [HttpStatusCode]::OK
        Body       = $TextCompletionResponse.Content
    })

此示例演示 模板化 模式,其中 HTTP 触发器函数采用参数 name 并将其嵌入文本提示中,然后通过扩展将其发送到 Azure OpenAI 完成 API。 对提示的回复在 HTTP 响应中返回。

@app.route(route="whois/{name}", methods=["GET"])
@app.text_completion_input(
    arg_name="response",
    prompt="Who is {name}?",
    max_tokens="100",
    chat_model="%CHAT_MODEL_DEPLOYMENT_NAME%",
)
def whois(req: func.HttpRequest, response: str) -> func.HttpResponse:
    response_json = json.loads(response)
    return func.HttpResponse(response_json["content"], status_code=200)

此示例将提示作为输入,将其直接发送到完成 API,并将响应作为输出返回。

@app.route(route="genericcompletion", methods=["POST"])
@app.text_completion_input(
    arg_name="response",
    prompt="{Prompt}",
    chat_model="%CHAT_MODEL_DEPLOYMENT_NAME%",
)
def genericcompletion(
    req: func.HttpRequest,
    response: str
) -> func.HttpResponse:
    response_json = json.loads(response)
    return func.HttpResponse(response_json["content"], status_code=200)

特性

用于定义文本完成输入绑定的特定属性取决于 C# 进程模式。

隔离的工作器模型中,应用于 TextCompletionInput 定义文本完成输入绑定。

该属性支持以下参数:

参数 DESCRIPTION
提示 获取或设置要为其生成完成的提示,编码为字符串。
AIConnectionName 可选。 获取或设置 AI 服务连接设置的配置节的名称。 对于 Azure OpenAI:如果已指定,请在此配置部分查找“终结点”和“密钥”值。 如果未指定或节不存在,请回退到环境变量:AZURE_OPENAI_ENDPOINT和AZURE_OPENAI_KEY。 对于用户分配的托管标识身份验证,此属性是必需的。 对于 OpenAI 服务(非 Azure),请设置OPENAI_API_KEY环境变量。
ChatModel 可选。 获取或设置要用作字符串的模型的 ID,默认值为 gpt-3.5-turbo.
温度 可选。 获取或设置要使用的采样温度,作为两0者之间的字符串。2 较高的值 (0.8) 使输出更随机,而较低的值(如)0.2使输出更加集中和确定性。 应使用任一 TemperatureTopP两者,但不应同时使用两者。
TopP 可选。 获取或设置使用温度(称为核采样)作为字符串进行采样的替代方法。 在此采样方法中,模型将考虑概率质量为 top_p 标记的结果。 因此 0.1 ,仅考虑包含前 10 个% 概率质量的标记。 应使用任一 TemperatureTopP两者,但不应同时使用两者。
MaxTokens 可选。 获取或设置在完成时要生成的最大令牌数,作为默认值为 字符串。 提示加上 max_tokens 的令牌计数不能超过模型的上下文长度。 除最新模型(它支持 4096 个词元)外,大多数模型的上下文长度为 2,048 个词元。
IsReasoningModel 可选。 获取或设置一个值,该值指示聊天完成模型是否为推理模型。 此选项是实验性的,与推理模型相关联,直到所有模型都具有预期属性中的奇偶校验,默认值为 false

批注

通过 TextCompletion 批注可以定义文本完成输入绑定,该绑定支持以下参数:

元素 DESCRIPTION
名字 获取或设置输入绑定的名称。
提示 获取或设置要为其生成完成的提示,编码为字符串。
aiConnectionName 可选。 获取或设置 AI 服务连接设置的配置节的名称。 对于 Azure OpenAI:如果已指定,请在此配置部分查找“终结点”和“密钥”值。 如果未指定或节不存在,请回退到环境变量:AZURE_OPENAI_ENDPOINT和AZURE_OPENAI_KEY。 对于用户分配的托管标识身份验证,此属性是必需的。 对于 OpenAI 服务(非 Azure),请设置OPENAI_API_KEY环境变量。
chatModel 获取或设置要用作字符串的模型的 ID,默认值为 gpt-3.5-turbo.
温度 可选。 获取或设置要使用的采样温度,作为两0者之间的字符串。2 较高的值 (0.8) 使输出更随机,而较低的值(如)0.2使输出更加集中和确定性。 应使用任一 TemperatureTopP两者,但不应同时使用两者。
topP 可选。 获取或设置使用温度(称为核采样)作为字符串进行采样的替代方法。 在此采样方法中,模型将考虑概率质量为 top_p 标记的结果。 因此 0.1 ,仅考虑包含前 10 个% 概率质量的标记。 应使用任一 TemperatureTopP两者,但不应同时使用两者。
maxTokens 可选。 获取或设置在完成时要生成的最大令牌数,作为默认值为 字符串。 提示加上 max_tokens 的令牌计数不能超过模型的上下文长度。 除最新模型(它支持 4096 个词元)外,大多数模型的上下文长度为 2,048 个词元。
isReasoningModel 可选。 获取或设置一个值,该值指示聊天完成模型是否为推理模型。 此选项是实验性的,与推理模型相关联,直到所有模型都具有预期属性中的奇偶校验,默认值为 false

修饰器

在预览期间,将输入绑定定义为 generic_input_binding 类型的 textCompletion 绑定,该绑定支持以下参数:

参数 DESCRIPTION
arg_name 表示绑定参数的变量的名称。
提示 获取或设置要为其生成完成的提示,编码为字符串。
ai_connection_name 可选。 获取或设置 AI 服务连接设置的配置节的名称。 对于 Azure OpenAI:如果已指定,请在此配置部分查找“终结点”和“密钥”值。 如果未指定或节不存在,请回退到环境变量:AZURE_OPENAI_ENDPOINT和AZURE_OPENAI_KEY。 对于用户分配的托管标识身份验证,此属性是必需的。 对于 OpenAI 服务(非 Azure),请设置OPENAI_API_KEY环境变量。
chat_model 获取或设置要用作字符串的模型的 ID,默认值为 gpt-3.5-turbo.
温度 可选。 获取或设置要使用的采样温度,作为两0者之间的字符串。2 较高的值 (0.8) 使输出更随机,而较低的值(如)0.2使输出更加集中和确定性。 应使用任一 TemperatureTopP两者,但不应同时使用两者。
top_p 可选。 获取或设置使用温度(称为核采样)作为字符串进行采样的替代方法。 在此采样方法中,模型将考虑概率质量为 top_p 标记的结果。 因此 0.1 ,仅考虑包含前 10 个% 概率质量的标记。 应使用任一 TemperatureTopP两者,但不应同时使用两者。
max_tokens 可选。 获取或设置在完成时要生成的最大令牌数,作为默认值为 字符串。 提示加上 max_tokens 的令牌计数不能超过模型的上下文长度。 除最新模型(它支持 4096 个词元)外,大多数模型的上下文长度为 2,048 个词元。
is_reasoning _model 可选。 获取或设置一个值,该值指示聊天完成模型是否为推理模型。 此选项是实验性的,与推理模型相关联,直到所有模型都具有预期属性中的奇偶校验,默认值为 false

配置

绑定支持在 function.json 文件中设置的这些配置属性。

资产 DESCRIPTION
类型 必须是 textCompletion
方向 必须是 in
名字 输入绑定的名称。
提示 获取或设置要为其生成完成的提示,编码为字符串。
aiConnectionName 可选。 获取或设置 AI 服务连接设置的配置节的名称。 对于 Azure OpenAI:如果已指定,请在此配置部分查找“终结点”和“密钥”值。 如果未指定或节不存在,请回退到环境变量:AZURE_OPENAI_ENDPOINT和AZURE_OPENAI_KEY。 对于用户分配的托管标识身份验证,此属性是必需的。 对于 OpenAI 服务(非 Azure),请设置OPENAI_API_KEY环境变量。
chatModel 获取或设置要用作字符串的模型的 ID,默认值为 gpt-3.5-turbo.
温度 可选。 获取或设置要使用的采样温度,作为两0者之间的字符串。2 较高的值 (0.8) 使输出更随机,而较低的值(如)0.2使输出更加集中和确定性。 应使用任一 TemperatureTopP两者,但不应同时使用两者。
topP 可选。 获取或设置使用温度(称为核采样)作为字符串进行采样的替代方法。 在此采样方法中,模型将考虑概率质量为 top_p 标记的结果。 因此 0.1 ,仅考虑包含前 10 个% 概率质量的标记。 应使用任一 TemperatureTopP两者,但不应同时使用两者。
maxTokens 可选。 获取或设置在完成时要生成的最大令牌数,作为默认值为 字符串。 提示加上 max_tokens 的令牌计数不能超过模型的上下文长度。 除最新模型(它支持 4096 个词元)外,大多数模型的上下文长度为 2,048 个词元。
isReasoningModel 可选。 获取或设置一个值,该值指示聊天完成模型是否为推理模型。 此选项是实验性的,与推理模型相关联,直到所有模型都具有预期属性中的奇偶校验,默认值为 false

配置

绑定支持以下属性,这些属性在代码中定义:

资产 DESCRIPTION
提示 获取或设置要为其生成完成的提示,编码为字符串。
aiConnectionName 可选。 获取或设置 AI 服务连接设置的配置节的名称。 对于 Azure OpenAI:如果已指定,请在此配置部分查找“终结点”和“密钥”值。 如果未指定或节不存在,请回退到环境变量:AZURE_OPENAI_ENDPOINT和AZURE_OPENAI_KEY。 对于用户分配的托管标识身份验证,此属性是必需的。 对于 OpenAI 服务(非 Azure),请设置OPENAI_API_KEY环境变量。
chatModel 获取或设置要用作字符串的模型的 ID,默认值为 gpt-3.5-turbo.
温度 可选。 获取或设置要使用的采样温度,作为两0者之间的字符串。2 较高的值 (0.8) 使输出更随机,而较低的值(如)0.2使输出更加集中和确定性。 应使用任一 TemperatureTopP两者,但不应同时使用两者。
topP 可选。 获取或设置使用温度(称为核采样)作为字符串进行采样的替代方法。 在此采样方法中,模型将考虑概率质量为 top_p 标记的结果。 因此 0.1 ,仅考虑包含前 10 个% 概率质量的标记。 应使用任一 TemperatureTopP两者,但不应同时使用两者。
maxTokens 可选。 获取或设置在完成时要生成的最大令牌数,作为默认值为 字符串。 提示加上 max_tokens 的令牌计数不能超过模型的上下文长度。 除最新模型(它支持 4096 个词元)外,大多数模型的上下文长度为 2,048 个词元。
isReasoningModel 可选。 获取或设置一个值,该值指示聊天完成模型是否为推理模型。 此选项是实验性的,与推理模型相关联,直到所有模型都具有预期属性中的奇偶校验,默认值为 false

用法

有关完整示例,请参阅示例部分