適用於 Azure Functions 的 Azure OpenAI 助理觸發程序

重要

適用於 Azure Functions 的 Azure OpenAI 延伸模組目前為預覽狀態。

Azure OpenAI 助理觸發程序可讓您根據對助理提出的自訂聊天機器人或技能要求來執行程式碼。

如需 Azure OpenAI 延伸模組的安裝和設定詳細資訊,請參閱適用於 Azure Functions 的 Azure OpenAI 延伸模組。 若要深入了解 Azure OpenAI 助理,請參閱 Azure OpenAI 助理 API。

注意

參考和範例僅適用於 Node.js v4 模型。

注意

參考和範例僅適用於 Python v2 模型。

注意

雖然支援這兩個 C# 進程模型,但只會 提供隔離的背景工作模型 範例。

範例

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

此範例示範如何建立助理,將新的待辦工作新增至資料庫。 觸發程序具有模型所使用的 Create a new todo task 靜態描述。 函式本身會採用字串,表示要加入的新工作。 執行時,函式會將工作新增為自訂項目存放區中的新待辦事項項目,並從存放區傳回回應。

[Function(nameof(AddTodo))]
public Task AddTodo([AssistantSkillTrigger("Create a new todo task")] string taskDescription)
{
    if (string.IsNullOrEmpty(taskDescription))
    {
        throw new ArgumentException("Task description cannot be empty");
    }

    this.logger.LogInformation("Adding todo: {task}", taskDescription);

    string todoId = Guid.NewGuid().ToString()[..6];
    return this.todoManager.AddTodoAsync(new TodoItem(todoId, taskDescription));
}

此範例示範如何建立助理,將新的待辦工作新增至資料庫。 觸發程序具有模型所使用的 Create a new todo task 靜態描述。 函式本身會採用字串,表示要加入的新工作。 執行時,函式會將工作新增為自訂項目存放區中的新待辦事項項目,並從存放區傳回回應。

/**
 * Called by the assistant to create new todo tasks.
 */
@FunctionName("AddTodo")
public void addTodo(
    @AssistantSkillTrigger(
            name = "assistantSkillCreateTodo",
            functionDescription = "Create a new todo task"
    ) String taskDescription,
    final ExecutionContext context) {

    if (taskDescription == null || taskDescription.isEmpty()) {
        throw new IllegalArgumentException("Task description cannot be empty");
    }
    context.getLogger().info("Adding todo: " + taskDescription);

    String todoId = UUID.randomUUID().toString().substring(0, 6);
    TodoItem todoItem = new TodoItem(todoId, taskDescription);
    todoManager.addTodo(todoItem);
}

此範例示範如何建立助理,將新的待辦工作新增至資料庫。 觸發程序具有模型所使用的 Create a new todo task 靜態描述。 函式本身會採用字串,表示要加入的新工作。 執行時,函式會將工作新增為自訂項目存放區中的新待辦事項項目,並從存放區傳回回應。

const { app, trigger } = require("@azure/functions");
const { TodoItem, CreateTodoManager } = require("../services/todoManager");
const { randomUUID } = require('crypto');

const todoManager = CreateTodoManager()

app.generic('AddTodo', {
    trigger: trigger.generic({
        type: 'assistantSkillTrigger',
        functionDescription: 'Create a new todo task'
    }),
    handler: async (taskDescription, context) => {
        if (!taskDescription) {
            throw new Error('Task description cannot be empty')
        }

        context.log(`Adding todo: ${taskDescription}`)

        const todoId = randomUUID().substring(0, 6)
        return todoManager.AddTodo(new TodoItem(todoId, taskDescription))
    }
})
import { InvocationContext, app, trigger } from "@azure/functions"
import { TodoItem, ITodoManager, CreateTodoManager } from "../services/todoManager"
import { randomUUID } from 'crypto';

const todoManager: ITodoManager = CreateTodoManager()

app.generic('AddTodo', {
    trigger: trigger.generic({
        type: 'assistantSkillTrigger',
        functionDescription: 'Create a new todo task'
    }),
    handler: async (taskDescription: string, context: InvocationContext) => {
        if (!taskDescription) {
            throw new Error('Task description cannot be empty')
        }

        context.log(`Adding todo: ${taskDescription}`)

        const todoId = randomUUID().substring(0, 6)
        return todoManager.AddTodo(new TodoItem(todoId, taskDescription))
    }
})

