Azure OpenAI-Ausgabebindung zum Speichern von Einbettungen für Azure Functions
Wichtig
Die Azure OpenAI-Erweiterung für Azure Functions befindet sich derzeit in der Vorschau.
Die Azure OpenAI-Ausgabebindung zum Speichern von Einbettungen ermöglicht es Ihnen, Dateien in einen semantischen Dokumentenspeicher zu schreiben, der später in einer semantischen Suche referenziert werden kann.
Informationen zu Einrichtungs- und Konfigurationsdetails der Azure OpenAI-Erweiterung finden Sie unter Azure OpenAI-Erweiterungen für Azure Functions. Weitere Informationen zur semantischen Rangfolge in der Azure KI-Suche finden Sie unter Semantische Rangfolge in der Azure KI-Suche.
Hinweis
Referenzen und Beispiele werden nur für das Node.js v4-Modell bereitgestellt.
Hinweis
Referenzen und Beispiele werden nur für das Python v2-Modell bereitgestellt.
Hinweis
Während beide C#-Prozessmodelle unterstützt werden, werden nur Isolierte Arbeitsmodellbeispiele bereitgestellt.
Beispiel
In diesem Beispiel wird ein HTTP-Eingabedatenstrom in einen semantischen Dokumentspeicher unter der angegebenen URL geschrieben.
[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)
};
In diesem Beispiel wird ein HTTP-Eingabedatenstrom in einen semantischen Dokumentspeicher unter der angegebenen URL geschrieben.
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;
}
Beispiele sind noch nicht verfügbar.
In diesem Beispiel wird ein HTTP-Eingabedatenstrom in einen semantischen Dokumentspeicher unter der angegebenen URL geschrieben.
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}',
In diesem Beispiel wird ein HTTP-Eingabedatenstrom in einen semantischen Dokumentspeicher unter der angegebenen URL geschrieben.
Dies ist die function.json Datei zum Aufnehmen von Dateien:
{
"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%"
}
]
}
Weitere Informationen zu den Dateieigenschaften von function.json finden Sie im Abschnitt 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"
}
})
In diesem Beispiel wird ein HTTP-Eingabedatenstrom in einen semantischen Dokumentspeicher unter der angegebenen URL geschrieben.
@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")
Attribute
Wenden Sie das EmbeddingsStoreOutput
-Attribut an, um eine Ausgabebindung zum Speichern von Einbettungen zu definieren, die diese Parameter unterstützt:
Parameter | Beschreibung |
---|---|
Eingabe | Die Eingabezeichenfolge, für die Einbettungen generiert werden sollen. |
Modell | Optional. Die ID des zu verwendenden Modells, die standardmäßig text-embedding-ada-002 lautet. Sie sollten das Modell für eine vorhandene Datenbank nicht ändern. Weitere Informationen finden Sie unter Verbrauch. |
MaxChunkLength | Optional. Die maximale Anzahl von Zeichen, die für die Segmentierung der Eingabe verwendet werden. Weitere Informationen finden Sie unter Verbrauch. |
MaxOverlap | Optional. Ruft die maximale Anzahl von Zeichen ab, die zwischen Blöcken überlappen sollen, oder legt diese fest. |
InputType | Optional. Ruft den Typ der Eingabe ab. |
ConnectionName | Den Namen einer App-Einstellung oder Umgebungsvariable, die den Wert der Verbindungszeichenfolge enthält. Diese Eigenschaft unterstützt Bindungsausdrücke. |
Sammlung | Den Name der zu durchsuchenden Sammlung oder Tabelle oder des Indexes. Diese Eigenschaft unterstützt Bindungsausdrücke. |
Anmerkungen
Mit der EmbeddingsStoreOutput
Anmerkung können Sie eine Einbettungsspeicher-Ausgabebindung definieren, die diese Parameter unterstützt:
Element | BESCHREIBUNG |
---|---|
name | Ruft den Namen der Ausgabebindung ab oder legt ihn fest. |
input | Die Eingabezeichenfolge, für die Einbettungen generiert werden sollen. |
Modell | Optional. Die ID des zu verwendenden Modells, die standardmäßig text-embedding-ada-002 lautet. Sie sollten das Modell für eine vorhandene Datenbank nicht ändern. Weitere Informationen finden Sie unter Verbrauch. |
maxChunkLength | Optional. Die maximale Anzahl von Zeichen, die für die Segmentierung der Eingabe verwendet werden. Weitere Informationen finden Sie unter Verbrauch. |
maxOverlap | Optional. Ruft die maximale Anzahl von Zeichen ab, die zwischen Blöcken überlappen sollen, oder legt diese fest. |
inputType | Optional. Ruft den Typ der Eingabe ab. |
connectionName | Den Namen einer App-Einstellung oder Umgebungsvariable, die den Wert der Verbindungszeichenfolge enthält. Diese Eigenschaft unterstützt Bindungsausdrücke. |
collection | Den Name der zu durchsuchenden Sammlung oder Tabelle oder des Indexes. Diese Eigenschaft unterstützt Bindungsausdrücke. |
Decorator-Elemente
Definieren Sie während der Vorschau die Ausgabebindung als Bindung generic_output_binding
vom Typ semanticSearch
, die diese Parameter unterstützt:
Parameter | Beschreibung |
---|---|
arg_name | Der Name der Variablen, die den Bindungsparameter darstellt. |
input | Die Eingabezeichenfolge, für die Einbettungen generiert werden sollen. |
Modell | Optional. Die ID des zu verwendenden Modells, die standardmäßig text-embedding-ada-002 lautet. Sie sollten das Modell für eine vorhandene Datenbank nicht ändern. Weitere Informationen finden Sie unter Verbrauch. |
maxChunkLength | Optional. Die maximale Anzahl von Zeichen, die für die Segmentierung der Eingabe verwendet werden. Weitere Informationen finden Sie unter Verbrauch. |
max_overlap | Optional. Ruft die maximale Anzahl von Zeichen ab, die zwischen Blöcken überlappen sollen, oder legt diese fest. |
input_type | Ruft den Typ der Eingabe ab. |
connection_name | Den Namen einer App-Einstellung oder Umgebungsvariable, die den Wert der Verbindungszeichenfolge enthält. Diese Eigenschaft unterstützt Bindungsausdrücke. |
collection | Den Name der zu durchsuchenden Sammlung oder Tabelle oder des Indexes. Diese Eigenschaft unterstützt Bindungsausdrücke. |
Konfiguration
Die Bindung unterstützt diese Konfigurationseigenschaften, die Sie in der Datei „function.json“ festlegen.
Eigenschaft | Beschreibung des Dataflows |
---|---|
type | Muss embeddingsStore lauten. |
direction | Muss out lauten. |
name | Der Name der Ausgabebindung. |
input | Die Eingabezeichenfolge, für die Einbettungen generiert werden sollen. |
Modell | Optional. Die ID des zu verwendenden Modells, die standardmäßig text-embedding-ada-002 lautet. Sie sollten das Modell für eine vorhandene Datenbank nicht ändern. Weitere Informationen finden Sie unter Verbrauch. |
maxChunkLength | Optional. Die maximale Anzahl von Zeichen, die für die Segmentierung der Eingabe verwendet werden. Weitere Informationen finden Sie unter Verbrauch. |
maxOverlap | Optional. Ruft die maximale Anzahl von Zeichen ab, die zwischen Blöcken überlappen sollen, oder legt diese fest. |
inputType | Optional. Ruft den Typ der Eingabe ab. |
connectionName | Den Namen einer App-Einstellung oder Umgebungsvariable, die den Wert der Verbindungszeichenfolge enthält. Diese Eigenschaft unterstützt Bindungsausdrücke. |
collection | Den Name der zu durchsuchenden Sammlung oder Tabelle oder des Indexes. Diese Eigenschaft unterstützt Bindungsausdrücke. |
Konfiguration
Die Bindung unterstützt diese Eigenschaften, die in Ihrem Code definiert sind:
Eigenschaft | Beschreibung |
---|---|
input | Die Eingabezeichenfolge, für die Einbettungen generiert werden sollen. |
Modell | Optional. Die ID des zu verwendenden Modells, die standardmäßig text-embedding-ada-002 lautet. Sie sollten das Modell für eine vorhandene Datenbank nicht ändern. Weitere Informationen finden Sie unter Verbrauch. |
maxChunkLength | Optional. Die maximale Anzahl von Zeichen, die für die Segmentierung der Eingabe verwendet werden. Weitere Informationen finden Sie unter Verbrauch. |
maxOverlap | Optional. Ruft die maximale Anzahl von Zeichen ab, die zwischen Blöcken überlappen sollen, oder legt diese fest. |
inputType | Optional. Ruft den Typ der Eingabe ab. |
connectionName | Den Namen einer App-Einstellung oder Umgebungsvariable, die den Wert der Verbindungszeichenfolge enthält. Diese Eigenschaft unterstützt Bindungsausdrücke. |
collection | Den Name der zu durchsuchenden Sammlung oder Tabelle oder des Indexes. Diese Eigenschaft unterstützt Bindungsausdrücke. |
Verbrauch
Vollständige Beispiele finden Sie im Abschnitt Beispiele.