Azure Functions에 대한 Azure OpenAI 임베딩 저장소 출력 바인딩
Important
Azure Functions용 Azure OpenAI 확장은 현재 미리 보기 상태입니다.
Azure OpenAI 임베딩 저장소 출력 바인딩을 사용하면 의미 체계 검색의 뒷부분에서 참조할 수 있는 의미 체계 문서 저장소에 파일을 쓸 수 있습니다.
Azure OpenAI 확장의 설정 및 구성 세부 정보에 대한 자세한 내용은 Azure Functions용 Azure OpenAI 확장을 참조하세요. Azure AI 검색의 의미 체계 순위 지정에 대해 자세히 알아보려면 Azure AI 검색의 의미 체계 순위 지정을 참조하세요.
참고 항목
참조 및 예는 Node.js v4 모델에 대해서만 제공됩니다.
참고 항목
참조 및 예는 Python v2 모델에 대해서만 제공됩니다.
참고 항목
두 C# 프로세스 모델이 모두 지원되지만 격리된 작업자 모델 예제만 제공됩니다.
예시
이 예제에서는 제공된 URL의 의미 체계 문서 저장소에 HTTP 입력 스트림을 씁니다.
[Function("IngestFile")]
public static async Task<EmbeddingsStoreOutputResponse> IngestFile(
[HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req)
{
ArgumentNullException.ThrowIfNull(req);
using StreamReader reader = new(req.Body);
string request = await reader.ReadToEndAsync();
if (string.IsNullOrWhiteSpace(request))
{
throw new ArgumentException("Request body is empty.");
}
EmbeddingsRequest? requestBody = JsonSerializer.Deserialize<EmbeddingsRequest>(request);
if (string.IsNullOrWhiteSpace(requestBody?.Url))
{
throw new ArgumentException("Invalid request body. Make sure that you pass in {\"url\": value } as the request body.");
}
if (!Uri.TryCreate(requestBody.Url, UriKind.Absolute, out Uri? uri))
{
throw new ArgumentException("Invalid Url format.");
}
string filename = Path.GetFileName(uri.AbsolutePath);
return new EmbeddingsStoreOutputResponse
{
HttpResponse = new OkObjectResult(new { status = HttpStatusCode.OK }),
SearchableDocument = new SearchableDocument(filename)
};
이 예제에서는 제공된 URL의 의미 체계 문서 저장소에 HTTP 입력 스트림을 씁니다.
import com.microsoft.azure.functions.openai.annotation.search.SearchableDocument;
import com.microsoft.azure.functions.openai.annotation.search.SemanticSearch;
public class FilePrompt {
@FunctionName("IngestFile")
public HttpResponseMessage ingestFile(
@HttpTrigger(
name = "req",
methods = {HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<EmbeddingsRequest> request,
@EmbeddingsStoreOutput(name="EmbeddingsStoreOutput", input = "{url}", inputType = InputType.Url,
connectionName = "AISearchEndpoint", collection = "openai-index",
model = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%") OutputBinding<EmbeddingsStoreOutputResponse> output,
final ExecutionContext context) throws URISyntaxException {
if (request.getBody() == null || request.getBody().getUrl() == null)
{
throw new IllegalArgumentException("Invalid request body. Make sure that you pass in {\"url\": value } as the request body.");
}
URI uri = new URI(request.getBody().getUrl());
String filename = Paths.get(uri.getPath()).getFileName().toString();
EmbeddingsStoreOutputResponse embeddingsStoreOutputResponse = new EmbeddingsStoreOutputResponse(new SearchableDocument(filename));
output.setValue(embeddingsStoreOutputResponse);
JSONObject response = new JSONObject();
response.put("status", "success");
response.put("title", filename);
return request.createResponseBuilder(HttpStatus.CREATED)
.header("Content-Type", "application/json")
.body(response)
.build();
}
public class EmbeddingsStoreOutputResponse {
private SearchableDocument searchableDocument;
public EmbeddingsStoreOutputResponse(SearchableDocument searchableDocument) {
this.searchableDocument = searchableDocument;
}
예는 아직 제공되지 않습니다.
이 예제에서는 제공된 URL의 의미 체계 문서 저장소에 HTTP 입력 스트림을 씁니다.
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}
}
});
interface EmbeddingsFilePath {
FilePath?: string;
}
const embeddingsFilePathInput = input.generic({
input: '{filePath}',
이 예제에서는 제공된 URL의 의미 체계 문서 저장소에 HTTP 입력 스트림을 씁니다.
다음은 파일을 수집하기 위한 function.json 파일입니다.
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "Request",
"methods": [
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "Response"
},
{
"name": "EmbeddingsStoreOutput",
"type": "embeddingsStore",
"direction": "out",
"input": "{url}",
"inputType": "Url",
"connectionName": "AISearchEndpoint",
"collection": "openai-index",
"model": "%EMBEDDING_MODEL_DEPLOYMENT_NAME%"
}
]
}
function.json 파일 속성에 대한 자세한 내용은 구성 섹션을 참조하세요.
using namespace System.Net
param($Request, $TriggerMetadata)
$ErrorActionPreference = 'Stop'
$inputJson = $Request.Body
if (-not $inputJson -or -not $inputJson.Url) {
throw 'Invalid request body. Make sure that you pass in {\"url\": value } as the request body.'
}
$uri = [URI]$inputJson.Url
$filename = [System.IO.Path]::GetFileName($uri.AbsolutePath)
Push-OutputBinding -Name EmbeddingsStoreOutput -Value @{
"title" = $filename
}
$response = @{
"status" = "success"
"title" = $filename
}
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $response
Headers = @{
"Content-Type" = "application/json"
}
})
이 예제에서는 제공된 URL의 의미 체계 문서 저장소에 HTTP 입력 스트림을 씁니다.
@app.function_name("IngestFile")
@app.route(methods=["POST"])
@app.embeddings_store_output(arg_name="requests", input="{url}", input_type="url", connection_name="AISearchEndpoint", collection="openai-index", model="%EMBEDDING_MODEL_DEPLOYMENT_NAME%")
def ingest_file(req: func.HttpRequest, requests: func.Out[str]) -> func.HttpResponse:
user_message = req.get_json()
if not user_message:
return func.HttpResponse(json.dumps({"message": "No message provided"}), status_code=400, mimetype="application/json")
file_name_with_extension = os.path.basename(user_message["url"])
title = os.path.splitext(file_name_with_extension)[0]
create_request = {
"title": title
}
requests.set(json.dumps(create_request))
response_json = {
"status": "success",
"title": title
}
return func.HttpResponse(json.dumps(response_json), status_code=200, mimetype="application/json")
특성
EmbeddingsStoreOutput
특성을 적용하여 다음 매개 변수를 지원하는 임베딩 저장소 출력 바인딩을 정의합니다.
매개 변수 | 설명 |
---|---|
Input | 임베딩을 생성할 입력 문자열입니다. |
모델 | 선택 사항. 사용할 모델의 ID이며, 기본값은 text-embedding-ada-002 입니다. 기존 데이터베이스에 대한 모델을 변경해서는 안 됩니다. 자세한 내용은 사용량을 참조하세요. |
MaxChunkLength | 선택 사항. 입력을 청크하는 데 사용되는 최대 문자 수입니다. 자세한 내용은 사용량을 참조하세요. |
MaxOverlap | 선택 사항. 청크 간에 겹치는 최대 문자 수를 가져오거나 설정합니다. |
InputType | 선택 사항. 입력의 형식을 가져옵니다. |
ConnectionName | 연결 문자열 값이 포함된 앱 설정 또는 환경 변수의 이름입니다. 이 속성은 바인딩 식을 지원합니다. |
컬렉션 | 검색할 컬렉션, 테이블 또는 인덱스의 이름입니다. 이 속성은 바인딩 식을 지원합니다. |
주석
EmbeddingsStoreOutput
주석을 사용하면 다음 매개 변수를 지원하는 embeddings 저장소 출력 바인딩을 정의할 수 있습니다.
요소 | 설명 |
---|---|
이름 | 출력 바인딩의 이름을 가져오거나 설정합니다. |
input | 임베딩을 생성할 입력 문자열입니다. |
model | 선택 사항. 사용할 모델의 ID이며, 기본값은 text-embedding-ada-002 입니다. 기존 데이터베이스에 대한 모델을 변경해서는 안 됩니다. 자세한 내용은 사용량을 참조하세요. |
maxChunkLength | 선택 사항. 입력을 청크하는 데 사용되는 최대 문자 수입니다. 자세한 내용은 사용량을 참조하세요. |
maxOverlap | 선택 사항. 청크 간에 겹치는 최대 문자 수를 가져오거나 설정합니다. |
inputType | 선택 사항. 입력의 형식을 가져옵니다. |
connectionName | 연결 문자열 값이 포함된 앱 설정 또는 환경 변수의 이름입니다. 이 속성은 바인딩 식을 지원합니다. |
컬렉션 | 검색할 컬렉션, 테이블 또는 인덱스의 이름입니다. 이 속성은 바인딩 식을 지원합니다. |
데코레이터
미리 보기 중에 출력 바인딩을 다음 매개 변수를 지원하는 semanticSearch
형식의 generic_output_binding
바인딩으로 정의합니다.
매개 변수 | 설명 |
---|---|
arg_name | 바인딩 매개 변수를 나타내는 변수의 이름입니다. |
input | 임베딩을 생성할 입력 문자열입니다. |
model | 선택 사항. 사용할 모델의 ID이며, 기본값은 text-embedding-ada-002 입니다. 기존 데이터베이스에 대한 모델을 변경해서는 안 됩니다. 자세한 내용은 사용량을 참조하세요. |
maxChunkLength | 선택 사항. 입력을 청크하는 데 사용되는 최대 문자 수입니다. 자세한 내용은 사용량을 참조하세요. |
max_overlap | 선택 사항. 청크 간에 겹치는 최대 문자 수를 가져오거나 설정합니다. |
input_type | 입력의 형식을 가져옵니다. |
connection_name | 연결 문자열 값이 포함된 앱 설정 또는 환경 변수의 이름입니다. 이 속성은 바인딩 식을 지원합니다. |
컬렉션 | 검색할 컬렉션, 테이블 또는 인덱스의 이름입니다. 이 속성은 바인딩 식을 지원합니다. |
구성
바인딩은 function.json 파일에 설정한 이러한 구성 속성을 지원합니다.
속성 | 설명 |
---|---|
type | embeddingsStore 이어야 합니다. |
direction | out 이어야 합니다. |
이름 | 출력 바인딩의 이름입니다. |
input | 임베딩을 생성할 입력 문자열입니다. |
model | 선택 사항. 사용할 모델의 ID이며, 기본값은 text-embedding-ada-002 입니다. 기존 데이터베이스에 대한 모델을 변경해서는 안 됩니다. 자세한 내용은 사용량을 참조하세요. |
maxChunkLength | 선택 사항. 입력을 청크하는 데 사용되는 최대 문자 수입니다. 자세한 내용은 사용량을 참조하세요. |
maxOverlap | 선택 사항. 청크 간에 겹치는 최대 문자 수를 가져오거나 설정합니다. |
inputType | 선택 사항. 입력의 형식을 가져옵니다. |
connectionName | 연결 문자열 값이 포함된 앱 설정 또는 환경 변수의 이름입니다. 이 속성은 바인딩 식을 지원합니다. |
컬렉션 | 검색할 컬렉션, 테이블 또는 인덱스의 이름입니다. 이 속성은 바인딩 식을 지원합니다. |
구성
바인딩은 코드에 정의된 다음 속성을 지원합니다.
속성 | 설명 |
---|---|
input | 임베딩을 생성할 입력 문자열입니다. |
model | 선택 사항. 사용할 모델의 ID이며, 기본값은 text-embedding-ada-002 입니다. 기존 데이터베이스에 대한 모델을 변경해서는 안 됩니다. 자세한 내용은 사용량을 참조하세요. |
maxChunkLength | 선택 사항. 입력을 청크하는 데 사용되는 최대 문자 수입니다. 자세한 내용은 사용량을 참조하세요. |
maxOverlap | 선택 사항. 청크 간에 겹치는 최대 문자 수를 가져오거나 설정합니다. |
inputType | 선택 사항. 입력의 형식을 가져옵니다. |
connectionName | 연결 문자열 값이 포함된 앱 설정 또는 환경 변수의 이름입니다. 이 속성은 바인딩 식을 지원합니다. |
컬렉션 | 검색할 컬렉션, 테이블 또는 인덱스의 이름입니다. 이 속성은 바인딩 식을 지원합니다. |
사용
전체 예제는 예제 섹션을 참조하세요.