Azure OpenAI 助手为 Azure Functions 创建输出绑定

重要

适用于 Azure Functions 的 Azure OpenAI 扩展目前为预览版。

使用 Azure OpenAI 助手创建输出绑定,可以从函数代码执行创建新的助理聊天机器人。

要了解 Azure OpenAI 扩展的设置和配置详细信息,请参阅适用于 Azure Functions 的 Azure OpenAI 扩展。 若要了解有关 Azure OpenAI 助手的详细信息,请参阅 Azure OpenAI 助手 API

注意

仅提供了适用于 Node.js v4 模型的参考和示例。

注意

仅提供了适用于 Python v2 模型的参考和示例。

注意

虽然支持这两个 C# 进程模型,但仅 提供了独立的辅助角色模型 示例。

示例

此示例演示了创建过程,其中 HTTP PUT 函数使用指定的 ID 创建新的助理聊天机器人。 对提示的回复在 HTTP 响应中返回。

/// <summary>
/// HTTP PUT function that creates a new assistant chat bot with the specified ID.
/// </summary>
[Function(nameof(CreateAssistant))]
public static async Task<CreateChatBotOutput> CreateAssistant(
    [HttpTrigger(AuthorizationLevel.Anonymous, "put", Route = "assistants/{assistantId}")] HttpRequestData req,
    string assistantId)
{
    string instructions =
       """
        Don't make assumptions about what values to plug into functions.
        Ask for clarification if a user request is ambiguous.
        """;

    using StreamReader reader = new(req.Body);

    string request = await reader.ReadToEndAsync();


    return new CreateChatBotOutput
    {
        HttpResponse = new ObjectResult(new { assistantId }) { StatusCode = 201 },
        ChatBotCreateRequest = new AssistantCreateRequest(assistantId, instructions)
        {
            ChatStorageConnectionSetting = DefaultChatStorageConnectionSetting,
            CollectionName = DefaultCollectionName,
        },
    };
}

public class CreateChatBotOutput
{
    [AssistantCreateOutput()]
    public AssistantCreateRequest? ChatBotCreateRequest { get; set; }

    [HttpResult]
    public IActionResult? HttpResponse { get; set; }
}

此示例演示了创建过程,其中 HTTP PUT 函数使用指定的 ID 创建新的助理聊天机器人。 对提示的回复在 HTTP 响应中返回。

/**
 * The default storage account setting for the table storage account.
 * This constant is used to specify the connection string for the table storage
 * account
 * where chat data will be stored.
 */
final String DEFAULT_CHATSTORAGE = "AzureWebJobsStorage";

/**
 * The default collection name for the table storage account.
 * This constant is used to specify the collection name for the table storage
 * account
 * where chat data will be stored.
 */
final String DEFAULT_COLLECTION = "ChatState";

/*
 * HTTP PUT function that creates a new assistant chat bot with the specified ID.
 */
@FunctionName("CreateAssistant")
public HttpResponseMessage createAssistant(
    @HttpTrigger(
        name = "req", 
        methods = {HttpMethod.PUT}, 
        authLevel = AuthorizationLevel.ANONYMOUS, 
        route = "assistants/{assistantId}") 
        HttpRequestMessage<Optional<String>> request,
    @BindingName("assistantId") String assistantId,
    @AssistantCreate(name = "AssistantCreate") OutputBinding<AssistantCreateRequest> message,
    final ExecutionContext context) {
        context.getLogger().info("Java HTTP trigger processed a request.");
        
        String instructions = "Don't make assumptions about what values to plug into functions.\n" +
                "Ask for clarification if a user request is ambiguous.";

        AssistantCreateRequest assistantCreateRequest = new AssistantCreateRequest(assistantId, instructions);
        assistantCreateRequest.setChatStorageConnectionSetting(DEFAULT_CHATSTORAGE);
        assistantCreateRequest.setCollectionName(DEFAULT_COLLECTION);

        message.setValue(assistantCreateRequest);
        JSONObject response = new JSONObject();
        response.put("assistantId", assistantId);
        
        return request.createResponseBuilder(HttpStatus.CREATED)
            .header("Content-Type", "application/json")
            .body(response.toString())
            .build();    
}

此示例演示了创建过程,其中 HTTP PUT 函数使用指定的 ID 创建新的助理聊天机器人。 对提示的回复在 HTTP 响应中返回。

const { app, input, output } = require("@azure/functions");

const CHAT_STORAGE_CONNECTION_SETTING = "AzureWebJobsStorage";
const COLLECTION_NAME = "ChatState";

const chatBotCreateOutput = output.generic({
    type: 'assistantCreate'
})
app.http('CreateAssistant', {
    methods: ['PUT'],
    route: 'assistants/{assistantId}',
    authLevel: 'anonymous',
    extraOutputs: [chatBotCreateOutput],
    handler: async (request, context) => {
        const assistantId = request.params.assistantId
        const instructions =
            `
            Don't make assumptions about what values to plug into functions.
            Ask for clarification if a user request is ambiguous.
            `
        const createRequest = {
            id: assistantId,
            instructions: instructions,
            chatStorageConnectionSetting: CHAT_STORAGE_CONNECTION_SETTING,
            collectionName: COLLECTION_NAME
        }
        context.extraOutputs.set(chatBotCreateOutput, createRequest)
        return { status: 202, jsonBody: { assistantId: assistantId } }
    }
})
import { HttpRequest, InvocationContext, app, input, output } from "@azure/functions"

const CHAT_STORAGE_CONNECTION_SETTING = "AzureWebJobsStorage";
const COLLECTION_NAME = "ChatState";

