適用於 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
來定義文字完成輸入繫結。
屬性支援下列參數:
參數 | 描述 |
---|---|
提示 | 取得或設定要產生完成的提示,以字串形式編碼。 |
模型 | 以字串形式取得或設定要使用的模型識別碼,預設值為 gpt-3.5-turbo 。 |
溫度 | 選擇性。 以 0 和 2 之間的字串形式取得或設定要使用的取樣溫度。 較高值 (0.8 ) 會讓輸出更隨機,而像是 (0.2 ) 較低的值會其其更集中且具決定性。 您應該使用 Temperature 或 TopP ,但不應該同時使用兩者。 |
TopP | 選擇性。 以字串形式取得或設定溫度採樣 (稱為核採樣) 的替代方法。 在此取樣方法中,模型考慮的是具有 top_p 可能性質量的權杖結果。 因此,0.1 表示只考慮組成前 10% 機率質量的權杖。 您應該使用 Temperature 或 TopP ,但不應該同時使用兩者。 |
MaxTokens | 選擇性。 以字串形式取得或設定在完成時產生的最大權杖數,預設值為 100 。 提示的權杖計數加上 max_tokens 不能超過模型的內容長度。 大部分模型的內容長度為 2,048 個權杖 (最新模型除外,其可支援 4096 個)。 |
註釋
TextCompletion
註釋可讓您定義文字完成輸入繫結,其支援下列參數:
元素 | 描述 |
---|---|
name | 取得或設定輸入繫結的名稱。 |
prompt | 取得或設定要產生完成的提示,以字串形式編碼。 |
model | 以字串形式取得或設定要使用的模型識別碼,預設值為 gpt-3.5-turbo 。 |
溫度 | 選擇性。 以 0 和 2 之間的字串形式取得或設定要使用的取樣溫度。 較高值 (0.8 ) 會讓輸出更隨機,而像是 (0.2 ) 較低的值會其其更集中且具決定性。 您應該使用 Temperature 或 TopP ,但不應該同時使用兩者。 |
topP | 選擇性。 以字串形式取得或設定溫度採樣 (稱為核採樣) 的替代方法。 在此取樣方法中,模型考慮的是具有 top_p 可能性質量的權杖結果。 因此,0.1 表示只考慮組成前 10% 機率質量的權杖。 您應該使用 Temperature 或 TopP ,但不應該同時使用兩者。 |
maxTokens | 選擇性。 以字串形式取得或設定在完成時產生的最大權杖數,預設值為 100 。 提示的權杖計數加上 max_tokens 不能超過模型的內容長度。 大部分模型的內容長度為 2,048 個權杖 (最新模型除外,其可支援 4096 個)。 |
裝飾項目
在預覽期間,將輸入繫結定義為 textCompletion
類型的 generic_input_binding
繫結,其支援下列參數:
參數 | 描述 |
---|---|
arg_name | 代表繫結參數的變數名稱。 |
prompt | 取得或設定要產生完成的提示,以字串形式編碼。 |
model | 以字串形式取得或設定要使用的模型識別碼,預設值為 gpt-3.5-turbo 。 |
溫度 | 選擇性。 以 0 和 2 之間的字串形式取得或設定要使用的取樣溫度。 較高值 (0.8 ) 會讓輸出更隨機,而像是 (0.2 ) 較低的值會其其更集中且具決定性。 您應該使用 Temperature 或 TopP ,但不應該同時使用兩者。 |
top_p | 選擇性。 以字串形式取得或設定溫度採樣 (稱為核採樣) 的替代方法。 在此取樣方法中,模型考慮的是具有 top_p 可能性質量的權杖結果。 因此,0.1 表示只考慮組成前 10% 機率質量的權杖。 您應該使用 Temperature 或 TopP ,但不應該同時使用兩者。 |
max_tokens | 選擇性。 以字串形式取得或設定在完成時產生的最大權杖數,預設值為 100 。 提示的權杖計數加上 max_tokens 不能超過模型的內容長度。 大部分模型的內容長度為 2,048 個權杖 (最新模型除外,其可支援 4096 個)。 |
組態
繫結支援您在 function.json 檔案中設定的下列組態屬性。
屬性 | 描述 |
---|---|
type | 必須是 textCompletion 。 |
direction | 必須是 in 。 |
name | 輸入繫結的名稱。 |
prompt | 取得或設定要產生完成的提示,以字串形式編碼。 |
model | 以字串形式取得或設定要使用的模型識別碼,預設值為 gpt-3.5-turbo 。 |
溫度 | 選擇性。 以 0 和 2 之間的字串形式取得或設定要使用的取樣溫度。 較高值 (0.8 ) 會讓輸出更隨機,而像是 (0.2 ) 較低的值會其其更集中且具決定性。 您應該使用 Temperature 或 TopP ,但不應該同時使用兩者。 |
topP | 選擇性。 以字串形式取得或設定溫度採樣 (稱為核採樣) 的替代方法。 在此取樣方法中,模型考慮的是具有 top_p 可能性質量的權杖結果。 因此,0.1 表示只考慮組成前 10% 機率質量的權杖。 您應該使用 Temperature 或 TopP ,但不應該同時使用兩者。 |
maxTokens | 選擇性。 以字串形式取得或設定在完成時產生的最大權杖數,預設值為 100 。 提示的權杖計數加上 max_tokens 不能超過模型的內容長度。 大部分模型的內容長度為 2,048 個權杖 (最新模型除外,其可支援 4096 個)。 |
組態
繫結支援您在程式碼中定義的下列屬性:
屬性 | 說明 |
---|---|
prompt | 取得或設定要產生完成的提示,以字串形式編碼。 |
model | 以字串形式取得或設定要使用的模型識別碼,預設值為 gpt-3.5-turbo 。 |
溫度 | 選擇性。 以 0 和 2 之間的字串形式取得或設定要使用的取樣溫度。 較高值 (0.8 ) 會讓輸出更隨機,而像是 (0.2 ) 較低的值會其其更集中且具決定性。 您應該使用 Temperature 或 TopP ,但不應該同時使用兩者。 |
topP | 選擇性。 以字串形式取得或設定溫度採樣 (稱為核採樣) 的替代方法。 在此取樣方法中,模型考慮的是具有 top_p 可能性質量的權杖結果。 因此,0.1 表示只考慮組成前 10% 機率質量的權杖。 您應該使用 Temperature 或 TopP ,但不應該同時使用兩者。 |
maxTokens | 選擇性。 以字串形式取得或設定在完成時產生的最大權杖數,預設值為 100 。 提示的權杖計數加上 max_tokens 不能超過模型的內容長度。 大部分模型的內容長度為 2,048 個權杖 (最新模型除外,其可支援 4096 個)。 |
使用方式
如需完整範例,請參閱範例一節。