Azure OpenAI incorpora vinculação de saída de armazenamento para o Azure Functions
Importante
A extensão do Azure OpenAI para o Azure Functions está atualmente em visualização.
A associação de saída do repositório de incorporações do Azure OpenAI permite gravar arquivos em um repositório semântico de documentos que pode ser referenciado posteriormente em uma pesquisa semântica.
Para obter informações sobre detalhes de instalação e configuração da extensão do Azure OpenAI, consulte Extensões do Azure OpenAI para Azure Functions. Para saber mais sobre a classificação semântica na Pesquisa de IA do Azure, consulte Classificação semântica na Pesquisa de IA do Azure.
Nota
Referências e exemplos são fornecidos apenas para o modelo Node.js v4.
Nota
Referências e exemplos são fornecidos apenas para o modelo Python v2.
Nota
Embora ambos os modelos de processo C# sejam suportados, apenas exemplos de modelos de trabalho isolados são fornecidos.
Exemplo
Este exemplo grava um fluxo de entrada HTTP em um repositório semântico de documentos na URL fornecida.
[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)
};
Este exemplo grava um fluxo de entrada HTTP em um repositório semântico de documentos na URL fornecida.
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;
}
Os exemplos ainda não estão disponíveis.
Este exemplo grava um fluxo de entrada HTTP em um repositório semântico de documentos na URL fornecida.
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}',
Este exemplo grava um fluxo de entrada HTTP em um repositório semântico de documentos na URL fornecida.
Aqui está o arquivo function.json para ingerir arquivos:
{
"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%"
}
]
}
Para obter mais informações sobre function.json propriedades do arquivo, consulte a seção Configuração .
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"
}
})
Este exemplo grava um fluxo de entrada HTTP em um repositório semântico de documentos na URL fornecida.
@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")
Atributos
Aplique o EmbeddingsStoreOutput
atributo para definir uma associação de saída de armazenamento incorporado, que suporta estes parâmetros:
Parâmetro | Description |
---|---|
Entrada | A cadeia de caracteres de entrada para a qual gerar incorporações. |
Modelo | Opcional. A ID do modelo a ser usado, cujo padrão é text-embedding-ada-002 . Você não deve alterar o modelo de um banco de dados existente. Para obter mais informações, consulte Uso. |
MaxChunkLength [en] | Opcional. O número máximo de caracteres usados para dividir a entrada. Para obter mais informações, consulte Uso. |
MaxOverlap | Opcional. Obtém ou define o número máximo de caracteres a serem sobrepostos entre as partes. |
Tipo de entrada | Opcional. Obtém o tipo de entrada. |
Nome da conexão | O nome de uma configuração de aplicativo ou variável de ambiente que contém o valor da cadeia de conexão. Esta propriedade suporta expressões de ligação. |
Coleção | O nome da coleção, tabela ou índice a pesquisar. Esta propriedade suporta expressões de ligação. |
Anotações
A EmbeddingsStoreOutput
anotação permite definir uma associação de saída de armazenamento incorporado, que suporta estes parâmetros:
Elemento | Description |
---|---|
Designação | Obtém ou define o nome da ligação de saída. |
entrada | A cadeia de caracteres de entrada para a qual gerar incorporações. |
modelo | Opcional. A ID do modelo a ser usado, cujo padrão é text-embedding-ada-002 . Você não deve alterar o modelo de um banco de dados existente. Para obter mais informações, consulte Uso. |
maxChunkLength | Opcional. O número máximo de caracteres usados para dividir a entrada. Para obter mais informações, consulte Uso. |
maxSobreposição | Opcional. Obtém ou define o número máximo de caracteres a serem sobrepostos entre as partes. |
inputType | Opcional. Obtém o tipo de entrada. |
nome_da_conexão | O nome de uma configuração de aplicativo ou variável de ambiente que contém o valor da cadeia de conexão. Esta propriedade suporta expressões de ligação. |
Coleção | O nome da coleção, tabela ou índice a pesquisar. Esta propriedade suporta expressões de ligação. |
Decoradores
Durante a visualização, defina a ligação de saída como uma generic_output_binding
associação do tipo semanticSearch
, que suporta estes parâmetros:
Parâmetro | Description |
---|---|
arg_name | O nome da variável que representa o parâmetro de ligação. |
entrada | A cadeia de caracteres de entrada para a qual gerar incorporações. |
modelo | Opcional. A ID do modelo a ser usado, cujo padrão é text-embedding-ada-002 . Você não deve alterar o modelo de um banco de dados existente. Para obter mais informações, consulte Uso. |
maxChunkLength | Opcional. O número máximo de caracteres usados para dividir a entrada. Para obter mais informações, consulte Uso. |
max_overlap | Opcional. Obtém ou define o número máximo de caracteres a serem sobrepostos entre as partes. |
input_type | Obtém o tipo de entrada. |
connection_name | O nome de uma configuração de aplicativo ou variável de ambiente que contém o valor da cadeia de conexão. Esta propriedade suporta expressões de ligação. |
Coleção | O nome da coleção, tabela ou índice a pesquisar. Esta propriedade suporta expressões de ligação. |
Configuração
A associação suporta essas propriedades de configuração definidas no arquivo function.json.
Property | Descrição |
---|---|
type | Deve ser embeddingsStore . |
direção | Deve ser out . |
Designação | O nome da ligação de saída. |
entrada | A cadeia de caracteres de entrada para a qual gerar incorporações. |
modelo | Opcional. A ID do modelo a ser usado, cujo padrão é text-embedding-ada-002 . Você não deve alterar o modelo de um banco de dados existente. Para obter mais informações, consulte Uso. |
maxChunkLength | Opcional. O número máximo de caracteres usados para dividir a entrada. Para obter mais informações, consulte Uso. |
maxSobreposição | Opcional. Obtém ou define o número máximo de caracteres a serem sobrepostos entre as partes. |
inputType | Opcional. Obtém o tipo de entrada. |
nome_da_conexão | O nome de uma configuração de aplicativo ou variável de ambiente que contém o valor da cadeia de conexão. Esta propriedade suporta expressões de ligação. |
Coleção | O nome da coleção, tabela ou índice a pesquisar. Esta propriedade suporta expressões de ligação. |
Configuração
A associação suporta estas propriedades, que são definidas no seu código:
Property | Description |
---|---|
entrada | A cadeia de caracteres de entrada para a qual gerar incorporações. |
modelo | Opcional. A ID do modelo a ser usado, cujo padrão é text-embedding-ada-002 . Você não deve alterar o modelo de um banco de dados existente. Para obter mais informações, consulte Uso. |
maxChunkLength | Opcional. O número máximo de caracteres usados para dividir a entrada. Para obter mais informações, consulte Uso. |
maxSobreposição | Opcional. Obtém ou define o número máximo de caracteres a serem sobrepostos entre as partes. |
inputType | Opcional. Obtém o tipo de entrada. |
nome_da_conexão | O nome de uma configuração de aplicativo ou variável de ambiente que contém o valor da cadeia de conexão. Esta propriedade suporta expressões de ligação. |
Coleção | O nome da coleção, tabela ou índice a pesquisar. Esta propriedade suporta expressões de ligação. |
Utilização
Consulte a seção Exemplo para obter exemplos completos.