Azure OpenAI-inbäddning lagrar utdatabindning för Azure Functions
Viktigt!
Azure OpenAI-tillägget för Azure Functions är för närvarande i förhandsversion.
Med Azure OpenAI-inbäddningsarkivets utdatabindning kan du skriva filer till ett semantiskt dokumentarkiv som kan refereras senare i en semantisk sökning.
Information om konfiguration och konfigurationsinformation för Azure OpenAI-tillägget finns i Azure OpenAI-tillägg för Azure Functions. Mer information om semantisk rankning i Azure AI Search finns i Semantisk rankning i Azure AI Search.
Kommentar
Referenser och exempel tillhandahålls endast för modellen Node.js v4.
Kommentar
Referenser och exempel tillhandahålls endast för Python v2-modellen.
Kommentar
Båda C#-processmodellerna stöds, men endast exempel på isolerade arbetsmodeller tillhandahålls.
Exempel
Det här exemplet skriver en HTTP-indataström till ett semantiskt dokumentarkiv på den angivna URL:en.
[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)
};
Det här exemplet skriver en HTTP-indataström till ett semantiskt dokumentarkiv på den angivna URL:en.
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;
}
Exempel är ännu inte tillgängliga.
Det här exemplet skriver en HTTP-indataström till ett semantiskt dokumentarkiv på den angivna URL:en.
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}',
Det här exemplet skriver en HTTP-indataström till ett semantiskt dokumentarkiv på den angivna URL:en.
Här är function.json-filen för inmatning av filer:
{
"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%"
}
]
}
Mer information om function.json filegenskaper finns i avsnittet Konfiguration .
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"
}
})
Det här exemplet skriver en HTTP-indataström till ett semantiskt dokumentarkiv på den angivna URL:en.
@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")
Attribut
EmbeddingsStoreOutput
Använd attributet för att definiera en inbäddningslagerutdatabindning, som stöder följande parametrar:
Parameter | Description |
---|---|
Indata | Den indatasträng som du vill generera inbäddningar för. |
Modell | Valfritt. ID:t för modellen som ska användas, som standard är text-embedding-ada-002 . Du bör inte ändra modellen för en befintlig databas. Mer information finns i Användning. |
MaxChunkLength | Valfritt. Det maximala antalet tecken som används för segmentering av indata. Mer information finns i Användning. |
MaxOverlap | Valfritt. Hämtar eller anger det maximala antalet tecken som ska överlappa mellan segment. |
InputType | Valfritt. Hämtar indatatypen. |
ConnectionName | Namnet på en appinställning eller miljövariabel som innehåller värdet anslutningssträng. Den här egenskapen stöder bindningsuttryck. |
Samling | Namnet på samlingen eller tabellen eller indexet som ska sökas. Den här egenskapen stöder bindningsuttryck. |
Kommentarer
Med anteckningen EmbeddingsStoreOutput
kan du definiera en inbäddningslagerutdatabindning som stöder följande parametrar:
Element | Description |
---|---|
Namn | Hämtar eller anger namnet på utdatabindningen. |
inmatning | Den indatasträng som du vill generera inbäddningar för. |
modell | Valfritt. ID:t för modellen som ska användas, som standard är text-embedding-ada-002 . Du bör inte ändra modellen för en befintlig databas. Mer information finns i Användning. |
maxChunkLength | Valfritt. Det maximala antalet tecken som används för segmentering av indata. Mer information finns i Användning. |
maxOverlap | Valfritt. Hämtar eller anger det maximala antalet tecken som ska överlappa mellan segment. |
inputType | Valfritt. Hämtar indatatypen. |
connectionName | Namnet på en appinställning eller miljövariabel som innehåller värdet anslutningssträng. Den här egenskapen stöder bindningsuttryck. |
samling | Namnet på samlingen eller tabellen eller indexet som ska sökas. Den här egenskapen stöder bindningsuttryck. |
Dekoratörer
Under förhandsversionen definierar du utdatabindningen som en generic_output_binding
bindning av typen semanticSearch
, som stöder följande parametrar:
Parameter | Description |
---|---|
arg_name | Namnet på variabeln som representerar bindningsparametern. |
inmatning | Den indatasträng som du vill generera inbäddningar för. |
modell | Valfritt. ID:t för modellen som ska användas, som standard är text-embedding-ada-002 . Du bör inte ändra modellen för en befintlig databas. Mer information finns i Användning. |
maxChunkLength | Valfritt. Det maximala antalet tecken som används för segmentering av indata. Mer information finns i Användning. |
max_overlap | Valfritt. Hämtar eller anger det maximala antalet tecken som ska överlappa mellan segment. |
input_type | Hämtar indatatypen. |
connection_name | Namnet på en appinställning eller miljövariabel som innehåller värdet anslutningssträng. Den här egenskapen stöder bindningsuttryck. |
samling | Namnet på samlingen eller tabellen eller indexet som ska sökas. Den här egenskapen stöder bindningsuttryck. |
Konfiguration
Bindningen stöder de konfigurationsegenskaper som du anger i filen function.json.
Property | Beskrivning |
---|---|
typ | Måste vara embeddingsStore . |
riktning | Måste vara out . |
Namn | Namnet på utdatabindningen. |
inmatning | Den indatasträng som du vill generera inbäddningar för. |
modell | Valfritt. ID:t för modellen som ska användas, som standard är text-embedding-ada-002 . Du bör inte ändra modellen för en befintlig databas. Mer information finns i Användning. |
maxChunkLength | Valfritt. Det maximala antalet tecken som används för segmentering av indata. Mer information finns i Användning. |
maxOverlap | Valfritt. Hämtar eller anger det maximala antalet tecken som ska överlappa mellan segment. |
inputType | Valfritt. Hämtar indatatypen. |
connectionName | Namnet på en appinställning eller miljövariabel som innehåller värdet anslutningssträng. Den här egenskapen stöder bindningsuttryck. |
samling | Namnet på samlingen eller tabellen eller indexet som ska sökas. Den här egenskapen stöder bindningsuttryck. |
Konfiguration
Bindningen stöder dessa egenskaper, som definieras i koden:
Property | beskrivning |
---|---|
inmatning | Den indatasträng som du vill generera inbäddningar för. |
modell | Valfritt. ID:t för modellen som ska användas, som standard är text-embedding-ada-002 . Du bör inte ändra modellen för en befintlig databas. Mer information finns i Användning. |
maxChunkLength | Valfritt. Det maximala antalet tecken som används för segmentering av indata. Mer information finns i Användning. |
maxOverlap | Valfritt. Hämtar eller anger det maximala antalet tecken som ska överlappa mellan segment. |
inputType | Valfritt. Hämtar indatatypen. |
connectionName | Namnet på en appinställning eller miljövariabel som innehåller värdet anslutningssträng. Den här egenskapen stöder bindningsuttryck. |
samling | Namnet på samlingen eller tabellen eller indexet som ska sökas. Den här egenskapen stöder bindningsuttryck. |
Förbrukning
Se avsnittet Exempel för fullständiga exempel.