다음을 통해 공유


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)로 바꿉니다. 사용자 할당 관리 ID 인증의 경우 이 속성이 필요합니다. OpenAI 서비스(비 Azure)의 경우 OPENAI_API_KEY 환경 변수를 설정합니다.
ChatModel 선택 사항입니다. 기본값 gpt-3.5-turbo을 사용하여 문자열로 사용할 모델의 ID를 가져오거나 설정합니다.
온도 선택 사항입니다. 사용할 샘플링 온도를 문자열 02로 가져오거나 설정합니다. 값(0.8)이 높을수록 출력이 더 임의로 생성되고,(와) 같은 값이0.2 낮을수록 출력이 더 집중적이고 결정적입니다. 둘 다 Temperature 사용하거나 TopP사용하지 않아야 합니다.
TopP 선택 사항입니다. 핵 샘플링이라고 하는 온도를 문자열로 사용하여 샘플링하는 대안을 가져오거나 설정합니다. 이 샘플링 방법에서 모델은 확률 질량을 가진 top_p 토큰의 결과를 고려합니다. 따라서 0.1 상위 10개% 확률 질량을 구성하는 토큰만 고려됩니다. 둘 다 Temperature 사용하거나 TopP사용하지 않아야 합니다.
MaxTokens 선택 사항입니다. 완료 시 생성할 최대 토큰 수를 기본값 100인 문자열로 가져오거나 설정합니다. 프롬프트의 토큰 수에 max_tokens를 더한 값은 모델의 컨텍스트 길이를 초과할 수 없습니다. 대부분의 모델에는 컨텍스트 길이가 2,048 토큰(4096을 지원하는 최신 모델 제외)이 있습니다.
IsReasoningModel 선택 사항입니다. 채팅 완료 모델이 추론 모델인지 여부를 나타내는 값을 가져오거나 설정합니다. 이 옵션은 실험적이며 모든 모델에 기본값 false이 있는 예상 속성의 패리티가 있을 때까지 추론 모델과 연결됩니다.

주석

PostUserQuery 주석을 사용하면 이러한 매개 변수를 지원하는 도우미 사후 입력 바인딩을 정의할 수 있습니다.

요소 설명
이름 출력 바인딩의 이름입니다.
아이디 업데이트할 도우미의 ID입니다.
userMessage 문자열로 인코딩된 채팅 완료 모델에 대한 사용자 메시지를 가져오거나 설정합니다.
aiConnectionName 선택 사항입니다. AI 서비스 연결 설정에 대한 구성 섹션의 이름을 가져오거나 설정합니다. Azure OpenAI의 경우: 지정된 경우 이 구성 섹션에서 "엔드포인트" 및 "키" 값을 찾습니다. 지정하지 않았거나 섹션이 없으면 환경 변수(AZURE_OPENAI_ENDPOINT 및 AZURE_OPENAI_KEY)로 바꿉니다. 사용자 할당 관리 ID 인증의 경우 이 속성이 필요합니다. OpenAI 서비스(비 Azure)의 경우 OPENAI_API_KEY 환경 변수를 설정합니다.
chatModel 기본값 gpt-3.5-turbo을 사용하여 문자열로 사용할 모델의 ID를 가져오거나 설정합니다.
온도 선택 사항입니다. 사용할 샘플링 온도를 문자열 02로 가져오거나 설정합니다. 값(0.8)이 높을수록 출력이 더 임의로 생성되고,(와) 같은 값이0.2 낮을수록 출력이 더 집중적이고 결정적입니다. 둘 다 Temperature 사용하거나 TopP사용하지 않아야 합니다.
topP 선택 사항입니다. 핵 샘플링이라고 하는 온도를 문자열로 사용하여 샘플링하는 대안을 가져오거나 설정합니다. 이 샘플링 방법에서 모델은 확률 질량을 가진 top_p 토큰의 결과를 고려합니다. 따라서 0.1 상위 10개% 확률 질량을 구성하는 토큰만 고려됩니다. 둘 다 Temperature 사용하거나 TopP사용하지 않아야 합니다.
maxTokens 선택 사항입니다. 완료 시 생성할 최대 토큰 수를 기본값 100인 문자열로 가져오거나 설정합니다. 프롬프트의 토큰 수에 max_tokens를 더한 값은 모델의 컨텍스트 길이를 초과할 수 없습니다. 대부분의 모델에는 컨텍스트 길이가 2,048 토큰(4096을 지원하는 최신 모델 제외)이 있습니다.
isReasoningModel 선택 사항입니다. 채팅 완료 모델이 추론 모델인지 여부를 나타내는 값을 가져오거나 설정합니다. 이 옵션은 실험적이며 모든 모델에 기본값 false이 있는 예상 속성의 패리티가 있을 때까지 추론 모델과 연결됩니다.

