你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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}?", Model = "%CHAT_MODEL_DEPLOYMENT_NAME%")] TextCompletionResponse response)
{
    return new OkObjectResult(response.Content);
}

/// <summary>

此示例将提示作为输入,将其直接发送到补全 API,并将回复作为输出返回。

        [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req,
        [TextCompletionInput("{Prompt}", Model = "%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}?", model = "%CHAT_MODEL_DEPLOYMENT_NAME%", name = "response") 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}", model = "%CHAT_MODEL_DEPLOYMENT_NAME%", name = "response") 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',
    model: '%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',
    model: '%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 响应中返回。

TextCompletionResponse 的 function.json 文件如下所示

{
  "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",
      "model": "%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", 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}", 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 来定义文本补全输入绑定。

该属性支持以下参数:

参数 说明
提示 获取或设置要为其生成补全的提示,其编码为字符串。
型号 获取或设置要用作字符串的模型的 ID,其默认值为 gpt-3.5-turbo
温度 可选。 获取或设置要使用的采样温度,采用 02 之间的字符串。 较高的值 (0.8) 使输出更随机,而较低的值(如 0.2)使输出更集中且更具确定性。 应使用 TemperatureTopP,但不应同时使用两者。
TopP 可选。 获取或设置温度采样的替代方法(称为核采样),采用字符串。 在此采样方法中,模型将考虑具有 top_p 概率质量的词元的结果。 所以 0.1 意味着只考虑包含前 10% 概率质量的词元。 应使用 TemperatureTopP,但不应同时使用两者。
MaxTokens 可选。 获取或设置在补全时要生成的最大词元数,采用默认为 100 的字符串。 提示加上 max_tokens 的令牌计数不能超过模型的上下文长度。 除最新模型(它支持 4096 个词元)外,大多数模型的上下文长度为 2,048 个词元。

批注

使用 TextCompletion 注释可以定义文本补全输入绑定,该绑定支持以下参数:

元素 说明
name 获取或设置输入绑定的名称。
prompt 获取或设置要为其生成补全的提示,其编码为字符串。
model 获取或设置要用作字符串的模型的 ID,其默认值为 gpt-3.5-turbo
temperature 可选。 获取或设置要使用的采样温度,采用 02 之间的字符串。 较高的值 (0.8) 使输出更随机,而较低的值(如 0.2)使输出更集中且更具确定性。 应使用 TemperatureTopP,但不应同时使用两者。
topP 可选。 获取或设置温度采样的替代方法(称为核采样),采用字符串。 在此采样方法中,模型将考虑具有 top_p 概率质量的词元的结果。 所以 0.1 意味着只考虑包含前 10% 概率质量的词元。 应使用 TemperatureTopP,但不应同时使用两者。
maxTokens 可选。 获取或设置在补全时要生成的最大词元数,采用默认为 100 的字符串。 提示加上 max_tokens 的令牌计数不能超过模型的上下文长度。 除最新模型(它支持 4096 个词元)外,大多数模型的上下文长度为 2,048 个词元。

修饰符

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

参数 说明
arg_name 表示绑定参数的变量的名称。
prompt 获取或设置要为其生成补全的提示,其编码为字符串。
model 获取或设置要用作字符串的模型的 ID,其默认值为 gpt-3.5-turbo
temperature 可选。 获取或设置要使用的采样温度,采用 02 之间的字符串。 较高的值 (0.8) 使输出更随机,而较低的值(如 0.2)使输出更集中且更具确定性。 应使用 TemperatureTopP,但不应同时使用两者。
top_p 可选。 获取或设置温度采样的替代方法(称为核采样),采用字符串。 在此采样方法中,模型将考虑具有 top_p 概率质量的词元的结果。 所以 0.1 意味着只考虑包含前 10% 概率质量的词元。 应使用 TemperatureTopP,但不应同时使用两者。
max_tokens 可选。 获取或设置在补全时要生成的最大词元数,采用默认为 100 的字符串。 提示加上 max_tokens 的令牌计数不能超过模型的上下文长度。 除最新模型(它支持 4096 个词元)外,大多数模型的上下文长度为 2,048 个词元。

配置

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

properties 说明
type 必须是 textCompletion
direction 必须是 in
name 输入绑定的名称。
prompt 获取或设置要为其生成补全的提示,其编码为字符串。
model 获取或设置要用作字符串的模型的 ID,其默认值为 gpt-3.5-turbo
temperature 可选。 获取或设置要使用的采样温度,采用 02 之间的字符串。 较高的值 (0.8) 使输出更随机,而较低的值(如 0.2)使输出更集中且更具确定性。 应使用 TemperatureTopP,但不应同时使用两者。
topP 可选。 获取或设置温度采样的替代方法(称为核采样),采用字符串。 在此采样方法中,模型将考虑具有 top_p 概率质量的词元的结果。 所以 0.1 意味着只考虑包含前 10% 概率质量的词元。 应使用 TemperatureTopP,但不应同时使用两者。
maxTokens 可选。 获取或设置在补全时要生成的最大词元数,采用默认为 100 的字符串。 提示加上 max_tokens 的令牌计数不能超过模型的上下文长度。 除最新模型(它支持 4096 个词元)外,大多数模型的上下文长度为 2,048 个词元。

配置

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

properties 说明
prompt 获取或设置要为其生成补全的提示,其编码为字符串。
model 获取或设置要用作字符串的模型的 ID,其默认值为 gpt-3.5-turbo
temperature 可选。 获取或设置要使用的采样温度,采用 02 之间的字符串。 较高的值 (0.8) 使输出更随机,而较低的值(如 0.2)使输出更集中且更具确定性。 应使用 TemperatureTopP,但不应同时使用两者。
topP 可选。 获取或设置温度采样的替代方法(称为核采样),采用字符串。 在此采样方法中,模型将考虑具有 top_p 概率质量的词元的结果。 所以 0.1 意味着只考虑包含前 10% 概率质量的词元。 应使用 TemperatureTopP,但不应同时使用两者。
maxTokens 可选。 获取或设置在补全时要生成的最大词元数,采用默认为 100 的字符串。 提示加上 max_tokens 的令牌计数不能超过模型的上下文长度。 除最新模型(它支持 4096 个词元)外,大多数模型的上下文长度为 2,048 个词元。

使用情况

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