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# 進程模型,但只會 提供隔離的背景工作模型 範例。

範例

目前這款綁定沒有 Go 支援。

此範例示範 範本化 模式,其中 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%", AIConnectionName = "AzureOpenAI")] 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%", AIConnectionName = "AzureOpenAI")] 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.FUNCTION, 
        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, aiConnectionName = "AzureOpenAI") 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.FUNCTION) 
        HttpRequestMessage<Optional<String>> request,
    @TextCompletion(prompt = "{prompt}", chatModel = "%CHAT_MODEL_DEPLOYMENT_NAME%", name = "response", isReasoningModel = false, aiConnectionName = "AzureOpenAI") 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%',
    aiConnectionName: 'AzureOpenAI'
})

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%',
    aiConnectionName: 'AzureOpenAI'
})

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 檔案:

{
  "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%",
      "aiConnectionName": "AzureOpenAI"
    }
  ]
}

如需 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%",
    ai_connection_name="AzureOpenAI",
)
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%",
    ai_connection_name="AzureOpenAI",
)
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 以定義文字完成輸入系結。

屬性支援下列參數:

參數 說明
提示 取得或設定產生完成的提示,編碼為字串。
AIConnectionName 選擇性。 取得或設定 AI 服務連線設定的組態區段名稱。 針對 Azure OpenAI:如果指定,請在此組態區段中尋找「端點」和「金鑰」值。 如果未指定或區段不存在,請回復為環境變數:AZURE_OPENAI_ENDPOINT和AZURE_OPENAI_KEY。 針對使用者指派的受控識別驗證,需要此屬性。 針對OpenAI服務 (非 Azure),請設定OPENAI_API_KEY環境變數。
ChatModel 選擇性。 取得或設定要當做字串使用的模型識別碼,預設值為 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 的最新模型除外)。
IsReasoningModel 選擇性。 取得或設定值,指出聊天完成模型是否為推理模型。 此選項是實驗性的,且與推理模型相關聯,直到所有模型在預期的屬性中具有同位,預設值為 false。

附註

批 TextCompletion 註可讓您定義文字完成輸入系結,其支援下列參數:

元素 說明
名字 取得或設定輸入繫結的名稱。
提示 取得或設定產生完成的提示,編碼為字串。
aiConnectionName 選擇性。 取得或設定 AI 服務連線設定的組態區段名稱。 針對 Azure OpenAI:如果指定,請在此組態區段中尋找「端點」和「金鑰」值。 如果未指定或區段不存在,請回復為環境變數:AZURE_OPENAI_ENDPOINT和AZURE_OPENAI_KEY。 針對使用者指派的受控識別驗證,需要此屬性。 針對OpenAI服務 (非 Azure),請設定OPENAI_API_KEY環境變數。
chatModel 取得或設定要當做字串使用的模型識別碼,預設值為 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 的最新模型除外)。
isReasoningModel 選擇性。 取得或設定值,指出聊天完成模型是否為推理模型。 此選項是實驗性的,且與推理模型相關聯,直到所有模型在預期的屬性中具有同位,預設值為 false。

裝飾項目

在預覽期間,將輸入繫結定義為 generic_input_binding 類型的 textCompletion 繫結,其支援下列參數:

參數 說明
arg_name 代表繫結參數的變數名稱。
提示 取得或設定產生完成的提示,編碼為字串。
ai_connection_name 選擇性。 取得或設定 AI 服務連線設定的組態區段名稱。 針對 Azure OpenAI:如果指定,請在此組態區段中尋找「端點」和「金鑰」值。 如果未指定或區段不存在,請回復為環境變數:AZURE_OPENAI_ENDPOINT和AZURE_OPENAI_KEY。 針對使用者指派的受控識別驗證,需要此屬性。 針對OpenAI服務 (非 Azure),請設定OPENAI_API_KEY環境變數。
chat_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 的最新模型除外)。
is_reasoning _model 選擇性。 取得或設定值,指出聊天完成模型是否為推理模型。 此選項是實驗性的,且與推理模型相關聯,直到所有模型在預期的屬性中具有同位,預設值為 false。

設定

繫結支援您在 function.json 檔案中設定的下列組態屬性。

房產 說明
類型 必須是 textCompletion。
方向 必須是 in。
名字 輸入繫結的名稱。
提示 取得或設定產生完成的提示,編碼為字串。
aiConnectionName 選擇性。 取得或設定 AI 服務連線設定的組態區段名稱。 針對 Azure OpenAI:如果指定,請在此組態區段中尋找「端點」和「金鑰」值。 如果未指定或區段不存在,請回復為環境變數:AZURE_OPENAI_ENDPOINT和AZURE_OPENAI_KEY。 針對使用者指派的受控識別驗證,需要此屬性。 針對OpenAI服務 (非 Azure),請設定OPENAI_API_KEY環境變數。
chatModel 取得或設定要當做字串使用的模型識別碼,預設值為 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 的最新模型除外)。
isReasoningModel 選擇性。 取得或設定值,指出聊天完成模型是否為推理模型。 此選項是實驗性的,且與推理模型相關聯,直到所有模型在預期的屬性中具有同位,預設值為 false。

