Udostępnij za pośrednictwem


Asystent usługi Azure OpenAI po powiązaniu wejściowym dla usługi Azure Functions

Ważne

Rozszerzenie Azure OpenAI dla usługi Azure Functions jest obecnie dostępne w wersji zapoznawczej.

Asystent usługi Azure OpenAI po powiązaniu danych wejściowych umożliwia wysyłanie monitów do asystentów czatbotów.

Aby uzyskać informacje na temat konfigurowania i konfigurowania rozszerzenia Azure OpenAI, zobacz Azure OpenAI extensions for Azure Functions (Rozszerzenia azure OpenAI dla usługi Azure Functions). Aby dowiedzieć się więcej na temat asystentów usługi Azure OpenAI, zobacz [Interfejs API asystentów openAI platformy Azure](.. /ai-services/openai/

Uwaga

Odwołania i przykłady są udostępniane tylko dla modelu Node.js w wersji 4.

Uwaga

Odwołania i przykłady są udostępniane tylko dla modelu języka Python w wersji 2.

Uwaga

Chociaż oba modele procesów języka C# są obsługiwane, udostępniane są tylko izolowane przykłady modeli procesów roboczych.

Przykład

W tym przykładzie pokazano proces tworzenia, w którym funkcja HTTP POST, która wysyła użytkownikowi monity do asystenta czatbota. Odpowiedź na monit jest zwracana w odpowiedzi HTTP.

/// <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.LastOrDefault()?.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)
{

W tym przykładzie pokazano proces tworzenia, w którym funkcja HTTP POST, która wysyła użytkownikowi monity do asystenta czatbota. Odpowiedź na monit jest zwracana w odpowiedzi HTTP.

    @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}", model = "%CHAT_MODEL_DEPLOYMENT_NAME%", userMessage = "{Query.message}") AssistantState state,
        final ExecutionContext context) {
            
            List<ChatMessage> 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();
    }
}

Przykłady nie są jeszcze dostępne.

W tym przykładzie pokazano proces tworzenia, w którym funkcja HTTP POST, która wysyła użytkownikowi monity do asystenta czatbota. Odpowiedź na monit jest zwracana w odpowiedzi HTTP.

    }
})


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)

W tym przykładzie pokazano proces tworzenia, w którym funkcja HTTP POST, która wysyła użytkownikowi monity do asystenta czatbota. Odpowiedź na monit jest zwracana w odpowiedzi HTTP.

Oto plik function.json do publikowania zapytania użytkownika:

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

Aby uzyskać więcej informacji na temat function.json właściwości pliku, zobacz sekcję Konfiguracja.

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

W tym przykładzie pokazano proces tworzenia, w którym funkcja HTTP POST, która wysyła użytkownikowi monity do asystenta czatbota. Odpowiedź na monit jest zwracana w odpowiedzi 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}", model="%CHAT_MODEL_DEPLOYMENT_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

Atrybuty

Zastosuj atrybut, aby zdefiniować asystenta po powiązaniu PostUserQuery wejściowym, który obsługuje następujące parametry:

Parametr Opis
Id Identyfikator asystenta do zaktualizowania.
Model Nazwa modelu czatu OpenAI do użycia. W przypadku usługi Azure OpenAI ta wartość jest nazwą wdrożenia modelu.

Adnotacje

Adnotacja PostUserQuery umożliwia zdefiniowanie asystenta po powiązaniu wejściowym, które obsługuje następujące parametry:

Element opis
name Nazwa powiązania wyjściowego.
id Identyfikator asystenta do zaktualizowania.
Modelu Nazwa modelu czatu OpenAI do użycia. W przypadku usługi Azure OpenAI ta wartość jest nazwą wdrożenia modelu.

Dekoratory

W wersji zapoznawczej zdefiniuj powiązanie wyjściowe jako generic_output_binding powiązanie typu postUserQuery, które obsługuje następujące parametry:

Parametr Opis
arg_name Nazwa zmiennej reprezentującej parametr powiązania.
id Identyfikator asystenta do zaktualizowania.
Modelu Nazwa modelu czatu OpenAI do użycia. W przypadku usługi Azure OpenAI ta wartość jest nazwą wdrożenia modelu.

Konfigurowanie

Powiązanie obsługuje te właściwości konfiguracji ustawione w pliku function.json.

Właściwości Opis
type Musi mieć wartość PostUserQuery.
direction Musi mieć wartość out.
name Nazwa powiązania wyjściowego.
id Identyfikator asystenta do zaktualizowania.
Modelu Nazwa modelu czatu OpenAI do użycia. W przypadku usługi Azure OpenAI ta wartość jest nazwą wdrożenia modelu.

Konfigurowanie

Powiązanie obsługuje te właściwości zdefiniowane w kodzie:

Właściwości opis
id Identyfikator asystenta do zaktualizowania.
Modelu Nazwa modelu czatu OpenAI do użycia. W przypadku usługi Azure OpenAI ta wartość jest nazwą wdrożenia modelu.

Użycie

Zobacz sekcję Przykład, aby zapoznać się z kompletnymi przykładami.