데코레이터

미리 보기 중에 출력 바인딩을 다음 매개 변수를 지원하는 generic_output_binding 형식의 postUserQuery 바인딩으로 정의합니다.

매개 변수 설명
arg_name 바인딩 매개 변수를 나타내는 변수의 이름입니다.
아이디 업데이트할 도우미의 ID입니다.
user_message 문자열로 인코딩된 채팅 완료 모델에 대한 사용자 메시지를 가져오거나 설정합니다.
ai_connection_name 선택 사항입니다. AI 서비스 연결 설정에 대한 구성 섹션의 이름을 가져오거나 설정합니다. Azure OpenAI의 경우: 지정된 경우 이 구성 섹션에서 "엔드포인트" 및 "키" 값을 찾습니다. 지정하지 않았거나 섹션이 없으면 환경 변수(AZURE_OPENAI_ENDPOINT 및 AZURE_OPENAI_KEY)로 바꿉니다. 사용자 할당 관리 ID 인증의 경우 이 속성이 필요합니다. OpenAI 서비스(비 Azure)의 경우 OPENAI_API_KEY 환경 변수를 설정합니다.
chat_model 기본값 gpt-3.5-turbo을 사용하여 문자열로 사용할 모델의 ID를 가져오거나 설정합니다.
온도 선택 사항입니다. 사용할 샘플링 온도를 문자열 02로 가져오거나 설정합니다. 값(0.8)이 높을수록 출력이 더 임의로 생성되고,(와) 같은 값이0.2 낮을수록 출력이 더 집중적이고 결정적입니다. 둘 다 Temperature 사용하거나 TopP사용하지 않아야 합니다.
top_p 선택 사항입니다. 핵 샘플링이라고 하는 온도를 문자열로 사용하여 샘플링하는 대안을 가져오거나 설정합니다. 이 샘플링 방법에서 모델은 확률 질량을 가진 top_p 토큰의 결과를 고려합니다. 따라서 0.1 상위 10개% 확률 질량을 구성하는 토큰만 고려됩니다. 둘 다 Temperature 사용하거나 TopP사용하지 않아야 합니다.
max_tokens 선택 사항입니다. 완료 시 생성할 최대 토큰 수를 기본값 100인 문자열로 가져오거나 설정합니다. 프롬프트의 토큰 수에 max_tokens를 더한 값은 모델의 컨텍스트 길이를 초과할 수 없습니다. 대부분의 모델에는 컨텍스트 길이가 2,048 토큰(4096을 지원하는 최신 모델 제외)이 있습니다.
is_reasoning _model 선택 사항입니다. 채팅 완료 모델이 추론 모델인지 여부를 나타내는 값을 가져오거나 설정합니다. 이 옵션은 실험적이며 모든 모델에 기본값 false이 있는 예상 속성의 패리티가 있을 때까지 추론 모델과 연결됩니다.

구성

바인딩은 function.json 파일에 설정한 이러한 구성 속성을 지원합니다.

