Uitvoerbinding voor Azure OpenAI-insluitingen opslaan voor Azure Functions
Belangrijk
De Azure OpenAI-extensie voor Azure Functions is momenteel in preview.
Met de azure OpenAI-insluitingen kunt u uitvoerbinding opslaan om bestanden naar een semantisch documentarchief te schrijven waarnaar later in een semantische zoekopdracht kan worden verwezen.
Zie Azure OpenAI-extensies voor Azure Functions voor informatie over de installatie en configuratie van de Azure OpenAI-extensie. Zie Semantische rangschikking in Azure AI Search voor meer informatie over semantische rangschikking in Azure AI Search.
Notitie
Verwijzingen en voorbeelden worden alleen verstrekt voor het Node.js v4-model.
Notitie
Verwijzingen en voorbeelden worden alleen verstrekt voor het Python v2-model.
Notitie
Hoewel beide C#-procesmodellen worden ondersteund, worden alleen geïsoleerde werkrolmodelvoorbeelden gegeven.
Opmerking
In dit voorbeeld wordt een HTTP-invoerstroom naar een semantisch documentarchief geschreven op de opgegeven URL.
[Function("IngestFile")]
public static async Task<EmbeddingsStoreOutputResponse> IngestFile(
[HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req)
{
using StreamReader reader = new(req.Body);
string request = await reader.ReadToEndAsync();
EmbeddingsStoreOutputResponse badRequestResponse = new()
{
HttpResponse = new BadRequestResult(),
SearchableDocument = new SearchableDocument(string.Empty)
};
if (string.IsNullOrWhiteSpace(request))
{
return badRequestResponse;
}
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))
{
return badRequestResponse;
}
string filename = Path.GetFileName(uri.AbsolutePath);
return new EmbeddingsStoreOutputResponse
{
HttpResponse = new OkObjectResult(new { status = HttpStatusCode.OK }),
SearchableDocument = new SearchableDocument(filename)
};
}
public class EmbeddingsStoreOutputResponse
{
[EmbeddingsStoreOutput("{url}", InputType.Url, "AISearchEndpoint", "openai-index", Model = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%")]
In dit voorbeeld wordt een HTTP-invoerstroom naar een semantisch documentarchief geschreven op de opgegeven URL.
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;
}
In dit voorbeeld wordt een HTTP-invoerstroom naar een semantisch documentarchief geschreven op de opgegeven URL.
const embeddingsStoreOutput = output.generic({
type: "embeddingsStore",
input: "{url}",
inputType: "url",
connectionName: "AISearchEndpoint",
collection: "openai-index",
model: "%EMBEDDING_MODEL_DEPLOYMENT_NAME%"
});
app.http('IngestFile', {
methods: ['POST'],
authLevel: 'function',
extraOutputs: [embeddingsStoreOutput],
handler: async (request, context) => {
let requestBody = await request.json();
if (!requestBody || !requestBody.url) {
throw new Error("Invalid request body. Make sure that you pass in {\"url\": value } as the request body.");
}
let uri = requestBody.url;
let url = new URL(uri);
let fileName = path.basename(url.pathname);
context.extraOutputs.set(embeddingsStoreOutput, { title: fileName });
let response = {
status: "success",
title: fileName
};
return { status: 202, jsonBody: response }
}
});
interface EmbeddingsRequest {
url?: string;
}
const embeddingsStoreOutput = output.generic({
type: "embeddingsStore",
input: "{url}",
inputType: "url",
connectionName: "AISearchEndpoint",
collection: "openai-index",
model: "%EMBEDDING_MODEL_DEPLOYMENT_NAME%"
});
app.http('IngestFile', {
methods: ['POST'],
authLevel: 'function',
extraOutputs: [embeddingsStoreOutput],
handler: async (request, context) => {
let requestBody: EmbeddingsRequest | null = await request.json();
if (!requestBody || !requestBody.url) {
throw new Error("Invalid request body. Make sure that you pass in {\"url\": value } as the request body.");
}
let uri = requestBody.url;
let url = new URL(uri);
let fileName = path.basename(url.pathname);
context.extraOutputs.set(embeddingsStoreOutput, { title: fileName });
let response = {
status: "success",
title: fileName
};
return { status: 202, jsonBody: response }
}
});
In dit voorbeeld wordt een HTTP-invoerstroom naar een semantisch documentarchief geschreven op de opgegeven URL.
Dit is het function.json-bestand voor het opnemen van bestanden:
{
"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%"
}
]
}
Zie de sectie Configuratie voor meer informatie over function.json bestandseigenschappen.
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 dit voorbeeld wordt een HTTP-invoerstroom naar een semantisch documentarchief geschreven op de opgegeven URL.
@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")
Kenmerken
Pas het EmbeddingsStoreOutput
kenmerk toe om een uitvoerbinding voor het insluiten van inhoudsarchieven te definiëren, die ondersteuning biedt voor deze parameters:
Parameter | Description |
---|---|
Invoer | De invoertekenreeks waarvoor insluitingen moeten worden gegenereerd. |
Model |
Optioneel. De id van het model dat moet worden gebruikt, wat standaard wordt gebruikt text-embedding-ada-002 . U moet het model voor een bestaande database niet wijzigen. Zie Gebruik voor meer informatie. |
MaxChunkLength | Optioneel. Het maximum aantal tekens dat wordt gebruikt voor het segmenteren van de invoer. Zie Gebruik voor meer informatie. |
MaxOverlap | Optioneel. Hiermee wordt het maximum aantal tekens tussen segmenten ophaalt of ingesteld. |
InputType | Optioneel. Hiermee haalt u het type invoer op. |
ConnectionName | De naam van een app-instelling of omgevingsvariabele die de verbindingsreeks waarde bevat. Deze eigenschap ondersteunt bindingexpressies. |
Verzameling | De naam van de verzameling of tabel of index die u wilt zoeken. Deze eigenschap ondersteunt bindingexpressies. |
Aantekeningen
Met de EmbeddingsStoreOutput
aantekening kunt u een insluitingsarchiefbinding definiëren, die ondersteuning biedt voor deze parameters:
Element | Description |
---|---|
name | Hiermee haalt u de naam van de uitvoerbinding op of stelt u deze in. |
invoer | De invoertekenreeks waarvoor insluitingen moeten worden gegenereerd. |
model |
Optioneel. De id van het model dat moet worden gebruikt, wat standaard wordt gebruikt text-embedding-ada-002 . U moet het model voor een bestaande database niet wijzigen. Zie Gebruik voor meer informatie. |
maxChunkLength | Optioneel. Het maximum aantal tekens dat wordt gebruikt voor het segmenteren van de invoer. Zie Gebruik voor meer informatie. |
maxOverlap | Optioneel. Hiermee wordt het maximum aantal tekens tussen segmenten ophaalt of ingesteld. |
inputType | Optioneel. Hiermee haalt u het type invoer op. |
connectionName | De naam van een app-instelling of omgevingsvariabele die de verbindingsreeks waarde bevat. Deze eigenschap ondersteunt bindingexpressies. |
collectie | De naam van de verzameling of tabel of index die u wilt zoeken. Deze eigenschap ondersteunt bindingexpressies. |
Decorators
Definieer tijdens de preview de uitvoerbinding als een generic_output_binding
binding van het type semanticSearch
, die ondersteuning biedt voor deze parameters:
Parameter | Description |
---|---|
arg_name | De naam van de variabele die de bindingsparameter vertegenwoordigt. |
invoer | De invoertekenreeks waarvoor insluitingen moeten worden gegenereerd. |
model |
Optioneel. De id van het model dat moet worden gebruikt, wat standaard wordt gebruikt text-embedding-ada-002 . U moet het model voor een bestaande database niet wijzigen. Zie Gebruik voor meer informatie. |
maxChunkLength | Optioneel. Het maximum aantal tekens dat wordt gebruikt voor het segmenteren van de invoer. Zie Gebruik voor meer informatie. |
max_overlap | Optioneel. Hiermee wordt het maximum aantal tekens tussen segmenten ophaalt of ingesteld. |
input_type | Hiermee haalt u het type invoer op. |
connection_name | De naam van een app-instelling of omgevingsvariabele die de verbindingsreeks waarde bevat. Deze eigenschap ondersteunt bindingexpressies. |
collectie | De naam van de verzameling of tabel of index die u wilt zoeken. Deze eigenschap ondersteunt bindingexpressies. |
Configuratie
De binding ondersteunt deze configuratie-eigenschappen die u in het function.json-bestand hebt ingesteld.
Eigenschappen | Beschrijving |
---|---|
type | Moet embeddingsStore zijn. |
direction | Moet out zijn. |
name | De naam van de uitvoerbinding. |
invoer | De invoertekenreeks waarvoor insluitingen moeten worden gegenereerd. |
model |
Optioneel. De id van het model dat moet worden gebruikt, wat standaard wordt gebruikt text-embedding-ada-002 . U moet het model voor een bestaande database niet wijzigen. Zie Gebruik voor meer informatie. |
maxChunkLength | Optioneel. Het maximum aantal tekens dat wordt gebruikt voor het segmenteren van de invoer. Zie Gebruik voor meer informatie. |
maxOverlap | Optioneel. Hiermee wordt het maximum aantal tekens tussen segmenten ophaalt of ingesteld. |
inputType | Optioneel. Hiermee haalt u het type invoer op. |
connectionName | De naam van een app-instelling of omgevingsvariabele die de verbindingsreeks waarde bevat. Deze eigenschap ondersteunt bindingexpressies. |
collectie | De naam van de verzameling of tabel of index die u wilt zoeken. Deze eigenschap ondersteunt bindingexpressies. |
Configuratie
De binding ondersteunt deze eigenschappen, die zijn gedefinieerd in uw code:
Eigenschappen | Beschrijving |
---|---|
invoer | De invoertekenreeks waarvoor insluitingen moeten worden gegenereerd. |
model |
Optioneel. De id van het model dat moet worden gebruikt, wat standaard wordt gebruikt text-embedding-ada-002 . U moet het model voor een bestaande database niet wijzigen. Zie Gebruik voor meer informatie. |
maxChunkLength | Optioneel. Het maximum aantal tekens dat wordt gebruikt voor het segmenteren van de invoer. Zie Gebruik voor meer informatie. |
maxOverlap | Optioneel. Hiermee wordt het maximum aantal tekens tussen segmenten ophaalt of ingesteld. |
inputType | Optioneel. Hiermee haalt u het type invoer op. |
connectionName | De naam van een app-instelling of omgevingsvariabele die de verbindingsreeks waarde bevat. Deze eigenschap ondersteunt bindingexpressies. |
collectie | De naam van de verzameling of tabel of index die u wilt zoeken. Deze eigenschap ondersteunt bindingexpressies. |
Gebruik
Zie de sectie Voorbeeld voor volledige voorbeelden.