此範例示範如何建立助理,將新的待辦工作新增至資料庫。 觸發程序具有模型所使用的 Create a new todo task 靜態描述。 函式本身會採用字串,表示要加入的新工作。 執行時,函式會將工作新增為自訂項目存放區中的新待辦事項項目,並從存放區傳回回應。

以下是 新增 Todo 的 function.json檔案:

{
  "bindings": [
    {
      "name": "TaskDescription",
      "type": "assistantSkillTrigger",
      "dataType": "string",
      "direction": "in",
      "functionDescription": "Create a new todo task"
    }
  ]
}

如需 function.json 檔案屬性的詳細資訊,請參閱設定一節。

using namespace System.Net

param($TaskDescription, $TriggerMetadata)
$ErrorActionPreference = "Stop"

if (-not $TaskDescription) {
    throw "Task description cannot be empty"
}

Write-Information "Adding todo: $TaskDescription"
$todoID = [Guid]::NewGuid().ToString().Substring(0, 5)
Add-Todo $todoId $TaskDescription

此範例示範如何建立助理,將新的待辦工作新增至資料庫。 觸發程序具有模型所使用的 Create a new todo task 靜態描述。 函式本身會採用字串,表示要加入的新工作。 執行時,函式會將工作新增為自訂項目存放區中的新待辦事項項目,並從存放區傳回回應。

@skills.function_name("AddTodo")
@skills.assistant_skill_trigger(
    arg_name="taskDescription", function_description="Create a new todo task"
)
def add_todo(taskDescription: str) -> None:
    if not taskDescription:
        raise ValueError("Task description cannot be empty")

    logging.info(f"Adding todo: {taskDescription}")

    todo_id = str(uuid.uuid4())[0:6]
    todo_manager.add_todo(TodoItem(id=todo_id, task=taskDescription))
    return

屬性

套用 AssistantSkillTrigger 屬性來定義助理觸發程序,其支援下列參數:

參數 描述
FunctionDescription 取得提供給模型的助理函式描述。
FunctionName 選擇性。 取得或設定助理所呼叫之函式的名稱。
ParameterDescriptionJson 選擇性。 取得或設定提供給模型的函式參數之 JSON 描述。 如需詳細資訊,請參閱使用方式。

註釋

AssistantSkillTrigger 註釋可讓您定義助理觸發程序,其支援下列參數:

元素 描述
名字 取得或設定輸入繫結的名稱。
functionDescription 取得提供給模型的助理函式描述。
functionName 選擇性。 取得或設定助理所呼叫之函式的名稱。
parameterDescriptionJson 選擇性。 取得或設定提供給模型的函式參數之 JSON 描述。 如需詳細資訊,請參閱使用方式。

裝飾項目

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

參數 描述
function_description 取得提供給模型的助理函式描述。
function_name 選擇性。 取得或設定助理所呼叫之函式的名稱。
parameterDescriptionJson 選擇性。 取得或設定提供給模型的函式參數之 JSON 描述。 如需詳細資訊,請參閱使用方式。

組態

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

屬性 描述
類型 必須是 AssistantSkillTrigger。
方向 必須是 in。
名字 觸發程序的名稱。
functionName 取得或設定助理所呼叫之函式的名稱。
functionDescription 取得小幫手函式的描述,該函式會提供給語言模型。
parameterDescriptionJson 選擇性。 取得或設定提供給模型的函式參數之 JSON 描述。 如需詳細資訊,請參閱使用方式。

組態

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

屬性 描述
類型 必須是 AssistantSkillTrigger。
名字 觸發程序的名稱。
functionName 取得或設定助理所呼叫之函式的名稱。
functionDescription 取得提供給 LLM 的助理函式描述
parameterDescriptionJson 選擇性。 取得或設定提供給模型的函式參數之 JSON 描述。 如需詳細資訊,請參閱使用方式。

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

使用方式

如果未提供 parameterDescriptionJson JSON 值,則會自動產生。 欲了解更多關於此物件語法的資訊,請參閱 OpenAI 函式呼叫文件。

連結

要使用 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 專案檔案。 如需詳細資訊,請參閱 使用身分識別型連線進行本機開發。

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