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# 进程模型,但仅 提供了独立的辅助角色模型 示例。

示例

此示例演示了创建过程,过程中 HTTP POST 函数将用户提示发送到助手聊天机器人。 对提示的回复在 HTTP 响应中返回。

/// <summary>
/// HTTP POST function that sends user prompts to the assistant chat bot.
/// </summary>
[Function(nameof(PostUserQuery))]
public static IActionResult PostUserQuery(
    [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "assistants/{assistantId}")] HttpRequestData req,
    string assistantId,
    [AssistantPostInput("{assistantId}", "{Query.message}", ChatModel = "%CHAT_MODEL_DEPLOYMENT_NAME%", ChatStorageConnectionSetting = DefaultChatStorageConnectionSetting, CollectionName = DefaultCollectionName)] AssistantState state)
{
    return new OkObjectResult(state.RecentMessages.Any() ? state.RecentMessages[state.RecentMessages.Count - 1].Content : "No response returned.");
}

此示例演示了创建过程,过程中 HTTP POST 函数将用户提示发送到助手聊天机器人。 对提示的回复在 HTTP 响应中返回。

/*
 * HTTP POST function that sends user prompts to the assistant chat bot.
 */ 
@FunctionName("PostUserResponse")
public HttpResponseMessage postUserResponse(
    @HttpTrigger(
        name = "req",
        methods = {HttpMethod.POST}, 
        authLevel = AuthorizationLevel.ANONYMOUS,
        route = "assistants/{assistantId}") 
        HttpRequestMessage<Optional<String>> request,
    @BindingName("assistantId") String assistantId,        
    @AssistantPost(name="newMessages", id = "{assistantId}", chatModel = "%CHAT_MODEL_DEPLOYMENT_NAME%", userMessage = "{Query.message}", chatStorageConnectionSetting = DEFAULT_CHATSTORAGE, collectionName = DEFAULT_COLLECTION) AssistantState state,
    final ExecutionContext context) {
        
        List<AssistantMessage> recentMessages = state.getRecentMessages();
        String response = recentMessages.isEmpty() ? "No response returned." : recentMessages.get(recentMessages.size() - 1).getContent();
        
        return request.createResponseBuilder(HttpStatus.OK)
            .header("Content-Type", "application/json")
            .body(response)
            .build();
}

此示例演示了创建过程,过程中 HTTP POST 函数将用户提示发送到助手聊天机器人。 对提示的回复在 HTTP 响应中返回。

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

const assistantPostInput = input.generic({
    type: 'assistantPost',
    id: '{assistantId}',
    chatModel: '%CHAT_MODEL_DEPLOYMENT_NAME%',
    userMessage: '{Query.message}',
    chatStorageConnectionSetting: CHAT_STORAGE_CONNECTION_SETTING,
    collectionName: COLLECTION_NAME
})
app.http('PostUserResponse', {
    methods: ['POST'],
    route: 'assistants/{assistantId}',
    authLevel: 'anonymous',
    extraInputs: [assistantPostInput],
    handler: async (_, context) => {
        const chatState = context.extraInputs.get(assistantPostInput)
        const content = chatState.recentMessages[0].content
        return {
            status: 200,
            body: content,
            headers: {
                'Content-Type': 'text/plain'
            }
        };
    }
})
import { HttpRequest, InvocationContext, app, input, output } from "@azure/functions"

const assistantPostInput = input.generic({
    type: 'assistantPost',
    id: '{assistantId}',
    chatModel: '%CHAT_MODEL_DEPLOYMENT_NAME%',
    userMessage: '{Query.message}',
    chatStorageConnectionSetting: CHAT_STORAGE_CONNECTION_SETTING,
    collectionName: COLLECTION_NAME
})
app.http('PostUserResponse', {
    methods: ['POST'],
    route: 'assistants/{assistantId}',
    authLevel: 'anonymous',
    extraInputs: [assistantPostInput],
    handler: async (_, context) => {
        const chatState: any = context.extraInputs.get(assistantPostInput)
        const content = chatState.recentMessages[0].content
        return {
            status: 200,
            body: content,
            headers: {
                'Content-Type': 'text/plain'
            }
        };
    }
})

