Azure Functions에 대한 Azure OpenAI 임베딩 입력 바인딩
Important
Azure Functions용 Azure OpenAI 확장은 현재 미리 보기 상태입니다.
Azure OpenAI 임베딩 입력 바인딩을 사용하면 입력에 대한 임베딩을 생성할 수 있습니다. 바인딩은 파일 또는 원시 텍스트 입력에서 임베딩을 생성할 수 있습니다.
Azure OpenAI 확장의 설정 및 구성 세부 정보에 대한 자세한 내용은 Azure Functions용 Azure OpenAI 확장을 참조하세요. Azure OpenAI Service의 포함에 대한 자세한 내용은 Azure OpenAI Service의 포함 이해를 참조하세요.
참고 항목
참조 및 예는 Node.js v4 모델에 대해서만 제공됩니다.
참고 항목
참조 및 예는 Python v2 모델에 대해서만 제공됩니다.
참고 항목
두 C# 프로세스 모델이 모두 지원되지만 격리된 작업자 모델 예제만 제공됩니다.
예시
이 예제에서는 원시 텍스트 문자열에 대한 임베딩을 생성하는 방법을 보여 줍니다.
[Function(nameof(GenerateEmbeddings_Http_RequestAsync))]
public async Task GenerateEmbeddings_Http_RequestAsync(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = "embeddings")] HttpRequestData req,
[EmbeddingsInput("{rawText}", InputType.RawText, Model = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%")] EmbeddingsContext embeddings)
{
using StreamReader reader = new(req.Body);
string request = await reader.ReadToEndAsync();
EmbeddingsRequest? requestBody = JsonSerializer.Deserialize<EmbeddingsRequest>(request);
this.logger.LogInformation(
"Received {count} embedding(s) for input text containing {length} characters.",
embeddings.Count,
requestBody?.RawText?.Length);
// TODO: Store the embeddings into a database or other storage.
}
이 예제에서는 함수에 액세스할 수 있는 지정된 파일에 저장된 포함을 검색하는 방법을 보여 줍니다.
[Function(nameof(GetEmbeddings_Http_FilePath))]
public async Task GetEmbeddings_Http_FilePath(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = "embeddings-from-file")] HttpRequestData req,
[EmbeddingsInput("{filePath}", InputType.FilePath, MaxChunkLength = 512, Model = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%")] EmbeddingsContext embeddings)
{
using StreamReader reader = new(req.Body);
string request = await reader.ReadToEndAsync();
EmbeddingsRequest? requestBody = JsonSerializer.Deserialize<EmbeddingsRequest>(request);
this.logger.LogInformation(
"Received {count} embedding(s) for input file '{path}'.",
embeddings.Count,
requestBody?.FilePath);
// TODO: Store the embeddings into a database or other storage.
}
이 예제에서는 원시 텍스트 문자열에 대한 임베딩을 생성하는 방법을 보여 줍니다.
@FunctionName("GenerateEmbeddingsHttpRequest")
public HttpResponseMessage generateEmbeddingsHttpRequest(
@HttpTrigger(
name = "req",
methods = {HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS,
route = "embeddings")
HttpRequestMessage<EmbeddingsRequest> request,
@EmbeddingsInput(name = "Embeddings", input = "{RawText}", inputType = InputType.RawText, model = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%") String embeddingsContext,
final ExecutionContext context) {
if (request.getBody() == null)
{
throw new IllegalArgumentException("Invalid request body. Make sure that you pass in {\"rawText\": value } as the request body.");
}
JSONObject embeddingsContextJsonObject = new JSONObject(embeddingsContext);
context.getLogger().info(String.format("Received %d embedding(s) for input text containing %s characters.",
embeddingsContextJsonObject.getJSONObject("response")
.getJSONArray("data")
.getJSONObject(0)
.getJSONArray("embedding").length(),
request.getBody().getRawText().length()));
// TODO: Store the embeddings into a database or other storage.
return request.createResponseBuilder(HttpStatus.ACCEPTED)
.header("Content-Type", "application/json")
.build();
}
이 예제에서는 함수에 액세스할 수 있는 지정된 파일에 저장된 포함을 검색하는 방법을 보여 줍니다.
@FunctionName("GenerateEmbeddingsHttpFilePath")
public HttpResponseMessage generateEmbeddingsHttpFilePath(
@HttpTrigger(
name = "req",
methods = {HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS,
route = "embeddings-from-file")
HttpRequestMessage<EmbeddingsRequest> request,
@EmbeddingsInput(name = "Embeddings", input = "{FilePath}", inputType = InputType.FilePath, maxChunkLength = 512, model = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%") String embeddingsContext,
final ExecutionContext context) {
if (request.getBody() == null)
{
throw new IllegalArgumentException("Invalid request body. Make sure that you pass in {\"rawText\": value } as the request body.");
}
JSONObject embeddingsContextJsonObject = new JSONObject(embeddingsContext);
context.getLogger().info(String.format("Received %d embedding(s) for input file %s.",
embeddingsContextJsonObject.getJSONObject("response")
.getJSONArray("data")
.getJSONObject(0)
.getJSONArray("embedding").length(),
request.getBody().getFilePath()));
// TODO: Store the embeddings into a database or other storage.
return request.createResponseBuilder(HttpStatus.ACCEPTED)
.header("Content-Type", "application/json")
.build();
}
예는 아직 제공되지 않습니다.
이 예제에서는 원시 텍스트 문자열에 대한 임베딩을 생성하는 방법을 보여 줍니다.
const embeddingsHttpInput = input.generic({
input: '{rawText}',
inputType: 'RawText',
type: 'embeddings',
model: '%EMBEDDING_MODEL_DEPLOYMENT_NAME%'
})
app.http('generateEmbeddings', {
methods: ['POST'],
route: 'embeddings',
authLevel: 'function',
extraInputs: [embeddingsHttpInput],
handler: async (request, context) => {
let requestBody: EmbeddingsHttpRequest = await request.json();
let response: any = context.extraInputs.get(embeddingsHttpInput);
context.log(
`Received ${response.count} embedding(s) for input text containing ${requestBody.RawText.length} characters.`
);
// TODO: Store the embeddings into a database or other storage.
return {status: 202}
}
});
이 예제에서는 함수에 액세스할 수 있는 지정된 파일에 저장된 포함을 검색하는 방법을 보여 줍니다.
const embeddingsFilePathInput = input.generic({
input: '{filePath}',
inputType: 'FilePath',
type: 'embeddings',
maxChunkLength: 512,
model: '%EMBEDDING_MODEL_DEPLOYMENT_NAME%'
})
app.http('getEmbeddingsFilePath', {
methods: ['POST'],
route: 'embeddings-from-file',
authLevel: 'function',
extraInputs: [embeddingsFilePathInput],
handler: async (request, context) => {
let requestBody: EmbeddingsFilePath = await request.json();
let response: any = context.extraInputs.get(embeddingsFilePathInput);
context.log(
`Received ${response.count} embedding(s) for input file ${requestBody.FilePath}.`
);
// TODO: Store the embeddings into a database or other storage.
return {status: 202}
}
이 예제에서는 원시 텍스트 문자열에 대한 임베딩을 생성하는 방법을 보여 줍니다.
포함을 생성하기 위한 function.json 파일은 다음과 같습니다.
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "Request",
"route": "embeddings",
"methods": [
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "Response"
},
{
"name": "Embeddings",
"type": "embeddings",
"direction": "in",
"inputType": "RawText",
"input": "{rawText}",
"model": "%EMBEDDING_MODEL_DEPLOYMENT_NAME%"
}
]
}
function.json 파일 속성에 대한 자세한 내용은 구성 섹션을 참조하세요.
using namespace System.Net
param($Request, $TriggerMetadata, $Embeddings)
$input = $Request.Body.RawText
Write-Host "Received $($Embeddings.Count) embedding(s) for input text containing $($input.Length) characters."
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::Accepted
})
이 예제에서는 원시 텍스트 문자열에 대한 임베딩을 생성하는 방법을 보여 줍니다.
@app.function_name("GenerateEmbeddingsHttpRequest")
@app.route(route="embeddings", methods=["POST"])
@app.embeddings_input(arg_name="embeddings", input="{rawText}", input_type="rawText", model="%EMBEDDING_MODEL_DEPLOYMENT_NAME%")
def generate_embeddings_http_request(req: func.HttpRequest, embeddings: str) -> func.HttpResponse:
user_message = req.get_json()
embeddings_json = json.loads(embeddings)
embeddings_request = {
"raw_text": user_message.get("rawText")
}
logging.info(f'Received {embeddings_json.get("count")} embedding(s) for input text '
f'containing {len(embeddings_request.get("raw_text"))} characters.')
# TODO: Store the embeddings into a database or other storage.
return func.HttpResponse(status_code=200)
특성
EmbeddingsInput
특성을 적용하여 다음 매개 변수를 지원하는 임베딩 입력 바인딩을 정의합니다.
매개 변수 | 설명 |
---|---|
Input | 임베딩을 생성할 입력 문자열입니다. |
모델 | 선택 사항. 사용할 모델의 ID이며, 기본값은 text-embedding-ada-002 입니다. 기존 데이터베이스에 대한 모델을 변경해서는 안 됩니다. 자세한 내용은 사용량을 참조하세요. |
MaxChunkLength | 선택 사항. 입력을 청크하는 데 사용되는 최대 문자 수입니다. 자세한 내용은 사용량을 참조하세요. |
MaxOverlap | 선택 사항. 청크 간에 겹치는 최대 문자 수를 가져오거나 설정합니다. |
InputType | 선택 사항. 입력의 형식을 가져옵니다. |
주석
EmbeddingsInput
주석을 사용하면 다음 매개 변수를 지원하는 임베딩 입력 바인딩을 정의할 수 있습니다.
요소 | 설명 |
---|---|
이름 | 입력 바인딩의 이름을 가져오거나 설정합니다. |
input | 임베딩을 생성할 입력 문자열입니다. |
model | 선택 사항. 사용할 모델의 ID이며, 기본값은 text-embedding-ada-002 입니다. 기존 데이터베이스에 대한 모델을 변경해서는 안 됩니다. 자세한 내용은 사용량을 참조하세요. |
maxChunkLength | 선택 사항. 입력을 청크하는 데 사용되는 최대 문자 수입니다. 자세한 내용은 사용량을 참조하세요. |
maxOverlap | 선택 사항. 청크 간에 겹치는 최대 문자 수를 가져오거나 설정합니다. |
inputType | 선택 사항. 입력의 형식을 가져옵니다. |
데코레이터
미리 보기 중에 입력 바인딩을 다음 매개 변수를 지원하는 embeddings
형식의 generic_input_binding
바인딩으로 정의합니다. embeddings
데코레이터는 다음 매개 변수를 지원합니다.
매개 변수 | 설명 |
---|---|
arg_name | 바인딩 매개 변수를 나타내는 변수의 이름입니다. |
input | 임베딩을 생성할 입력 문자열입니다. |
model | 선택 사항. 사용할 모델의 ID이며, 기본값은 text-embedding-ada-002 입니다. 기존 데이터베이스에 대한 모델을 변경해서는 안 됩니다. 자세한 내용은 사용량을 참조하세요. |
maxChunkLength | 선택 사항. 입력을 청크하는 데 사용되는 최대 문자 수입니다. 자세한 내용은 사용량을 참조하세요. |
max_overlap | 선택 사항. 청크 간에 겹치는 최대 문자 수를 가져오거나 설정합니다. |
input_type | 입력의 형식을 가져옵니다. |
구성
바인딩은 function.json 파일에 설정한 이러한 구성 속성을 지원합니다.
속성 | 설명 |
---|---|
type | EmbeddingsInput 이어야 합니다. |
direction | in 이어야 합니다. |
이름 | 입력 바인딩의 이름입니다. |
input | 임베딩을 생성할 입력 문자열입니다. |
model | 선택 사항. 사용할 모델의 ID이며, 기본값은 text-embedding-ada-002 입니다. 기존 데이터베이스에 대한 모델을 변경해서는 안 됩니다. 자세한 내용은 사용량을 참조하세요. |
maxChunkLength | 선택 사항. 입력을 청크하는 데 사용되는 최대 문자 수입니다. 자세한 내용은 사용량을 참조하세요. |
maxOverlap | 선택 사항. 청크 간에 겹치는 최대 문자 수를 가져오거나 설정합니다. |
inputType | 선택 사항. 입력의 형식을 가져옵니다. |
구성
바인딩은 코드에 정의된 다음 속성을 지원합니다.
속성 | 설명 |
---|---|
input | 임베딩을 생성할 입력 문자열입니다. |
model | 선택 사항. 사용할 모델의 ID이며, 기본값은 text-embedding-ada-002 입니다. 기존 데이터베이스에 대한 모델을 변경해서는 안 됩니다. 자세한 내용은 사용량을 참조하세요. |
maxChunkLength | 선택 사항. 입력을 청크하는 데 사용되는 최대 문자 수입니다. 자세한 내용은 사용량을 참조하세요. |
maxOverlap | 선택 사항. 청크 간에 겹치는 최대 문자 수를 가져오거나 설정합니다. |
inputType | 선택 사항. 입력의 형식을 가져옵니다. |
전체 예제는 예제 섹션을 참조하세요.
사용
기본 임베딩 model
을 변경하면 임베딩이 벡터 데이터베이스에 저장되는 방식을 변경합니다. 기본 모델을 변경하면 이전에 벡터 데이터베이스에 수집된 나머지 데이터와 일치하지 않을 때 조회가 잘못된 동작을 시작할 수 있습니다. 임베딩의 기본 모델은 text-embedding-ada-002
입니다.
입력 청크의 최대 문자 길이를 계산할 때는 text-embedding-ada-002
와 같은 2세대 입력 임베딩 모델에 허용되는 최대 입력 토큰이 8191
입니다. 단일 토큰은 약 4자 길이(영어)로, 단일 청크에 들어갈 수 있는 약 32,000자(영어) 입력 문자로 변환됩니다.