속성 설명
유형 PostUserQuery이어야 합니다.
방향 out이어야 합니다.
이름 출력 바인딩의 이름입니다.
아이디 업데이트할 도우미의 ID입니다.
userMessage 문자열로 인코딩된 채팅 완료 모델에 대한 사용자 메시지를 가져오거나 설정합니다.
aiConnectionName 선택 사항입니다. AI 서비스 연결 설정에 대한 구성 섹션의 이름을 가져오거나 설정합니다. Azure OpenAI의 경우: 지정된 경우 이 구성 섹션에서 "엔드포인트" 및 "키" 값을 찾습니다. 지정하지 않았거나 섹션이 없으면 환경 변수(AZURE_OPENAI_ENDPOINT 및 AZURE_OPENAI_KEY)로 바꿉니다. 사용자 할당 관리 ID 인증의 경우 이 속성이 필요합니다. OpenAI 서비스(비 Azure)의 경우 OPENAI_API_KEY 환경 변수를 설정합니다.
chatModel 기본값 gpt-3.5-turbo을 사용하여 문자열로 사용할 모델의 ID를 가져오거나 설정합니다.
온도 선택 사항입니다. 사용할 샘플링 온도를 문자열 02로 가져오거나 설정합니다. 값(0.8)이 높을수록 출력이 더 임의로 생성되고,(와) 같은 값이0.2 낮을수록 출력이 더 집중적이고 결정적입니다. 둘 다 Temperature 사용하거나 TopP사용하지 않아야 합니다.
topP 선택 사항입니다. 핵 샘플링이라고 하는 온도를 문자열로 사용하여 샘플링하는 대안을 가져오거나 설정합니다. 이 샘플링 방법에서 모델은 확률 질량을 가진 top_p 토큰의 결과를 고려합니다. 따라서 0.1 상위 10개% 확률 질량을 구성하는 토큰만 고려됩니다. 둘 다 Temperature 사용하거나 TopP사용하지 않아야 합니다.
maxTokens 선택 사항입니다. 완료 시 생성할 최대 토큰 수를 기본값 100인 문자열로 가져오거나 설정합니다. 프롬프트의 토큰 수에 max_tokens를 더한 값은 모델의 컨텍스트 길이를 초과할 수 없습니다. 대부분의 모델에는 컨텍스트 길이가 2,048 토큰(4096을 지원하는 최신 모델 제외)이 있습니다.
isReasoningModel 선택 사항입니다. 채팅 완료 모델이 추론 모델인지 여부를 나타내는 값을 가져오거나 설정합니다. 이 옵션은 실험적이며 모든 모델에 기본값 false이 있는 예상 속성의 패리티가 있을 때까지 추론 모델과 연결됩니다.

구성

바인딩은 코드에 정의된 다음 속성을 지원합니다.

속성 설명
아이디 업데이트할 도우미의 ID입니다.
userMessage 문자열로 인코딩된 채팅 완료 모델에 대한 사용자 메시지를 가져오거나 설정합니다.
aiConnectionName 선택 사항입니다. AI 서비스 연결 설정에 대한 구성 섹션의 이름을 가져오거나 설정합니다. Azure OpenAI의 경우: 지정된 경우 이 구성 섹션에서 "엔드포인트" 및 "키" 값을 찾습니다. 지정하지 않았거나 섹션이 없으면 환경 변수(AZURE_OPENAI_ENDPOINT 및 AZURE_OPENAI_KEY)로 바꿉니다. 사용자 할당 관리 ID 인증의 경우 이 속성이 필요합니다. OpenAI 서비스(비 Azure)의 경우 OPENAI_API_KEY 환경 변수를 설정합니다.
chatModel 기본값 gpt-3.5-turbo을 사용하여 문자열로 사용할 모델의 ID를 가져오거나 설정합니다.
온도 선택 사항입니다. 사용할 샘플링 온도를 문자열 02로 가져오거나 설정합니다. 값(0.8)이 높을수록 출력이 더 임의로 생성되고,(와) 같은 값이0.2 낮을수록 출력이 더 집중적이고 결정적입니다. 둘 다 Temperature 사용하거나 TopP사용하지 않아야 합니다.
topP 선택 사항입니다. 핵 샘플링이라고 하는 온도를 문자열로 사용하여 샘플링하는 대안을 가져오거나 설정합니다. 이 샘플링 방법에서 모델은 확률 질량을 가진 top_p 토큰의 결과를 고려합니다. 따라서 0.1 상위 10개% 확률 질량을 구성하는 토큰만 고려됩니다. 둘 다 Temperature 사용하거나 TopP사용하지 않아야 합니다.
maxTokens 선택 사항입니다. 완료 시 생성할 최대 토큰 수를 기본값 100인 문자열로 가져오거나 설정합니다. 프롬프트의 토큰 수에 max_tokens를 더한 값은 모델의 컨텍스트 길이를 초과할 수 없습니다. 대부분의 모델에는 컨텍스트 길이가 2,048 토큰(4096을 지원하는 최신 모델 제외)이 있습니다.
isReasoningModel 선택 사항입니다. 채팅 완료 모델이 추론 모델인지 여부를 나타내는 값을 가져오거나 설정합니다. 이 옵션은 실험적이며 모든 모델에 기본값 false이 있는 예상 속성의 패리티가 있을 때까지 추론 모델과 연결됩니다.

사용

전체 예제는 예제 섹션을 참조하세요.