此示例演示了创建过程,过程中 HTTP POST 函数将用户提示发送到助手聊天机器人。 对提示的回复在 HTTP 响应中返回。

下面是 发布用户查询的function.json 文件:

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "route": "assistants/{assistantId}",
      "methods": [
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    },
    {
      "name": "State",
      "type": "assistantPost",
      "direction": "in",
      "dataType": "string",
      "id": "{assistantId}",
      "userMessage": "{Query.message}",
      "chatModel": "%CHAT_MODEL_DEPLOYMENT_NAME%",
      "chatStorageConnectionSetting": "AzureWebJobsStorage",
      "collectionName": "ChatState"
    }
  ]
}

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

using namespace System.Net

param($Request, $TriggerMetadata, $State)

$recent_message_content = "No recent messages!"

if ($State.recentMessages.Count -gt 0) {
    $recent_message_content = $State.recentMessages[0].content
}

Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body       = $recent_message_content
    Headers    = @{
        "Content-Type" = "text/plain"
    }
})

此示例演示了创建过程,过程中 HTTP POST 函数将用户提示发送到助手聊天机器人。 对提示的回复在 HTTP 响应中返回。

@apis.function_name("PostUserQuery")
@apis.route(route="assistants/{assistantId}", methods=["POST"])
@apis.assistant_post_input(
    arg_name="state",
    id="{assistantId}",
    user_message="{Query.message}",
    chat_model="%CHAT_MODEL_DEPLOYMENT_NAME%",
    chat_storage_connection_setting=DEFAULT_CHAT_STORAGE_SETTING,
    collection_name=DEFAULT_CHAT_COLLECTION_NAME,
)
def post_user_response(req: func.HttpRequest, state: str) -> func.HttpResponse:
    # Parse the JSON string into a dictionary
    data = json.loads(state)

    # Extract the content of the recentMessage
    recent_message_content = data["recentMessages"][0]["content"]
    return func.HttpResponse(
        recent_message_content, status_code=200, mimetype="text/plain"
    )

特性

应用 PostUserQuery 特性以定义助手发布输入绑定,该绑定支持以下参数:

参数 说明
Id 要更新的助手的 ID。
UserMessage 获取或设置聊天完成模型的用户消息,编码为字符串。
AIConnectionName 可选。 获取或设置 AI 服务连接设置的配置节的名称。 对于 Azure OpenAI:如果已指定,请在此配置部分查找“终结点”和“密钥”值。 如果未指定或节不存在,请回退到环境变量:AZURE_OPENAI_ENDPOINT和AZURE_OPENAI_KEY。 对于用户分配的托管标识身份验证,此属性是必需的。 对于 OpenAI 服务(非 Azure),请设置OPENAI_API_KEY环境变量。
ChatModel 可选。 获取或设置要用作字符串的模型的 ID,默认值为 gpt-3.5-turbo.
温度 可选。 获取或设置要使用的采样温度,作为两0者之间的字符串。2 较高的值 (0.8) 使输出更随机,而较低的值(如)0.2使输出更加集中和确定性。 应使用任一 TemperatureTopP两者,但不应同时使用两者。
TopP 可选。 获取或设置使用温度(称为核采样)作为字符串进行采样的替代方法。 在此采样方法中,模型将考虑概率质量为 top_p 标记的结果。 因此 0.1 ,仅考虑包含前 10 个% 概率质量的标记。 应使用任一 TemperatureTopP两者,但不应同时使用两者。
MaxTokens 可选。 获取或设置在完成时要生成的最大令牌数,作为默认值为 字符串。 提示加上 max_tokens 的令牌计数不能超过模型的上下文长度。 除最新模型(它支持 4096 个词元)外,大多数模型的上下文长度为 2,048 个词元。
IsReasoningModel 可选。 获取或设置一个值,该值指示聊天完成模型是否为推理模型。 此选项是实验性的,与推理模型相关联,直到所有模型都具有预期属性中的奇偶校验,默认值为 false

