Associação de saída do repositório de inserções do OpenAI do Azure para o Azure Functions
Importante
Atualmente, a extensão do OpenAI do Azure para Azure Functions está em versão prévia.
A associação de saída do repositório de inserções do OpenAI do Azure permite que você grave arquivos em um repositório de documentos semânticos que podem ser referenciados posteriormente em uma pesquisa semântica.
Para obter informações sobre os detalhes de configuração da extensão do OpenAI do Azure, confira Extensões do OpenAI do Azure para Azure Functions. Para saber mais sobre a classificação semântica na Pesquisa de IA do Azure, confira Classificação semântica na Pesquisa de IA do Azure.
Observação
Referências e exemplos só são fornecidos para o modelo do Node.js v4.
Observação
Referências e exemplos só são fornecidos para o modelo do Python v2.
Observação
Embora haja suporte para ambos os modelos de processo C#, apenas exemplos de modelo de trabalho isolados são fornecidos.
Exemplo
Este exemplo grava um fluxo de entrada HTTP em um repositório de documentos semânticos 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 de documentos semânticos 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;
}
Ainda não há exemplos disponíveis.
Este exemplo grava um fluxo de entrada HTTP em um repositório de documentos semânticos 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 de documentos semânticos na URL fornecida.
Aqui está o arquivo function.json para ingestão de 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 as propriedades do arquivo function.json, 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 de documentos semânticos 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 atributo EmbeddingsStoreOutput
para definir uma associação de saída do repositório de inserções, que dá suporte a estes parâmetros:
Parâmetro | Descrição |
---|---|
Entrada | A cadeia de caracteres de entrada para a qual gerar inserções. |
Modelo | Opcional. A ID do modelo a ser usado, que usa text-embedding-ada-002 como padrão. 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 agrupar 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 partes. |
InputType | Opcional. Obtém o tipo de entrada. |
ConnectionName | O nome de uma configuração de aplicativo ou uma variável de ambiente que contém o valor da cadeia de conexão. Essa propriedade dá suporte a expressões de associação. |
Coleção | O nome da coleção, da tabela ou do índice a ser pesquisado. Essa propriedade dá suporte a expressões de associação. |
Anotações
A EmbeddingsStoreOutput
anotação permite que você defina uma associação de saída de armazenamento de incorporações, que dá suporte a estes parâmetros:
Element | Descrição |
---|---|
name | Obtém ou define o nome da associação de saída. |
input | A cadeia de caracteres de entrada para a qual gerar inserções. |
Modelo | Opcional. A ID do modelo a ser usado, que usa text-embedding-ada-002 como padrão. 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 agrupar 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 partes. |
inputType | Opcional. Obtém o tipo de entrada. |
connectionName | O nome de uma configuração de aplicativo ou uma variável de ambiente que contém o valor da cadeia de conexão. Essa propriedade dá suporte a expressões de associação. |
collection | O nome da coleção, da tabela ou do índice a ser pesquisado. Essa propriedade dá suporte a expressões de associação. |
Decoradores
Durante a versão prévia, defina a associação de saída como uma associação generic_output_binding
do tipo semanticSearch
, que dá suporte a esses parâmetros:
Parâmetro | Descrição |
---|---|
arg_name | O nome da variável que representa o parâmetro de associação. |
input | A cadeia de caracteres de entrada para a qual gerar inserções. |
Modelo | Opcional. A ID do modelo a ser usado, que usa text-embedding-ada-002 como padrão. 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 agrupar 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 partes. |
input_type | Obtém o tipo de entrada. |
connection_name | O nome de uma configuração de aplicativo ou uma variável de ambiente que contém o valor da cadeia de conexão. Essa propriedade dá suporte a expressões de associação. |
collection | O nome da coleção, da tabela ou do índice a ser pesquisado. Essa propriedade dá suporte a expressões de associação. |
Configuração
A associação dá suporte a essas propriedades de configuração definidas no arquivo function.json.
Propriedade | Descrição |
---|---|
tipo | Deve ser embeddingsStore . |
direction | Deve ser out . |
name | O nome da associação de saída. |
input | A cadeia de caracteres de entrada para a qual gerar inserções. |
Modelo | Opcional. A ID do modelo a ser usado, que usa text-embedding-ada-002 como padrão. 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 agrupar 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 partes. |
inputType | Opcional. Obtém o tipo de entrada. |
connectionName | O nome de uma configuração de aplicativo ou uma variável de ambiente que contém o valor da cadeia de conexão. Essa propriedade dá suporte a expressões de associação. |
collection | O nome da coleção, da tabela ou do índice a ser pesquisado. Essa propriedade dá suporte a expressões de associação. |
Configuração
A associação dá suporte a estas propriedades, que são definidas no código:
Propriedade | Descrição |
---|---|
input | A cadeia de caracteres de entrada para a qual gerar inserções. |
Modelo | Opcional. A ID do modelo a ser usado, que usa text-embedding-ada-002 como padrão. 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 agrupar 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 partes. |
inputType | Opcional. Obtém o tipo de entrada. |
connectionName | O nome de uma configuração de aplicativo ou uma variável de ambiente que contém o valor da cadeia de conexão. Essa propriedade dá suporte a expressões de associação. |
collection | O nome da coleção, da tabela ou do índice a ser pesquisado. Essa propriedade dá suporte a expressões de associação. |
Uso
Consulte a Seção de exemplo para obter exemplos completos.