Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
Atualmente, a extensão do OpenAI do Azure para Azure Functions está em versão prévia.
A associação de entrada de inserções do Azure OpenAI permite que você gere inserções para entradas. A associação pode gerar inserções de arquivos ou entradas de texto bruto.
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 inserções no Serviço OpenAI do Azure, consulte Noções básicas sobre inserções no Serviço OpenAI 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 mostra como gerar inserçõ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 inserções armazenadas em um arquivo especificado que pode ser acessado pela 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 inserçõ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 inserções armazenadas em um arquivo especificado que pode ser acessado pela 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 inserçõ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 inserçõ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 inserçõ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 as propriedades do arquivo function.json, 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 inserçõ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 atributo EmbeddingsInput para definir uma associação de saída do repositório de inserções, o que dá suporte a estes parâmetros:
| Parâmetro | Descrição |
|---|---|
| Entrada | A cadeia de caracteres de entrada para a qual gerar inserçõ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, procura valores de "Ponto de Extremidade" e "Chave" nesta seção de configuração. Se não for especificado ou a seção não existir, retornará à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. |
| EmbeddingsModel |
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. |
Anotações
A anotação EmbeddingsInput permite que você defina uma associação de saída do repositório de inserções, que dá suporte a estes parâmetros:
| Elemento | Descrição |
|---|---|
| nome | Obtém ou define o nome da associação de entrada. |
| entrada | A cadeia de caracteres de entrada para a qual gerar inserçõ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, procura valores de "Ponto de Extremidade" e "Chave" nesta seção de configuração. Se não for especificado ou a seção não existir, retornará à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. |
| embeddingsModel |
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. |
Decoradores
Durante a visualização, defina a associação de entrada como uma generic_input_binding associação do tipo embeddings, que dá suporte a esses parâmetros: o decorador embeddings 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. |
| entrada | A cadeia de caracteres de entrada para a qual gerar inserçõ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, procura valores de "Ponto de Extremidade" e "Chave" nesta seção de configuração. Se não for especificado ou a seção não existir, retornará à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, 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. |
Configuração
A associação dá suporte a essas propriedades de configuração definidas no arquivo function.json.
| Propriedade | Descrição |
|---|---|
| tipo | Deve ser EmbeddingsInput. |
| direção | Deve ser in. |
| nome | O nome da associação de entrada. |
| entrada | A cadeia de caracteres de entrada para a qual gerar inserçõ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, procura valores de "Ponto de Extremidade" e "Chave" nesta seção de configuração. Se não for especificado ou a seção não existir, retornará à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. |
| embeddingsModel |
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. |
Configuração
A associação dá suporte a estas propriedades, que são definidas no código:
| Propriedade | Descrição |
|---|---|
| entrada | A cadeia de caracteres de entrada para a qual gerar inserçõ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, procura valores de "Ponto de Extremidade" e "Chave" nesta seção de configuração. Se não for especificado ou a seção não existir, retornará à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. |
| embeddingsModel |
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. |
Consulte a Seção de exemplo para obter exemplos completos.
Uso
Alterar as inserções padrão model altera a maneira como as inserções são armazenadas no banco de dados vetor. Alterar o modelo padrão pode fazer com que as pesquisas comecem a se comportar mal quando não corresponderem ao restante dos dados que foram ingeridos anteriormente no banco de dados vetor. O modelo padrão para inserções é text-embedding-ada-002.
Ao calcular o comprimento máximo do caractere para partes de entrada, considere que os tokens de entrada máximos permitidos para modelos de inserçã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 aproximadamente 32 mil caracteres de entrada (inglês) que podem caber em uma única parte.