設定

繫結支援您在程式碼中定義的下列屬性:

房產 說明
提示 取得或設定產生完成的提示,編碼為字串。
aiConnectionName 選擇性。 取得或設定 AI 服務連線設定的組態區段名稱。 針對 Azure OpenAI:如果指定,請在此組態區段中尋找「端點」和「金鑰」值。 如果未指定或區段不存在,請回復為環境變數:AZURE_OPENAI_ENDPOINT和AZURE_OPENAI_KEY。 針對使用者指派的受控識別驗證,需要此屬性。 針對OpenAI服務 (非 Azure),請設定OPENAI_API_KEY環境變數。
chatModel 取得或設定要當做字串使用的模型識別碼,預設值為 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 的最新模型除外)。
isReasoningModel 選擇性。 取得或設定值,指出聊天完成模型是否為推理模型。 此選項是實驗性的,且與推理模型相關聯,直到所有模型在預期的屬性中具有同位,預設值為 false。

用法

如需完整範例,請參閱範例一節。

連結

要使用 Azure OpenAI 綁定擴充功能,你需要指定一個連接到 OpenAI 模型定義的連結。 請使用以下其中一種方法在綁定中設定 OpenAI 模型連線:

  • 使用 AIConnectionName binding 屬性(Azure OpenAI 偏好)。
  • 在應用程式內設定並設定AZURE_OPENAI_ENDPOINTAZURE_OPENAI_KEY(針對 Azure OpenAI)。
  • 只 Open_API_Key 在應用程式設定中設定(針對 https://api.openai.com)。

連線的設定方式取決於模型 API 與認證方法,如下表所示:

認證/模型 API Azure OpenAI OpenAI (https://api.openai.com)
管理身份連線 AIConnectionName 不支援
金鑰保存庫 參考 AZURE_OPENAI_ENDPOINT
AZURE_OPENAI_KEY
Open_API_Key
應用程式配置參考 AZURE_OPENAI_ENDPOINT
AZURE_OPENAI_KEY
Open_API_Key
共用密碼 AZURE_OPENAI_ENDPOINT
AZURE_OPENAI_KEY
Open_API_Key

使用基於管理身份的連線和屬性 AIConnectionName 。

當你使用 AIConnectionName時,這個屬性設定的值會依連接類型而異:

  • 管理身份連線:此AIConnectionName屬性由<CONNECTION_NAME_PREFIX>一組設定共享,這些設定共同定義了與 Azure OpenAI 的身份基礎連線。 欲了解更多資訊,請參閱定義身份連結。
  • 金鑰保存庫 參考:AIConnectionName屬性設定回傳一個 Azure Key Vault 參考,指向 API 金鑰集中維護的位置。 欲了解更多資訊,請參閱定義 金鑰保存庫 連接。
  • App Configuration 參考:AIConnectionName屬性設定會回傳一個 Azure 應用程式組態 參考,該參考會回傳 API 金鑰或 金鑰保存庫 參考。 欲了解更多資訊,請參閱連接條目中的 Azure 應用程式組態。
  • API 金鑰: AIConnectionName 屬性設定會解析成包含端點與金鑰的應用程式設定。 由於共享金鑰可能被入侵,請盡可能使用受管理身份連線。 欲了解更多資訊,請參閱定義連結。

想了解更多關於綁定連接的資訊,請參閱 Azure Functions 中的 Manage connections 。

OpenAI 綁定包含一個AIConnectionName屬性,你可以用來指定定義與 Azure OpenAI 連結的應用程式設定群組:<ConnectionNamePrefix>

設定名稱 說明
<CONNECTION_NAME_PREFIX>__endpoint 設定 Azure OpenAI 服務的 URI 端點。 這項設定一律為必要。
<CONNECTION_NAME_PREFIX>__clientId 設定取得存取令牌時要使用的特定使用者指派身分識別。 需要將 <CONNECTION_NAME_PREFIX>__credential 設定為 managedidentity。 屬性接受的用戶端識別碼,對應至指派給應用程式的使用者指派身分識別。 指定資源識別碼和用戶端識別碼無效。 如果你沒有指定這個屬性,則會使用系統指定的身份。 不應該設定 時,這個屬性會以不同的方式用於credential。
<CONNECTION_NAME_PREFIX>__credential 定義連線中取得 access token 的方式。 為受控識別驗證使用 managedidentity。 僅在裝載環境中有受控識別可用時,這個值才有效。
<CONNECTION_NAME_PREFIX>__managedIdentityResourceId 當 credential 設定為 managedidentity時,設定此屬性以指定取得標記時使用的資源識別碼。 屬性會接受的資源識別碼是對應至使用者定義受控識別的資源識別碼。 指定資源識別碼和用戶端識別碼無效。 如果你沒有指定任何一個,系統會用指定的身份。 不應該設定 時,這個屬性會以不同的方式用於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 專案檔案。 如需詳細資訊,請參閱 使用身分識別型連線進行本機開發。

如需詳細資訊,請參閱使用應用程式設定。