다음을 통해 공유


Azure Functions에 대한 Azure OpenAI 텍스트 완성 입력 바인딩

중요합니다

Azure Functions용 Azure OpenAI 확장은 현재 미리 보기 상태입니다.

Azure OpenAI 텍스트 완성 입력 바인딩을 사용하면 결과 텍스트 완성 API를 코드 실행으로 가져올 수 있습니다. 미리 정의된 프롬프트를 매개 변수와 함께 사용하거나 전체 프롬프트를 통과하도록 바인딩을 정의할 수 있습니다.

Azure OpenAI 확장의 설정 및 구성 세부 정보에 대한 자세한 내용은 Azure Functions용 Azure OpenAI 확장을 참조하세요. Azure OpenAI 완성에 대한 자세한 내용은 텍스트를 생성하거나 조작하는 방법을 알아봅니다.

비고

참조 및 예는 Node.js v4 모델에 대해서만 제공됩니다.

비고

참조 및 예는 Python v2 모델에 대해서만 제공됩니다.

비고

두 C# 프로세스 모델이 모두 지원되지만 격리된 작업자 모델 예제만 제공됩니다.

예시

이 예제에서는 HTTP 트리거 함수가 매개 변수를 사용하여 텍스트 프롬프트에 포함하는 name 패턴을 보여 줍니다. 그러면 확장에서 Azure OpenAI 완성 API로 전송됩니다. 프롬프트에 대한 응답은 HTTP 응답으로 반환됩니다.

[Function(nameof(WhoIs))]
public static IActionResult WhoIs(
    [HttpTrigger(AuthorizationLevel.Function, Route = "whois/{name}")] HttpRequestData req,
    [TextCompletionInput("Who is {name}?", ChatModel = "%CHAT_MODEL_DEPLOYMENT_NAME%")] TextCompletionResponse response)
{
    return new OkObjectResult(response.Content);
}

이 예제에서는 프롬프트를 입력으로 사용하고, 완료 API로 직접 보내고, 응답을 출력으로 반환합니다.

[Function(nameof(GenericCompletion))]
public static IActionResult GenericCompletion(
    [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req,
    [TextCompletionInput("{Prompt}", ChatModel = "%CHAT_MODEL_DEPLOYMENT_NAME%")] TextCompletionResponse response,
    ILogger log)
{
    string text = response.Content;
    return new OkObjectResult(text);
}

이 예제에서는 HTTP 트리거 함수가 매개 변수를 사용하여 텍스트 프롬프트에 포함하는 name 패턴을 보여 줍니다. 그러면 확장에서 Azure OpenAI 완성 API로 전송됩니다. 프롬프트에 대한 응답은 HTTP 응답으로 반환됩니다.

@FunctionName("WhoIs")
public HttpResponseMessage whoIs(
    @HttpTrigger(
        name = "req", 
        methods = {HttpMethod.GET},
        authLevel = AuthorizationLevel.ANONYMOUS, 
        route = "whois/{name}") 
        HttpRequestMessage<Optional<String>> request,
    @BindingName("name") String name,
    @TextCompletion(prompt = "Who is {name}?", chatModel = "%CHAT_MODEL_DEPLOYMENT_NAME%", name = "response", isReasoningModel = false) TextCompletionResponse response,
    final ExecutionContext context) {
    return request.createResponseBuilder(HttpStatus.OK)
        .header("Content-Type", "application/json")
        .body(response.getContent())
        .build();
}

이 예제에서는 프롬프트를 입력으로 사용하고, 완료 API로 직접 보내고, 응답을 출력으로 반환합니다.

@FunctionName("GenericCompletion")
public HttpResponseMessage genericCompletion(
    @HttpTrigger(
        name = "req", 
        methods = {HttpMethod.POST},
        authLevel = AuthorizationLevel.ANONYMOUS) 
        HttpRequestMessage<Optional<String>> request,
    @TextCompletion(prompt = "{prompt}", chatModel = "%CHAT_MODEL_DEPLOYMENT_NAME%", name = "response", isReasoningModel = false) TextCompletionResponse response,
    final ExecutionContext context) {
    return request.createResponseBuilder(HttpStatus.OK)
        .header("Content-Type", "application/json")
        .body(response.getContent())
        .build();
}

이 예제에서는 HTTP 트리거 함수가 매개 변수를 사용하여 텍스트 프롬프트에 포함하는 name 패턴을 보여 줍니다. 그러면 확장에서 Azure OpenAI 완성 API로 전송됩니다. 프롬프트에 대한 응답은 HTTP 응답으로 반환됩니다.

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

// This OpenAI completion input requires a {name} binding value.
const openAICompletionInput = input.generic({
    prompt: 'Who is {name}?',
    maxTokens: '100',
    type: 'textCompletion',
    chatModel: '%CHAT_MODEL_DEPLOYMENT_NAME%'
})

app.http('whois', {
    methods: ['GET'],
    route: 'whois/{name}',
    authLevel: 'function',
    extraInputs: [openAICompletionInput],
    handler: async (_request, context) => {
        var response = context.extraInputs.get(openAICompletionInput)
        return { body: response.content.trim() }
    }
});

이 예제에서는 HTTP 트리거 함수가 매개 변수를 사용하여 텍스트 프롬프트에 포함하는 name 패턴을 보여 줍니다. 그러면 확장에서 Azure OpenAI 완성 API로 전송됩니다. 프롬프트에 대한 응답은 HTTP 응답으로 반환됩니다.

import { app, input } from "@azure/functions";

// This OpenAI completion input requires a {name} binding value.
const openAICompletionInput = input.generic({
    prompt: 'Who is {name}?',
    maxTokens: '100',
    type: 'textCompletion',
    chatModel: '%CHAT_MODEL_DEPLOYMENT_NAME%'
})

app.http('whois', {
    methods: ['GET'],
    route: 'whois/{name}',
    authLevel: 'function',
    extraInputs: [openAICompletionInput],
    handler: async (_request, context) => {
        var response: any = context.extraInputs.get(openAICompletionInput)
        return { body: response.content.trim() }
    }
});

이 예제에서는 HTTP 트리거 함수가 매개 변수를 사용하여 텍스트 프롬프트에 포함하는 name 패턴을 보여 줍니다. 그러면 확장에서 Azure OpenAI 완성 API로 전송됩니다. 프롬프트에 대한 응답은 HTTP 응답으로 반환됩니다.

다음은 에 대한 TextCompletionResponse 파일입니다.

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "route": "whois/{name}",
      "methods": [
        "get"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    },
    {
      "type": "textCompletion",
      "direction": "in",
      "name": "TextCompletionResponse",
      "prompt": "Who is {name}?",
      "maxTokens": "100",
      "chatModel": "%CHAT_MODEL_DEPLOYMENT_NAME%"
    }
  ]
}

