Vkládání Azure OpenAI ukládá výstupní vazbu pro Azure Functions.
Důležité
Rozšíření Azure OpenAI pro Azure Functions je aktuálně ve verzi Preview.
Výstupní vazba azure OpenAI embeddings umožňuje zapisovat soubory do sémantického úložiště dokumentů, na které lze odkazovat později v sémantickém vyhledávání.
Informace o nastavení a konfiguraci rozšíření Azure OpenAI najdete v tématu Rozšíření Azure OpenAI pro Azure Functions. Další informace o sémantickém řazení ve službě Azure AI Search najdete v tématu Sémantické řazení ve službě Azure AI Search.
Poznámka:
Odkazy a příklady jsou k dispozici pouze pro model Node.js v4.
Poznámka:
Odkazy a příklady jsou k dispozici pouze pro model Pythonu v2.
Poznámka:
I když jsou podporovány oba modely procesu jazyka C#, jsou k dispozici pouze příklady izolovaného modelu pracovního procesu .
Příklad
Tento příklad zapíše vstupní datový proud HTTP do sémantického úložiště dokumentů na zadané adrese URL.
[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)
};
Tento příklad zapíše vstupní datový proud HTTP do sémantického úložiště dokumentů na zadané adrese 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;
}
Příklady ještě nejsou k dispozici.
Tento příklad zapíše vstupní datový proud HTTP do sémantického úložiště dokumentů na zadané adrese URL.
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}',
Tento příklad zapíše vstupní datový proud HTTP do sémantického úložiště dokumentů na zadané adrese URL.
Tady je soubor function.json pro ingestování souborů:
{
"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%"
}
]
}
Další informace o function.json vlastnosti souboru naleznete v části Konfigurace .
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"
}
})
Tento příklad zapíše vstupní datový proud HTTP do sémantického úložiště dokumentů na zadané adrese 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")
Atributy
Pomocí atributu EmbeddingsStoreOutput
definujte výstupní vazbu pro vložení, která podporuje tyto parametry:
Parametr | Popis |
---|---|
Vstup | Vstupní řetězec, pro který se mají generovat vložené hodnoty. |
Model | Volitelné. ID modelu, který se má použít, což je výchozí text-embedding-ada-002 hodnota . Model pro existující databázi byste neměli měnit. Další informace najdete v tématu Využití. |
MaxChunkLength | Volitelné. Maximální počet znaků použitých pro vytváření bloků vstupu. Další informace najdete v tématu Využití. |
MaxOverlap | Volitelné. Získá nebo nastaví maximální počet znaků, které se mají překrývat mezi bloky dat. |
InputType | Volitelné. Získá typ vstupu. |
ConnectionName | Název nastavení aplikace nebo proměnné prostředí, která obsahuje hodnotu připojovací řetězec. Tato vlastnost podporuje vazbové výrazy. |
Kolekce | Název kolekce nebo tabulky nebo indexu, který se má prohledávat. Tato vlastnost podporuje vazbové výrazy. |
Poznámky
Poznámka EmbeddingsStoreOutput
umožňuje definovat výstupní vazbu pro vložení, která podporuje tyto parametry:
Element (Prvek) | Popis |
---|---|
Jméno | Získá nebo nastaví název výstupní vazby. |
vstup | Vstupní řetězec, pro který se mají generovat vložené hodnoty. |
model | Volitelné. ID modelu, který se má použít, což je výchozí text-embedding-ada-002 hodnota . Model pro existující databázi byste neměli měnit. Další informace najdete v tématu Využití. |
maxChunkLength | Volitelné. Maximální počet znaků použitých pro vytváření bloků vstupu. Další informace najdete v tématu Využití. |
maxOverlap | Volitelné. Získá nebo nastaví maximální počet znaků, které se mají překrývat mezi bloky dat. |
inputType | Volitelné. Získá typ vstupu. |
connectionName | Název nastavení aplikace nebo proměnné prostředí, která obsahuje hodnotu připojovací řetězec. Tato vlastnost podporuje vazbové výrazy. |
sbírka | Název kolekce nebo tabulky nebo indexu, který se má prohledávat. Tato vlastnost podporuje vazbové výrazy. |
Dekoratéry
Během verze Preview definujte výstupní vazbu jako generic_output_binding
vazbu typu semanticSearch
, která podporuje tyto parametry:
Parametr | Popis |
---|---|
arg_name | Název proměnné, která představuje parametr vazby. |
vstup | Vstupní řetězec, pro který se mají generovat vložené hodnoty. |
model | Volitelné. ID modelu, který se má použít, což je výchozí text-embedding-ada-002 hodnota . Model pro existující databázi byste neměli měnit. Další informace najdete v tématu Využití. |
maxChunkLength | Volitelné. Maximální počet znaků použitých pro vytváření bloků vstupu. Další informace najdete v tématu Využití. |
max_overlap | Volitelné. Získá nebo nastaví maximální počet znaků, které se mají překrývat mezi bloky dat. |
input_type | Získá typ vstupu. |
connection_name | Název nastavení aplikace nebo proměnné prostředí, která obsahuje hodnotu připojovací řetězec. Tato vlastnost podporuje vazbové výrazy. |
sbírka | Název kolekce nebo tabulky nebo indexu, který se má prohledávat. Tato vlastnost podporuje vazbové výrazy. |
Konfigurace
Vazba podporuje tyto vlastnosti konfigurace, které jste nastavili v souboru function.json.
Vlastnost | Popis |
---|---|
type | Musí být embeddingsStore . |
direction | Musí být out . |
Jméno | Název výstupní vazby. |
vstup | Vstupní řetězec, pro který se mají generovat vložené hodnoty. |
model | Volitelné. ID modelu, který se má použít, což je výchozí text-embedding-ada-002 hodnota . Model pro existující databázi byste neměli měnit. Další informace najdete v tématu Využití. |
maxChunkLength | Volitelné. Maximální počet znaků použitých pro vytváření bloků vstupu. Další informace najdete v tématu Využití. |
maxOverlap | Volitelné. Získá nebo nastaví maximální počet znaků, které se mají překrývat mezi bloky dat. |
inputType | Volitelné. Získá typ vstupu. |
connectionName | Název nastavení aplikace nebo proměnné prostředí, která obsahuje hodnotu připojovací řetězec. Tato vlastnost podporuje vazbové výrazy. |
sbírka | Název kolekce nebo tabulky nebo indexu, který se má prohledávat. Tato vlastnost podporuje vazbové výrazy. |
Konfigurace
Vazba podporuje tyto vlastnosti, které jsou definovány v kódu:
Vlastnost | Popis |
---|---|
vstup | Vstupní řetězec, pro který se mají generovat vložené hodnoty. |
model | Volitelné. ID modelu, který se má použít, což je výchozí text-embedding-ada-002 hodnota . Model pro existující databázi byste neměli měnit. Další informace najdete v tématu Využití. |
maxChunkLength | Volitelné. Maximální počet znaků použitých pro vytváření bloků vstupu. Další informace najdete v tématu Využití. |
maxOverlap | Volitelné. Získá nebo nastaví maximální počet znaků, které se mají překrývat mezi bloky dat. |
inputType | Volitelné. Získá typ vstupu. |
connectionName | Název nastavení aplikace nebo proměnné prostředí, která obsahuje hodnotu připojovací řetězec. Tato vlastnost podporuje vazbové výrazy. |
sbírka | Název kolekce nebo tabulky nebo indexu, který se má prohledávat. Tato vlastnost podporuje vazbové výrazy. |
Využití
Kompletní příklady najdete v části Příklad.