Liaison de sortie de magasin d’incorporations Azure OpenAI pour Azure Functions
Important
L’extension Azure OpenAI pour Azure Functions est actuellement en préversion.
La liaison de sortie de magasin d’incorporations Azure OpenAI vous permet d’écrire des fichiers dans un magasin de documents sémantique qui peut être référencé ultérieurement dans une recherche sémantique.
Pour plus d’informations sur l’installation et la configuration de l’extension Azure OpenAI, consultez Extensions Azure OpenAI pour Azure Functions. Pour en savoir plus sur le classement sémantique dans Recherche IA Azure, veuillez consulter la rubrique Classement par ordre de priorité sémantique dans Recherche Azure AI.
Remarque
Les références et les exemples sont fournis uniquement pour le modèle Node.js v4.
Remarque
Les références et exemples sont fournis uniquement pour le modèle Python v2.
Remarque
Bien que les deux modèles de processus C# soient pris en charge, seuls les exemples de modèles worker isolés sont fournis.
Exemple
Cet exemple écrit un flux d’entrée HTTP dans un magasin de documents sémantique à l’URL fournie.
[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)
};
Cet exemple écrit un flux d’entrée HTTP dans un magasin de documents sémantique à l’URL fournie.
import com.microsoft.azure.functions.openai.annotation.search.SemanticSearch;
import com.sun.jndi.toolkit.url.Uri;
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 MalformedURLException {
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;
}
Les exemples ne sont pas encore disponibles.
Cet exemple écrit un flux d’entrée HTTP dans un magasin de documents sémantique à l’URL fournie.
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}',
Cet exemple écrit un flux d’entrée HTTP dans un magasin de documents sémantique à l’URL fournie.
Voici le fichier function.json pour l’ingestion de fichiers :
{
"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%"
}
]
}
Pour plus d’informations sur les propriétés du fichier function.json, consultez la section Configuration.
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"
}
})
Cet exemple écrit un flux d’entrée HTTP dans un magasin de documents sémantique à l’URL fournie.
@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")
Attributs
Appliquez l’attribut EmbeddingsStoreOutput
pour définir une liaison de sortie de magasin d’incorporations, qui prend en charge ces paramètres :
Paramètre | Description |
---|---|
Entrée | La chaîne d’entrée pour laquelle générer des incorporations. |
Modèle | Facultatif. L’ID du modèle à utiliser, par défaut text-embedding-ada-002 . Vous ne devez pas modifier le modèle d’une base de données existante. Pour plus d’informations, consultez Utilisation. |
MaxChunkLength | Facultatif. Le nombre maximal de caractères utilisés pour segmenter l’entrée. Pour plus d’informations, consultez Utilisation. |
MaxOverlap | Facultatif. Obtient ou définit le nombre maximal de caractères à chevaucher entre les blocs. |
InputType | Facultatif. Obtient le type de l’entrée. |
ConnectionName | Au lieu de cela, Nom d’un paramètre d’application ou d’une variable d’environnement qui contient la valeur de la chaîne de connexion. Cette propriété prend en charge les expressions de liaison. |
Collection | Nom de la collection, de la table ou de l’index ou effectuer la recherche. Cette propriété prend en charge les expressions de liaison. |
Annotations
L’annotation EmbeddingsStoreOutput
vous permet de définir une liaison de sortie de magasin d’incorporations, qui prend en charge ces paramètres :
Element | Description |
---|---|
name | Obtient ou définit le nom de la liaison de sortie. |
input | La chaîne d’entrée pour laquelle générer des incorporations. |
modèle | Facultatif. L’ID du modèle à utiliser, par défaut text-embedding-ada-002 . Vous ne devez pas modifier le modèle d’une base de données existante. Pour plus d’informations, consultez Utilisation. |
maxChunkLength | Facultatif. Le nombre maximal de caractères utilisés pour segmenter l’entrée. Pour plus d’informations, consultez Utilisation. |
maxOverlap | Facultatif. Obtient ou définit le nombre maximal de caractères à chevaucher entre les blocs. |
inputType | Facultatif. Obtient le type de l’entrée. |
connectionName | Au lieu de cela, Nom d’un paramètre d’application ou d’une variable d’environnement qui contient la valeur de la chaîne de connexion. Cette propriété prend en charge les expressions de liaison. |
collection | Nom de la collection, de la table ou de l’index ou effectuer la recherche. Cette propriété prend en charge les expressions de liaison. |
Décorateurs
Pendant la préversion, définissez la liaison de sortie en tant que liaison generic_output_binding
de type semanticSearch
, qui prend en charge ces paramètres :
Paramètre | Description |
---|---|
arg_name | Le nom de la variable qui représente le paramètre de liaison. |
input | La chaîne d’entrée pour laquelle générer des incorporations. |
modèle | Facultatif. L’ID du modèle à utiliser, par défaut text-embedding-ada-002 . Vous ne devez pas modifier le modèle d’une base de données existante. Pour plus d’informations, consultez Utilisation. |
maxChunkLength | Facultatif. Le nombre maximal de caractères utilisés pour segmenter l’entrée. Pour plus d’informations, consultez Utilisation. |
max_overlap | Facultatif. Obtient ou définit le nombre maximal de caractères à chevaucher entre les blocs. |
input_type | Obtient le type de l’entrée. |
connection_name | Au lieu de cela, Nom d’un paramètre d’application ou d’une variable d’environnement qui contient la valeur de la chaîne de connexion. Cette propriété prend en charge les expressions de liaison. |
collection | Nom de la collection, de la table ou de l’index ou effectuer la recherche. Cette propriété prend en charge les expressions de liaison. |
Configuration
La liaison prend en charge ces propriétés de configuration que vous définissez dans le fichier function.json.
Propriété | Description |
---|---|
type | Doit être embeddingsStore . |
direction | Doit être out . |
name | Nom de la liaison de sortie. |
input | La chaîne d’entrée pour laquelle générer des incorporations. |
modèle | Facultatif. L’ID du modèle à utiliser, par défaut text-embedding-ada-002 . Vous ne devez pas modifier le modèle d’une base de données existante. Pour plus d’informations, consultez Utilisation. |
maxChunkLength | Facultatif. Le nombre maximal de caractères utilisés pour segmenter l’entrée. Pour plus d’informations, consultez Utilisation. |
maxOverlap | Facultatif. Obtient ou définit le nombre maximal de caractères à chevaucher entre les blocs. |
inputType | Facultatif. Obtient le type de l’entrée. |
connectionName | Au lieu de cela, Nom d’un paramètre d’application ou d’une variable d’environnement qui contient la valeur de la chaîne de connexion. Cette propriété prend en charge les expressions de liaison. |
collection | Nom de la collection, de la table ou de l’index ou effectuer la recherche. Cette propriété prend en charge les expressions de liaison. |
Configuration
La liaison prend en charge ces propriétés, qui sont définies dans votre code :
Propriété | Description |
---|---|
input | La chaîne d’entrée pour laquelle générer des incorporations. |
modèle | Facultatif. L’ID du modèle à utiliser, par défaut text-embedding-ada-002 . Vous ne devez pas modifier le modèle d’une base de données existante. Pour plus d’informations, consultez Utilisation. |
maxChunkLength | Facultatif. Le nombre maximal de caractères utilisés pour segmenter l’entrée. Pour plus d’informations, consultez Utilisation. |
maxOverlap | Facultatif. Obtient ou définit le nombre maximal de caractères à chevaucher entre les blocs. |
inputType | Facultatif. Obtient le type de l’entrée. |
connectionName | Au lieu de cela, Nom d’un paramètre d’application ou d’une variable d’environnement qui contient la valeur de la chaîne de connexion. Cette propriété prend en charge les expressions de liaison. |
collection | Nom de la collection, de la table ou de l’index ou effectuer la recherche. Cette propriété prend en charge les expressions de liaison. |
Utilisation
Pour obtenir des exemples complets, consultez la section Exemple.