你当前正在访问 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# 进程模式。
该属性支持以下参数:
参数 | 说明 |
---|---|
提示 | 获取或设置要为其生成补全的提示,其编码为字符串。 |
型号 | 获取或设置要用作字符串的模型的 ID,其默认值为 gpt-3.5-turbo 。 |
温度 | 可选。 获取或设置要使用的采样温度,采用 0 和 2 之间的字符串。 较高的值 (0.8 ) 使输出更随机,而较低的值(如 0.2 )使输出更集中且更具确定性。 应使用 Temperature 或 TopP ,但不应同时使用两者。 |
TopP | 可选。 获取或设置温度采样的替代方法(称为核采样),采用字符串。 在此采样方法中,模型将考虑具有 top_p 概率质量的词元的结果。 所以 0.1 意味着只考虑包含前 10% 概率质量的词元。 应使用 Temperature 或 TopP ,但不应同时使用两者。 |
MaxTokens | 可选。 获取或设置在补全时要生成的最大词元数,采用默认为 100 的字符串。 提示加上 max_tokens 的令牌计数不能超过模型的上下文长度。 除最新模型(它支持 4096 个词元)外,大多数模型的上下文长度为 2,048 个词元。 |
批注
使用 TextCompletion
注释可以定义文本补全输入绑定,该绑定支持以下参数:
元素 | 说明 |
---|---|
name | 获取或设置输入绑定的名称。 |
prompt | 获取或设置要为其生成补全的提示,其编码为字符串。 |
model | 获取或设置要用作字符串的模型的 ID,其默认值为 gpt-3.5-turbo 。 |
temperature | 可选。 获取或设置要使用的采样温度,采用 0 和 2 之间的字符串。 较高的值 (0.8 ) 使输出更随机,而较低的值(如 0.2 )使输出更集中且更具确定性。 应使用 Temperature 或 TopP ,但不应同时使用两者。 |
topP | 可选。 获取或设置温度采样的替代方法(称为核采样),采用字符串。 在此采样方法中,模型将考虑具有 top_p 概率质量的词元的结果。 所以 0.1 意味着只考虑包含前 10% 概率质量的词元。 应使用 Temperature 或 TopP ,但不应同时使用两者。 |
maxTokens | 可选。 获取或设置在补全时要生成的最大词元数,采用默认为 100 的字符串。 提示加上 max_tokens 的令牌计数不能超过模型的上下文长度。 除最新模型(它支持 4096 个词元)外,大多数模型的上下文长度为 2,048 个词元。 |
修饰符
在预览期间,将输入绑定定义为 textCompletion
类型的 generic_input_binding
绑定,该绑定支持以下参数:
参数 | 说明 |
---|---|
arg_name | 表示绑定参数的变量的名称。 |
prompt | 获取或设置要为其生成补全的提示,其编码为字符串。 |
model | 获取或设置要用作字符串的模型的 ID,其默认值为 gpt-3.5-turbo 。 |
temperature | 可选。 获取或设置要使用的采样温度,采用 0 和 2 之间的字符串。 较高的值 (0.8 ) 使输出更随机,而较低的值(如 0.2 )使输出更集中且更具确定性。 应使用 Temperature 或 TopP ,但不应同时使用两者。 |
top_p | 可选。 获取或设置温度采样的替代方法(称为核采样),采用字符串。 在此采样方法中,模型将考虑具有 top_p 概率质量的词元的结果。 所以 0.1 意味着只考虑包含前 10% 概率质量的词元。 应使用 Temperature 或 TopP ,但不应同时使用两者。 |
max_tokens | 可选。 获取或设置在补全时要生成的最大词元数,采用默认为 100 的字符串。 提示加上 max_tokens 的令牌计数不能超过模型的上下文长度。 除最新模型(它支持 4096 个词元)外,大多数模型的上下文长度为 2,048 个词元。 |
配置
绑定支持在 function.json 文件中设置的这些配置属性。
properties | 说明 |
---|---|
type | 必须是 textCompletion 。 |
direction | 必须是 in 。 |
name | 输入绑定的名称。 |
prompt | 获取或设置要为其生成补全的提示,其编码为字符串。 |
model | 获取或设置要用作字符串的模型的 ID,其默认值为 gpt-3.5-turbo 。 |
temperature | 可选。 获取或设置要使用的采样温度,采用 0 和 2 之间的字符串。 较高的值 (0.8 ) 使输出更随机,而较低的值(如 0.2 )使输出更集中且更具确定性。 应使用 Temperature 或 TopP ,但不应同时使用两者。 |
topP | 可选。 获取或设置温度采样的替代方法(称为核采样),采用字符串。 在此采样方法中,模型将考虑具有 top_p 概率质量的词元的结果。 所以 0.1 意味着只考虑包含前 10% 概率质量的词元。 应使用 Temperature 或 TopP ,但不应同时使用两者。 |
maxTokens | 可选。 获取或设置在补全时要生成的最大词元数,采用默认为 100 的字符串。 提示加上 max_tokens 的令牌计数不能超过模型的上下文长度。 除最新模型(它支持 4096 个词元)外,大多数模型的上下文长度为 2,048 个词元。 |
配置
绑定支持以下属性,这些属性在代码中定义:
properties | 说明 |
---|---|
prompt | 获取或设置要为其生成补全的提示,其编码为字符串。 |
model | 获取或设置要用作字符串的模型的 ID,其默认值为 gpt-3.5-turbo 。 |
temperature | 可选。 获取或设置要使用的采样温度,采用 0 和 2 之间的字符串。 较高的值 (0.8 ) 使输出更随机,而较低的值(如 0.2 )使输出更集中且更具确定性。 应使用 Temperature 或 TopP ,但不应同时使用两者。 |
topP | 可选。 获取或设置温度采样的替代方法(称为核采样),采用字符串。 在此采样方法中,模型将考虑具有 top_p 概率质量的词元的结果。 所以 0.1 意味着只考虑包含前 10% 概率质量的词元。 应使用 Temperature 或 TopP ,但不应同时使用两者。 |
maxTokens | 可选。 获取或设置在补全时要生成的最大词元数,采用默认为 100 的字符串。 提示加上 max_tokens 的令牌计数不能超过模型的上下文长度。 除最新模型(它支持 4096 个词元)外,大多数模型的上下文长度为 2,048 个词元。 |
使用情况
有关完整示例,请参阅示例部分。