Delen via


Azure OpenAI-assistent na invoerbinding voor Azure Functions

Belangrijk

De Azure OpenAI-extensie voor Azure Functions is momenteel in preview.

Met de Azure OpenAI-assistent na invoerbinding kunt u prompts verzenden naar chatbots met assistentchats.

Zie Azure OpenAI-extensies voor Azure Functions voor informatie over de installatie en configuratie van de Azure OpenAI-extensie. Zie [Api voor Azure OpenAI-assistenten](.) voor meer informatie over Azure OpenAI-assistenten. /ai-services/openai/

Notitie

Verwijzingen en voorbeelden worden alleen verstrekt voor het Node.js v4-model.

Notitie

Verwijzingen en voorbeelden worden alleen verstrekt voor het Python v2-model.

Notitie

Hoewel beide C#-procesmodellen worden ondersteund, worden alleen geïsoleerde werkrolmodelvoorbeelden gegeven.

Opmerking

In dit voorbeeld ziet u het aanmaakproces, waarbij de HTTP POST-functie waarmee gebruikersprompts worden verzonden naar de chatbot van de assistent. Het antwoord op de prompt wordt geretourneerd in het HTTP-antwoord.

/// <summary>
/// HTTP POST function that sends user prompts to the assistant chat bot.
/// </summary>
[Function(nameof(PostUserQuery))]
public static async Task<IActionResult> PostUserQuery(
    [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "assistants/{assistantId}")] HttpRequestData req,
    string assistantId,
    [AssistantPostInput("{assistantId}", "{Query.message}", Model = "%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.");
}

/// <summary>
/// HTTP GET function that queries the conversation history of the assistant chat bot.
/// </summary>
[Function(nameof(GetChatState))]
public static async Task<IActionResult> GetChatState(
   [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "assistants/{assistantId}")] HttpRequestData req,
   string assistantId,
   [AssistantQueryInput("{assistantId}", TimestampUtc = "{Query.timestampUTC}", ChatStorageConnectionSetting = DefaultChatStorageConnectionSetting, CollectionName = DefaultCollectionName)] AssistantState state)
{

In dit voorbeeld ziet u het aanmaakproces, waarbij de HTTP POST-functie waarmee gebruikersprompts worden verzonden naar de chatbot van de assistent. Het antwoord op de prompt wordt geretourneerd in het HTTP-antwoord.

public HttpResponseMessage getChatState(
    @HttpTrigger(
        name = "req",
        methods = {HttpMethod.GET}, 
        authLevel = AuthorizationLevel.ANONYMOUS,
        route = "assistants/{assistantId}") 
        HttpRequestMessage<Optional<String>> request,
    @BindingName("assistantId") String assistantId,        
    @AssistantQuery(name = "AssistantState", id = "{assistantId}", timestampUtc = "{Query.timestampUTC}", chatStorageConnectionSetting = DEFAULT_CHATSTORAGE, collectionName = DEFAULT_COLLECTION) AssistantState state,
    final ExecutionContext context) {
        return request.createResponseBuilder(HttpStatus.OK)
            .header("Content-Type", "application/json")
            .body(state)
            .build();
}

/*
 * HTTP POST function that sends user prompts to the assistant chat bot.
 */ 
@FunctionName("PostUserResponse")
public HttpResponseMessage postUserResponse(

In dit voorbeeld ziet u het aanmaakproces, waarbij de HTTP POST-functie waarmee gebruikersprompts worden verzonden naar de chatbot van de assistent. Het antwoord op de prompt wordt geretourneerd in het HTTP-antwoord.

const CHAT_STORAGE_CONNECTION_SETTING = "AzureWebJobsStorage";
const COLLECTION_NAME = "ChatState";
const assistantPostInput = input.generic({
    type: 'assistantPost',
    id: '{assistantId}',
    model: '%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'
            }
        };
    }
})
const CHAT_STORAGE_CONNECTION_SETTING = "AzureWebJobsStorage";
const COLLECTION_NAME = "ChatState";
const assistantPostInput = input.generic({
    type: 'assistantPost',
    id: '{assistantId}',
    model: '%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'
            }
        };
    }
})

In dit voorbeeld ziet u het aanmaakproces, waarbij de HTTP POST-functie waarmee gebruikersprompts worden verzonden naar de chatbot van de assistent. Het antwoord op de prompt wordt geretourneerd in het HTTP-antwoord.

Dit is het function.json-bestand voor een query na de gebruiker:

{
  "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}",
      "model": "%CHAT_MODEL_DEPLOYMENT_NAME%",
      "chatStorageConnectionSetting": "AzureWebJobsStorage",
      "collectionName": "ChatState"
    }
  ]
}

Zie de sectie Configuratie voor meer informatie over function.json bestandseigenschappen.

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

In dit voorbeeld ziet u het aanmaakproces, waarbij de HTTP POST-functie waarmee gebruikersprompts worden verzonden naar de chatbot van de assistent. Het antwoord op de prompt wordt geretourneerd in het HTTP-antwoord.

    response_json = {"assistantId": assistantId}
    return func.HttpResponse(json.dumps(response_json), status_code=202, mimetype="application/json")


@apis.function_name("PostUserQuery")
@apis.route(route="assistants/{assistantId}", methods=["POST"])
@apis.assistant_post_input(arg_name="state", id="{assistantId}", user_message="{Query.message}", 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)

Kenmerken

Pas het PostUserQuery kenmerk toe om een assistent na invoerbinding te definiëren, die ondersteuning biedt voor deze parameters:

Parameter Description
Id De id van de assistent die moet worden bijgewerkt.
Model De naam van het OpenAI-chatmodel dat moet worden gebruikt. Voor Azure OpenAI is deze waarde de naam van de modelimplementatie.

Aantekeningen

Met de PostUserQuery aantekening kunt u een assistent na invoerbinding definiëren, die deze parameters ondersteunt:

Element Description
name De naam van de uitvoerbinding.
id De id van de assistent die moet worden bijgewerkt.
model De naam van het OpenAI-chatmodel dat moet worden gebruikt. Voor Azure OpenAI is deze waarde de naam van de modelimplementatie.

Decorators

Definieer tijdens de preview de uitvoerbinding als een generic_output_binding binding van het type postUserQuery, die ondersteuning biedt voor deze parameters:

Parameter Description
arg_name De naam van de variabele die de bindingsparameter vertegenwoordigt.
id De id van de assistent die moet worden bijgewerkt.
model De naam van het OpenAI-chatmodel dat moet worden gebruikt. Voor Azure OpenAI is deze waarde de naam van de modelimplementatie.

Configuratie

De binding ondersteunt deze configuratie-eigenschappen die u in het function.json-bestand hebt ingesteld.

Eigenschappen Beschrijving
type Moet PostUserQuery zijn.
direction Moet out zijn.
name De naam van de uitvoerbinding.
id De id van de assistent die moet worden bijgewerkt.
model De naam van het OpenAI-chatmodel dat moet worden gebruikt. Voor Azure OpenAI is deze waarde de naam van de modelimplementatie.

Configuratie

De binding ondersteunt deze eigenschappen, die zijn gedefinieerd in uw code:

Eigenschappen Description
id De id van de assistent die moet worden bijgewerkt.
model De naam van het OpenAI-chatmodel dat moet worden gebruikt. Voor Azure OpenAI is deze waarde de naam van de modelimplementatie.

Gebruik

Zie de sectie Voorbeeld voor volledige voorbeelden.