const chatBotCreateOutput = output.generic({
    type: 'assistantCreate'
})
app.http('CreateAssistant', {
    methods: ['PUT'],
    route: 'assistants/{assistantId}',
    authLevel: 'anonymous',
    extraOutputs: [chatBotCreateOutput],
    handler: async (request: HttpRequest, context: InvocationContext) => {
        const assistantId = request.params.assistantId
        const instructions =
            `
            Don't make assumptions about what values to plug into functions.
            Ask for clarification if a user request is ambiguous.
            `
        const createRequest = {
            id: assistantId,
            instructions: instructions,
            chatStorageConnectionSetting: CHAT_STORAGE_CONNECTION_SETTING,
            collectionName: COLLECTION_NAME
        }
        context.extraOutputs.set(chatBotCreateOutput, createRequest)
        return { status: 202, jsonBody: { assistantId: assistantId } }
    }
})

此示例演示了创建过程,其中 HTTP PUT 函数使用指定的 ID 创建新的助理聊天机器人。 对提示的回复在 HTTP 响应中返回。

下面是 创建助手的function.json 文件:

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "route": "assistants/{assistantId}",
      "methods": [
        "put"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    },
    {
      "type": "assistantCreate",
      "direction": "out",
      "dataType": "string",
      "name": "Requests"
    }
  ]
}

有关 function.json 文件属性的详细信息,请参阅配置部分。

{{这来自示例代码注释}}

using namespace System.Net

param($Request, $TriggerMetadata)

$assistantId = $Request.params.assistantId

$instructions = "Don't make assumptions about what values to plug into functions."
$instructions += "\nAsk for clarification if a user request is ambiguous."

$create_request = @{
    "id" = $assistantId
    "instructions" = $instructions
    "chatStorageConnectionSetting" = "AzureWebJobsStorage"
    "collectionName" = "ChatState"
}

Push-OutputBinding -Name Requests -Value (ConvertTo-Json $create_request)

Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::Accepted
    Body       = (ConvertTo-Json @{ "assistantId" = $assistantId})
    Headers    = @{
        "Content-Type" = "application/json"
    }
})

此示例演示了创建过程,其中 HTTP PUT 函数使用指定的 ID 创建新的助理聊天机器人。 对提示的回复在 HTTP 响应中返回。

DEFAULT_CHAT_STORAGE_SETTING = "AzureWebJobsStorage"
DEFAULT_CHAT_COLLECTION_NAME = "ChatState"


@apis.function_name("CreateAssistant")
@apis.route(route="assistants/{assistantId}", methods=["PUT"])
@apis.assistant_create_output(arg_name="requests")
def create_assistant(
    req: func.HttpRequest, requests: func.Out[str]
) -> func.HttpResponse:
    assistantId = req.route_params.get("assistantId")
    instructions = """
            Don't make assumptions about what values to plug into functions.
            Ask for clarification if a user request is ambiguous.
            """
    create_request = {
        "id": assistantId,
        "instructions": instructions,
        "chatStorageConnectionSetting": DEFAULT_CHAT_STORAGE_SETTING,
        "collectionName": DEFAULT_CHAT_COLLECTION_NAME,
    }
    requests.set(json.dumps(create_request))
    response_json = {"assistantId": assistantId}
    return func.HttpResponse(
        json.dumps(response_json), status_code=202, mimetype="application/json"
    )

特性

应用 CreateAssistant 属性来定义助手创建输出绑定,该绑定支持以下参数:

参数 说明
Id 要创建的助理的标识符。
说明 可选。 提供给助手以遵循的说明。
ChatStorageConnectionSetting 可选。 聊天存储的表设置的配置节名称。 默认值是 AzureWebJobsStorage
CollectionName 可选。 聊天存储的表集合名称。 默认值是 ChatState

批注

通过 CreateAssistant 批注,可以定义助手创建输出绑定,该绑定支持以下参数:

元素 说明
名字 获取或设置输出绑定的名称。
id 要创建的助理的标识符。
指示 可选。 提供给助手以遵循的说明。
chatStorageConnectionSetting 可选。 聊天存储的表设置的配置节名称。 默认值是 AzureWebJobsStorage
collectionName 可选。 聊天存储的表集合名称。 默认值是 ChatState

修饰符

在预览期间,将输出绑定定义为 generic_output_binding 类型的 createAssistant 绑定,该绑定支持以下参数:

参数 说明
arg_name 表示绑定参数的变量的名称。
id 要创建的助理的标识符。
指示 可选。 提供给助手以遵循的说明。
chat_storage_connection_setting 可选。 聊天存储的表设置的配置节名称。 默认值是 AzureWebJobsStorage
collection_name 可选。 聊天存储的表集合名称。 默认值是 ChatState

配置

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

properties 说明
type 必须是 CreateAssistant
方向 必须是 out
名字 输出绑定的名称。
id 要创建的助理的标识符。
指示 可选。 提供给助手以遵循的说明。
chatStorageConnectionSetting 可选。 聊天存储的表设置的配置节名称。 默认值是 AzureWebJobsStorage
collectionName 可选。 聊天存储的表集合名称。 默认值是 ChatState

配置

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

properties 说明
id 要创建的助理的标识符。
指示 可选。 提供给助手以遵循的说明。
chatStorageConnectionSetting 可选。 聊天存储的表设置的配置节名称。 默认值是 AzureWebJobsStorage
collectionName 可选。 聊天存储的表集合名称。 默认值是 ChatState

使用情况

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