批注

通过 PostUserQuery 注释,可定义助手发布输入绑定,该绑定支持以下参数:

元素 说明
名字 输出绑定的名称。
id 要更新的助手的 ID。
userMessage 获取或设置聊天完成模型的用户消息,编码为字符串。
aiConnectionName 可选。 获取或设置 AI 服务连接设置的配置节的名称。 对于 Azure OpenAI:如果已指定,请在此配置部分查找“终结点”和“密钥”值。 如果未指定或节不存在,请回退到环境变量:AZURE_OPENAI_ENDPOINT和AZURE_OPENAI_KEY。 对于用户分配的托管标识身份验证,此属性是必需的。 对于 OpenAI 服务(非 Azure),请设置OPENAI_API_KEY环境变量。
chatModel 获取或设置要用作字符串的模型的 ID,默认值为 gpt-3.5-turbo.
温度 可选。 获取或设置要使用的采样温度,作为两0者之间的字符串。2 较高的值 (0.8) 使输出更随机,而较低的值(如)0.2使输出更加集中和确定性。 应使用任一 TemperatureTopP两者,但不应同时使用两者。
topP 可选。 获取或设置使用温度(称为核采样)作为字符串进行采样的替代方法。 在此采样方法中,模型将考虑概率质量为 top_p 标记的结果。 因此 0.1 ,仅考虑包含前 10 个% 概率质量的标记。 应使用任一 TemperatureTopP两者,但不应同时使用两者。
maxTokens 可选。 获取或设置在完成时要生成的最大令牌数,作为默认值为 字符串。 提示加上 max_tokens 的令牌计数不能超过模型的上下文长度。 除最新模型(它支持 4096 个词元)外,大多数模型的上下文长度为 2,048 个词元。
isReasoningModel 可选。 获取或设置一个值,该值指示聊天完成模型是否为推理模型。 此选项是实验性的,与推理模型相关联,直到所有模型都具有预期属性中的奇偶校验,默认值为 false

修饰符

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

参数 说明
arg_name 表示绑定参数的变量的名称。
id 要更新的助手的 ID。
user_message 获取或设置聊天完成模型的用户消息,编码为字符串。
ai_connection_name 可选。 获取或设置 AI 服务连接设置的配置节的名称。 对于 Azure OpenAI:如果已指定,请在此配置部分查找“终结点”和“密钥”值。 如果未指定或节不存在,请回退到环境变量:AZURE_OPENAI_ENDPOINT和AZURE_OPENAI_KEY。 对于用户分配的托管标识身份验证,此属性是必需的。 对于 OpenAI 服务(非 Azure),请设置OPENAI_API_KEY环境变量。
chat_model 获取或设置要用作字符串的模型的 ID,默认值为 gpt-3.5-turbo.
温度 可选。 获取或设置要使用的采样温度,作为两0者之间的字符串。2 较高的值 (0.8) 使输出更随机,而较低的值(如)0.2使输出更加集中和确定性。 应使用任一 TemperatureTopP两者,但不应同时使用两者。
top_p 可选。 获取或设置使用温度(称为核采样)作为字符串进行采样的替代方法。 在此采样方法中,模型将考虑概率质量为 top_p 标记的结果。 因此 0.1 ,仅考虑包含前 10 个% 概率质量的标记。 应使用任一 TemperatureTopP两者,但不应同时使用两者。
max_tokens 可选。 获取或设置在完成时要生成的最大令牌数,作为默认值为 字符串。 提示加上 max_tokens 的令牌计数不能超过模型的上下文长度。 除最新模型(它支持 4096 个词元)外,大多数模型的上下文长度为 2,048 个词元。
is_reasoning _model 可选。 获取或设置一个值,该值指示聊天完成模型是否为推理模型。 此选项是实验性的,与推理模型相关联,直到所有模型都具有预期属性中的奇偶校验,默认值为 false

