Freigeben über


Azure OpenAI-Assistent zum Erstellen einer Ausgabebindung für Azure Functions

Wichtig

Die Azure OpenAI-Erweiterung für Azure Functions befindet sich derzeit in der Vorschau.

Mithilfe des Azure OpenAI-Assistenten zum Erstellen einer Ausgabebindung können Sie bei der Ausführung von Funktionscode einen neuen Assistenten-Chatbot erstellen.

Informationen zu Einrichtungs- und Konfigurationsdetails der Azure OpenAI-Erweiterung finden Sie unter Azure OpenAI-Erweiterungen für Azure Functions. Weitere Informationen zu Azure OpenAI-Assistenten finden Sie unter API für Azure OpenAI-Assistenten.

Hinweis

Referenzen und Beispiele werden nur für das Node.js v4-Modell bereitgestellt.

Hinweis

Referenzen und Beispiele werden nur für das Python v2-Modell bereitgestellt.

Hinweis

Während beide C#-Prozessmodelle unterstützt werden, werden nur Isolierte Arbeitsmodellbeispiele bereitgestellt.

Beispiel

In diesem Beispiel wird der Erstellungsprozess veranschaulicht, bei dem die HTTP PUT-Funktion einen neuen Assistenten-Chatbot mit der angegebenen ID erstellt. Die Antwort auf die Eingabeaufforderung wird in der HTTP-Antwort zurückgegeben.

/// <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; }
}

In diesem Beispiel wird der Erstellungsprozess veranschaulicht, bei dem die HTTP PUT-Funktion einen neuen Assistenten-Chatbot mit der angegebenen ID erstellt. Die Antwort auf die Eingabeaufforderung wird in der HTTP-Antwort zurückgegeben.

/**
 * 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();    
}

In diesem Beispiel wird der Erstellungsprozess veranschaulicht, bei dem die HTTP PUT-Funktion einen neuen Assistenten-Chatbot mit der angegebenen ID erstellt. Die Antwort auf die Eingabeaufforderung wird in der HTTP-Antwort zurückgegeben.

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 } }
    }
})

In diesem Beispiel wird der Erstellungsprozess veranschaulicht, bei dem die HTTP PUT-Funktion einen neuen Assistenten-Chatbot mit der angegebenen ID erstellt. Die Antwort auf die Eingabeaufforderung wird in der HTTP-Antwort zurückgegeben.

Dies ist die function.json Datei für den Assistenten zum Erstellen:

{
  "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"
    }
  ]
}

Weitere Informationen zu den Dateieigenschaften von function.json finden Sie im Abschnitt Konfiguration.

{{Dies stammt aus dem Beispielcodekommentar}}

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"
    }
})

In diesem Beispiel wird der Erstellungsprozess veranschaulicht, bei dem die HTTP PUT-Funktion einen neuen Assistenten-Chatbot mit der angegebenen ID erstellt. Die Antwort auf die Eingabeaufforderung wird in der HTTP-Antwort zurückgegeben.

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"
    )

Attribute

Wenden Sie das Attribut CreateAssistant an, um einen Assistenten zum Erstellen einer Ausgabebindung zu definieren, der diese Parameter unterstützt:

Parameter Beschreibung
Id Der Bezeichner des Assistenten, der erstellt werden soll.
Anweisungen Optional. Die Anweisungen an den Assistenten, die befolgt werden sollen.
ChatStorageConnectionSetting Optional. Der Name des Konfigurationsabschnitts für die Tabelleneinstellungen für den Chatspeicher. Der Standardwert ist AzureWebJobsStorage.
CollectionName Optional. Der Tabellensammlungsname für den Chatspeicher. Der Standardwert ist ChatState.

Anmerkungen

Mit der Anmerkung CreateAssistant können Sie einen Assistenten zum Erstellen einer Ausgabebindung definieren, der diese Parameter unterstützt:

Element Beschreibung
Name Ruft den Namen der Ausgabebindung ab oder legt ihn fest.
id Der Bezeichner des Assistenten, der erstellt werden soll.
Anweisungen Optional. Die Anweisungen an den Assistenten, die befolgt werden sollen.
chatStorageConnectionSetting Optional. Der Name des Konfigurationsabschnitts für die Tabelleneinstellungen für den Chatspeicher. Der Standardwert ist AzureWebJobsStorage.
collectionName Optional. Der Tabellensammlungsname für den Chatspeicher. Der Standardwert ist ChatState.

Decorator-Elemente

Definieren Sie während der Vorschau die Ausgabebindung als Bindung generic_output_binding vom Typ createAssistant, die diese Parameter unterstützt:

Parameter Beschreibung
arg_name Der Name der Variablen, die den Bindungsparameter darstellt.
id Der Bezeichner des Assistenten, der erstellt werden soll.
Anweisungen Optional. Die Anweisungen an den Assistenten, die befolgt werden sollen.
chat_storage_connection_setting Optional. Der Name des Konfigurationsabschnitts für die Tabelleneinstellungen für den Chatspeicher. Der Standardwert ist AzureWebJobsStorage.
collection_name Optional. Der Tabellensammlungsname für den Chatspeicher. Der Standardwert ist ChatState.

Konfiguration

Die Bindung unterstützt diese Konfigurationseigenschaften, die Sie in der Datei „function.json“ festlegen.

Eigenschaft Beschreibung
Typ Muss CreateAssistantlauten.
Richtung Muss outlauten.
Name Der Name der Ausgabebindung.
id Der Bezeichner des Assistenten, der erstellt werden soll.
Anweisungen Optional. Die Anweisungen an den Assistenten, die befolgt werden sollen.
chatStorageConnectionSetting Optional. Der Name des Konfigurationsabschnitts für die Tabelleneinstellungen für den Chatspeicher. Der Standardwert ist AzureWebJobsStorage.
collectionName Optional. Der Tabellensammlungsname für den Chatspeicher. Der Standardwert ist ChatState.

Konfiguration

Die Bindung unterstützt diese Eigenschaften, die in Ihrem Code definiert sind:

Eigenschaft Beschreibung
id Der Bezeichner des Assistenten, der erstellt werden soll.
Anweisungen Optional. Die Anweisungen an den Assistenten, die befolgt werden sollen.
chatStorageConnectionSetting Optional. Der Name des Konfigurationsabschnitts für die Tabelleneinstellungen für den Chatspeicher. Der Standardwert ist AzureWebJobsStorage.
collectionName Optional. Der Tabellensammlungsname für den Chatspeicher. Der Standardwert ist ChatState.

Verbrauch

Vollständige Beispiele finden Sie im Abschnitt Beispiele.