Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Importante
La extensión de Azure OpenAI para Azure Functions está actualmente en versión preliminar.
El enlace de entrada de inserciones de Azure OpenAI permite generar inserciones para las entradas. El enlace puede generar inserciones a partir de archivos o entradas de texto sin formato.
Para obtener información sobre la configuración y los detalles de configuración de la extensión de Azure OpenAI, consulte Extensiones de Azure OpenAI para Azure Functions. Para más información sobre las inserciones en Azure OpenAI Service, consulte Descripción de las inserciones en Azure OpenAI Service.
Nota:
Las referencias y ejemplos solo se proporcionan para el modelo de Node.js v4.
Nota:
Las referencias y ejemplos solo se proporcionan para el modelo de Python v2.
Nota:
Aunque se admiten ambos modelos de proceso de C#, solo se proporcionan ejemplos de modelos de trabajo aislados.
Ejemplo
El soporte de Go no está disponible actualmente para esta asignación.
En este ejemplo se muestra cómo generar inserciones para una cadena de texto sin formato.
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%", AIConnectionName = "AzureOpenAI")] 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.
}
En este ejemplo se muestra cómo recuperar incrustaciones almacenadas en un archivo especificado al que se puede acceder a la función.
[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%", AIConnectionName = "AzureOpenAI")] 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.
}
En este ejemplo se muestra cómo generar inserciones para una cadena de texto sin formato.
@FunctionName("GenerateEmbeddingsHttpRequest")
public HttpResponseMessage generateEmbeddingsHttpRequest(
@HttpTrigger(
name = "req",
methods = {HttpMethod.POST},
authLevel = AuthorizationLevel.FUNCTION,
route = "embeddings")
HttpRequestMessage<EmbeddingsRequest> request,
@EmbeddingsInput(name = "Embeddings", input = "{RawText}", inputType = InputType.RawText, embeddingsModel = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%", aiConnectionName = "AzureOpenAI") 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();
}
En este ejemplo se muestra cómo recuperar incrustaciones almacenadas en un archivo especificado al que se puede acceder a la función.
@FunctionName("GenerateEmbeddingsHttpFilePath")
public HttpResponseMessage generateEmbeddingsHttpFilePath(
@HttpTrigger(
name = "req",
methods = {HttpMethod.POST},
authLevel = AuthorizationLevel.FUNCTION,
route = "embeddings-from-file")
HttpRequestMessage<EmbeddingsRequest> request,
@EmbeddingsInput(name = "Embeddings", input = "{FilePath}", inputType = InputType.FilePath, maxChunkLength = 512, embeddingsModel = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%", aiConnectionName = "AzureOpenAI") 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();
}
En este ejemplo se muestra cómo generar inserciones para una cadena de texto sin formato.
const embeddingsHttpInput = input.generic({
input: '{rawText}',
inputType: 'RawText',
type: 'embeddings',
embeddingsModel: '%EMBEDDING_MODEL_DEPLOYMENT_NAME%',
aiConnectionName: 'AzureOpenAI',
})
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 ?? 0} 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%',
aiConnectionName: 'AzureOpenAI',
})
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 ?? 0} characters.`
);
// TODO: Store the embeddings into a database or other storage.
return {status: 202}
}
});
En este ejemplo se muestra cómo generar inserciones para una cadena de texto sin formato.
const embeddingsFilePathInput = input.generic({
input: '{filePath}',
inputType: 'FilePath',
type: 'embeddings',
maxChunkLength: 512,
embeddingsModel: '%EMBEDDING_MODEL_DEPLOYMENT_NAME%',
aiConnectionName: 'AzureOpenAI',
})
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%',
aiConnectionName: 'AzureOpenAI',
})
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}
}
});
En este ejemplo se muestra cómo generar inserciones para una cadena de texto sin formato.
Este es el archivo function.json para generar las incrustaciones:
{
"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%",
"aiConnectionName": "AzureOpenAI"
}
]
}
Para obtener más información sobre las propiedades del archivo function.json, consulte la sección de Configuración.
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
})
En este ejemplo se muestra cómo generar inserciones para una cadena de texto sin formato.
@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%",
ai_connection_name="AzureOpenAI",
)
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 el atributo EmbeddingsInput para definir un enlace de entrada de inserciones, que admite estos parámetros:
| Parámetro | Descripción |
|---|---|
| Entrada | Cadena de entrada para la que se van a generar inserciones. |
| AIConnectionName | Opcional. Obtiene o establece el nombre de la sección de configuración para la configuración de conectividad del servicio ai. Para Azure OpenAI: si se especifica, busca los valores "Punto de conexión" y "Clave" en esta sección de configuración. Si no se especifica o la sección no existe, vuelva a las variables de entorno: AZURE_OPENAI_ENDPOINT y AZURE_OPENAI_KEY. Para la autenticación de identidad administrada asignada por el usuario, esta propiedad es necesaria. Para el servicio OpenAI (que no es de Azure), establezca la variable de entorno OPENAI_API_KEY. |
| EmbeddingsModel |
Opcional. Identificador del modelo que se va a usar, que tiene como valor predeterminado text-embedding-ada-002. No debe cambiar el modelo de una base de datos existente. Para obtener más información, consulte Uso. |
| MaxChunkLength | Opcional. Número máximo de caracteres usados para fragmentar la entrada. Para obtener más información, consulte Uso. |
| MaxOverlap | Opcional. Obtiene o establece el número máximo de caracteres que se superponen entre fragmentos. |
| InputType | Opcional. Obtiene el tipo de la entrada. |
anotaciones
La anotación EmbeddingsInput permite definir un enlace de entrada de inserciones, que admite estos parámetros:
| Elemento | Descripción |
|---|---|
| nombre | Obtiene o establece el nombre del enlace de entrada. |
| entrada | Cadena de entrada para la que se van a generar inserciones. |
| aiConnectionName | Opcional. Obtiene o establece el nombre de la sección de configuración para la configuración de conectividad del servicio ai. Para Azure OpenAI: si se especifica, busca los valores "Punto de conexión" y "Clave" en esta sección de configuración. Si no se especifica o la sección no existe, vuelva a las variables de entorno: AZURE_OPENAI_ENDPOINT y AZURE_OPENAI_KEY. Para la autenticación de identidad administrada asignada por el usuario, esta propiedad es necesaria. Para el servicio OpenAI (que no es de Azure), establezca la variable de entorno OPENAI_API_KEY. |
| embeddingsModel |
Opcional. Identificador del modelo que se va a usar, que tiene como valor predeterminado text-embedding-ada-002. No debe cambiar el modelo de una base de datos existente. Para obtener más información, consulte Uso. |
| maxChunkLength | Opcional. Número máximo de caracteres usados para fragmentar la entrada. Para obtener más información, consulte Uso. |
| maxOverlap | Opcional. Obtiene o establece el número máximo de caracteres que se superponen entre fragmentos. |
| inputType | Opcional. Obtiene el tipo de la entrada. |
Elementos Decorator
Durante la versión preliminar, defina el enlace de entrada como un enlace generic_input_binding de tipo embeddings, que admite estos parámetros: embeddings el decorador admite estos parámetros:
| Parámetro | Descripción |
|---|---|
| arg_name | Nombre de la variable que representa el parámetro de enlace. |
| entrada | Cadena de entrada para la que se van a generar inserciones. |
| ai_connection_name | Opcional. Obtiene o establece el nombre de la sección de configuración para la configuración de conectividad del servicio ai. Para Azure OpenAI: si se especifica, busca los valores "Punto de conexión" y "Clave" en esta sección de configuración. Si no se especifica o la sección no existe, vuelva a las variables de entorno: AZURE_OPENAI_ENDPOINT y AZURE_OPENAI_KEY. Para la autenticación de identidad administrada asignada por el usuario, esta propiedad es necesaria. Para el servicio OpenAI (que no es de Azure), establezca la variable de entorno OPENAI_API_KEY. |
| embeddings_model |
Opcional. Identificador del modelo que se va a usar, que tiene como valor predeterminado text-embedding-ada-002. No debe cambiar el modelo de una base de datos existente. Para obtener más información, consulte Uso. |
| maxChunkLength | Opcional. Número máximo de caracteres usados para fragmentar la entrada. Para obtener más información, consulte Uso. |
| max_overlap | Opcional. Obtiene o establece el número máximo de caracteres que se superponen entre fragmentos. |
| input_type | Obtiene el tipo de la entrada. |
Configuración
El enlace admite estas propiedades de configuración que se establecen en el archivo function.json.
| Propiedad | Descripción |
|---|---|
| tipo | Debe ser EmbeddingsInput. |
| dirección | Debe ser in. |
| nombre | Nombre del enlace de entrada. |
| entrada | Cadena de entrada para la que se van a generar inserciones. |
| aiConnectionName | Opcional. Obtiene o establece el nombre de la sección de configuración para la configuración de conectividad del servicio ai. Para Azure OpenAI: si se especifica, busca los valores "Punto de conexión" y "Clave" en esta sección de configuración. Si no se especifica o la sección no existe, vuelva a las variables de entorno: AZURE_OPENAI_ENDPOINT y AZURE_OPENAI_KEY. Para la autenticación de identidad administrada asignada por el usuario, esta propiedad es necesaria. Para el servicio OpenAI (que no es de Azure), establezca la variable de entorno OPENAI_API_KEY. |
| embeddingsModel |
Opcional. Identificador del modelo que se va a usar, que tiene como valor predeterminado text-embedding-ada-002. No debe cambiar el modelo de una base de datos existente. Para obtener más información, consulte Uso. |
| maxChunkLength | Opcional. Número máximo de caracteres usados para fragmentar la entrada. Para obtener más información, consulte Uso. |
| maxOverlap | Opcional. Obtiene o establece el número máximo de caracteres que se superponen entre fragmentos. |
| inputType | Opcional. Obtiene el tipo de la entrada. |
Configuración
El enlace admite estas propiedades, que se definen en el código:
| Propiedad | Descripción |
|---|---|
| entrada | Cadena de entrada para la que se van a generar inserciones. |
| aiConnectionName | Opcional. Obtiene o establece el nombre de la sección de configuración para la configuración de conectividad del servicio ai. Para Azure OpenAI: si se especifica, busca los valores "Punto de conexión" y "Clave" en esta sección de configuración. Si no se especifica o la sección no existe, vuelva a las variables de entorno: AZURE_OPENAI_ENDPOINT y AZURE_OPENAI_KEY. Para la autenticación de identidad administrada asignada por el usuario, esta propiedad es necesaria. Para el servicio OpenAI (que no es de Azure), establezca la variable de entorno OPENAI_API_KEY. |
| embeddingsModel |
Opcional. Identificador del modelo que se va a usar, que tiene como valor predeterminado text-embedding-ada-002. No debe cambiar el modelo de una base de datos existente. Para obtener más información, consulte Uso. |
| maxChunkLength | Opcional. Número máximo de caracteres usados para fragmentar la entrada. Para obtener más información, consulte Uso. |
| maxOverlap | Opcional. Obtiene o establece el número máximo de caracteres que se superponen entre fragmentos. |
| inputType | Opcional. Obtiene el tipo de la entrada. |
Consulte la sección de ejemplos para ver ejemplos completos.
Uso
Cambiar las inserciones predeterminadas model cambia la forma en que las inserciones se almacenan en la base de datos vectorial. Cambiar el modelo predeterminado puede hacer que las búsquedas empiecen a comportarse mal cuando no coincidan con el resto de los datos ingeridos anteriormente en la base de datos vectorial. El modelo predeterminado para las inserciones es text-embedding-ada-002.
Al calcular la longitud máxima de caracteres para los fragmentos de entrada, tenga en cuenta que el número máximo de tokens de entrada permitidos para los modelos de inserción de entrada de segunda generación como text-embedding-ada-002 es 8191. Un solo token tiene aproximadamente cuatro caracteres de longitud (en inglés), lo cual se traduce a aproximadamente 32 000 caracteres de entrada que pueden caber en un único fragmento.
Connections
Para usar la extensión de enlace Azure OpenAI, necesitas especificar una conexión a una definición de modelo OpenAI. Establece la conexión del modelo OpenAI en tus bindings usando uno de estos enfoques:
- Usa la
AIConnectionNamepropiedad de binding (preferida para Azure OpenAI). - Configura
AZURE_OPENAI_ENDPOINTyAZURE_OPENAI_KEYestá en la configuración de la app (para Azure OpenAI). - Configurado solo
Open_API_Keyen la configuración de la app (parahttps://api.openai.com).
La forma en que se establece la conexión depende tanto de la API del modelo como del método de autenticación, como indica la siguiente tabla:
| API de autenticación/modelo | Azure OpenAI | OpenAI (https://api.openai.com) |
|---|---|---|
| Conexión de identidad gestionada | AIConnectionName |
No soportado |
| Referencia a Key Vault | AZURE_OPENAI_ENDPOINTAZURE_OPENAI_KEY |
Open_API_Key |
| Referencia de configuración de aplicaciones | AZURE_OPENAI_ENDPOINTAZURE_OPENAI_KEY |
Open_API_Key |
| Secreto compartido | AZURE_OPENAI_ENDPOINTAZURE_OPENAI_KEY |
Open_API_Key |
Utiliza conexiones gestionadas basadas en identidad y la AIConnectionName propiedad.
Cuando usas AIConnectionName, el valor de esta configuración de propiedad depende del tipo de conexión:
-
Conexión de identidad gestionada: La
AIConnectionNamepropiedad es<CONNECTION_NAME_PREFIX>compartida por un grupo de configuraciones que en conjunto definen una conexión basada en identidad con Azure OpenAI. Para más información, véase Definir conexiones de identidad. -
Referencia Key Vault: La
AIConnectionNameconfiguración de propiedades devuelve una referencia de Azure Key Vault a la ubicación donde se mantiene centralmente la clave API. Para más información, consulte Definir conexiones de Key Vault. -
Referencia de configuración de la aplicación: La
AIConnectionNameconfiguración de propiedad devuelve una referencia de Azure App Configuration que devuelve una clave API o una referencia a Key Vault. Para más información, consulta Azure App Configuration en el artículo de conexiones. -
Clave API: La
AIConnectionNameconfiguración de propiedades se resuelve a la configuración de la app que contiene directamente el endpoint y la clave. Como las claves compartidas pueden verse comprometidas, utiliza conexiones de identidad gestionadas siempre que sea posible. Para más información, véase Definir conexiones.
Para saber más sobre conexiones de bindings, consulta Gestionar conexiones en Azure Functions.
Las vinculaciones de OpenAI incluyen una AIConnectionName propiedad que puedes usar para especificar el <ConnectionNamePrefix> grupo de configuraciones de la app que definen la conexión a Azure OpenAI:
| Nombre de la configuración | Descripción |
|---|---|
<CONNECTION_NAME_PREFIX>__endpoint |
Establece el extremo URI del servicio Azure OpenAI. Esta configuración siempre es necesaria. |
<CONNECTION_NAME_PREFIX>__clientId |
Establece la identidad asignada por el usuario específica que se usará al obtener un token de acceso. Requiere que <CONNECTION_NAME_PREFIX>__credential se establezca en managedidentity. La propiedad acepta un identificador de cliente correspondiente a una identidad asignada por el usuario asignada a la aplicación. No es válido especificar un id. de recurso así como tampoco es válido un id. de cliente. Si no especificas esta propiedad, se utiliza la identidad asignada por el sistema. Esta propiedad se usa de forma diferente en escenarios de desarrollo locales, en los que no se debe establecer el elemento credential. |
<CONNECTION_NAME_PREFIX>__credential |
Define cómo se obtiene un token de access para la conexión. Use managedidentity para la autenticación de identidad administrada. Este valor sólo es válido cuando existe una identidad administrada disponible en el entorno del hospedaje. |
<CONNECTION_NAME_PREFIX>__managedIdentityResourceId |
Cuando credential se establece en managedidentity, establece esta propiedad para especificar el Identificador de recurso a usar al obtener un token. La propiedad acepta un identificador de recurso correspondiente al Id. de recurso de la identidad administrada definida por el usuario. No es válido especificar un Id. de recurso así como tampoco es válido un Id. de cliente. Si no especificas ninguno, se usa la identidad asignada por el sistema. Esta propiedad se usa de forma diferente en escenarios de desarrollo locales, en los que no se debe establecer el elemento credential. |
<CONNECTION_NAME_PREFIX>__key |
Establece la clave secreta compartida necesaria para acceder al punto final del servicio OpenAI de Azure usando autenticación basada en claves. Como mejor práctica de seguridad, utiliza siempre Microsoft Entra ID con identidades gestionadas para la autenticación. |
Considera estos ajustes de conexión de identidad gestionada cuando configures la AIConnectionName propiedad como myAzureOpenAI:
myAzureOpenAI__endpoint=https://contoso.openai.azure.com/myAzureOpenAI__credential=managedidentitymyAzureOpenAI__clientId=aaaaaaaa-bbbb-cccc-1111-222222222222
En tiempo de ejecución, el host interpreta estos ajustes como un solo myAzureOpenAI ajuste:
"myAzureOpenAI":
{
"endpoint": "https://contoso.openai.azure.com/",
"credential": "managedidentity",
"clientId": "aaaaaaaa-bbbb-cccc-1111-222222222222"
}
Cuando utilices identidades gestionadas, asegúrate de añadir tu identidad al rol de Usuario OpenAI de Servicios Cognitivos .
Al ejecutarlo localmente, añade estos ajustes al archivolocal.settings.json proyecto. Para obtener más información, consulte Desarrollo local con conexiones basadas en identidades.
Para más información, consulte Trabajar con la configuración de la aplicación.