다음을 통해 공유


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

Important

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}?", Model = "%CHAT_MODEL_DEPLOYMENT_NAME%")] TextCompletionResponse response)
{
    return new OkObjectResult(response.Content);
}

/// <summary>

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

        [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req,
        [TextCompletionInput("{Prompt}", Model = "%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}?", model = "%CHAT_MODEL_DEPLOYMENT_NAME%", name = "response") 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}", model = "%CHAT_MODEL_DEPLOYMENT_NAME%", name = "response") 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',
    model: '%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',
    model: '%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에 대한 function.json 파일은 다음과 같습니다.

{
  "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",
      "model": "%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", 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}", 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을 적용하여 텍스트 완성 입력 바인딩을 정의합니다.

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

매개 변수 설명
프롬프트 문자열로 인코딩된 완성을 생성하는 프롬프트를 가져오거나 생성합니다.
모델 문자열로 사용할 모델의 ID를 가져오거나 설정하며, 기본값은 gpt-3.5-turbo입니다.
온도 선택 사항. 사용할 샘플링 온도를 02 사이의 문자열로 가져오거나 설정합니다. 값이 높을수록(0.8) 출력이 더 무작위로 생성되고, 값이 낮을수록(0.2) 출력이 더욱 집중되고 결정적이게 됩니다. Temperature 또는 TopP를 사용해야 하지만 둘 다 사용하지는 않습니다.
TopP 선택 사항. 핵 샘플링이라고 하는 온도를 문자열로 사용하여 샘플링하는 대안을 가져오거나 설정합니다. 이 샘플링 방법에서 모델은 top_p 확률 질량을 가진 토큰의 결과를 고려합니다. 따라서 0.1은 상위 10% 확률 질량을 구성하는 토큰만 고려됨을 의미합니다. Temperature 또는 TopP를 사용해야 하지만 둘 다 사용하지는 않습니다.
MaxTokens 선택 사항. 완료 시 생성할 최대 토큰 수를 문자열로 가져오거나 설정하며, 기본값은 100입니다. 프롬프트의 토큰 수에 max_tokens를 더한 값은 모델의 컨텍스트 길이를 초과할 수 없습니다. 대부분의 모델에는 컨텍스트 길이가 2,048인 토큰이 있습니다(4096을 지원하는 최신 모델 제외).

주석

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

요소 설명
이름 입력 바인딩의 이름을 가져오거나 설정합니다.
prompt 문자열로 인코딩된 완성을 생성하는 프롬프트를 가져오거나 생성합니다.
model 문자열로 사용할 모델의 ID를 가져오거나 설정하며, 기본값은 gpt-3.5-turbo입니다.
온도 선택 사항. 사용할 샘플링 온도를 02 사이의 문자열로 가져오거나 설정합니다. 값이 높을수록(0.8) 출력이 더 무작위로 생성되고, 값이 낮을수록(0.2) 출력이 더욱 집중되고 결정적이게 됩니다. Temperature 또는 TopP를 사용해야 하지만 둘 다 사용하지는 않습니다.
topP 선택 사항. 핵 샘플링이라고 하는 온도를 문자열로 사용하여 샘플링하는 대안을 가져오거나 설정합니다. 이 샘플링 방법에서 모델은 top_p 확률 질량을 가진 토큰의 결과를 고려합니다. 따라서 0.1은 상위 10% 확률 질량을 구성하는 토큰만 고려됨을 의미합니다. Temperature 또는 TopP를 사용해야 하지만 둘 다 사용하지는 않습니다.
maxTokens 선택 사항. 완료 시 생성할 최대 토큰 수를 문자열로 가져오거나 설정하며, 기본값은 100입니다. 프롬프트의 토큰 수에 max_tokens를 더한 값은 모델의 컨텍스트 길이를 초과할 수 없습니다. 대부분의 모델에는 컨텍스트 길이가 2,048인 토큰이 있습니다(4096을 지원하는 최신 모델 제외).

데코레이터

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

매개 변수 설명
arg_name 바인딩 매개 변수를 나타내는 변수의 이름입니다.
prompt 문자열로 인코딩된 완성을 생성하는 프롬프트를 가져오거나 생성합니다.
model 문자열로 사용할 모델의 ID를 가져오거나 설정하며, 기본값은 gpt-3.5-turbo입니다.
온도 선택 사항. 사용할 샘플링 온도를 02 사이의 문자열로 가져오거나 설정합니다. 값이 높을수록(0.8) 출력이 더 무작위로 생성되고, 값이 낮을수록(0.2) 출력이 더욱 집중되고 결정적이게 됩니다. Temperature 또는 TopP를 사용해야 하지만 둘 다 사용하지는 않습니다.
top_p 선택 사항. 핵 샘플링이라고 하는 온도를 문자열로 사용하여 샘플링하는 대안을 가져오거나 설정합니다. 이 샘플링 방법에서 모델은 top_p 확률 질량을 가진 토큰의 결과를 고려합니다. 따라서 0.1은 상위 10% 확률 질량을 구성하는 토큰만 고려됨을 의미합니다. Temperature 또는 TopP를 사용해야 하지만 둘 다 사용하지는 않습니다.
max_tokens 선택 사항. 완료 시 생성할 최대 토큰 수를 문자열로 가져오거나 설정하며, 기본값은 100입니다. 프롬프트의 토큰 수에 max_tokens를 더한 값은 모델의 컨텍스트 길이를 초과할 수 없습니다. 대부분의 모델에는 컨텍스트 길이가 2,048인 토큰이 있습니다(4096을 지원하는 최신 모델 제외).

구성

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

속성 설명
type textCompletion이어야 합니다.
direction in이어야 합니다.
이름 입력 바인딩의 이름입니다.
prompt 문자열로 인코딩된 완성을 생성하는 프롬프트를 가져오거나 생성합니다.
model 문자열로 사용할 모델의 ID를 가져오거나 설정하며, 기본값은 gpt-3.5-turbo입니다.
온도 선택 사항. 사용할 샘플링 온도를 02 사이의 문자열로 가져오거나 설정합니다. 값이 높을수록(0.8) 출력이 더 무작위로 생성되고, 값이 낮을수록(0.2) 출력이 더욱 집중되고 결정적이게 됩니다. Temperature 또는 TopP를 사용해야 하지만 둘 다 사용하지는 않습니다.
topP 선택 사항. 핵 샘플링이라고 하는 온도를 문자열로 사용하여 샘플링하는 대안을 가져오거나 설정합니다. 이 샘플링 방법에서 모델은 top_p 확률 질량을 가진 토큰의 결과를 고려합니다. 따라서 0.1은 상위 10% 확률 질량을 구성하는 토큰만 고려됨을 의미합니다. Temperature 또는 TopP를 사용해야 하지만 둘 다 사용하지는 않습니다.
maxTokens 선택 사항. 완료 시 생성할 최대 토큰 수를 문자열로 가져오거나 설정하며, 기본값은 100입니다. 프롬프트의 토큰 수에 max_tokens를 더한 값은 모델의 컨텍스트 길이를 초과할 수 없습니다. 대부분의 모델에는 컨텍스트 길이가 2,048인 토큰이 있습니다(4096을 지원하는 최신 모델 제외).

구성

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

속성 설명
prompt 문자열로 인코딩된 완성을 생성하는 프롬프트를 가져오거나 생성합니다.
model 문자열로 사용할 모델의 ID를 가져오거나 설정하며, 기본값은 gpt-3.5-turbo입니다.
온도 선택 사항. 사용할 샘플링 온도를 02 사이의 문자열로 가져오거나 설정합니다. 값이 높을수록(0.8) 출력이 더 무작위로 생성되고, 값이 낮을수록(0.2) 출력이 더욱 집중되고 결정적이게 됩니다. Temperature 또는 TopP를 사용해야 하지만 둘 다 사용하지는 않습니다.
topP 선택 사항. 핵 샘플링이라고 하는 온도를 문자열로 사용하여 샘플링하는 대안을 가져오거나 설정합니다. 이 샘플링 방법에서 모델은 top_p 확률 질량을 가진 토큰의 결과를 고려합니다. 따라서 0.1은 상위 10% 확률 질량을 구성하는 토큰만 고려됨을 의미합니다. Temperature 또는 TopP를 사용해야 하지만 둘 다 사용하지는 않습니다.
maxTokens 선택 사항. 완료 시 생성할 최대 토큰 수를 문자열로 가져오거나 설정하며, 기본값은 100입니다. 프롬프트의 토큰 수에 max_tokens를 더한 값은 모델의 컨텍스트 길이를 초과할 수 없습니다. 대부분의 모델에는 컨텍스트 길이가 2,048인 토큰이 있습니다(4096을 지원하는 최신 모델 제외).

사용

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