Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Importante
A extensão do Azure OpenAI para o Azure Functions está atualmente em visualização.
A vinculação de entrada de incorporações do Azure OpenAI permite gerar incorporações para entradas. A associação pode gerar incorporações de arquivos ou entradas de texto bruto.
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 incorporações no Serviço Azure OpenAI, consulte Compreender incorporações no Serviço Azure OpenAI.
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 mostra como gerar incorporações para uma cadeia de caracteres de texto bruto.
internal class EmbeddingsRequest
{
[JsonPropertyName("rawText")]
public string? RawText { get; set; }
[JsonPropertyName("filePath")]
public string? FilePath { get; set; }
[JsonPropertyName("url")]
public string? Url { get; set; }
}
/// <summary>
/// Example showing how to use the <see cref="EmbeddingsAttribute"/> input binding to generate embeddings
/// for a raw text string.
/// </summary>
[Function(nameof(GenerateEmbeddings_Http_RequestAsync))]
public async Task GenerateEmbeddings_Http_RequestAsync(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = "embeddings")] HttpRequestData req,
[EmbeddingsInput("{rawText}", InputType.RawText, EmbeddingsModel = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%")] EmbeddingsContext embeddings)
{
using StreamReader reader = new(req.Body);
string request = await reader.ReadToEndAsync();
EmbeddingsRequest? requestBody = JsonSerializer.Deserialize<EmbeddingsRequest>(request);
this.logger.LogInformation(
"Received {count} embedding(s) for input text containing {length} characters.",
embeddings.Count,
requestBody?.RawText?.Length);
// TODO: Store the embeddings into a database or other storage.
}
Este exemplo mostra como recuperar incorporações armazenadas em um arquivo especificado que é acessível à função.
[Function(nameof(GetEmbeddings_Http_FilePath))]
public async Task GetEmbeddings_Http_FilePath(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = "embeddings-from-file")] HttpRequestData req,
[EmbeddingsInput("{filePath}", InputType.FilePath, MaxChunkLength = 512, EmbeddingsModel = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%")] EmbeddingsContext embeddings)
{
using StreamReader reader = new(req.Body);
string request = await reader.ReadToEndAsync();
EmbeddingsRequest? requestBody = JsonSerializer.Deserialize<EmbeddingsRequest>(request);
this.logger.LogInformation(
"Received {count} embedding(s) for input file '{path}'.",
embeddings.Count,
requestBody?.FilePath);
// TODO: Store the embeddings into a database or other storage.
}
Este exemplo mostra como gerar incorporações para uma cadeia de caracteres de texto bruto.
@FunctionName("GenerateEmbeddingsHttpRequest")
public HttpResponseMessage generateEmbeddingsHttpRequest(
@HttpTrigger(
name = "req",
methods = {HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS,
route = "embeddings")
HttpRequestMessage<EmbeddingsRequest> request,
@EmbeddingsInput(name = "Embeddings", input = "{RawText}", inputType = InputType.RawText, embeddingsModel = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%") String embeddingsContext,
final ExecutionContext context) {
if (request.getBody() == null)
{
throw new IllegalArgumentException(
"Invalid request body. Make sure that you pass in {\"rawText\": value } as the request body.");
}
JSONObject embeddingsContextJsonObject = new JSONObject(embeddingsContext);
context.getLogger().info(String.format("Received %d embedding(s) for input text containing %s characters.",
embeddingsContextJsonObject.get("count"),
request.getBody().getRawText().length()));
// TODO: Store the embeddings into a database or other storage.
return request.createResponseBuilder(HttpStatus.ACCEPTED)
.header("Content-Type", "application/json")
.build();
}
Este exemplo mostra como recuperar incorporações armazenadas em um arquivo especificado que é acessível à função.
@FunctionName("GenerateEmbeddingsHttpFilePath")
public HttpResponseMessage generateEmbeddingsHttpFilePath(
@HttpTrigger(
name = "req",
methods = {HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS,
route = "embeddings-from-file")
HttpRequestMessage<EmbeddingsRequest> request,
@EmbeddingsInput(name = "Embeddings", input = "{FilePath}", inputType = InputType.FilePath, maxChunkLength = 512, embeddingsModel = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%") String embeddingsContext,
final ExecutionContext context) {
if (request.getBody() == null)
{
throw new IllegalArgumentException(
"Invalid request body. Make sure that you pass in {\"filePath\": value } as the request body.");
}
JSONObject embeddingsContextJsonObject = new JSONObject(embeddingsContext);
context.getLogger().info(String.format("Received %d embedding(s) for input file %s.",
embeddingsContextJsonObject.get("count"),
request.getBody().getFilePath()));
// TODO: Store the embeddings into a database or other storage.
return request.createResponseBuilder(HttpStatus.ACCEPTED)
.header("Content-Type", "application/json")
.build();
}
Este exemplo mostra como gerar incorporações para uma cadeia de caracteres de texto bruto.
const embeddingsHttpInput = input.generic({
input: '{rawText}',
inputType: 'RawText',
type: 'embeddings',
embeddingsModel: '%EMBEDDING_MODEL_DEPLOYMENT_NAME%'
})
app.http('generateEmbeddings', {
methods: ['POST'],
route: 'embeddings',
authLevel: 'function',
extraInputs: [embeddingsHttpInput],
handler: async (request, context) => {
let requestBody = await request.json();
let response = 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 EmbeddingsHttpRequest {
RawText?: string;
}
const embeddingsHttpInput = input.generic({
input: '{rawText}',
inputType: 'RawText',
type: 'embeddings',
embeddingsModel: '%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}
}
});
Este exemplo mostra como gerar incorporações para uma cadeia de caracteres de texto bruto.
const embeddingsFilePathInput = input.generic({
input: '{filePath}',
inputType: 'FilePath',
type: 'embeddings',
maxChunkLength: 512,
embeddingsModel: '%EMBEDDING_MODEL_DEPLOYMENT_NAME%'
})
app.http('getEmbeddingsFilePath', {
methods: ['POST'],
route: 'embeddings-from-file',
authLevel: 'function',
extraInputs: [embeddingsFilePathInput],
handler: async (request, context) => {
let requestBody = await request.json();
let response = context.extraInputs.get(embeddingsFilePathInput);
context.log(
`Received ${response.count} embedding(s) for input file ${requestBody.FilePath}.`
);
// TODO: Store the embeddings into a database or other storage.
return {status: 202}
}
});
interface EmbeddingsFilePath {
FilePath?: string;
}
const embeddingsFilePathInput = input.generic({
input: '{filePath}',
inputType: 'FilePath',
type: 'embeddings',
maxChunkLength: 512,
embeddingsModel: '%EMBEDDING_MODEL_DEPLOYMENT_NAME%'
})
app.http('getEmbeddingsFilePath', {
methods: ['POST'],
route: 'embeddings-from-file',
authLevel: 'function',
extraInputs: [embeddingsFilePathInput],
handler: async (request, context) => {
let requestBody: EmbeddingsFilePath = await request.json();
let response: any = context.extraInputs.get(embeddingsFilePathInput);
context.log(
`Received ${response.count} embedding(s) for input file ${requestBody.FilePath}.`
);
// TODO: Store the embeddings into a database or other storage.
return {status: 202}
}
});
Este exemplo mostra como gerar incorporações para uma cadeia de caracteres de texto bruto.
Aqui está o arquivo function.json para gerar as incorporações:
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "Request",
"route": "embeddings",
"methods": [
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "Response"
},
{
"name": "Embeddings",
"type": "embeddings",
"direction": "in",
"inputType": "RawText",
"input": "{rawText}",
"embeddingsModel": "%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, $Embeddings)
$input = $Request.Body.RawText
Write-Host "Received $($Embeddings.Count) embedding(s) for input text containing $($input.Length) characters."
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::Accepted
})
Este exemplo mostra como gerar incorporações para uma cadeia de caracteres de texto bruto.
@app.function_name("GenerateEmbeddingsHttpRequest")
@app.route(route="embeddings", methods=["POST"])
@app.embeddings_input(
arg_name="embeddings",
input="{rawText}",
input_type="rawText",
embeddings_model="%EMBEDDING_MODEL_DEPLOYMENT_NAME%",
)
def generate_embeddings_http_request(
req: func.HttpRequest, embeddings: str
) -> func.HttpResponse:
user_message = req.get_json()
embeddings_json = json.loads(embeddings)
embeddings_request = {"raw_text": user_message.get("rawText")}
logging.info(
f'Received {embeddings_json.get("count")} embedding(s) for input text '
f'containing {len(embeddings_request.get("raw_text"))} characters.'
)
# TODO: Store the embeddings into a database or other storage.
return func.HttpResponse(status_code=200)
Atributos
Aplique o EmbeddingsInput atributo para definir uma associação de entrada incorporada, que suporta estes parâmetros:
| Parâmetro | Descrição |
|---|---|
| Entrada | A cadeia de caracteres de entrada para a qual gerar incorporações. |
| AIConnectionName | Opcional. Obtém ou define o nome da seção de configuração para as configurações de conectividade do serviço de IA. Para o Azure OpenAI: Se especificado, procure os valores "Endpoint" e "Key" nesta seção de configuração. Se não for especificado ou a seção não existir, recorrerá às variáveis de ambiente: AZURE_OPENAI_ENDPOINT e AZURE_OPENAI_KEY. Para autenticação de identidade gerenciada atribuída pelo usuário, essa propriedade é necessária. Para o serviço OpenAI (não Azure), defina a variável de ambiente OPENAI_API_KEY. |
| IncorporaçõesModelo |
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. |
Anotações
A EmbeddingsInput anotação permite definir uma associação de entrada incorporada, que suporta estes parâmetros:
| Elemento | Descrição |
|---|---|
| Designação | Obtém ou define o nome da ligação de entrada. |
| entrada | A cadeia de caracteres de entrada para a qual gerar incorporações. |
| aiConnectionName | Opcional. Obtém ou define o nome da seção de configuração para as configurações de conectividade do serviço de IA. Para o Azure OpenAI: Se especificado, procure os valores "Endpoint" e "Key" nesta seção de configuração. Se não for especificado ou a seção não existir, recorrerá às variáveis de ambiente: AZURE_OPENAI_ENDPOINT e AZURE_OPENAI_KEY. Para autenticação de identidade gerenciada atribuída pelo usuário, essa propriedade é necessária. Para o serviço OpenAI (não Azure), defina a variável de ambiente OPENAI_API_KEY. |
| incorporaçõesModelo |
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. |
Decoradores
Durante a visualização, defina a ligação de entrada como uma generic_input_binding ligação do tipo embeddings, que suporta estes parâmetros: embeddings decorator suporta estes parâmetros:
| Parâmetro | Descrição |
|---|---|
| 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. |
| ai_connection_name | Opcional. Obtém ou define o nome da seção de configuração para as configurações de conectividade do serviço de IA. Para o Azure OpenAI: Se especificado, procure os valores "Endpoint" e "Key" nesta seção de configuração. Se não for especificado ou a seção não existir, recorrerá às variáveis de ambiente: AZURE_OPENAI_ENDPOINT e AZURE_OPENAI_KEY. Para autenticação de identidade gerenciada atribuída pelo usuário, essa propriedade é necessária. Para o serviço OpenAI (não Azure), defina a variável de ambiente OPENAI_API_KEY. |
| embeddings_model |
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. |
Configuração
A associação suporta essas propriedades de configuração definidas no arquivo function.json.
| Propriedade | Descrição |
|---|---|
| tipo | Deve ser EmbeddingsInput. |
| direção | Deve ser in. |
| Designação | O nome da ligação de entrada. |
| entrada | A cadeia de caracteres de entrada para a qual gerar incorporações. |
| aiConnectionName | Opcional. Obtém ou define o nome da seção de configuração para as configurações de conectividade do serviço de IA. Para o Azure OpenAI: Se especificado, procure os valores "Endpoint" e "Key" nesta seção de configuração. Se não for especificado ou a seção não existir, recorrerá às variáveis de ambiente: AZURE_OPENAI_ENDPOINT e AZURE_OPENAI_KEY. Para autenticação de identidade gerenciada atribuída pelo usuário, essa propriedade é necessária. Para o serviço OpenAI (não Azure), defina a variável de ambiente OPENAI_API_KEY. |
| incorporaçõesModelo |
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. |
Configuração
A associação suporta estas propriedades, que são definidas no seu código:
| Propriedade | Descrição |
|---|---|
| entrada | A cadeia de caracteres de entrada para a qual gerar incorporações. |
| aiConnectionName | Opcional. Obtém ou define o nome da seção de configuração para as configurações de conectividade do serviço de IA. Para o Azure OpenAI: Se especificado, procure os valores "Endpoint" e "Key" nesta seção de configuração. Se não for especificado ou a seção não existir, recorrerá às variáveis de ambiente: AZURE_OPENAI_ENDPOINT e AZURE_OPENAI_KEY. Para autenticação de identidade gerenciada atribuída pelo usuário, essa propriedade é necessária. Para o serviço OpenAI (não Azure), defina a variável de ambiente OPENAI_API_KEY. |
| incorporaçõesModelo |
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. |
Consulte a seção Exemplo para obter exemplos completos.
Utilização
Alterar as incorporações model padrão altera a maneira como as incorporações são armazenadas no banco de dados vetorial. Alterar o modelo padrão pode fazer com que as pesquisas comecem a se comportar incorretamente quando não corresponderem ao restante dos dados que foram ingeridos anteriormente no banco de dados vetorial. O modelo padrão para incorporações é text-embedding-ada-002.
Ao calcular o comprimento máximo de caracteres para blocos de entrada, considere que o máximo de tokens de entrada permitido para modelos de incorporação de entrada de segunda geração como text-embedding-ada-002 é 8191. Um único token tem aproximadamente quatro caracteres de comprimento (em inglês), o que se traduz em cerca de 32.000 caracteres (inglês) de entrada que podem caber em um único bloco.