function.json 파일 속성에 대한 자세한 내용은 구성 섹션을 참조하세요.

이 코드는 완성 API의 텍스트를 응답으로 반환합니다.

using namespace System.Net

param($Request, $TriggerMetadata, $TextCompletionResponse)

Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
        StatusCode = [HttpStatusCode]::OK
        Body       = $TextCompletionResponse.Content
    })

이 예제에서는 HTTP 트리거 함수가 매개 변수를 사용하여 텍스트 프롬프트에 포함하는 name 패턴을 보여 줍니다. 그러면 확장에서 Azure OpenAI 완성 API로 전송됩니다. 프롬프트에 대한 응답은 HTTP 응답으로 반환됩니다.

@app.route(route="whois/{name}", methods=["GET"])
@app.text_completion_input(
    arg_name="response",
    prompt="Who is {name}?",
    max_tokens="100",
    chat_model="%CHAT_MODEL_DEPLOYMENT_NAME%",
)
def whois(req: func.HttpRequest, response: str) -> func.HttpResponse:
    response_json = json.loads(response)
    return func.HttpResponse(response_json["content"], status_code=200)

이 예제에서는 프롬프트를 입력으로 사용하고, 완료 API로 직접 보내고, 응답을 출력으로 반환합니다.

@app.route(route="genericcompletion", methods=["POST"])
@app.text_completion_input(
    arg_name="response",
    prompt="{Prompt}",
    chat_model="%CHAT_MODEL_DEPLOYMENT_NAME%",
)
def genericcompletion(
    req: func.HttpRequest,
    response: str
) -> func.HttpResponse:
    response_json = json.loads(response)
    return func.HttpResponse(response_json["content"], status_code=200)

특성

텍스트 완성 입력 바인딩을 정의하기 위해 적용하는 특정 특성은 C# 프로세스 모드에 따라 달라집니다.

격리된 작업자 모델에서 텍스트 완성 입력 바인딩을 정의하려면 적용 TextCompletionInput 합니다.

이 특성은 다음 매개 변수를 지원합니다.

매개 변수 설명
프롬프트 문자열로 인코딩된 완료를 생성하는 프롬프트를 가져오거나 설정합니다.
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이 있는 예상 속성의 패리티가 있을 때까지 추론 모델과 연결됩니다.

주석

주석을 TextCompletion 사용하면 다음 매개 변수를 지원하는 텍스트 완성 입력 바인딩을 정의할 수 있습니다.

요소 설명
이름 입력 바인딩의 이름을 가져오거나 설정합니다.
프롬프트 문자열로 인코딩된 완료를 생성하는 프롬프트를 가져오거나 설정합니다.
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_input_binding 형식의 textCompletion 바인딩으로 정의합니다.

매개 변수 설명
arg_name 바인딩 매개 변수를 나타내는 변수의 이름입니다.
프롬프트 문자열로 인코딩된 완료를 생성하는 프롬프트를 가져오거나 설정합니다.
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 파일에 설정한 이러한 구성 속성을 지원합니다.

재산 설명
유형 textCompletion이어야 합니다.
방향 in이어야 합니다.
이름 입력 바인딩의 이름입니다.
프롬프트 문자열로 인코딩된 완료를 생성하는 프롬프트를 가져오거나 설정합니다.
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이 있는 예상 속성의 패리티가 있을 때까지 추론 모델과 연결됩니다.

구성 / 설정

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

재산 설명
프롬프트 문자열로 인코딩된 완료를 생성하는 프롬프트를 가져오거나 설정합니다.
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이 있는 예상 속성의 패리티가 있을 때까지 추론 모델과 연결됩니다.

사용법

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