配置

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

properties 说明
type 必须是 PostUserQuery
方向 必须是 out
名字 输出绑定的名称。
id 要更新的助手的 ID。
userMessage 获取或设置聊天完成模型的用户消息,编码为字符串。
aiConnectionName 可选。 获取或设置 AI 服务连接设置的配置节的名称。 对于 Azure OpenAI:如果已指定,请在此配置部分查找“终结点”和“密钥”值。 如果未指定或节不存在,请回退到环境变量:AZURE_OPENAI_ENDPOINT和AZURE_OPENAI_KEY。 对于用户分配的托管标识身份验证,此属性是必需的。 对于 OpenAI 服务(非 Azure),请设置OPENAI_API_KEY环境变量。
chatModel 获取或设置要用作字符串的模型的 ID,默认值为 gpt-3.5-turbo.
温度 可选。 获取或设置要使用的采样温度,作为两0者之间的字符串。2 较高的值 (0.8) 使输出更随机,而较低的值(如)0.2使输出更加集中和确定性。 应使用任一 TemperatureTopP两者,但不应同时使用两者。
topP 可选。 获取或设置使用温度(称为核采样)作为字符串进行采样的替代方法。 在此采样方法中,模型将考虑概率质量为 top_p 标记的结果。 因此 0.1 ,仅考虑包含前 10 个% 概率质量的标记。 应使用任一 TemperatureTopP两者,但不应同时使用两者。
maxTokens 可选。 获取或设置在完成时要生成的最大令牌数,作为默认值为 字符串。 提示加上 max_tokens 的令牌计数不能超过模型的上下文长度。 除最新模型(它支持 4096 个词元)外,大多数模型的上下文长度为 2,048 个词元。
isReasoningModel 可选。 获取或设置一个值,该值指示聊天完成模型是否为推理模型。 此选项是实验性的,与推理模型相关联,直到所有模型都具有预期属性中的奇偶校验,默认值为 false

配置

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

properties 说明
id 要更新的助手的 ID。
userMessage 获取或设置聊天完成模型的用户消息,编码为字符串。
aiConnectionName 可选。 获取或设置 AI 服务连接设置的配置节的名称。 对于 Azure OpenAI:如果已指定,请在此配置部分查找“终结点”和“密钥”值。 如果未指定或节不存在,请回退到环境变量:AZURE_OPENAI_ENDPOINT和AZURE_OPENAI_KEY。 对于用户分配的托管标识身份验证,此属性是必需的。 对于 OpenAI 服务(非 Azure),请设置OPENAI_API_KEY环境变量。
chatModel 获取或设置要用作字符串的模型的 ID,默认值为 gpt-3.5-turbo.
温度 可选。 获取或设置要使用的采样温度,作为两0者之间的字符串。2 较高的值 (0.8) 使输出更随机,而较低的值(如)0.2使输出更加集中和确定性。 应使用任一 TemperatureTopP两者,但不应同时使用两者。
topP 可选。 获取或设置使用温度(称为核采样)作为字符串进行采样的替代方法。 在此采样方法中,模型将考虑概率质量为 top_p 标记的结果。 因此 0.1 ,仅考虑包含前 10 个% 概率质量的标记。 应使用任一 TemperatureTopP两者,但不应同时使用两者。
maxTokens 可选。 获取或设置在完成时要生成的最大令牌数,作为默认值为 字符串。 提示加上 max_tokens 的令牌计数不能超过模型的上下文长度。 除最新模型(它支持 4096 个词元)外,大多数模型的上下文长度为 2,048 个词元。
isReasoningModel 可选。 获取或设置一个值,该值指示聊天完成模型是否为推理模型。 此选项是实验性的,与推理模型相关联,直到所有模型都具有预期属性中的奇偶校验,默认值为 false

使用情况

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