Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Annotazioni
Questa funzionalità è attualmente disponibile in anteprima pubblica. Questa anteprima viene fornita senza un contratto di servizio e non è consigliata per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per ulteriori informazioni, vedere Condizioni supplementari per l'uso delle versioni di anteprima di Microsoft Azure.
In questa guida introduttiva si usa il recupero agentico per creare un'esperienza di ricerca conversazionale basata su documenti indicizzati in Azure AI Search e un modello di linguaggio di grandi dimensioni da Azure OpenAI in Modelli di Fonderia.
Una Knowledge Base orchestra il recupero agentico scomponendo query complesse in sottoquery, eseguendo le sottoquery su una o più origini di informazioni e restituendo risultati con metadati. Per impostazione predefinita, la knowledge base restituisce contenuti non elaborati dalle origini; tuttavia, questa guida introduttiva usa la modalità di output di sintesi delle risposte per la generazione di risposte in linguaggio naturale.
Anche se è possibile usare dati personalizzati, questa guida introduttiva usa i documenti JSON sample dall'e-book Earth at Night della NASA.
Suggerimento
Vuoi iniziare subito? Scaricare il codice source in GitHub.
Prerequisiti
Un account Azure con una sottoscrizione attiva. Creare un account gratuito.
Un servizio Azure AI Search, in qualsiasi area che fornisce il recupero agentico. Questo quickstart prevede il livello Basic o superiore per il supporto delle identità gestite.
Un progetto e una risorsa di Microsoft Foundry . Quando si crea un progetto, la risorsa viene creata automaticamente.
Modello di incorporamento distribuito nel progetto per la conversione da testo a vettore. È possibile usare qualsiasi modello, ad esempio .
LLM implementato nel tuo progetto per la pianificazione delle query e la generazione di risposte. È possibile usare qualsiasi LLM supportato, ad esempio .
.NET 8 o versione successiva.
Git per clonare il repository di esempio.
interfaccia della riga di comando di Azure per l'autenticazione senza chiave con Microsoft Entra ID.
Configurare l'accesso
Prima di iniziare, assicurarsi di disporre delle autorizzazioni per accedere al contenuto e alle operazioni. Questa guida di avvio rapido usa Microsoft Entra ID per l'autenticazione e l'accesso basato su ruoli per l'autorizzazione. Per assegnare i ruoli, è necessario essere Proprietario o Amministratore dell'accesso utenti. Se i ruoli non sono fattibili, usare invece l'autenticazione basata su chiave.
Per configurare l'accesso per questo avvio rapido:
Accedere al portale Azure.
Nel servizio Azure AI Search:
Abilitare l'accesso in base al ruolo.
Creare un'identità gestita assegnata dal sistema.
Assegnare i ruoli seguenti all'account utente: Collaboratore al servizio di ricerca, Collaboratore ai dati dell'indice di ricerca e Lettore dati indice di ricerca.
Nella risorsa Microsoft Foundry, assegnare Utente di Servizi Cognitivi all'identità gestita del servizio di ricerca.
Importante
Il recupero agentico ha due modelli di fatturazione basati su token:
- Fatturazione da Azure AI Search per il recupero agentico.
- Fatturazione da Azure OpenAI per la pianificazione delle query e la sintesi delle risposte.
Per altre informazioni, vedere Disponibilità e prezzi del recupero agentico.
Ottenere gli endpoint
Ogni servizio Azure AI Search e la risorsa Microsoft Foundry hanno un endpoint, ovvero un URL univoco che identifica e fornisce l'accesso di rete alla risorsa. In una sezione successiva si specificano questi endpoint per connettersi alle risorse a livello programmatico.
Per ottenere gli endpoint per questo avvio rapido:
Accedere al portale Azure.
Nel servizio Azure AI Search:
Nel riquadro sinistro selezionare Panoramica.
Copiare l'URL, che dovrebbe essere simile a .
Nella risorsa Microsoft Foundry:
Nel riquadro sinistro, selezionare Gestione risorseChiavi ed endpoint.
Copia l'URL nella scheda OpenAI, che dovrebbe essere simile a .
Configurare l'ambiente
Usare Git per clonare il repository di esempio.
git clone https://github.com/Azure-Samples/azure-search-dotnet-samplesPassare alla cartella di avvio rapido e aprirla in Visual Studio Code.
cd azure-search-dotnet-samples/quickstart-agentic-retrieval code .Negli sostituire i valori segnaposti per e con gli URL ottenuti in Ottenere gli endpoint.
Rinomina in .
mv sample.env .envInstalla le dipendenze.
dotnet restore AgenticRetrievalQuickstart.csprojAl termine del ripristino, verificare che non vengano visualizzati errori nell'output.
Per l'autenticazione senza chiave con Microsoft Entra ID, accedere all'account Azure. Se si hanno più sottoscrizioni, selezionare quella che contiene le risorse Azure AI Search e Microsoft Foundry.
az login
Eseguire il codice
Eseguire l'applicazione per creare un indice, caricare documenti, configurare una fonte delle informazioni e una knowledge base, nonché eseguire query di recupero agentico.
dotnet run --project AgenticRetrievalQuickstart.csproj
Risultato
L'output dell'applicazione dovrebbe essere simile al seguente:
Index 'earth-at-night' created or updated successfully.
Documents uploaded to index 'earth-at-night' successfully.
Knowledge source 'earth-knowledge-source' created or updated successfully.
Knowledge base 'earth-knowledge-base' created or updated successfully.
Running the query...Why do suburban belts display larger December brightening than urban cores even though absolute light levels are higher downtown? Why is the Phoenix nighttime street grid is so sharply visible from space, whereas large stretches of the interstate between midwestern cities remain comparatively dim?
Response:
Suburban belts brighten more (in relative terms) in December because holiday lighting is concentrated in yards and single-family suburbs where extra decorative lights add a large percentage increase over baseline residential lighting, whereas dense urban cores already have high absolute light levels so the same added holiday lights produce a smaller relative change [ref_id:6][ref_id:2]. The documents note suburbs and outskirts show the biggest holiday increases and central urban areas show smaller percent increases (20-30% in cores, larger in suburbs) linked to available yard space and prevalence of single-family homes [ref_id:6][ref_id:2]. Phoenix's street grid appears very sharp from space because the city's regular, closely spaced north-south/east-west street lighting and bright nodes at intersections and commercial strips produce a strong, high-contrast patterned signal (grid and major corridors like Grand Avenue), while long Midwestern interstates are comparatively dim because roadway lighting is more sparse and continuous between cities and navigable rivers/long highways lack the dense, closely spaced light sources that produce visible nodes and grid patterns at night [ref_id:3][ref_id:7]. In addition, the Black Marble processing accounts for atmospheric, lunar, snow/seasonal and stray-light effects and isolates artificial emissions, so concentrated urban lighting (as in Phoenix) stands out more in the corrected radiance product than dispersed or spaced sources like isolated stretches of interstate or sparsely lit rivers and plains [ref_id:1][ref_id:4][ref_id:7].
Activity:
Activity Type: KnowledgeBaseModelQueryPlanningActivityRecord
{
"InputTokens": 1489,
"OutputTokens": 326,
"Id": 0,
"ElapsedMs": 4558,
"Error": null
}
Activity Type: KnowledgeBaseSearchIndexActivityRecord
{
"SearchIndexArguments": {
"Search": "December brightening suburban belts vs urban cores light pollution causes seasonal variation \"December brightening\" satellite night lights",
"Filter": null,
"SourceDataFields": [
{
"Name": "page_chunk"
},
{
"Name": "id"
},
{
"Name": "page_number"
}
],
"SearchFields": [],
"SemanticConfigurationName": "semantic_config"
},
"KnowledgeSourceName": "earth-knowledge-source",
"QueryTime": "2026-02-24T14:59:41.536+00:00",
"Count": 21,
"Id": 1,
"ElapsedMs": 623,
"Error": null
}
... // Trimmed for brevity
References:
Reference Type: KnowledgeBaseSearchIndexReference
{
"DocKey": "earth_at_night_508_page_105_verbalized",
"Id": "0",
"ActivitySource": 2,
"SourceData": {},
"RerankerScore": 2.7294974
}
... // Trimmed for brevity
Continue the conversation with this query: How do I find lava at night?
Response:
... // Trimmed for brevity
Activity:
... // Trimmed for brevity
References:
... // Trimmed for brevity
Knowledge base 'earth-knowledge-base' deleted successfully.
Knowledge source 'earth-knowledge-source' deleted successfully.
Index 'earth-at-night' deleted successfully.
Informazioni sul codice
Annotazioni
I frammenti di codice in questa sezione potrebbero essere stati modificati per la leggibilità. Per un esempio funzionante completo, vedere il codice sorgente.
Dopo aver eseguito il codice, è possibile suddividere i passaggi principali:
- Creare un indice di ricerca
- Caricare documenti nell'indice
- Creare una fonte di informazioni
- Creare una knowledge base
- Configurare i messaggi
- Eseguire la pipeline di recupero
- Continuare la conversazione
Creare un indice di ricerca
In Azure AI Search, un indice è una raccolta strutturata di dati. Il codice seguente definisce un indice denominato .
Lo schema dell'indice contiene campi per l'identificazione dei documenti e il contenuto della pagina, gli incorporamenti e i numeri. Lo schema include anche configurazioni per la classificazione semantica e la ricerca vettoriale, che usa la distribuzione per vettorizzare il testo e associare i documenti in base alla similarità semantica o concettuale.
// Define fields for the index
var fields = new List<SearchField>
{
new SimpleField("id", SearchFieldDataType.String) { IsKey = true, IsFilterable = true, IsSortable = true, IsFacetable = true },
new SearchField("page_chunk", SearchFieldDataType.String) { IsFilterable = false, IsSortable = false, IsFacetable = false },
new SearchField("page_embedding_text_3_large", SearchFieldDataType.Collection(SearchFieldDataType.Single)) { VectorSearchDimensions = 3072, VectorSearchProfileName = "hnsw_text_3_large" },
new SimpleField("page_number", SearchFieldDataType.Int32) { IsFilterable = true, IsSortable = true, IsFacetable = true }
};
// Define a vectorizer
var vectorizer = new AzureOpenAIVectorizer(vectorizerName: "azure_openai_text_3_large")
{
Parameters = new AzureOpenAIVectorizerParameters
{
ResourceUri = new Uri(aoaiEndpoint),
DeploymentName = aoaiEmbeddingDeployment,
ModelName = aoaiEmbeddingModel
}
};
// Define a vector search profile and algorithm
var vectorSearch = new VectorSearch()
{
Profiles =
{
new VectorSearchProfile(
name: "hnsw_text_3_large",
algorithmConfigurationName: "alg"
)
{
VectorizerName = "azure_openai_text_3_large"
}
},
Algorithms =
{
new HnswAlgorithmConfiguration(name: "alg")
},
Vectorizers =
{
vectorizer
}
};
// Define a semantic configuration
var semanticConfig = new SemanticConfiguration(
name: "semantic_config",
prioritizedFields: new SemanticPrioritizedFields
{
ContentFields = { new SemanticField("page_chunk") }
}
);
var semanticSearch = new SemanticSearch()
{
DefaultConfigurationName = "semantic_config",
Configurations = { semanticConfig }
};
// Create the index
var index = new SearchIndex(indexName)
{
Fields = fields,
VectorSearch = vectorSearch,
SemanticSearch = semanticSearch
};
// Create the index client, deleting and recreating the index if it exists
var indexClient = new SearchIndexClient(new Uri(searchEndpoint), credential);
await indexClient.CreateOrUpdateIndexAsync(index);
Console.WriteLine($"Index '{indexName}' created or updated successfully.");
Reference:SearchField, SimpleField, VectorSearch, SemanticSearch, SearchIndex, SearchIndexClient
Caricare documenti nell'indice
Attualmente, l'indice è vuoto. Il codice seguente popola l'indice con i documenti JSON di NASA's Earth at Night. Come richiesto da Azure AI Search, ogni documento è conforme ai campi e ai tipi di dati definiti nello schema dell'indice.
// Upload sample documents from the GitHub URL
string url = "https://raw.githubusercontent.com/Azure-Samples/azure-search-sample-data/refs/heads/main/nasa-e-book/earth-at-night-json/documents.json";
var httpClient = new HttpClient();
var response = await httpClient.GetAsync(url);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
var documents = JsonSerializer.Deserialize<List<Dictionary<string, object>>>(json);
var searchClient = new SearchClient(new Uri(searchEndpoint), indexName, credential);
var searchIndexingBufferedSender = new SearchIndexingBufferedSender<Dictionary<string, object>>(
searchClient,
new SearchIndexingBufferedSenderOptions<Dictionary<string, object>>
{
KeyFieldAccessor = doc => doc["id"].ToString(),
}
);
await searchIndexingBufferedSender.UploadDocumentsAsync(documents);
await searchIndexingBufferedSender.FlushAsync();
Console.WriteLine($"Documents uploaded to index '{indexName}' successfully.");
Reference:SearchClient, SearchIndexingBufferedSender
Creare una fonte di informazioni
Una fonte di conoscenza è un riferimento riutilizzabile ai dati sorgente. Il codice seguente definisce un'origine di conoscenza denominata che è destinata all'indice .
specifica i campi di indice inclusi nei riferimenti di citazione. Questo esempio include solo campi leggibili per evitare incorporamenti lunghi e non interpretabili nelle risposte.
// Create a knowledge source
var indexKnowledgeSource = new SearchIndexKnowledgeSource(
name: knowledgeSourceName,
searchIndexParameters: new SearchIndexKnowledgeSourceParameters(searchIndexName: indexName)
{
SourceDataFields = { new SearchIndexFieldReference(name: "id"), new SearchIndexFieldReference(name: "page_chunk"), new SearchIndexFieldReference(name: "page_number") }
}
);
await indexClient.CreateOrUpdateKnowledgeSourceAsync(indexKnowledgeSource);
Console.WriteLine($"Knowledge source '{knowledgeSourceName}' created or updated successfully.");
Reference:SearchIndexKnowledgeSource
Creare una knowledge base
Per impostare come destinazione e la distribuzione in fase di query, è necessaria una knowledge base. Il codice seguente definisce una Knowledge Base denominata .
è impostato su , abilitando le risposte in linguaggio naturale che citano i documenti recuperati e seguono le istruzioni fornite .
// Create a knowledge base
var openAiParameters = new AzureOpenAIVectorizerParameters
{
ResourceUri = new Uri(aoaiEndpoint),
DeploymentName = aoaiGptDeployment,
ModelName = aoaiGptModel
};
var model = new KnowledgeBaseAzureOpenAIModel(azureOpenAIParameters: openAiParameters);
var knowledgeBase = new KnowledgeBase(
name: knowledgeBaseName,
knowledgeSources: new KnowledgeSourceReference[] { new KnowledgeSourceReference(knowledgeSourceName) }
)
{
RetrievalReasoningEffort = new KnowledgeRetrievalLowReasoningEffort(),
OutputMode = KnowledgeRetrievalOutputMode.AnswerSynthesis,
AnswerInstructions = "Provide a two sentence concise and informative answer based on the retrieved documents.",
Models = { model }
};
await indexClient.CreateOrUpdateKnowledgeBaseAsync(knowledgeBase);
Console.WriteLine($"Knowledge base '{knowledgeBaseName}' created or updated successfully.");
Reference:KnowledgeBaseAzureOpenAIModel, KnowledgeBase
Configurare i messaggi
I messaggi sono l'input per la route di recupero e contengono la cronologia delle conversazioni. Ogni messaggio include un ruolo che indica l'origine, ad esempio o , e il contenuto in linguaggio naturale. L'LLM usato determina quali ruoli sono validi.
Il codice seguente crea un messaggio di sistema, che indica di rispondere alle domande sulla Terra di notte e rispondere con "Non so" quando le risposte non sono disponibili.
// Set up messages
string instructions = @"A Q&A agent that can answer questions about the Earth at night.
If you don't have the answer, respond with ""I don't know"".";
var messages = new List<Dictionary<string, string>>
{
new Dictionary<string, string>
{
{ "role", "system" },
{ "content", instructions }
}
};
Eseguire la pipeline di recupero
Si è pronti per eseguire il recupero agentico. Il codice seguente invia una query utente in due parti a , che:
- Analizza l'intera conversazione per dedurre le informazioni necessarie all'utente.
- Scompone la query composta in sottoquery in evidenza.
- Esegue le sottoquery contemporaneamente rispetto alla fonte delle informazioni.
- Usa il ranker semantico per classificare nuovamente e filtrare i risultati.
- Sintetizza i risultati principali in una risposta in linguaggio naturale.
// Run agentic retrieval
var baseClient = new KnowledgeBaseRetrievalClient(
endpoint: new Uri(searchEndpoint),
knowledgeBaseName: knowledgeBaseName,
tokenCredential: new DefaultAzureCredential()
);
messages.Add(new Dictionary<string, string>
{
{ "role", "user" },
{ "content", @"Why do suburban belts display larger December brightening than urban cores even though absolute light levels are higher downtown? Why is the Phoenix nighttime street grid is so sharply visible from space, whereas large stretches of the interstate between midwestern cities remain comparatively dim?" }
});
var retrievalRequest = new KnowledgeBaseRetrievalRequest();
foreach (Dictionary<string, string> message in messages) {
if (message["role"] != "system") {
retrievalRequest.Messages.Add(new KnowledgeBaseMessage(content: new[] { new KnowledgeBaseMessageTextContent(message["content"]) }) { Role = message["role"] });
}
}
retrievalRequest.RetrievalReasoningEffort = new KnowledgeRetrievalLowReasoningEffort();
var retrievalResult = await baseClient.RetrieveAsync(retrievalRequest);
messages.Add(new Dictionary<string, string>
{
{ "role", "assistant" },
{ "content", (retrievalResult.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text }
});
Riferimento: KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
Esaminare la risposta, l'attività e i riferimenti
Il codice seguente visualizza la risposta, l'attività e i riferimenti dalla pipeline di recupero, dove:
fornisce una risposta sintetizzata generata da LLM alla query che cita i documenti recuperati. Quando la sintesi delle risposte non è abilitata, questa sezione contiene contenuto estratto direttamente dai documenti.
tiene traccia dei passaggi eseguiti durante il processo di recupero, incluse le sottoquery generate dalla distribuzione di e i token usati per la classificazione semantica, la pianificazione delle query e la sintesi delle risposte.
elenca i documenti che hanno contribuito alla risposta, ognuno identificato dal relativo .
// Print the response, activity, and references
Console.WriteLine("Response:");
Console.WriteLine((retrievalResult.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text);
Console.WriteLine("Activity:");
foreach (var activity in retrievalResult.Value.Activity)
{
Console.WriteLine($"Activity Type: {activity.GetType().Name}");
string activityJson = JsonSerializer.Serialize(
activity,
activity.GetType(),
new JsonSerializerOptions { WriteIndented = true }
);
Console.WriteLine(activityJson);
}
Console.WriteLine("References:");
foreach (var reference in retrievalResult.Value.References)
{
Console.WriteLine($"Reference Type: {reference.GetType().Name}");
string referenceJson = JsonSerializer.Serialize(
reference,
reference.GetType(),
new JsonSerializerOptions { WriteIndented = true }
);
Console.WriteLine(referenceJson);
}
Continuare la conversazione
Il codice seguente continua la conversazione con . Dopo l'invio di questa query utente, la Knowledge Base recupera il contenuto pertinente da e aggiunge la risposta all'elenco dei messaggi.
// Continue the conversation
messages.Add(new Dictionary<string, string>
{
{ "role", "user" },
{ "content", "How do I find lava at night?" }
});
retrievalRequest = new KnowledgeBaseRetrievalRequest();
foreach (Dictionary<string, string> message in messages) {
if (message["role"] != "system") {
retrievalRequest.Messages.Add(new KnowledgeBaseMessage(content: new[] { new KnowledgeBaseMessageTextContent(message["content"]) }) { Role = message["role"] });
}
}
retrievalRequest.RetrievalReasoningEffort = new KnowledgeRetrievalLowReasoningEffort();
retrievalResult = await baseClient.RetrieveAsync(retrievalRequest);
messages.Add(new Dictionary<string, string>
{
{ "role", "assistant" },
{ "content", (retrievalResult.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text }
});
Esaminare la nuova risposta, l'attività e i riferimenti
Il codice seguente visualizza la nuova risposta, l'attività e i riferimenti dalla pipeline di recupero.
// Print the new response, activity, and references
Console.WriteLine("Response:");
Console.WriteLine((retrievalResult.Value.Response[0].Content[0] as KnowledgeBaseMessageTextContent)!.Text);
Console.WriteLine("Activity:");
foreach (var activity in retrievalResult.Value.Activity)
{
Console.WriteLine($"Activity Type: {activity.GetType().Name}");
string activityJson = JsonSerializer.Serialize(
activity,
activity.GetType(),
new JsonSerializerOptions { WriteIndented = true }
);
Console.WriteLine(activityJson);
}
Console.WriteLine("References:");
foreach (var reference in retrievalResult.Value.References)
{
Console.WriteLine($"Reference Type: {reference.GetType().Name}");
string referenceJson = JsonSerializer.Serialize(
reference,
reference.GetType(),
new JsonSerializerOptions { WriteIndented = true }
);
Console.WriteLine(referenceJson);
}
Pulire le risorse
Quando si lavora nella propria sottoscrizione, è consigliabile completare un progetto rimuovendo le risorse non più necessarie. Le risorse lasciate in esecuzione possono avere un costo.
Nel portale di Azure selezionare Tutte le risorse o Gruppi di risorse dal riquadro sinistro per trovare e gestire le risorse. È possibile eliminare le risorse singolarmente o eliminare il gruppo di risorse per rimuovere tutte le risorse contemporaneamente.
Altrimenti, il codice seguente da elimina gli oggetti che hai creato in questo quickstart.
Eliminare la Knowledge Base
await indexClient.DeleteKnowledgeBaseAsync(knowledgeBaseName);
Console.WriteLine($"Knowledge base '{knowledgeBaseName}' deleted successfully.");
Eliminare la fonte di informazioni
await indexClient.DeleteKnowledgeSourceAsync(knowledgeSourceName);
Console.WriteLine($"Knowledge source '{knowledgeSourceName}' deleted successfully.");
Eliminare l'indice di ricerca
await indexClient.DeleteIndexAsync(indexName);
Console.WriteLine($"Index '{indexName}' deleted successfully.");
Annotazioni
Questa funzionalità è attualmente disponibile in anteprima pubblica. Questa anteprima viene fornita senza un contratto di servizio e non è consigliata per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per ulteriori informazioni, vedere Condizioni supplementari per l'uso delle versioni di anteprima di Microsoft Azure.
In questa guida introduttiva si usa il recupero agentico per creare un'esperienza di ricerca conversazionale basata su documenti indicizzati in Azure AI Search e un modello di linguaggio di grandi dimensioni da Azure OpenAI in Modelli di Fonderia.
Una Knowledge Base orchestra il recupero agentico scomponendo query complesse in sottoquery, eseguendo le sottoquery su una o più origini di informazioni e restituendo risultati con metadati. Per impostazione predefinita, la knowledge base restituisce contenuti non elaborati dalle origini; tuttavia, questa guida introduttiva usa la modalità di output di sintesi delle risposte per la generazione di risposte in linguaggio naturale.
Anche se è possibile usare dati personalizzati, questa guida introduttiva usa i documenti JSON sample dall'e-book Earth at Night della NASA.
Suggerimento
Vuoi iniziare subito? Scaricare il codice source in GitHub.
Prerequisiti
Un account Azure con una sottoscrizione attiva. Creare un account gratuito.
Un servizio Azure AI Search, in qualsiasi area che fornisce il recupero agentico. Questo quickstart prevede il livello Basic o superiore per il supporto delle identità gestite.
Un progetto e una risorsa di Microsoft Foundry . Quando si crea un progetto, la risorsa viene creata automaticamente.
Modello di incorporamento distribuito nel progetto per la conversione da testo a vettore. È possibile usare qualsiasi modello, ad esempio .
LLM implementato nel tuo progetto per la pianificazione delle query e la generazione di risposte. È possibile usare qualsiasi LLM supportato, ad esempio .
Git per clonare il repository di esempio.
interfaccia della riga di comando di Azure per l'autenticazione senza chiave con Microsoft Entra ID.
Configurare l'accesso
Prima di iniziare, assicurarsi di disporre delle autorizzazioni per accedere al contenuto e alle operazioni. Questa guida di avvio rapido usa Microsoft Entra ID per l'autenticazione e l'accesso basato su ruoli per l'autorizzazione. Per assegnare i ruoli, è necessario essere Proprietario o Amministratore dell'accesso utenti. Se i ruoli non sono fattibili, usare invece l'autenticazione basata su chiave.
Per configurare l'accesso per questo avvio rapido:
Accedere al portale Azure.
Nel servizio Azure AI Search:
Abilitare l'accesso in base al ruolo.
Creare un'identità gestita assegnata dal sistema.
Assegnare i ruoli seguenti all'account utente: Collaboratore al servizio di ricerca, Collaboratore ai dati dell'indice di ricerca e Lettore dati indice di ricerca.
Nella risorsa Microsoft Foundry, assegnare Utente di Servizi Cognitivi all'identità gestita del servizio di ricerca.
Importante
Il recupero agentico ha due modelli di fatturazione basati su token:
- Fatturazione da Azure AI Search per il recupero agentico.
- Processo di fatturazione da Azure OpenAI per la pianificazione delle query e la sintesi delle risposte.
Per altre informazioni, vedere Disponibilità e prezzi del recupero agentico.
Ottenere gli endpoint
Ogni servizio Azure AI Search e la risorsa Microsoft Foundry hanno un endpoint, ovvero un URL univoco che identifica e fornisce l'accesso di rete alla risorsa. In una sezione successiva si specificano questi endpoint per connettersi alle risorse a livello programmatico.
Per ottenere gli endpoint per questo avvio rapido:
Accedere al portale Azure.
Nel servizio Azure AI Search:
Nel riquadro sinistro selezionare Panoramica.
Copiare l'URL, che dovrebbe essere simile a .
Nella risorsa Microsoft Foundry:
Nel riquadro sinistro, selezionare Gestione risorseChiavi ed endpoint.
Copia l'URL nella scheda OpenAI, che dovrebbe essere simile a .
Configurare l'ambiente
Usare Git per clonare il repository di esempio.
git clone https://github.com/Azure-Samples/azure-search-java-samplesPassare alla cartella di avvio rapido e aprirla in Visual Studio Code.
cd azure-search-java-samples/quickstart-agentic-retrieval code .Negli sostituire i valori segnaposti per e con gli URL ottenuti in Ottenere gli endpoint.
Rinomina in .
mv sample.env .envInstallare le dipendenze, inclusa la libreria client Azure AI Search e la libreria client Azure Identity per Java.
mvn clean dependency:copy-dependenciesPer l'autenticazione senza chiave con Microsoft Entra ID, accedere all'account Azure. Se si hanno più sottoscrizioni, selezionare quella che contiene le risorse Azure AI Search e Microsoft Foundry.
az login
Eseguire il codice
Creare ed eseguire l'applicazione per creare un indice, caricare documenti, configurare una fonte delle informazioni e una knowledge base, nonché eseguire query di recupero agentico.
- Windows
- macOS
- Linux
javac AgenticRetrievalQuickstart.java -cp ".;target\dependency\*"
java -cp ".;target\dependency\*" AgenticRetrievalQuickstart
Risultato
L'output dell'applicazione dovrebbe essere simile al seguente:
Index 'earth-at-night' created or updated successfully.
Documents uploaded to index 'earth-at-night' successfully.
Knowledge source 'earth-knowledge-source' created or updated successfully.
Knowledge base 'earth-knowledge-base' created or updated successfully.
Running the query...Why do suburban belts display larger December brightening than urban cores even though absolute light levels are higher downtown? Why is the Phoenix nighttime street grid is so sharply visible from space, whereas large stretches of the interstate between midwestern cities remain comparatively dim?
Response:
December percent brightening is larger in suburban belts because many houses add seasonal residential/holiday lighting on yards and roofs, so a relatively dark suburban baseline can increase by 20-50% when those lights turn on, while dense urban cores already have high continuous lighting so the same added lights make a smaller percentage change [ref_id:2][ref_id:5][ref_id:8]. Phoenix's street grid appears sharply from space because the metropolitan layout is a regular, continuous north-south/east-west street and block grid with a major diagonal artery (Grand Avenue) and concentrated, continuous arterial and commercial lighting along intersections and corridors [ref_id:3][ref_id:0][ref_id:1]. ...
Activity:
Activity Type: KnowledgeBaseModelQueryPlanningActivityRecord
{
"id" : 0,
"elapsedMs" : 5229,
"type" : "modelQueryPlanning",
"inputTokens" : 1489,
"outputTokens" : 383
}
Activity Type: KnowledgeBaseSearchIndexActivityRecord
{
"id" : 1,
"elapsedMs" : 2670,
"knowledgeSourceName" : "earth-knowledge-source",
"queryTime" : "2026-02-24T15:28:36.776Z",
"count" : 3,
"type" : "searchIndex",
"searchIndexArguments" : {
"search" : "December brightening suburban belts vs urban cores light pollution causes seasonal variation reasons \"December brightening\"",
"sourceDataFields" : [ {
"name" : "page_chunk"
}, {
"name" : "id"
}, {
"name" : "page_number"
} ],
"searchFields" : [ ],
"semanticConfigurationName" : "semantic_config"
}
}
... // Trimmed for brevity
References:
Reference Type: KnowledgeBaseSearchIndexReference
{
"id" : "0",
"activitySource" : 2,
"rerankerScore" : 2.7486389,
"type" : "searchIndex",
"docKey" : "earth_at_night_508_page_105_verbalized"
}
... // Trimmed for brevity
Continue the conversation with this query: How do I find lava at night?
Response:
... // Trimmed for brevity
Activity:
... // Trimmed for brevity
References:
... // Trimmed for brevity
Knowledge base 'earth-knowledge-base' deleted successfully.
Knowledge source 'earth-knowledge-source' deleted successfully.
Index 'earth-at-night' deleted successfully.
Informazioni sul codice
Annotazioni
I frammenti di codice in questa sezione potrebbero essere stati modificati per la leggibilità. Per un esempio funzionante completo, vedere il codice sorgente.
Dopo aver eseguito il codice, è possibile suddividere i passaggi principali:
- Creare un indice di ricerca
- Caricare documenti nell'indice
- Creare una fonte di informazioni
- Creare una knowledge base
- Configurare i messaggi
- Eseguire la pipeline di recupero
- Continuare la conversazione
Creare un indice di ricerca
In Azure AI Search, un indice è una raccolta strutturata di dati. Il codice seguente definisce un indice denominato .
Lo schema dell'indice contiene campi per l'identificazione dei documenti e il contenuto della pagina, gli incorporamenti e i numeri. Lo schema include anche configurazioni per la classificazione semantica e la ricerca vettoriale, che usa la distribuzione per vettorizzare il testo e associare i documenti in base alla similarità semantica o concettuale.
List<SearchField> fields = Arrays.asList(
new SearchField("id", SearchFieldDataType.STRING)
.setKey(true)
.setFilterable(true)
.setSortable(true)
.setFacetable(true),
new SearchField("page_chunk", SearchFieldDataType.STRING)
.setFilterable(false)
.setSortable(false)
.setFacetable(false),
new SearchField("page_embedding_text_3_large",
SearchFieldDataType.collection(
SearchFieldDataType.SINGLE))
.setVectorSearchDimensions(3072)
.setVectorSearchProfileName("hnsw_text_3_large"),
new SearchField("page_number", SearchFieldDataType.INT32)
.setFilterable(true)
.setSortable(true)
.setFacetable(true)
);
AzureOpenAIVectorizer vectorizer = new AzureOpenAIVectorizer(
"azure_openai_text_3_large")
.setParameters(new AzureOpenAIVectorizerParameters()
.setResourceUrl(aoaiEndpoint)
.setDeploymentName(aoaiEmbeddingDeployment)
.setModelName(
AzureOpenAIModelName.fromString(
aoaiEmbeddingModel)));
VectorSearch vectorSearch = new VectorSearch()
.setProfiles(Arrays.asList(
new VectorSearchProfile("hnsw_text_3_large", "alg")
.setVectorizerName("azure_openai_text_3_large")
))
.setAlgorithms(Arrays.asList(
new HnswAlgorithmConfiguration("alg")
))
.setVectorizers(Arrays.asList(vectorizer));
SemanticSearch semanticSearch = new SemanticSearch()
.setDefaultConfigurationName("semantic_config")
.setConfigurations(Arrays.asList(
new SemanticConfiguration("semantic_config",
new SemanticPrioritizedFields()
.setContentFields(Arrays.asList(
new SemanticField("page_chunk")
))
)
));
SearchIndex index = new SearchIndex(indexName)
.setFields(fields)
.setVectorSearch(vectorSearch)
.setSemanticSearch(semanticSearch);
indexClient.createOrUpdateIndex(index);
Reference:SearchField, VectorSearch, SemanticSearch, SearchIndex, SearchIndexClient
Caricare documenti nell'indice
Attualmente, l'indice è vuoto. Il codice seguente popola l'indice con i documenti JSON di NASA's Earth at Night. Come richiesto da Azure AI Search, ogni documento è conforme ai campi e ai tipi di dati definiti nello schema dell'indice.
String url = "https://raw.githubusercontent.com/Azure-Samples/"
+ "azure-search-sample-data/refs/heads/main/nasa-e-book/"
+ "earth-at-night-json/documents.json";
java.net.http.HttpClient httpClient =
java.net.http.HttpClient.newHttpClient();
java.net.http.HttpRequest httpRequest =
java.net.http.HttpRequest.newBuilder()
.uri(URI.create(url))
.build();
java.net.http.HttpResponse<String> response =
httpClient.send(httpRequest,
java.net.http.HttpResponse.BodyHandlers.ofString());
if (response.statusCode() != 200) {
throw new IOException(
"Failed to fetch documents: " + response.statusCode());
}
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonArray = mapper.readTree(response.body());
List<SearchDocument> documents = new ArrayList<>();
for (int i = 0; i < jsonArray.size(); i++) {
JsonNode doc = jsonArray.get(i);
SearchDocument searchDoc = new SearchDocument();
searchDoc.put("id", doc.has("id")
? doc.get("id").asText() : String.valueOf(i + 1));
searchDoc.put("page_chunk", doc.has("page_chunk")
? doc.get("page_chunk").asText() : "");
if (doc.has("page_embedding_text_3_large")
&& doc.get("page_embedding_text_3_large")
.isArray()) {
List<Double> embeddings = new ArrayList<>();
for (JsonNode embedding
: doc.get("page_embedding_text_3_large")) {
embeddings.add(embedding.asDouble());
}
searchDoc.put(
"page_embedding_text_3_large", embeddings);
} else {
List<Double> fallback = new ArrayList<>();
for (int j = 0; j < 3072; j++) {
fallback.add(0.1);
}
searchDoc.put(
"page_embedding_text_3_large", fallback);
}
searchDoc.put("page_number",
doc.has("page_number")
? doc.get("page_number").asInt() : i + 1);
documents.add(searchDoc);
}
SearchClient searchClient = new SearchClientBuilder()
.endpoint(searchEndpoint)
.indexName(indexName)
.credential(credential)
.buildClient();
searchClient.uploadDocuments(documents);
Reference:SearchClient, SearchDocument
Creare una fonte di informazioni
Una fonte di conoscenza è un riferimento riutilizzabile ai dati sorgente. Il codice seguente definisce un'origine di conoscenza denominata che è destinata all'indice .
specifica i campi di indice inclusi nei riferimenti di citazione. Questo esempio include solo campi leggibili per evitare incorporamenti lunghi e non interpretabili nelle risposte.
SearchIndexKnowledgeSource indexKnowledgeSource =
new SearchIndexKnowledgeSource(
knowledgeSourceName,
new SearchIndexKnowledgeSourceParameters(indexName)
.setSourceDataFields(Arrays.asList(
new SearchIndexFieldReference("id"),
new SearchIndexFieldReference("page_chunk"),
new SearchIndexFieldReference("page_number")
))
);
indexClient.createOrUpdateKnowledgeSource(indexKnowledgeSource);
Reference:SearchIndexKnowledgeSource
Creare una knowledge base
Per impostare come destinazione e la distribuzione in fase di query, è necessaria una knowledge base. Il codice seguente definisce una Knowledge Base denominata .
è impostato su , abilitando le risposte in linguaggio naturale che citano i documenti recuperati e seguono le istruzioni fornite .
AzureOpenAIVectorizerParameters openAiParameters =
new AzureOpenAIVectorizerParameters()
.setResourceUrl(aoaiEndpoint)
.setDeploymentName(aoaiGptDeployment)
.setModelName(
AzureOpenAIModelName.fromString(aoaiGptModel));
KnowledgeBaseAzureOpenAIModel model =
new KnowledgeBaseAzureOpenAIModel(openAiParameters);
KnowledgeBase knowledgeBase = new KnowledgeBase(
knowledgeBaseName,
Arrays.asList(
new KnowledgeSourceReference(knowledgeSourceName))
)
.setRetrievalReasoningEffort(
new KnowledgeRetrievalLowReasoningEffort())
.setOutputMode(
KnowledgeRetrievalOutputMode.ANSWER_SYNTHESIS)
.setAnswerInstructions(
"Provide a two sentence concise and informative answer "
+ "based on the retrieved documents.")
.setModels(Arrays.asList(model));
indexClient.createOrUpdateKnowledgeBase(knowledgeBase);
Reference:KnowledgeBaseAzureOpenAIModel, KnowledgeBase
Configurare i messaggi
I messaggi sono l'input per la route di recupero e contengono la cronologia delle conversazioni. Ogni messaggio include un ruolo che indica l'origine, ad esempio o , e il contenuto in linguaggio naturale. L'LLM usato determina quali ruoli sono validi.
Il codice seguente crea un messaggio di sistema, che indica di rispondere alle domande sulla Terra di notte e rispondere con "Non so" quando le risposte non sono disponibili.
String instructions =
"A Q&A agent that can answer questions about the "
+ "Earth at night.\n"
+ "If you don't have the answer, respond with "
+ "\"I don't know\".";
List<Map<String, String>> messages = new ArrayList<>();
Map<String, String> systemMessage = new HashMap<>();
systemMessage.put("role", "system");
systemMessage.put("content", instructions);
messages.add(systemMessage);
Eseguire la pipeline di recupero
Si è pronti per eseguire il recupero agentico. Il codice seguente invia una query utente in due parti a , che:
- Analizza l'intera conversazione per dedurre le informazioni necessarie all'utente.
- Scompone la query composta in sottoquery in evidenza.
- Esegue le sottoquery contemporaneamente rispetto alla fonte delle informazioni.
- Usa il ranker semantico per classificare nuovamente e filtrare i risultati.
- Sintetizza i risultati principali in una risposta in linguaggio naturale.
SearchKnowledgeBaseClient baseClient =
new SearchKnowledgeBaseClientBuilder()
.endpoint(searchEndpoint)
.knowledgeBaseName(knowledgeBaseName)
.credential(
new DefaultAzureCredentialBuilder().build())
.buildClient();
String query = "Why do suburban belts display larger "
+ "December brightening than urban cores even "
+ "though absolute light levels are higher "
+ "downtown? Why is the Phoenix nighttime street "
+ "grid is so sharply visible from space, whereas "
+ "large stretches of the interstate between "
+ "midwestern cities remain comparatively dim?";
messages.add(Map.of("role", "user", "content", query));
KnowledgeBaseRetrievalResponse retrievalResult =
retrieve(baseClient, messages);
String responseText =
((KnowledgeBaseMessageTextContent) retrievalResult
.getResponse().get(0).getContent().get(0))
.getText();
messages.add(
Map.of("role", "assistant", "content", responseText));
Il metodo helper compila oggetti dalla cronologia delle conversazioni e invia la richiesta di recupero:
private static KnowledgeBaseRetrievalResponse retrieve(
SearchKnowledgeBaseClient client,
List<Map<String, String>> messages) {
List<KnowledgeBaseMessage> kbMessages = new ArrayList<>();
for (Map<String, String> msg : messages) {
if (!"system".equals(msg.get("role"))) {
kbMessages.add(
new KnowledgeBaseMessage(Arrays.asList(
new KnowledgeBaseMessageTextContent(
msg.get("content"))
)).setRole(msg.get("role"))
);
}
}
KnowledgeBaseRetrievalRequest request =
new KnowledgeBaseRetrievalRequest();
request.setMessages(kbMessages);
request.setRetrievalReasoningEffort(
new KnowledgeRetrievalLowReasoningEffort());
return client.retrieve(request, null);
}
Informazioni di riferimento: SearchKnowledgeBaseClient, KnowledgeBaseRetrievalRequest
Esaminare la risposta, l'attività e i riferimenti
Il codice seguente visualizza la risposta, l'attività e i riferimenti dalla pipeline di recupero, dove:
fornisce una risposta sintetizzata generata da LLM alla query che cita i documenti recuperati. Quando la sintesi delle risposte non è abilitata, questa sezione contiene contenuto estratto direttamente dai documenti.
tiene traccia dei passaggi eseguiti durante il processo di recupero, incluse le sottoquery generate dalla distribuzione di e i token usati per la classificazione semantica, la pianificazione delle query e la sintesi delle risposte.
elenca i documenti che hanno contribuito alla risposta, ognuno identificato dal relativo .
System.out.println("Response:");
System.out.println(responseText);
System.out.println("Activity:");
for (KnowledgeBaseActivityRecord activity
: retrievalResult.getActivity()) {
System.out.println("Activity Type: "
+ activity.getClass().getSimpleName());
System.out.println(toJsonString(activity));
}
System.out.println("References:");
for (KnowledgeBaseReference reference
: retrievalResult.getReferences()) {
System.out.println("Reference Type: "
+ reference.getClass().getSimpleName());
System.out.println(toJsonString(reference));
}
Continuare la conversazione
Il codice seguente continua la conversazione con . Dopo l'invio di questa query utente, la Knowledge Base recupera il contenuto pertinente da e aggiunge la risposta all'elenco dei messaggi.
String nextQuery = "How do I find lava at night?";
messages.add(
Map.of("role", "user", "content", nextQuery));
retrievalResult = retrieve(baseClient, messages);
Esaminare la nuova risposta, l'attività e i riferimenti
Il codice seguente estrae il testo della risposta e le chiamate per visualizzare la nuova risposta, l'attività e i riferimenti.
responseText =
((KnowledgeBaseMessageTextContent) retrievalResult
.getResponse().get(0).getContent().get(0))
.getText();
messages.add(
Map.of("role", "assistant", "content", responseText));
printResult(responseText, retrievalResult);
Pulire le risorse
Quando si lavora nella propria sottoscrizione, è consigliabile completare un progetto rimuovendo le risorse non più necessarie. Le risorse lasciate in esecuzione possono avere un costo.
Nel portale di Azure selezionare Tutte le risorse o Gruppi di risorse dal riquadro sinistro per trovare e gestire le risorse. È possibile eliminare le risorse singolarmente o eliminare il gruppo di risorse per rimuovere tutte le risorse contemporaneamente.
Altrimenti, il codice seguente da elimina gli oggetti che hai creato in questo quickstart.
Eliminare la Knowledge Base
indexClient.deleteKnowledgeBase(knowledgeBaseName);
System.out.println("Knowledge base '" + knowledgeBaseName
+ "' deleted successfully.");
Eliminare la fonte di informazioni
indexClient.deleteKnowledgeSource(knowledgeSourceName);
System.out.println("Knowledge source '" + knowledgeSourceName
+ "' deleted successfully.");
Eliminare l'indice di ricerca
indexClient.deleteIndex(indexName);
System.out.println("Index '" + indexName
+ "' deleted successfully.");
Annotazioni
Questa funzionalità è attualmente disponibile in anteprima pubblica. Questa anteprima viene fornita senza un contratto di servizio e non è consigliata per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per ulteriori informazioni, vedere Condizioni supplementari per l'uso delle versioni di anteprima di Microsoft Azure.
In questa guida introduttiva si usa il recupero agentico per creare un'esperienza di ricerca conversazionale basata su documenti indicizzati in Azure AI Search e un modello di linguaggio di grandi dimensioni da Azure OpenAI in Modelli di Fonderia.
Una Knowledge Base orchestra il recupero agentico scomponendo query complesse in sottoquery, eseguendo le sottoquery su una o più origini di informazioni e restituendo risultati con metadati. Per impostazione predefinita, la knowledge base restituisce contenuti non elaborati dalle origini; tuttavia, questa guida introduttiva usa la modalità di output di sintesi delle risposte per la generazione di risposte in linguaggio naturale.
Anche se è possibile usare dati personalizzati, questa guida introduttiva usa i documenti JSON sample dall'e-book Earth at Night della NASA.
Suggerimento
Il codice sorgente per la versione JavaScript di questa guida introduttiva non è disponibile. È possibile copiare il codice direttamente da questo articolo.
Prerequisiti
Un account Azure con una sottoscrizione attiva. Creare un account gratuito.
Un servizio Azure AI Search, in qualsiasi area che fornisce il recupero agentico. Questo quickstart prevede il livello Basic o superiore per il supporto delle identità gestite.
Un progetto e una risorsa di Microsoft Foundry . Quando si crea un progetto, la risorsa viene creata automaticamente.
Modello di incorporamento distribuito nel progetto per la conversione da testo a vettore. È possibile usare qualsiasi modello, ad esempio .
LLM implementato nel tuo progetto per la pianificazione delle query e la generazione di risposte. È possibile usare qualsiasi LLM supportato, ad esempio .
Node.js 20 LTS o versioni successive.
interfaccia della riga di comando di Azure per l'autenticazione senza chiave con Microsoft Entra ID.
Configurare l'accesso
Prima di iniziare, assicurarsi di disporre delle autorizzazioni per accedere al contenuto e alle operazioni. Questa guida di avvio rapido usa Microsoft Entra ID per l'autenticazione e l'accesso basato su ruoli per l'autorizzazione. Per assegnare i ruoli, è necessario essere Proprietario o Amministratore dell'accesso utenti. Se i ruoli non sono fattibili, usare invece l'autenticazione basata su chiave.
Per configurare l'accesso per questo avvio rapido:
Accedere al portale Azure.
Nel servizio Azure AI Search:
Abilitare l'accesso in base al ruolo.
Creare un'identità gestita assegnata dal sistema.
Assegnare i ruoli seguenti all'account utente: Collaboratore al servizio di ricerca, Collaboratore ai dati dell'indice di ricerca e Lettore dati indice di ricerca.
Nella risorsa Microsoft Foundry, assegnare Utente di Servizi Cognitivi all'identità gestita del servizio di ricerca.
Importante
Il recupero agentico ha due modelli di fatturazione basati su token:
- Fatturazione da Azure AI Search per il recupero agentico.
- Processo di fatturazione da Azure OpenAI per la pianificazione delle query e la sintesi delle risposte.
Per altre informazioni, vedere Disponibilità e prezzi del recupero agentico.
Ottenere gli endpoint
Ogni servizio Azure AI Search e la risorsa Microsoft Foundry hanno un endpoint, ovvero un URL univoco che identifica e fornisce l'accesso di rete alla risorsa. In una sezione successiva si specificano questi endpoint per connettersi alle risorse a livello programmatico.
Per ottenere gli endpoint per questo avvio rapido:
Accedere al portale Azure.
Nel servizio Azure AI Search:
Nel riquadro sinistro selezionare Panoramica.
Copiare l'URL, che dovrebbe essere simile a .
Nella risorsa Microsoft Foundry:
Nel riquadro sinistro, selezionare Gestione risorseChiavi ed endpoint.
Copia l'URL nella scheda OpenAI, che dovrebbe essere simile a .
Configurare l'ambiente
Creare una cartella denominata per contenere l'applicazione.
Aprire la cartella in Visual Studio Code.
Selezionare Terminalenuovo terminale e quindi eseguire i comandi seguenti per inizializzare .
npm init -y npm pkg set type=moduleInstallare la libreria client Azure AI Search per JavaScript.
npm install @azure/search-documents@12.3.0-beta.1Per l'autenticazione senza chiave con Microsoft Entra ID, installare la libreria client Azure Identity per JavaScript.
npm install @azure/identityPer l'autenticazione senza chiave con Microsoft Entra ID, accedere all'account Azure. Se si hanno più sottoscrizioni, selezionare quella che contiene le risorse Azure AI Search e Microsoft Foundry.
az login
Eseguire il codice
Creare un file denominato nella cartella e quindi incollare il contenuto seguente. Sostituire i valori segnaposto con gli URL ottenuti in Ottenere endpoint.
AZURE_SEARCH_ENDPOINT = https://<your-search-service-name>.search.windows.net AZURE_OPENAI_ENDPOINT = https://<your-foundry-resource-name>.openai.azure.com/ AZURE_OPENAI_GPT_DEPLOYMENT = gpt-5-mini AZURE_OPENAI_EMBEDDING_DEPLOYMENT = text-embedding-3-largeCreare un file denominato e quindi incollare il codice seguente nel file .
import { DefaultAzureCredential } from '@azure/identity'; import { SearchIndexClient, SearchClient, KnowledgeRetrievalClient, SearchIndexingBufferedSender } from '@azure/search-documents'; export const documentKeyRetriever = (document) => { return document.id; }; export const WAIT_TIME = 4000; export function delay(timeInMs) { return new Promise((resolve) => setTimeout(resolve, timeInMs)); } const index = { name: 'earth_at_night', fields: [ { name: "id", type: "Edm.String", key: true, filterable: true, sortable: true, facetable: true }, { name: "page_chunk", type: "Edm.String", searchable: true, filterable: false, sortable: false, facetable: false }, { name: "page_embedding_text_3_large", type: "Collection(Edm.Single)", searchable: true, filterable: false, sortable: false, facetable: false, vectorSearchDimensions: 3072, vectorSearchProfileName: "hnsw_text_3_large" }, { name: "page_number", type: "Edm.Int32", filterable: true, sortable: true, facetable: true } ], vectorSearch: { profiles: [ { name: "hnsw_text_3_large", algorithmConfigurationName: "alg", vectorizerName: "azure_openai_text_3_large" } ], algorithms: [ { name: "alg", kind: "hnsw" } ], vectorizers: [ { vectorizerName: "azure_openai_text_3_large", kind: "azureOpenAI", parameters: { resourceUrl: process.env.AZURE_OPENAI_ENDPOINT, deploymentId: process.env.AZURE_OPENAI_EMBEDDING_DEPLOYMENT, modelName: process.env.AZURE_OPENAI_EMBEDDING_DEPLOYMENT } } ] }, semanticSearch: { defaultConfigurationName: "semantic_config", configurations: [ { name: "semantic_config", prioritizedFields: { contentFields: [ { name: "page_chunk" } ] } } ] } }; const credential = new DefaultAzureCredential(); const searchIndexClient = new SearchIndexClient(process.env.AZURE_SEARCH_ENDPOINT, credential); const searchClient = new SearchClient(process.env.AZURE_SEARCH_ENDPOINT, 'earth_at_night', credential); await searchIndexClient.createOrUpdateIndex(index); // get Documents with vectors const response = await fetch("https://raw.githubusercontent.com/Azure-Samples/azure-search-sample-data/refs/heads/main/nasa-e-book/earth-at-night-json/documents.json"); if (!response.ok) { throw new Error(`Failed to fetch documents: ${response.status} ${response.statusText}`); } const documents = await response.json(); const bufferedClient = new SearchIndexingBufferedSender( searchClient, documentKeyRetriever, { autoFlush: true, }, ); await bufferedClient.uploadDocuments(documents); await bufferedClient.flush(); await bufferedClient.dispose(); console.log(`Waiting for indexing to complete...`); console.log(`Expected documents: ${documents.length}`); await delay(WAIT_TIME); let count = await searchClient.getDocumentsCount(); console.log(`Current indexed count: ${count}`); while (count !== documents.length) { await delay(WAIT_TIME); count = await searchClient.getDocumentsCount(); console.log(`Current indexed count: ${count}`); } console.log(`✓ All ${documents.length} documents indexed successfully!`); await searchIndexClient.createKnowledgeSource({ name: 'earth-knowledge-source', description: "Knowledge source for Earth at Night e-book content", kind: "searchIndex", searchIndexParameters: { searchIndexName: 'earth_at_night', sourceDataFields: [ { name: "id" }, { name: "page_number" } ] } }); console.log(`✅ Knowledge source 'earth-knowledge-source' created successfully.`); await searchIndexClient.createKnowledgeBase({ name: 'earth-knowledge-base', knowledgeSources: [ { name: 'earth-knowledge-source' } ], models: [ { kind: "azureOpenAI", azureOpenAIParameters: { resourceUrl: process.env.AZURE_OPENAI_ENDPOINT, deploymentId: process.env.AZURE_OPENAI_GPT_DEPLOYMENT, modelName: process.env.AZURE_OPENAI_GPT_DEPLOYMENT } } ], outputMode: "answerSynthesis", answerInstructions: "Provide a two sentence concise and informative answer based on the retrieved documents." }); console.log(`✅ Knowledge base 'earth-knowledge-base' created successfully.`); const knowledgeRetrievalClient = new KnowledgeRetrievalClient( process.env.AZURE_SEARCH_ENDPOINT, 'earth-knowledge-base', credential ); const query1 = `Why do suburban belts display larger December brightening than urban cores even though absolute light levels are higher downtown? Why is the Phoenix nighttime street grid is so sharply visible from space, whereas large stretches of the interstate between midwestern cities remain comparatively dim?`; const retrievalRequest = { messages: [ { role: "user", content: [ { type: "text", text: query1 } ] } ], knowledgeSourceParams: [ { kind: "searchIndex", knowledgeSourceName: 'earth-knowledge-source', includeReferences: true, includeReferenceSourceData: true, alwaysQuerySource: true, rerankerThreshold: 2.5 } ], includeActivity: true, retrievalReasoningEffort: { kind: "low" } }; const result = await knowledgeRetrievalClient.retrieveKnowledge(retrievalRequest); console.log("\n📝 ANSWER:"); console.log("─".repeat(80)); if (result.response && result.response.length > 0) { result.response.forEach((msg) => { if (msg.content && msg.content.length > 0) { msg.content.forEach((content) => { if (content.type === "text" && 'text' in content) { console.log(content.text); } }); } }); } console.log("─".repeat(80)); if (result.activity) { console.log("\nActivities:"); result.activity.forEach((activity) => { console.log(`Activity Type: ${activity.type}`); console.log(JSON.stringify(activity, null, 2)); }); } if (result.references) { console.log("\nReferences:"); result.references.forEach((reference) => { console.log(`Reference Type: ${reference.type}`); console.log(JSON.stringify(reference, null, 2)); }); } // Follow-up query - to demonstrate conversational context const query2 = "How do I find lava at night?"; console.log(`\n❓ Follow-up question: ${query2}`); const retrievalRequest2 = { messages: [ { role: "user", content: [ { type: "text", text: query2 } ] } ], knowledgeSourceParams: [ { kind: "searchIndex", knowledgeSourceName: 'earth-knowledge-source', includeReferences: true, includeReferenceSourceData: true, alwaysQuerySource: true, rerankerThreshold: 2.5 } ], includeActivity: true, retrievalReasoningEffort: { kind: "low" } }; const result2 = await knowledgeRetrievalClient.retrieveKnowledge(retrievalRequest2); console.log("\n📝 ANSWER:"); console.log("─".repeat(80)); if (result2.response && result2.response.length > 0) { result2.response.forEach((msg) => { if (msg.content && msg.content.length > 0) { msg.content.forEach((content) => { if (content.type === "text" && 'text' in content) { console.log(content.text); } }); } }); } console.log("─".repeat(80)); if (result2.activity) { console.log("\nActivities:"); result2.activity.forEach((activity) => { console.log(`Activity Type: ${activity.type}`); console.log(JSON.stringify(activity, null, 2)); }); } if (result2.references) { console.log("\nReferences:"); result2.references.forEach((reference) => { console.log(`Reference Type: ${reference.type}`); console.log(JSON.stringify(reference, null, 2)); }); } console.log("\n✅ Quickstart completed successfully!"); // Clean up resources await searchIndexClient.deleteKnowledgeBase('earth-knowledge-base'); await searchIndexClient.deleteKnowledgeSource('earth-knowledge-source'); await searchIndexClient.deleteIndex('earth_at_night'); console.log(`\n🗑️ Cleaned up resources.`);Compilare ed eseguire l'applicazione.
node --env-file=.env index.js
Risultato
L'output dell'applicazione dovrebbe essere simile al seguente:
Waiting for indexing to complete...
Expected documents: 194
Current indexed count: 194
✓ All 194 documents indexed successfully!
✅ Knowledge source 'earth-knowledge-source' created successfully.
✅ Knowledge base 'earth-knowledge-base' created successfully.
📝 ANSWER:
────────────────────────────────────────────────────────────────────────────────
Suburban belts show larger December brightening (20–50% increases) because residential holiday lighting and seasonal decorations are concentrated there, so relative (fractional) increases over the baseline are bigger even though absolute downtown radiances remain higher; urban cores already emit strong baseline light while many suburbs add a large seasonal increment visible in VIIRS DNB observations [ref_id:0][ref_id:1]. The Phoenix street grid appears sharply from space because continuous, street‑oriented lighting with regular residential lot spacing and little vegetative masking produces strong, linear emissions, whereas long interstate stretches between Midwestern cities have sparser, access‑limited lighting, fewer adjacent developments and more shielded fixtures so they register comparatively dim on night‑light sensors like VIIRS/DNB [ref_id:0][ref_id:1].
────────────────────────────────────────────────────────────────────────────────
Activities:
Activity Type: modelQueryPlanning
{
"id": 0,
"type": "modelQueryPlanning",
"elapsedMs": 5883,
"inputTokens": 1489,
"outputTokens": 326
}
Activity Type: searchIndex
{
"id": 1,
"type": "searchIndex",
"elapsedMs": 527,
"knowledgeSourceName": "earth-knowledge-source",
"queryTime": "2025-12-19T15:38:23.462Z",
"count": 1,
"searchIndexArguments": {
"search": "December brightening suburban belts vs urban cores light pollution causes December increase in night lights suburban vs urban",
"filter": null,
"sourceDataFields": [
{
"name": "page_chunk"
},
{
"name": "id"
},
{
"name": "page_number"
}
],
"searchFields": [],
"semanticConfigurationName": "semantic_config"
}
}
... // Trimmed for brevity
Activity Type: agenticReasoning
{
"id": 4,
"type": "agenticReasoning",
"reasoningTokens": 70397,
"retrievalReasoningEffort": {
"kind": "low"
}
}
Activity Type: modelAnswerSynthesis
{
"id": 5,
"type": "modelAnswerSynthesis",
"elapsedMs": 4908,
"inputTokens": 4013,
"outputTokens": 187
}
References:
Reference Type: searchIndex
{
"type": "searchIndex",
"id": "0",
"activitySource": 3,
"sourceData": {
"id": "earth_at_night_508_page_174_verbalized",
"page_chunk": "<!-- PageHeader=\"Holiday Lights\" -->\n\n## Holiday Lights\n\n### Bursting with Holiday Energy-United States\n\nNASA researchers found that nighttime lights in the United States shine 20 to 50 percent brighter in December due to holiday light displays and other activities during Christmas and New Year's when compared to light output during the rest of the year.\n\nThe next five maps (see also pages 161-163), created using data from the VIIRS DNB on the Suomi NPP satellite, show changes in lighting intensity and location around many major cities, comparing the nighttime light signals from December 2012 and beyond.\n\n---\n\n#### Figure 1. Location Overview\n\nA map of the western hemisphere with a marker indicating the mid-Atlantic region of the eastern United States, where the study of holiday lighting intensity was focused.\n\n---\n\n#### Figure 2. Holiday Lighting Intensity: Mid-Atlantic United States (2012–2014)\n\nA map showing Maryland, New Jersey, Delaware, Virginia, West Virginia, Ohio, Kentucky, Tennessee, North Carolina, South Carolina, and surrounding areas. Major cities labeled include Washington, D.C., Richmond, Norfolk, and Raleigh.\n\nThe map uses colors to indicate changes in holiday nighttime lighting intensity between 2012 and 2014:\n\n- **Green/bright areas**: More holiday lighting (areas shining 20–50% brighter in December).\n- **Yellow areas**: No change in lighting.\n- **Dim/grey areas**: Less holiday lighting.\n\nKey observations from the map:\n\n- The Washington, D.C. metropolitan area shows significant increases in lighting during the holidays, extending into Maryland and Virginia.\n- Urban centers such as Richmond (Virginia), Norfolk (Virginia), Raleigh (North Carolina), and clusters in Tennessee and South Carolina also experience notable increases in light intensity during December.\n- Rural areas and the interiors of West Virginia, Kentucky, and North Carolina show little change or less holiday lighting, corresponding to population density and urbanization.\n\n**Legend:**\n\n| Holiday Lighting Change | Color on Map |\n|------------------------|---------------|\n| More | Green/bright |\n| No Change | Yellow |\n| Less | Dim/grey |\n\n_The scale bar indicates a distance of 100 km for reference._\n\n---\n\n<!-- PageFooter=\"158 Earth at Night\" -->",
"page_number": 174
},
"rerankerScore": 2.6692379,
"docKey": "earth_at_night_508_page_174_verbalized"
}
... // Trimmed for brevity
❓ Follow-up question: How do I find lava at night?
📝 ANSWER:
────────────────────────────────────────────────────────────────────────────────
... // Trimmed for brevity
────────────────────────────────────────────────────────────────────────────────
Activities:
... // Trimmed for brevity
References:
... // Trimmed for brevity
✅ Quickstart completed successfully!
🗑️ Cleaned up resources.
Informazioni sul codice
Ora che si dispone del codice, è possibile suddividere i componenti chiave:
- Creare un indice di ricerca
- Caricare documenti nell'indice
- Creare una fonte di informazioni
- Creare una knowledge base
- Eseguire la pipeline di recupero
- Esaminare la risposta, l'attività e i riferimenti
- Continuare la conversazione
Creare un indice di ricerca
In Azure AI Search, un indice è una raccolta strutturata di dati. Il codice seguente definisce un indice denominato .
Lo schema dell'indice contiene campi per l'identificazione dei documenti e il contenuto della pagina, gli incorporamenti e i numeri. Lo schema include anche configurazioni per la classificazione semantica e la ricerca vettoriale, che usa la distribuzione per vettorizzare il testo e associare i documenti in base alla similarità semantica.
const index = {
name: 'earth_at_night',
fields: [
{
name: "id",
type: "Edm.String",
key: true,
filterable: true,
sortable: true,
facetable: true
},
{
name: "page_chunk",
type: "Edm.String",
searchable: true,
filterable: false,
sortable: false,
facetable: false
},
{
name: "page_embedding_text_3_large",
type: "Collection(Edm.Single)",
searchable: true,
filterable: false,
sortable: false,
facetable: false,
vectorSearchDimensions: 3072,
vectorSearchProfileName: "hnsw_text_3_large"
},
{
name: "page_number",
type: "Edm.Int32",
filterable: true,
sortable: true,
facetable: true
}
],
vectorSearch: {
profiles: [
{
name: "hnsw_text_3_large",
algorithmConfigurationName: "alg",
vectorizerName: "azure_openai_text_3_large"
}
],
algorithms: [
{
name: "alg",
kind: "hnsw"
}
],
vectorizers: [
{
vectorizerName: "azure_openai_text_3_large",
kind: "azureOpenAI",
parameters: {
resourceUrl: process.env.AZURE_OPENAI_ENDPOINT,
deploymentId: process.env.AZURE_OPENAI_EMBEDDING_DEPLOYMENT,
modelName: process.env.AZURE_OPENAI_EMBEDDING_DEPLOYMENT
}
}
]
},
semanticSearch: {
defaultConfigurationName: "semantic_config",
configurations: [
{
name: "semantic_config",
prioritizedFields: {
contentFields: [
{ name: "page_chunk" }
]
}
}
]
}
};
const credential = new DefaultAzureCredential();
const searchIndexClient = new SearchIndexClient(process.env.AZURE_SEARCH_ENDPOINT, credential);
const searchClient = new SearchClient(process.env.AZURE_SEARCH_ENDPOINT, 'earth_at_night', credential);
await searchIndexClient.createOrUpdateIndex(index);
Reference:SearchField, VectorSearch, SemanticSearch, SearchIndex, SearchIndexClient, SearchClient, DefaultAzureCredential
Caricare documenti nell'indice
Attualmente, l'indice è vuoto. Il codice seguente popola l'indice con i documenti JSON di NASA's Earth at Night. Come richiesto da Azure AI Search, ogni documento è conforme ai campi e ai tipi di dati definiti nello schema dell'indice.
const response = await fetch("https://raw.githubusercontent.com/Azure-Samples/azure-search-sample-data/refs/heads/main/nasa-e-book/earth-at-night-json/documents.json");
if (!response.ok) {
throw new Error(`Failed to fetch documents: ${response.status} ${response.statusText}`);
}
const documents = await response.json();
const bufferedClient = new SearchIndexingBufferedSender(
searchClient,
documentKeyRetriever,
{
autoFlush: true,
},
);
await bufferedClient.uploadDocuments(documents);
await bufferedClient.flush();
await bufferedClient.dispose();
console.log(`Waiting for indexing to complete...`);
console.log(`Expected documents: ${documents.length}`);
await delay(WAIT_TIME);
let count = await searchClient.getDocumentsCount();
console.log(`Current indexed count: ${count}`);
while (count !== documents.length) {
await delay(WAIT_TIME);
count = await searchClient.getDocumentsCount();
console.log(`Current indexed count: ${count}`);
}
console.log(`✓ All ${documents.length} documents indexed successfully!`);
Reference:SearchIndexingBufferedSender
Creare una fonte di informazioni
Una fonte di conoscenza è un riferimento riutilizzabile ai dati sorgente. Il codice seguente definisce un'origine di conoscenza denominata che è destinata all'indice .
specifica i campi di indice inclusi nei riferimenti di citazione. Questo esempio include solo campi leggibili per evitare incorporamenti lunghi e non interpretabili nelle risposte.
await searchIndexClient.createKnowledgeSource({
name: 'earth-knowledge-source',
description: "Knowledge source for Earth at Night e-book content",
kind: "searchIndex",
searchIndexParameters: {
searchIndexName: 'earth_at_night',
sourceDataFields: [
{ name: "id" },
{ name: "page_number" }
]
}
});
console.log(`✅ Knowledge source 'earth-knowledge-source' created successfully.`);
Reference:SearchIndexKnowledgeSource
Creare una knowledge base
Per impostare come destinazione e la distribuzione in fase di query, è necessaria una knowledge base. Il codice seguente definisce una Knowledge Base denominata .
è impostato su , abilitando le risposte in linguaggio naturale che citano i documenti recuperati e seguono le istruzioni fornite .
await searchIndexClient.createKnowledgeBase({
name: 'earth-knowledge-base',
knowledgeSources: [
{
name: 'earth-knowledge-source'
}
],
models: [
{
kind: "azureOpenAI",
azureOpenAIParameters: {
resourceUrl: process.env.AZURE_OPENAI_ENDPOINT,
deploymentId: process.env.AZURE_OPENAI_GPT_DEPLOYMENT,
modelName: process.env.AZURE_OPENAI_GPT_DEPLOYMENT
}
}
],
outputMode: "answerSynthesis",
answerInstructions: "Provide a two sentence concise and informative answer based on the retrieved documents."
});
console.log(`✅ Knowledge base 'earth-knowledge-base' created successfully.`);
Riferimento:KnowledgeBase
Eseguire la pipeline di recupero
Si è pronti per eseguire il recupero agentico. Il codice seguente invia una query utente in due parti a , che:
- Analizza l'intera conversazione per dedurre le informazioni necessarie all'utente.
- Scompone la query composta in sottoquery in evidenza.
- Esegue le sottoquery contemporaneamente rispetto alla fonte delle informazioni.
- Usa il ranker semantico per classificare nuovamente e filtrare i risultati.
- Sintetizza i risultati principali in una risposta in linguaggio naturale.
const knowledgeRetrievalClient = new KnowledgeRetrievalClient(
process.env.AZURE_SEARCH_ENDPOINT,
'earth-knowledge-base',
credential
)
const query1 = `Why do suburban belts display larger December brightening than urban cores even though absolute light levels are higher downtown? Why is the Phoenix nighttime street grid is so sharply visible from space, whereas large stretches of the interstate between midwestern cities remain comparatively dim?`;
const retrievalRequest = {
messages: [
{
role: "user",
content: [
{
type: "text",
text: query1
}
]
}
],
knowledgeSourceParams: [
{
kind: "searchIndex",
knowledgeSourceName: 'earth-knowledge-source',
includeReferences: true,
includeReferenceSourceData: true,
alwaysQuerySource: true,
rerankerThreshold: 2.5
}
],
includeActivity: true,
retrievalReasoningEffort: { kind: "low" }
};
const result = await knowledgeRetrievalClient.retrieveKnowledge(retrievalRequest);
Riferimento: KnowledgeRetrievalClient, KnowledgeBaseRetrievalRequest
Esaminare la risposta, l'attività e i riferimenti
Il codice seguente visualizza la risposta, l'attività e i riferimenti dalla pipeline di recupero, dove:
fornisce una risposta sintetizzata generata da LLM alla query che cita i documenti recuperati. Quando la sintesi delle risposte non è abilitata, questa sezione contiene contenuto estratto direttamente dai documenti.
tiene traccia dei passaggi eseguiti durante il processo di recupero, incluse le sottoquery generate dalla distribuzione di e i token usati per la classificazione semantica, la pianificazione delle query e la sintesi delle risposte.
elenca i documenti che hanno contribuito alla risposta, ognuno identificato dal relativo .
console.log("\n📝 ANSWER:");
console.log("─".repeat(80));
if (result.response && result.response.length > 0) {
result.response.forEach((msg) => {
if (msg.content && msg.content.length > 0) {
msg.content.forEach((content) => {
if (content.type === "text" && 'text' in content) {
console.log(content.text);
}
});
}
});
}
console.log("─".repeat(80));
if (result.activity) {
console.log("\nActivities:");
result.activity.forEach((activity) => {
console.log(`Activity Type: ${activity.type}`);
console.log(JSON.stringify(activity, null, 2));
});
}
if (result.references) {
console.log("\nReferences:");
result.references.forEach((reference) => {
console.log(`Reference Type: ${reference.type}`);
console.log(JSON.stringify(reference, null, 2));
});
}
Continuare la conversazione
Il codice seguente continua la conversazione con . Dopo l'invio di questa query utente, la Knowledge Base recupera il contenuto pertinente da e aggiunge la risposta all'elenco dei messaggi.
const query2 = "How do I find lava at night?";
console.log(`\n❓ Follow-up question: ${query2}`);
const retrievalRequest2 = {
messages: [
{
role: "user",
content: [
{
type: "text",
text: query2
}
]
}
],
knowledgeSourceParams: [
{
kind: "searchIndex",
knowledgeSourceName: 'earth-knowledge-source',
includeReferences: true,
includeReferenceSourceData: true,
alwaysQuerySource: true,
rerankerThreshold: 2.5
}
],
includeActivity: true,
retrievalReasoningEffort: { kind: "low" }
};
const result2 = await knowledgeRetrievalClient.retrieveKnowledge(retrievalRequest2);
Esaminare la nuova risposta, l'attività e i riferimenti
Il codice seguente visualizza la nuova risposta, l'attività e i riferimenti dalla pipeline di recupero.
console.log("\n📝 ANSWER:");
console.log("─".repeat(80));
if (result2.response && result2.response.length > 0) {
result2.response.forEach((msg) => {
if (msg.content && msg.content.length > 0) {
msg.content.forEach((content) => {
if (content.type === "text" && 'text' in content) {
console.log(content.text);
}
});
}
});
}
console.log("─".repeat(80));
if (result2.activity) {
console.log("\nActivities:");
result2.activity.forEach((activity) => {
console.log(`Activity Type: ${activity.type}`);
console.log(JSON.stringify(activity, null, 2));
});
}
if (result2.references) {
console.log("\nReferences:");
result2.references.forEach((reference) => {
console.log(`Reference Type: ${reference.type}`);
console.log(JSON.stringify(reference, null, 2));
});
}
Pulire le risorse
Quando si lavora nella propria sottoscrizione, è consigliabile completare un progetto rimuovendo le risorse non più necessarie. Le risorse lasciate in esecuzione possono avere un costo.
Nel portale di Azure selezionare Tutte le risorse o Gruppi di risorse dal riquadro sinistro per trovare e gestire le risorse. È possibile eliminare le risorse singolarmente o eliminare il gruppo di risorse per rimuovere tutte le risorse contemporaneamente.
Altrimenti, il codice seguente da elimina gli oggetti che hai creato in questo quickstart.
await searchIndexClient.deleteKnowledgeBase('earth-knowledge-base');
await searchIndexClient.deleteKnowledgeSource('earth-knowledge-source');
await searchIndexClient.deleteIndex('earth_at_night');
console.log(`\n🗑️ Cleaned up resources.`);
Annotazioni
Questa funzionalità è attualmente disponibile in anteprima pubblica. Questa anteprima viene fornita senza un contratto di servizio e non è consigliata per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per ulteriori informazioni, vedere Condizioni supplementari per l'uso delle versioni di anteprima di Microsoft Azure.
In questa guida introduttiva si usa il recupero agentico per creare un'esperienza di ricerca conversazionale basata su documenti indicizzati in Azure AI Search e un modello di linguaggio di grandi dimensioni da Azure OpenAI in Modelli di Fonderia.
Una Knowledge Base orchestra il recupero agentico scomponendo query complesse in sottoquery, eseguendo le sottoquery su una o più origini di informazioni e restituendo risultati con metadati. Per impostazione predefinita, la knowledge base restituisce contenuti non elaborati dalle origini; tuttavia, questa guida introduttiva usa la modalità di output di sintesi delle risposte per la generazione di risposte in linguaggio naturale.
Anche se è possibile usare dati personalizzati, questa guida introduttiva usa i documenti JSON sample dall'e-book Earth at Night della NASA.
Suggerimento
Vuoi iniziare subito? Scaricare il codice source in GitHub.
Prerequisiti
Un account Azure con una sottoscrizione attiva. Creare un account gratuito.
Un servizio Azure AI Search, in qualsiasi area che fornisce il recupero agentico. Questo quickstart prevede il livello Basic o superiore per il supporto delle identità gestite.
Un progetto e una risorsa di Microsoft Foundry . Quando si crea un progetto, la risorsa viene creata automaticamente.
Modello di incorporamento distribuito nel progetto per la conversione da testo a vettore. È possibile usare qualsiasi modello, ad esempio .
LLM implementato nel tuo progetto per la pianificazione delle query e la generazione di risposte. È possibile usare qualsiasi LLM supportato, ad esempio .
Python 3.8 o versione successiva.
Visual Studio Code con le estensioni Python e Jupyter.
Git per clonare il repository di esempio.
interfaccia della riga di comando di Azure per l'autenticazione senza chiave con Microsoft Entra ID.
Configurare l'accesso
Prima di iniziare, assicurarsi di disporre delle autorizzazioni per accedere al contenuto e alle operazioni. Questa guida di avvio rapido usa Microsoft Entra ID per l'autenticazione e l'accesso basato su ruoli per l'autorizzazione. Per assegnare i ruoli, è necessario essere Proprietario o Amministratore dell'accesso utenti. Se i ruoli non sono fattibili, usare invece l'autenticazione basata su chiave.
Per configurare l'accesso per questo avvio rapido:
Accedere al portale Azure.
Nel servizio Azure AI Search:
Abilitare l'accesso in base al ruolo.
Creare un'identità gestita assegnata dal sistema.
Assegnare i ruoli seguenti all'account utente: Collaboratore al servizio di ricerca, Collaboratore ai dati dell'indice di ricerca e Lettore dati indice di ricerca.
Nella risorsa Microsoft Foundry, assegnare Utente di Servizi Cognitivi all'identità gestita del servizio di ricerca.
Importante
Il recupero agentico ha due modelli di fatturazione basati su token:
- Fatturazione da Azure AI Search per il recupero agentico.
- Processo di fatturazione da Azure OpenAI per la pianificazione delle query e la sintesi delle risposte.
Per altre informazioni, vedere Disponibilità e prezzi del recupero agentico.
Ottenere gli endpoint
Ogni servizio Azure AI Search e la risorsa Microsoft Foundry hanno un endpoint, ovvero un URL univoco che identifica e fornisce l'accesso di rete alla risorsa. In una sezione successiva si specificano questi endpoint per connettersi alle risorse a livello programmatico.
Per ottenere gli endpoint per questo avvio rapido:
Accedere al portale Azure.
Nel servizio Azure AI Search:
Nel riquadro sinistro selezionare Panoramica.
Copiare l'URL, che dovrebbe essere simile a .
Nella risorsa Microsoft Foundry:
Nel riquadro sinistro, selezionare Gestione risorseChiavi ed endpoint.
Copia l'URL nella scheda OpenAI, che dovrebbe essere simile a .
Configurare l'ambiente
Usare Git per clonare il repository di esempio.
git clone https://github.com/Azure-Samples/azure-search-python-samplesPassare alla cartella di avvio rapido e aprirla in Visual Studio Code.
cd azure-search-python-samples/Quickstart-Agentic-Retrieval code .Negli sostituire i valori segnaposti per e con gli URL ottenuti in Ottenere gli endpoint.
Rinomina in .
mv sample.env .envAprire .
Premere CTRL+MAIUSC+P, selezionare Notebook: Selezionare Kernel notebook e seguire le istruzioni per creare un ambiente virtuale. Selezionare requirements.txt per le dipendenze.
Al termine, verrà visualizzata una cartella nella directory del progetto.
Per l'autenticazione senza chiave con Microsoft Entra ID, accedere all'account Azure. Se si hanno più sottoscrizioni, selezionare quella che contiene le risorse Azure AI Search e Microsoft Foundry.
az login
Eseguire il codice
Eseguire la cella per installare i pacchetti necessari e caricare le variabili di ambiente.
Eseguire le celle rimanenti in sequenza per creare un indice, caricare documenti, configurare un'origine di conoscenza e una knowledge base ed eseguire query di recupero automatiche.
Risultato
Ogni cella di codice stampa l'output sul notebook. L'esempio seguente è l'output dopo l'esecuzione di tutte le celle:
Documents uploaded to index 'earth-at-night' successfully.
Knowledge source 'earth-knowledge-source' created or updated successfully.
Knowledge base 'earth-knowledge-base' created or updated successfully.
Retrieved content from 'earth-knowledge-base' successfully.
response_content:
Suburban belts brighten more in December because holiday lighting is concentrated in suburbs and outskirts—where yard space and single-family homes allow more displays—while central urban cores already have much higher absolute light levels so their fractional increase is smaller [ref_id:4][ref_id:7].
The Phoenix street grid is sharply visible from space because its regular block pattern plus continuous street, commercial, and corridor lighting (including the diagonal Grand Avenue) produce a bright, grid-like signature at night [ref_id:3][ref_id:0], whereas interstate corridors between Midwestern cities often appear comparatively dim because light is concentrated at urban nodes and ports while long stretches of highway and rivers lack continuous lighting [ref_id:7][ref_id:2].
activity_content:
[
{
"id": 0,
"type": "modelQueryPlanning",
"elapsed_ms": 16946,
"input_tokens": 1354,
"output_tokens": 906
},
{
"id": 1,
"type": "searchIndex",
"elapsed_ms": 887,
"knowledge_source_name": "earth-knowledge-source",
"query_time": "2025-11-05T16:17:48.345Z",
"count": 22,
"search_index_arguments": {
"search": "December brightening in satellite nighttime lights: why do suburban belts show larger relative increases in December than urban cores despite higher absolute downtown light levels?"
}
},
... // Trimmed for brevity
{
"id": 4,
"type": "agenticReasoning",
"reasoning_tokens": 72191,
"retrieval_reasoning_effort": {
"kind": "low"
}
},
{
"id": 5,
"type": "modelAnswerSynthesis",
"elapsed_ms": 22353,
"input_tokens": 7564,
"output_tokens": 1645
}
]
references_content:
[
{
"type": "searchIndex",
"id": "0",
"activity_source": 2,
"source_data": {
"id": "earth_at_night_508_page_105_verbalized",
"page_chunk": "# Urban Structure\n\n## March 16, 2013\n\n### Phoenix Metropolitan Area at Night\n\nThis figure presents a nighttime satellite view of the Phoenix metropolitan area, highlighting urban structure and transport corridors. City lights illuminate the layout of several cities and major thoroughfares.\n\n**Labeled Urban Features:**\n\n- **Phoenix:** Central and brightest area in the right-center of the image.\n- **Glendale:** Located to the west of Phoenix, this city is also brightly lit.\n- **Peoria:** Further northwest, this area is labeled and its illuminated grid is seen.\n- **Grand Avenue:** Clearly visible as a diagonal, brightly lit thoroughfare running from Phoenix through Glendale and Peoria.\n- **Salt River Channel:** Identified in the southeast portion, running through illuminated sections.\n- **Phoenix Mountains:** Dark, undeveloped region to the northeast of Phoenix.\n- **Agricultural Fields:** Southwestern corner of the image, grid patterns are visible but with much less illumination, indicating agricultural land use.\n\n**Additional Notes:**\n\n- The overall pattern shows a grid-like urban development typical of western U.S. cities, with scattered bright nodes at major intersections or city centers.\n- There is a clear transition from dense urban development to sparsely populated or agricultural land, particularly evident towards the bottom and left of the image.\n- The illuminated areas follow the existing road and street grids, showcasing the extensive spread of the metropolitan area.\n\n**Figure Description:** \nA satellite nighttime image captured on March 16, 2013, showing Phoenix and surrounding areas (including Glendale and Peoria). Major landscape and infrastructural features, such as the Phoenix Mountains, Grand Avenue, the Salt River Channel, and agricultural fields, are labeled. The image reveals the extent of urbanization and the characteristic street grid illuminated by city lights.\n\n---\n\nPage 89",
"page_number": 105
},
"reranker_score": 2.722408,
"doc_key": "earth_at_night_508_page_105_verbalized"
},
... // Trimmed for brevity
]
Retrieved content from 'earth-knowledge-base' successfully.
response_content:
... // Trimmed for brevity
activity_content:
[
... // Trimmed for brevity
]
references_content:
[
... // Trimmed for brevity
]
Knowledge base 'earth-knowledge-base' deleted successfully.
Knowledge source 'earth-knowledge-source' deleted successfully.
Index 'earth-at-night' deleted successfully.
Informazioni sul codice
Annotazioni
I frammenti di codice in questa sezione potrebbero essere stati modificati per la leggibilità. Per un esempio funzionante completo, vedere il codice sorgente.
Dopo aver eseguito il codice, è possibile suddividere i passaggi principali:
- Creare un indice di ricerca
- Caricare documenti nell'indice
- Creare una fonte di informazioni
- Creare una knowledge base
- Configurare i messaggi
- Eseguire la pipeline di recupero
- Continuare la conversazione
Creare un indice di ricerca
In Azure AI Search, un indice è una raccolta strutturata di dati. Il codice seguente definisce un indice denominato .
Lo schema dell'indice contiene campi per l'identificazione dei documenti e il contenuto della pagina, gli incorporamenti e i numeri. Lo schema include anche configurazioni per la classificazione semantica e la ricerca vettoriale, che usa la distribuzione per vettorizzare il testo e associare i documenti in base alla similarità semantica.
# Create an index
azure_openai_token_provider = get_bearer_token_provider(credential, "https://cognitiveservices.azure.com/.default")
index = SearchIndex(
name=index_name,
fields=[
SearchField(name="id", type="Edm.String", key=True, filterable=True, sortable=True, facetable=True),
SearchField(name="page_chunk", type="Edm.String", filterable=False, sortable=False, facetable=False),
SearchField(name="page_embedding_text_3_large", type="Collection(Edm.Single)", stored=False, vector_search_dimensions=3072, vector_search_profile_name="hnsw_text_3_large"),
SearchField(name="page_number", type="Edm.Int32", filterable=True, sortable=True, facetable=True)
],
vector_search=VectorSearch(
profiles=[VectorSearchProfile(name="hnsw_text_3_large", algorithm_configuration_name="alg", vectorizer_name="azure_openai_text_3_large")],
algorithms=[HnswAlgorithmConfiguration(name="alg")],
vectorizers=[
AzureOpenAIVectorizer(
vectorizer_name="azure_openai_text_3_large",
parameters=AzureOpenAIVectorizerParameters(
resource_url=aoai_endpoint,
deployment_name=aoai_embedding_deployment,
model_name=aoai_embedding_model
)
)
]
),
semantic_search=SemanticSearch(
default_configuration_name="semantic_config",
configurations=[
SemanticConfiguration(
name="semantic_config",
prioritized_fields=SemanticPrioritizedFields(
content_fields=[
SemanticField(field_name="page_chunk")
]
)
)
]
)
)
index_client = SearchIndexClient(endpoint=search_endpoint, credential=credential)
index_client.create_or_update_index(index)
print(f"Index '{index_name}' created or updated successfully.")
Reference:SearchField, VectorSearch, SemanticSearch, SearchIndex, SearchIndexClient
Caricare documenti nell'indice
Attualmente, l'indice è vuoto. Il codice seguente popola l'indice con i documenti JSON di NASA's Earth at Night. Come richiesto da Azure AI Search, ogni documento è conforme ai campi e ai tipi di dati definiti nello schema dell'indice.
# Upload documents
url = "https://raw.githubusercontent.com/Azure-Samples/azure-search-sample-data/refs/heads/main/nasa-e-book/earth-at-night-json/documents.json"
documents = requests.get(url).json()
with SearchIndexingBufferedSender(endpoint=search_endpoint, index_name=index_name, credential=credential) as client:
client.upload_documents(documents=documents)
print(f"Documents uploaded to index '{index_name}' successfully.")
Reference:SearchIndexingBufferedSender
Creare una fonte di informazioni
Una fonte di conoscenza è un riferimento riutilizzabile ai dati sorgente. Il codice seguente definisce un'origine di conoscenza denominata che è destinata all'indice .
specifica i campi di indice inclusi nei riferimenti di citazione. Questo esempio include solo campi leggibili per evitare incorporamenti lunghi e non interpretabili nelle risposte.
# Create a knowledge source
ks = SearchIndexKnowledgeSource(
name=knowledge_source_name,
description="Knowledge source for Earth at night data",
search_index_parameters=SearchIndexKnowledgeSourceParameters(
search_index_name=index_name,
source_data_fields=[SearchIndexFieldReference(name="id"), SearchIndexFieldReference(name="page_number")]
),
)
index_client = SearchIndexClient(endpoint=search_endpoint, credential=credential)
index_client.create_or_update_knowledge_source(knowledge_source=ks)
print(f"Knowledge source '{knowledge_source_name}' created or updated successfully.")
Reference:SearchIndexKnowledgeSource
Creare una knowledge base
Per impostare come destinazione e la distribuzione in fase di query, è necessaria una knowledge base. Il codice seguente definisce una Knowledge Base denominata .
è impostato su , abilitando le risposte in linguaggio naturale che citano i documenti recuperati e seguono le istruzioni fornite .
# Create a knowledge base
aoai_params = AzureOpenAIVectorizerParameters(
resource_url=aoai_endpoint,
deployment_name=aoai_gpt_deployment,
model_name=aoai_gpt_model,
)
knowledge_base = KnowledgeBase(
name=knowledge_base_name,
models=[KnowledgeBaseAzureOpenAIModel(azure_open_ai_parameters=aoai_params)],
knowledge_sources=[
KnowledgeSourceReference(
name=knowledge_source_name
)
],
output_mode=KnowledgeRetrievalOutputMode.ANSWER_SYNTHESIS,
answer_instructions="Provide a 2 sentence concise and informative answer based on the retrieved documents."
)
index_client = SearchIndexClient(endpoint=search_endpoint, credential=credential)
index_client.create_or_update_knowledge_base(knowledge_base)
print(f"Knowledge base '{knowledge_base_name}' created or updated successfully.")
Riferimento:KnowledgeBase
Configurare i messaggi
I messaggi sono l'input per la route di recupero e contengono la cronologia delle conversazioni. Ogni messaggio include un ruolo che indica l'origine, ad esempio o , e il contenuto in linguaggio naturale. L'LLM usato determina quali ruoli sono validi.
Il codice seguente crea un messaggio di sistema che indica di rispondere alle domande sulla Terra di notte e rispondere con "Non so" quando le risposte non sono disponibili.
# Set up messages
instructions = """
A Q&A agent that can answer questions about the Earth at night.
If you don't have the answer, respond with "I don't know".
"""
messages = [
{
"role": "system",
"content": instructions
}
]
Eseguire la pipeline di recupero
Si è pronti per eseguire il recupero agentico. Il codice seguente invia una query utente in due parti a , che:
- Analizza l'intera conversazione per dedurre le informazioni necessarie all'utente.
- Scompone la query composta in sottoquery in evidenza.
- Esegue le sottoquery contemporaneamente rispetto alla fonte delle informazioni.
- Usa il ranker semantico per classificare nuovamente e filtrare i risultati.
- Sintetizza i risultati principali in una risposta in linguaggio naturale.
# Run agentic retrieval
agent_client = KnowledgeBaseRetrievalClient(endpoint=search_endpoint, knowledge_base_name=knowledge_base_name, credential=credential)
query_1 = """
Why do suburban belts display larger December brightening than urban cores even though absolute light levels are higher downtown?
Why is the Phoenix nighttime street grid is so sharply visible from space, whereas large stretches of the interstate between midwestern cities remain comparatively dim?
"""
messages.append({
"role": "user",
"content": query_1
})
req = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role=m["role"],
content=[KnowledgeBaseMessageTextContent(text=m["content"])]
) for m in messages if m["role"] != "system"
],
knowledge_source_params=[
SearchIndexKnowledgeSourceParams(
knowledge_source_name=knowledge_source_name,
include_references=True,
include_reference_source_data=True,
always_query_source=True
)
],
include_activity=True,
retrieval_reasoning_effort=KnowledgeRetrievalLowReasoningEffort
)
result = agent_client.retrieve(retrieval_request=req)
print(f"Retrieved content from '{knowledge_base_name}' successfully.")
Riferimento: KnowledgeBaseRetrievalClient, KnowledgeBaseRetrievalRequest
Esaminare la risposta, l'attività e i riferimenti
Il codice seguente visualizza la risposta, l'attività e i riferimenti dalla pipeline di recupero, dove:
fornisce una risposta sintetizzata generata da LLM alla query che cita i documenti recuperati. Quando la sintesi delle risposte non è abilitata, questa sezione contiene contenuto estratto direttamente dai documenti.
tiene traccia dei passaggi eseguiti durante il processo di recupero, incluse le sottoquery generate dalla distribuzione di e i token usati per la classificazione semantica, la pianificazione delle query e la sintesi delle risposte.
elenca i documenti che hanno contribuito alla risposta, ognuno identificato dal relativo .
# Display the response, activity, and references
response_contents = []
activity_contents = []
references_contents = []
response_parts = []
for resp in result.response:
for content in resp.content:
response_parts.append(content.text)
response_content = "\n\n".join(response_parts) if response_parts else "No response found on 'result'"
response_contents.append(response_content)
# Print the three string values
print("response_content:\n", response_content, "\n")
messages.append({
"role": "assistant",
"content": response_content
})
if result.activity:
activity_content = json.dumps([a.as_dict() for a in result.activity], indent=2)
else:
activity_content = "No activity found on 'result'"
activity_contents.append(activity_content)
print("activity_content:\n", activity_content, "\n")
if result.references:
references_content = json.dumps([r.as_dict() for r in result.references], indent=2)
else:
references_content = "No references found on 'result'"
references_contents.append(references_content)
print("references_content:\n", references_content)
Continuare la conversazione
Il codice seguente continua la conversazione con . Dopo l'invio di questa query utente, la Knowledge Base recupera il contenuto pertinente da e aggiunge la risposta all'elenco dei messaggi.
# Continue the conversation
query_2 = "How do I find lava at night?"
messages.append({
"role": "user",
"content": query_2
})
req = KnowledgeBaseRetrievalRequest(
messages=[
KnowledgeBaseMessage(
role=m["role"],
content=[KnowledgeBaseMessageTextContent(text=m["content"])]
) for m in messages if m["role"] != "system"
],
knowledge_source_params=[
SearchIndexKnowledgeSourceParams(
knowledge_source_name=knowledge_source_name,
include_references=True,
include_reference_source_data=True,
always_query_source=True
)
],
include_activity=True,
retrieval_reasoning_effort=KnowledgeRetrievalLowReasoningEffort
)
result = agent_client.retrieve(retrieval_request=req)
print(f"Retrieved content from '{knowledge_base_name}' successfully.")
Esaminare la nuova risposta, l'attività e i riferimenti
Il codice seguente visualizza la nuova risposta, l'attività e i riferimenti dalla pipeline di recupero.
# Display the new retrieval response, activity, and references
response_parts = []
for resp in result.response:
for content in resp.content:
response_parts.append(content.text)
response_content = "\n\n".join(response_parts) if response_parts else "No response found on 'result'"
response_contents.append(response_content)
# Print the three string values
print("response_content:\n", response_content, "\n")
if result.activity:
activity_content = json.dumps([a.as_dict() for a in result.activity], indent=2)
else:
activity_content = "No activity found on 'result'"
activity_contents.append(activity_content)
print("activity_content:\n", activity_content, "\n")
if result.references:
references_content = json.dumps([r.as_dict() for r in result.references], indent=2)
else:
references_content = "No references found on 'result'"
references_contents.append(references_content)
print("references_content:\n", references_content)
Pulire le risorse
Quando si lavora nella propria sottoscrizione, è consigliabile completare un progetto rimuovendo le risorse non più necessarie. Le risorse lasciate in esecuzione possono avere un costo.
Nel portale di Azure selezionare Tutte le risorse o Gruppi di risorse dal riquadro sinistro per trovare e gestire le risorse. È possibile eliminare le risorse singolarmente o eliminare il gruppo di risorse per rimuovere tutte le risorse contemporaneamente.
Altrimenti, il codice seguente da elimina gli oggetti che hai creato in questo quickstart.
Eliminare la Knowledge Base
index_client = SearchIndexClient(endpoint=search_endpoint, credential=credential)
index_client.delete_knowledge_base(knowledge_base_name)
print(f"Knowledge base '{knowledge_base_name}' deleted successfully.")
Eliminare la fonte di informazioni
index_client = SearchIndexClient(endpoint=search_endpoint, credential=credential)
index_client.delete_knowledge_source(knowledge_source=knowledge_source_name)
print(f"Knowledge source '{knowledge_source_name}' deleted successfully.")
Eliminare l'indice di ricerca
index_client = SearchIndexClient(endpoint=search_endpoint, credential=credential)
index_client.delete_index(index_name)
print(f"Index '{index_name}' deleted successfully.")
Annotazioni
Questa funzionalità è attualmente disponibile in anteprima pubblica. Questa anteprima viene fornita senza un contratto di servizio e non è consigliata per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per ulteriori informazioni, vedere Condizioni supplementari per l'uso delle versioni di anteprima di Microsoft Azure.
In questa guida introduttiva si usa il recupero agentico per creare un'esperienza di ricerca conversazionale basata su documenti indicizzati in Azure AI Search e un modello di linguaggio di grandi dimensioni da Azure OpenAI in Modelli di Fonderia.
Una Knowledge Base orchestra il recupero agentico scomponendo query complesse in sottoquery, eseguendo le sottoquery su una o più origini di informazioni e restituendo risultati con metadati. Per impostazione predefinita, la knowledge base restituisce contenuti non elaborati dalle origini; tuttavia, questa guida introduttiva usa la modalità di output di sintesi delle risposte per la generazione di risposte in linguaggio naturale.
Anche se è possibile usare dati personalizzati, questa guida introduttiva usa i documenti JSON sample dall'e-book Earth at Night della NASA.
Suggerimento
Il codice sorgente per la versione TypeScript di questa guida introduttiva non è disponibile. È possibile copiare il codice direttamente da questo articolo.
Prerequisiti
Un account Azure con una sottoscrizione attiva. Creare un account gratuito.
Un servizio Azure AI Search, in qualsiasi area che fornisce il recupero agentico. Questo quickstart prevede il livello Basic o superiore per il supporto delle identità gestite.
Un progetto e una risorsa di Microsoft Foundry . Quando si crea un progetto, la risorsa viene creata automaticamente.
Modello di incorporamento distribuito nel progetto per la conversione da testo a vettore. È possibile usare qualsiasi modello, ad esempio .
LLM implementato nel tuo progetto per la pianificazione delle query e la generazione di risposte. È possibile usare qualsiasi LLM supportato, ad esempio .
Node.js 20 LTS o versioni successive.
interfaccia della riga di comando di Azure per l'autenticazione senza chiave con Microsoft Entra ID.
Configurare l'accesso
Prima di iniziare, assicurarsi di disporre delle autorizzazioni per accedere al contenuto e alle operazioni. Questa guida di avvio rapido usa Microsoft Entra ID per l'autenticazione e l'accesso basato su ruoli per l'autorizzazione. Per assegnare i ruoli, è necessario essere Proprietario o Amministratore dell'accesso utenti. Se i ruoli non sono fattibili, usare invece l'autenticazione basata su chiave.
Per configurare l'accesso per questo avvio rapido:
Accedere al portale Azure.
Nel servizio Azure AI Search:
Abilitare l'accesso in base al ruolo.
Creare un'identità gestita assegnata dal sistema.
Assegnare i ruoli seguenti all'account utente: Collaboratore al servizio di ricerca, Collaboratore ai dati dell'indice di ricerca e Lettore dati indice di ricerca.
Nella risorsa Microsoft Foundry, assegnare Utente di Servizi Cognitivi all'identità gestita del servizio di ricerca.
Importante
Il recupero agentico ha due modelli di fatturazione basati su token:
- Fatturazione da Azure AI Search per il recupero agentico.
- Processo di fatturazione da Azure OpenAI per la pianificazione delle query e la sintesi delle risposte.
Per altre informazioni, vedere Disponibilità e prezzi del recupero agentico.
Ottenere gli endpoint
Ogni servizio Azure AI Search e la risorsa Microsoft Foundry hanno un endpoint, ovvero un URL univoco che identifica e fornisce l'accesso di rete alla risorsa. In una sezione successiva si specificano questi endpoint per connettersi alle risorse a livello programmatico.
Per ottenere gli endpoint per questo avvio rapido:
Accedere al portale Azure.
Nel servizio Azure AI Search:
Nel riquadro sinistro selezionare Panoramica.
Copiare l'URL, che dovrebbe essere simile a .
Nella risorsa Microsoft Foundry:
Nel riquadro sinistro, selezionare Gestione risorseChiavi ed endpoint.
Copia l'URL nella scheda OpenAI, che dovrebbe essere simile a .
Configurare l'ambiente
Creare una cartella denominata per contenere l'applicazione.
Aprire la cartella in Visual Studio Code.
Selezionare Terminalenuovo terminale e quindi eseguire i comandi seguenti per inizializzare .
npm init -y npm pkg set type=moduleInstallare TypeScript come dipendenza di sviluppo.
npm install --save-dev typescript @types/nodeInstallare la libreria client Azure AI Search per JavaScript.
npm install @azure/search-documents@12.3.0-beta.1Per l'autenticazione senza chiave con Microsoft Entra ID, installare la libreria client Azure Identity per JavaScript.
npm install @azure/identityPer l'autenticazione senza chiave con Microsoft Entra ID, accedere all'account Azure. Se si hanno più sottoscrizioni, selezionare quella che contiene le risorse Azure AI Search e Microsoft Foundry.
az login
Eseguire il codice
Creare un file denominato nella cartella e quindi incollare il contenuto seguente. Sostituire i valori segnaposto con gli URL ottenuti in Ottenere endpoint.
AZURE_SEARCH_ENDPOINT = https://<your-search-service-name>.search.windows.net AZURE_OPENAI_ENDPOINT = https://<your-foundry-resource-name>.openai.azure.com/ AZURE_OPENAI_GPT_DEPLOYMENT = gpt-5-mini AZURE_OPENAI_EMBEDDING_DEPLOYMENT = text-embedding-3-largeCreare un file denominato e quindi incollare il codice seguente nel file .
import { DefaultAzureCredential } from '@azure/identity'; import { SearchIndexClient, SearchClient, SearchIndex, SearchField, VectorSearch, VectorSearchProfile, HnswAlgorithmConfiguration, AzureOpenAIVectorizer, AzureOpenAIParameters, KnowledgeRetrievalClient, SemanticSearch, SemanticConfiguration, SemanticPrioritizedFields, SemanticField, SearchIndexingBufferedSender, KnowledgeRetrievalOutputMode, IndexDocumentsAction } from '@azure/search-documents'; import type { IndexDocumentsResult } from '@azure/search-documents'; interface EarthAtNightDocument { id: string; page_chunk: string; page_embedding_text_3_large: number[]; page_number: number; } export const documentKeyRetriever: (document: EarthAtNightDocument) => string = (document: EarthAtNightDocument): string => { return document.id!; }; export const WAIT_TIME = 4000; export function delay(timeInMs: number): Promise<void> { return new Promise((resolve) => setTimeout(resolve, timeInMs)); } const index: SearchIndex = { name: 'earth_at_night', fields: [ { name: "id", type: "Edm.String", key: true, filterable: true, sortable: true, facetable: true } as SearchField, { name: "page_chunk", type: "Edm.String", searchable: true, filterable: false, sortable: false, facetable: false } as SearchField, { name: "page_embedding_text_3_large", type: "Collection(Edm.Single)", searchable: true, filterable: false, sortable: false, facetable: false, vectorSearchDimensions: 3072, vectorSearchProfileName: "hnsw_text_3_large" } as SearchField, { name: "page_number", type: "Edm.Int32", filterable: true, sortable: true, facetable: true } as SearchField ], vectorSearch: { profiles: [ { name: "hnsw_text_3_large", algorithmConfigurationName: "alg", vectorizerName: "azure_openai_text_3_large" } as VectorSearchProfile ], algorithms: [ { name: "alg", kind: "hnsw" } as HnswAlgorithmConfiguration ], vectorizers: [ { vectorizerName: "azure_openai_text_3_large", kind: "azureOpenAI", parameters: { resourceUrl: process.env.AZURE_OPENAI_ENDPOINT!, deploymentId: process.env.AZURE_OPENAI_EMBEDDING_DEPLOYMENT!, modelName: process.env.AZURE_OPENAI_EMBEDDING_DEPLOYMENT! } as AzureOpenAIParameters } as AzureOpenAIVectorizer ] } as VectorSearch, semanticSearch: { defaultConfigurationName: "semantic_config", configurations: [ { name: "semantic_config", prioritizedFields: { contentFields: [ { name: "page_chunk" } as SemanticField ] } as SemanticPrioritizedFields } as SemanticConfiguration ] } as SemanticSearch }; const credential = new DefaultAzureCredential(); const searchIndexClient = new SearchIndexClient(process.env.AZURE_SEARCH_ENDPOINT!, credential); const searchClient = new SearchClient<EarthAtNightDocument>(process.env.AZURE_SEARCH_ENDPOINT!, 'earth_at_night', credential); await searchIndexClient.createOrUpdateIndex(index); // get Documents with vectors const response = await fetch("https://raw.githubusercontent.com/Azure-Samples/azure-search-sample-data/refs/heads/main/nasa-e-book/earth-at-night-json/documents.json"); if (!response.ok) { throw new Error(`Failed to fetch documents: ${response.status} ${response.statusText}`); } const documents = await response.json() as any[]; const bufferedClient = new SearchIndexingBufferedSender<EarthAtNightDocument>( searchClient, documentKeyRetriever, { autoFlush: true, }, ); await bufferedClient.uploadDocuments(documents); await bufferedClient.flush(); await bufferedClient.dispose(); console.log(`Waiting for indexing to complete...`); console.log(`Expected documents: ${documents.length}`); await delay(WAIT_TIME); let count = await searchClient.getDocumentsCount(); console.log(`Current indexed count: ${count}`); while (count !== documents.length) { await delay(WAIT_TIME); count = await searchClient.getDocumentsCount(); console.log(`Current indexed count: ${count}`); } console.log(`✓ All ${documents.length} documents indexed successfully!`); await searchIndexClient.createKnowledgeSource({ name: 'earth-knowledge-source', description: "Knowledge source for Earth at Night e-book content", kind: "searchIndex", searchIndexParameters: { searchIndexName: 'earth_at_night', sourceDataFields: [ { name: "id" }, { name: "page_number" } ] } }); console.log(`✅ Knowledge source 'earth-knowledge-source' created successfully.`); await searchIndexClient.createKnowledgeBase({ name: 'earth-knowledge-base', knowledgeSources: [ { name: 'earth-knowledge-source' } ], models: [ { kind: "azureOpenAI", azureOpenAIParameters: { resourceUrl: process.env.AZURE_OPENAI_ENDPOINT!, deploymentId: process.env.AZURE_OPENAI_GPT_DEPLOYMENT!, modelName: process.env.AZURE_OPENAI_GPT_DEPLOYMENT! } } ], outputMode: "answerSynthesis" as KnowledgeRetrievalOutputMode, answerInstructions: "Provide a two sentence concise and informative answer based on the retrieved documents." }); console.log(`✅ Knowledge base 'earth-knowledge-base' created successfully.`); const knowledgeRetrievalClient = new KnowledgeRetrievalClient( process.env.AZURE_SEARCH_ENDPOINT!, 'earth-knowledge-base', credential ); const query1 = `Why do suburban belts display larger December brightening than urban cores even though absolute light levels are higher downtown? Why is the Phoenix nighttime street grid is so sharply visible from space, whereas large stretches of the interstate between midwestern cities remain comparatively dim?`; const retrievalRequest = { messages: [ { role: "user", content: [ { type: "text" as const, text: query1 } ] } ], knowledgeSourceParams: [ { kind: "searchIndex" as const, knowledgeSourceName: 'earth-knowledge-source', includeReferences: true, includeReferenceSourceData: true, alwaysQuerySource: true, rerankerThreshold: 2.5 } ], includeActivity: true, retrievalReasoningEffort: { kind: "low" as const } }; const result = await knowledgeRetrievalClient.retrieveKnowledge(retrievalRequest); console.log("\n📝 ANSWER:"); console.log("─".repeat(80)); if (result.response && result.response.length > 0) { result.response.forEach((msg) => { if (msg.content && msg.content.length > 0) { msg.content.forEach((content) => { if (content.type === "text" && 'text' in content) { console.log(content.text); } }); } }); } console.log("─".repeat(80)); if (result.activity) { console.log("\nActivities:"); result.activity.forEach((activity) => { console.log(`Activity Type: ${activity.type}`); console.log(JSON.stringify(activity, null, 2)); }); } if (result.references) { console.log("\nReferences:"); result.references.forEach((reference) => { console.log(`Reference Type: ${reference.type}`); console.log(JSON.stringify(reference, null, 2)); }); } // Follow-up query - to demonstrate conversational context const query2 = "How do I find lava at night?"; console.log(`\n❓ Follow-up question: ${query2}`); const retrievalRequest2 = { messages: [ { role: "user", content: [ { type: "text" as const, text: query2 } ] } ], knowledgeSourceParams: [ { kind: "searchIndex" as const, knowledgeSourceName: 'earth-knowledge-source', includeReferences: true, includeReferenceSourceData: true, alwaysQuerySource: true, rerankerThreshold: 2.5 } ], includeActivity: true, retrievalReasoningEffort: { kind: "low" as const } }; const result2 = await knowledgeRetrievalClient.retrieveKnowledge(retrievalRequest2); console.log("\n📝 ANSWER:"); console.log("─".repeat(80)); if (result2.response && result2.response.length > 0) { result2.response.forEach((msg) => { if (msg.content && msg.content.length > 0) { msg.content.forEach((content) => { if (content.type === "text" && 'text' in content) { console.log(content.text); } }); } }); } console.log("─".repeat(80)); if (result2.activity) { console.log("\nActivities:"); result2.activity.forEach((activity) => { console.log(`Activity Type: ${activity.type}`); console.log(JSON.stringify(activity, null, 2)); }); } if (result2.references) { console.log("\nReferences:"); result2.references.forEach((reference) => { console.log(`Reference Type: ${reference.type}`); console.log(JSON.stringify(reference, null, 2)); }); } console.log("\n✅ Quickstart completed successfully!"); // Clean up resources await searchIndexClient.deleteKnowledgeBase('earth-knowledge-base'); await searchIndexClient.deleteKnowledgeSource('earth-knowledge-source'); await searchIndexClient.deleteIndex('earth_at_night'); console.log(`\n🗑️ Cleaned up resources.`);Creare un file denominato e quindi incollare il codice JSON seguente per ECMAScript nel file.
{ "compilerOptions": { "target": "ES2022", "module": "ES2022", "lib": ["ES2022", "DOM"], "moduleResolution": "node", "types": ["node"], "outDir": "./dist", "rootDir": "./", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "resolveJsonModule": true, "declaration": true, "declarationMap": true, "sourceMap": true }, "include": ["*.ts"], "exclude": ["node_modules", "dist"] }Transpile il codice da TypeScript a JavaScript.
npx tscCompilare ed eseguire l'applicazione.
node --env-file ./.env dist/index.js
Risultato
L'output dell'applicazione dovrebbe essere simile al seguente:
Waiting for indexing to complete...
Expected documents: 194
Current indexed count: 194
✓ All 194 documents indexed successfully!
✅ Knowledge source 'earth-knowledge-source' created successfully.
✅ Knowledge base 'earth-knowledge-base' created successfully.
📝 ANSWER:
────────────────────────────────────────────────────────────────────────────────
Suburban belts show larger December brightening (20–50% increases) because residential holiday lighting and seasonal decorations are concentrated there, so relative (fractional) increases over the baseline are bigger even though absolute downtown radiances remain higher; urban cores already emit strong baseline light while many suburbs add a large seasonal increment visible in VIIRS DNB observations [ref_id:0][ref_id:1]. The Phoenix street grid appears sharply from space because continuous, street‑oriented lighting with regular residential lot spacing and little vegetative masking produces strong, linear emissions, whereas long interstate stretches between Midwestern cities have sparser, access‑limited lighting, fewer adjacent developments and more shielded fixtures so they register comparatively dim on night‑light sensors like VIIRS/DNB [ref_id:0][ref_id:1].
────────────────────────────────────────────────────────────────────────────────
Activities:
Activity Type: modelQueryPlanning
{
"id": 0,
"type": "modelQueryPlanning",
"elapsedMs": 5883,
"inputTokens": 1489,
"outputTokens": 326
}
Activity Type: searchIndex
{
"id": 1,
"type": "searchIndex",
"elapsedMs": 527,
"knowledgeSourceName": "earth-knowledge-source",
"queryTime": "2025-12-19T15:38:23.462Z",
"count": 1,
"searchIndexArguments": {
"search": "December brightening suburban belts vs urban cores light pollution causes December increase in night lights suburban vs urban",
"filter": null,
"sourceDataFields": [
{
"name": "page_chunk"
},
{
"name": "id"
},
{
"name": "page_number"
}
],
"searchFields": [],
"semanticConfigurationName": "semantic_config"
}
}
... // Trimmed for brevity
Activity Type: agenticReasoning
{
"id": 4,
"type": "agenticReasoning",
"reasoningTokens": 70397,
"retrievalReasoningEffort": {
"kind": "low"
}
}
Activity Type: modelAnswerSynthesis
{
"id": 5,
"type": "modelAnswerSynthesis",
"elapsedMs": 4908,
"inputTokens": 4013,
"outputTokens": 187
}
References:
Reference Type: searchIndex
{
"type": "searchIndex",
"id": "0",
"activitySource": 3,
"sourceData": {
"id": "earth_at_night_508_page_174_verbalized",
"page_chunk": "<!-- PageHeader=\"Holiday Lights\" -->\n\n## Holiday Lights\n\n### Bursting with Holiday Energy-United States\n\nNASA researchers found that nighttime lights in the United States shine 20 to 50 percent brighter in December due to holiday light displays and other activities during Christmas and New Year's when compared to light output during the rest of the year.\n\nThe next five maps (see also pages 161-163), created using data from the VIIRS DNB on the Suomi NPP satellite, show changes in lighting intensity and location around many major cities, comparing the nighttime light signals from December 2012 and beyond.\n\n---\n\n#### Figure 1. Location Overview\n\nA map of the western hemisphere with a marker indicating the mid-Atlantic region of the eastern United States, where the study of holiday lighting intensity was focused.\n\n---\n\n#### Figure 2. Holiday Lighting Intensity: Mid-Atlantic United States (2012–2014)\n\nA map showing Maryland, New Jersey, Delaware, Virginia, West Virginia, Ohio, Kentucky, Tennessee, North Carolina, South Carolina, and surrounding areas. Major cities labeled include Washington, D.C., Richmond, Norfolk, and Raleigh.\n\nThe map uses colors to indicate changes in holiday nighttime lighting intensity between 2012 and 2014:\n\n- **Green/bright areas**: More holiday lighting (areas shining 20–50% brighter in December).\n- **Yellow areas**: No change in lighting.\n- **Dim/grey areas**: Less holiday lighting.\n\nKey observations from the map:\n\n- The Washington, D.C. metropolitan area shows significant increases in lighting during the holidays, extending into Maryland and Virginia.\n- Urban centers such as Richmond (Virginia), Norfolk (Virginia), Raleigh (North Carolina), and clusters in Tennessee and South Carolina also experience notable increases in light intensity during December.\n- Rural areas and the interiors of West Virginia, Kentucky, and North Carolina show little change or less holiday lighting, corresponding to population density and urbanization.\n\n**Legend:**\n\n| Holiday Lighting Change | Color on Map |\n|------------------------|---------------|\n| More | Green/bright |\n| No Change | Yellow |\n| Less | Dim/grey |\n\n_The scale bar indicates a distance of 100 km for reference._\n\n---\n\n<!-- PageFooter=\"158 Earth at Night\" -->",
"page_number": 174
},
"rerankerScore": 2.6692379,
"docKey": "earth_at_night_508_page_174_verbalized"
}
... // Trimmed for brevity
❓ Follow-up question: How do I find lava at night?
📝 ANSWER:
────────────────────────────────────────────────────────────────────────────────
... // Trimmed for brevity
────────────────────────────────────────────────────────────────────────────────
Activities:
... // Trimmed for brevity
References:
... // Trimmed for brevity
✅ Quickstart completed successfully!
🗑️ Cleaned up resources.
Informazioni sul codice
Ora che si dispone del codice, è possibile suddividere i componenti chiave:
- Creare un indice di ricerca
- Caricare documenti nell'indice
- Creare una fonte di informazioni
- Creare una knowledge base
- Eseguire la pipeline di recupero
- Esaminare la risposta, l'attività e i riferimenti
- Continuare la conversazione
Creare un indice di ricerca
In Azure AI Search, un indice è una raccolta strutturata di dati. Il codice seguente definisce un indice denominato .
Lo schema dell'indice contiene campi per l'identificazione dei documenti e il contenuto della pagina, gli incorporamenti e i numeri. Lo schema include anche configurazioni per la classificazione semantica e la ricerca vettoriale, che usa la distribuzione per vettorizzare il testo e associare i documenti in base alla similarità semantica.
const index: SearchIndex = {
name: 'earth_at_night',
fields: [
{
name: "id",
type: "Edm.String",
key: true,
filterable: true,
sortable: true,
facetable: true
} as SearchField,
{
name: "page_chunk",
type: "Edm.String",
searchable: true,
filterable: false,
sortable: false,
facetable: false
} as SearchField,
{
name: "page_embedding_text_3_large",
type: "Collection(Edm.Single)",
searchable: true,
filterable: false,
sortable: false,
facetable: false,
vectorSearchDimensions: 3072,
vectorSearchProfileName: "hnsw_text_3_large"
} as SearchField,
{
name: "page_number",
type: "Edm.Int32",
filterable: true,
sortable: true,
facetable: true
} as SearchField
],
vectorSearch: {
profiles: [
{
name: "hnsw_text_3_large",
algorithmConfigurationName: "alg",
vectorizerName: "azure_openai_text_3_large"
} as VectorSearchProfile
],
algorithms: [
{
name: "alg",
kind: "hnsw"
} as HnswAlgorithmConfiguration
],
vectorizers: [
{
vectorizerName: "azure_openai_text_3_large",
kind: "azureOpenAI",
parameters: {
resourceUrl: process.env.AZURE_OPENAI_ENDPOINT!,
deploymentId: process.env.AZURE_OPENAI_EMBEDDING_DEPLOYMENT!,
modelName: process.env.AZURE_OPENAI_EMBEDDING_DEPLOYMENT!
} as AzureOpenAIParameters
} as AzureOpenAIVectorizer
]
} as VectorSearch,
semanticSearch: {
defaultConfigurationName: "semantic_config",
configurations: [
{
name: "semantic_config",
prioritizedFields: {
contentFields: [
{ name: "page_chunk" } as SemanticField
]
} as SemanticPrioritizedFields
} as SemanticConfiguration
]
} as SemanticSearch
};
const credential = new DefaultAzureCredential();
const searchIndexClient = new SearchIndexClient(process.env.AZURE_SEARCH_ENDPOINT!, credential);
const searchClient = new SearchClient<EarthAtNightDocument>(process.env.AZURE_SEARCH_ENDPOINT!, 'earth_at_night', credential);
await searchIndexClient.createOrUpdateIndex(index);
Reference:SearchField, VectorSearch, SemanticSearch, SearchIndex, SearchIndexClient, SearchClient, DefaultAzureCredential
Caricare documenti nell'indice
Attualmente, l'indice è vuoto. Il codice seguente popola l'indice con i documenti JSON di NASA's Earth at Night. Come richiesto da Azure AI Search, ogni documento è conforme ai campi e ai tipi di dati definiti nello schema dell'indice.
const response = await fetch("https://raw.githubusercontent.com/Azure-Samples/azure-search-sample-data/refs/heads/main/nasa-e-book/earth-at-night-json/documents.json");
if (!response.ok) {
throw new Error(`Failed to fetch documents: ${response.status} ${response.statusText}`);
}
const documents = await response.json() as any[];
const bufferedClient = new SearchIndexingBufferedSender<EarthAtNightDocument>(
searchClient,
documentKeyRetriever,
{
autoFlush: true,
},
);
await bufferedClient.uploadDocuments(documents);
await bufferedClient.flush();
await bufferedClient.dispose();
console.log(`Waiting for indexing to complete...`);
console.log(`Expected documents: ${documents.length}`);
await delay(WAIT_TIME);
let count = await searchClient.getDocumentsCount();
console.log(`Current indexed count: ${count}`);
while (count !== documents.length) {
await delay(WAIT_TIME);
count = await searchClient.getDocumentsCount();
console.log(`Current indexed count: ${count}`);
}
console.log(`✓ All ${documents.length} documents indexed successfully!`);
Reference:SearchIndexingBufferedSender
Creare una fonte di informazioni
Una fonte di conoscenza è un riferimento riutilizzabile ai dati sorgente. Il codice seguente definisce un'origine di conoscenza denominata che è destinata all'indice .
specifica i campi di indice inclusi nei riferimenti di citazione. Questo esempio include solo campi leggibili per evitare incorporamenti lunghi e non interpretabili nelle risposte.
await searchIndexClient.createKnowledgeSource({
name: 'earth-knowledge-source',
description: "Knowledge source for Earth at Night e-book content",
kind: "searchIndex",
searchIndexParameters: {
searchIndexName: 'earth_at_night',
sourceDataFields: [
{ name: "id" },
{ name: "page_number" }
]
}
});
console.log(`✅ Knowledge source 'earth-knowledge-source' created successfully.`);
Reference:SearchIndexKnowledgeSource
Creare una knowledge base
Per impostare come destinazione e la distribuzione in fase di query, è necessaria una knowledge base. Il codice seguente definisce una Knowledge Base denominata .
è impostato su , abilitando le risposte in linguaggio naturale che citano i documenti recuperati e seguono le istruzioni fornite .
await searchIndexClient.createKnowledgeBase({
name: 'earth-knowledge-base',
knowledgeSources: [
{
name: 'earth-knowledge-source'
}
],
models: [
{
kind: "azureOpenAI",
azureOpenAIParameters: {
resourceUrl: process.env.AZURE_OPENAI_ENDPOINT!,
deploymentId: process.env.AZURE_OPENAI_GPT_DEPLOYMENT!,
modelName: process.env.AZURE_OPENAI_GPT_DEPLOYMENT!
}
}
],
outputMode: "answerSynthesis" as KnowledgeRetrievalOutputMode,
answerInstructions: "Provide a two sentence concise and informative answer based on the retrieved documents."
});
console.log(`✅ Knowledge base 'earth-knowledge-base' created successfully.`);
Riferimento:KnowledgeBase
Eseguire la pipeline di recupero
Si è pronti per eseguire il recupero agentico. Il codice seguente invia una query utente in due parti a , che:
- Analizza l'intera conversazione per dedurre le informazioni necessarie all'utente.
- Scompone la query composta in sottoquery in evidenza.
- Esegue le sottoquery contemporaneamente rispetto alla fonte delle informazioni.
- Usa il ranker semantico per classificare nuovamente e filtrare i risultati.
- Sintetizza i risultati principali in una risposta in linguaggio naturale.
const knowledgeRetrievalClient = new KnowledgeRetrievalClient(
process.env.AZURE_SEARCH_ENDPOINT!,
'earth-knowledge-base',
credential
);
const query1 = `Why do suburban belts display larger December brightening than urban cores even though absolute light levels are higher downtown? Why is the Phoenix nighttime street grid is so sharply visible from space, whereas large stretches of the interstate between midwestern cities remain comparatively dim?`;
const retrievalRequest = {
messages: [
{
role: "user",
content: [
{
type: "text" as const,
text: query1
}
]
}
],
knowledgeSourceParams: [
{
kind: "searchIndex" as const,
knowledgeSourceName: 'earth-knowledge-source',
includeReferences: true,
includeReferenceSourceData: true,
alwaysQuerySource: true,
rerankerThreshold: 2.5
}
],
includeActivity: true,
retrievalReasoningEffort: { kind: "low" as const }
};
const result = await knowledgeRetrievalClient.retrieveKnowledge(retrievalRequest);
Riferimento: KnowledgeRetrievalClient, KnowledgeBaseRetrievalRequest
Esaminare la risposta, l'attività e i riferimenti
Il codice seguente visualizza la risposta, l'attività e i riferimenti dalla pipeline di recupero, dove:
fornisce una risposta sintetizzata generata da LLM alla query che cita i documenti recuperati. Quando la sintesi delle risposte non è abilitata, questa sezione contiene contenuto estratto direttamente dai documenti.
tiene traccia dei passaggi eseguiti durante il processo di recupero, incluse le sottoquery generate dalla distribuzione di e i token usati per la classificazione semantica, la pianificazione delle query e la sintesi delle risposte.
elenca i documenti che hanno contribuito alla risposta, ognuno identificato dal relativo .
console.log("\n📝 ANSWER:");
console.log("─".repeat(80));
if (result.response && result.response.length > 0) {
result.response.forEach((msg) => {
if (msg.content && msg.content.length > 0) {
msg.content.forEach((content) => {
if (content.type === "text" && 'text' in content) {
console.log(content.text);
}
});
}
});
}
console.log("─".repeat(80));
if (result.activity) {
console.log("\nActivities:");
result.activity.forEach((activity) => {
console.log(`Activity Type: ${activity.type}`);
console.log(JSON.stringify(activity, null, 2));
});
}
if (result.references) {
console.log("\nReferences:");
result.references.forEach((reference) => {
console.log(`Reference Type: ${reference.type}`);
console.log(JSON.stringify(reference, null, 2));
});
}
Continuare la conversazione
Il codice seguente continua la conversazione con . Dopo l'invio di questa query utente, la Knowledge Base recupera il contenuto pertinente da e aggiunge la risposta all'elenco dei messaggi.
const query2 = "How do I find lava at night?";
console.log(`\n❓ Follow-up question: ${query2}`);
const retrievalRequest2 = {
messages: [
{
role: "user",
content: [
{
type: "text" as const,
text: query2
}
]
}
],
knowledgeSourceParams: [
{
kind: "searchIndex" as const,
knowledgeSourceName: 'earth-knowledge-source',
includeReferences: true,
includeReferenceSourceData: true,
alwaysQuerySource: true,
rerankerThreshold: 2.5
}
],
includeActivity: true,
retrievalReasoningEffort: { kind: "low" as const }
};
const result2 = await knowledgeRetrievalClient.retrieveKnowledge(retrievalRequest2);
Esaminare la nuova risposta, l'attività e i riferimenti
Il codice seguente visualizza la nuova risposta, l'attività e i riferimenti dalla pipeline di recupero.
console.log("\n📝 ANSWER:");
console.log("─".repeat(80));
if (result2.response && result2.response.length > 0) {
result2.response.forEach((msg) => {
if (msg.content && msg.content.length > 0) {
msg.content.forEach((content) => {
if (content.type === "text" && 'text' in content) {
console.log(content.text);
}
});
}
});
}
console.log("─".repeat(80));
if (result2.activity) {
console.log("\nActivities:");
result2.activity.forEach((activity) => {
console.log(`Activity Type: ${activity.type}`);
console.log(JSON.stringify(activity, null, 2));
});
}
if (result2.references) {
console.log("\nReferences:");
result2.references.forEach((reference) => {
console.log(`Reference Type: ${reference.type}`);
console.log(JSON.stringify(reference, null, 2));
});
}
console.log("\n✅ Quickstart completed successfully!");
Pulire le risorse
Quando si lavora nella propria sottoscrizione, è consigliabile completare un progetto rimuovendo le risorse non più necessarie. Le risorse lasciate in esecuzione possono avere un costo.
Nel portale di Azure selezionare Tutte le risorse o Gruppi di risorse dal riquadro sinistro per trovare e gestire le risorse. È possibile eliminare le risorse singolarmente o eliminare il gruppo di risorse per rimuovere tutte le risorse contemporaneamente.
Altrimenti, il codice seguente da elimina gli oggetti che hai creato in questo quickstart.
await searchIndexClient.deleteKnowledgeBase('earth-knowledge-base');
await searchIndexClient.deleteKnowledgeSource('earth-knowledge-source');
await searchIndexClient.deleteIndex('earth_at_night');
console.log(`\n🗑️ Cleaned up resources.`);
Annotazioni
Questa funzionalità è attualmente disponibile in anteprima pubblica. Questa anteprima viene fornita senza un contratto di servizio e non è consigliata per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per ulteriori informazioni, vedere Condizioni supplementari per l'uso delle versioni di anteprima di Microsoft Azure.
In questa guida introduttiva si usa il recupero agentico per creare un'esperienza di ricerca conversazionale basata su documenti indicizzati in Azure AI Search e un modello di linguaggio di grandi dimensioni da Azure OpenAI in Modelli di Fonderia.
Una Knowledge Base orchestra il recupero agentico scomponendo query complesse in sottoquery, eseguendo le sottoquery su una o più origini di informazioni e restituendo risultati con metadati. Per impostazione predefinita, la knowledge base restituisce contenuti non elaborati dalle origini; tuttavia, questa guida introduttiva usa la modalità di output di sintesi delle risposte per la generazione di risposte in linguaggio naturale.
Anche se è possibile usare dati personalizzati, questa guida introduttiva usa i documenti JSON sample dall'e-book Earth at Night della NASA.
Suggerimento
Vuoi iniziare subito? Scaricare il codice source in GitHub.
Prerequisiti
Un account Azure con una sottoscrizione attiva. Creare un account gratuito.
Un servizio Azure AI Search, in qualsiasi area che fornisce il recupero agentico. Questo quickstart prevede il livello Basic o superiore per il supporto delle identità gestite.
Un progetto e una risorsa di Microsoft Foundry . Quando si crea un progetto, la risorsa viene creata automaticamente.
Modello di incorporamento distribuito nel progetto per la conversione da testo a vettore. È possibile usare qualsiasi modello, ad esempio .
LLM implementato nel tuo progetto per la pianificazione delle query e la generazione di risposte. È possibile usare qualsiasi LLM supportato, ad esempio .
Visual Studio Code con l'estensione client REST.
Git per clonare il repository di esempio.
interfaccia della riga di comando di Azure per l'autenticazione senza chiave con Microsoft Entra ID.
Configurare l'accesso
Prima di iniziare, assicurarsi di disporre delle autorizzazioni per accedere al contenuto e alle operazioni. Questa guida di avvio rapido usa Microsoft Entra ID per l'autenticazione e l'accesso basato su ruoli per l'autorizzazione. Per assegnare i ruoli, è necessario essere Proprietario o Amministratore dell'accesso utenti. Se i ruoli non sono fattibili, usare invece l'autenticazione basata su chiave.
Per configurare l'accesso per questo avvio rapido:
Accedere al portale Azure.
Nel servizio Azure AI Search:
Abilitare l'accesso in base al ruolo.
Creare un'identità gestita assegnata dal sistema.
Assegnare i ruoli seguenti all'account utente: Collaboratore al servizio di ricerca, Collaboratore ai dati dell'indice di ricerca e Lettore dati indice di ricerca.
Nella risorsa Microsoft Foundry, assegnare Utente di Servizi Cognitivi all'identità gestita del servizio di ricerca.
Importante
Il recupero agentico ha due modelli di fatturazione basati su token:
- Fatturazione da Azure AI Search per il recupero agentico.
- Processo di fatturazione da Azure OpenAI per la pianificazione delle query e la sintesi delle risposte.
Per altre informazioni, vedere Disponibilità e prezzi del recupero agentico.
Ottenere gli endpoint
Ogni servizio Azure AI Search e la risorsa Microsoft Foundry hanno un endpoint, ovvero un URL univoco che identifica e fornisce l'accesso di rete alla risorsa. In una sezione successiva si specificano questi endpoint per connettersi alle risorse a livello programmatico.
Per ottenere gli endpoint per questo avvio rapido:
Accedere al portale Azure.
Nel servizio Azure AI Search:
Nel riquadro sinistro selezionare Panoramica.
Copiare l'URL, che dovrebbe essere simile a .
Nella risorsa Microsoft Foundry:
Nel riquadro sinistro, selezionare Gestione risorseChiavi ed endpoint.
Copia l'URL nella scheda OpenAI, che dovrebbe essere simile a .
Configurare l'ambiente
Usare Git per clonare il repository di esempio.
git clone https://github.com/Azure-Samples/azure-search-rest-samplesPassare alla cartella di avvio rapido e aprirla in Visual Studio Code.
cd azure-search-rest-samples/Quickstart-agentic-retrieval code .Negli sostituire i valori segnaposti per e con gli URL ottenuti in Ottenere gli endpoint.
Per l'autenticazione senza chiave con Microsoft Entra ID, accedere all'account Azure. Se si hanno più sottoscrizioni, selezionare quella che contiene le risorse Azure AI Search e Microsoft Foundry.
az loginPer l'autenticazione senza chiave con Microsoft Entra ID, generare un token di accesso.
az account get-access-token --scope https://search.azure.com/.default --query accessToken --output tsvSostituire il valore segnaposto per con il token del passaggio precedente.
Eseguire il codice
Inviare ogni richiesta in sequenza, a partire da .
Ogni richiesta deve restituire un codice di stato , o . Se ricevi un errore, controlla che la richiesta non contenga errori di digitazione e assicurati che il token sia valido.
Risultato
Ogni richiesta restituisce codice JSON diverso in base all'operazione. L'output chiave viene da e dovrebbe essere simile al seguente:
{
"response": [
{
"content": [
{
"type": "text",
"text": "Causes (mechanisms) — seasonal and lighting behavior: Residential suburban areas often show larger relative (percentage) December brightening because many homes turn on more outdoor and indoor lights in winter evenings (longer nights and holiday lighting) compared with their usual baseline, producing a bigger percent increase even if absolute downtown lighting remains higher [ref_id:1][ref_id:0]. Snow and increased surface reflectance in winter amplify light seen from orbit, increasing apparent brightness especially where lights are horizontal and near ground level (e.g., suburban streets and yards) [ref_id:0].\n\nResidential vs commercial/industrial lighting and activity patterns: Urban cores have high absolute lumen outputs from continuous commercial, industrial, and dense street lighting that change less seasonally, so percent brightening is smaller; suburbs have lower baseline light but larger seasonal/holiday additions, so their relative brightening is larger [ref_id:1][ref_id:0].\n\nWhy Phoenix’s nighttime street grid is sharply visible (causes and consequences): The Phoenix metropolitan area has a regular, dense grid of north–south/east–west streets and the diagonal Grand Avenue corridor with continuous street and commercial lighting whose spacing and lumen output produce linear, high-contrast features from low-Earth orbit; bright nodes occur at major intersections and commercial properties, making the grid and corridors stand out in satellite night images [ref_id:1][ref_id:0]. Darker pockets (Phoenix Mountains, Salt River channel, agricultural fields) increase contrast and make lit streets appear sharper [ref_id:1][ref_id:0].\n\nWhy long interstates between Midwestern cities appear comparatively dim: Rural interstate stretches often lack continuous high-intensity lighting (limited lamps, wider spacing, fewer ramps and commercial nodes), use lower-output or shielded fixtures, and have long unlit segments between cities, so linear continuity and contrast are much lower than a densely lit urban grid [ref_id:1][ref_id:0].\n\nSensor and dataset effects (consequences for observed brightness): Night-light datasets and orbital sensors (as used to capture images like the Phoenix photo) emphasize linear, continuous lighting patterns; sensor behaviors such as gain and saturation make very bright urban cores register high absolute values while limiting the apparent dynamic range, so relative changes (percentage brightening) in dimmer suburban areas can appear proportionally larger in some satellite products [ref_id:1][ref_id:0].\n\nOverall: larger December brightening in suburban belts is a percentage effect from seasonal/holiday increases, snow reflectance, and residential lighting behavior on a low baseline, whereas urban cores remain brighter in absolute terms but show smaller relative changes; Phoenix’s dense, continuous street-grid lighting and contrasting dark areas create sharp linear features from space, while long, sparsely lit interstates lack that continuity and contrast and therefore appear dimmer [ref_id:1][ref_id:0]."
}
]
}
],
"activity": [
{
"type": "modelQueryPlanning",
"id": 0,
"inputTokens": 1350,
"outputTokens": 1538,
"elapsedMs": 20780
},
{
"type": "searchIndex",
"id": 1,
"knowledgeSourceName": "earth-knowledge-source",
"queryTime": "2025-11-05T19:42:09.673Z",
"count": 0,
"elapsedMs": 694,
"searchIndexArguments": {
"search": "December brightening in satellite night lights: why do suburban belts show larger December brightening than urban cores? causes: snow reflectance, holiday/residential lighting, leaf-off, VIIRS/DMSP sensor saturation",
"filter": null
}
},
{
"type": "searchIndex",
"id": 2,
"knowledgeSourceName": "earth-knowledge-source",
"queryTime": "2025-11-05T19:42:09.999Z",
"count": 2,
"elapsedMs": 325,
"searchIndexArguments": {
"search": "Why is the Phoenix nighttime street grid so sharply visible from space while long stretches of interstate between Midwestern cities remain comparatively dim? factors: streetlight spacing, lighting type/shielding, vegetation/tree cover, land use, VIIRS DNB detection",
"filter": null
}
},
{
"type": "agenticReasoning",
"id": 3,
"retrievalReasoningEffort": {
"kind": "low"
},
"reasoningTokens": 1566
},
{
"type": "modelAnswerSynthesis",
"id": 4,
"inputTokens": 3656,
"outputTokens": 1909,
"elapsedMs": 21988
}
],
"references": [
{
"type": "searchIndex",
"id": "0",
"activitySource": 2,
"sourceData": {
"id": "earth_at_night_508_page_104_verbalized",
"page_chunk": "<!-- PageHeader=\"Urban Structure\" -->\n\n### Location of Phoenix, Arizona\n\nThe image depicts a globe highlighting the location of Phoenix, Arizona, in the southwestern United States, marked with a blue pinpoint on the map of North America. Phoenix is situated in the central part of Arizona, which is in the southwestern region of the United States.\n\n---\n\n### Grid of City Blocks-Phoenix, Arizona\n\nLike many large urban areas of the central and western United States, the Phoenix metropolitan area is laid out along a regular grid of city blocks and streets. While visible during the day, this grid is most evident at night, when the pattern of street lighting is clearly visible from the low-Earth-orbit vantage point of the ISS.\n\nThis astronaut photograph, taken on March 16, 2013, includes parts of several cities in the metropolitan area, including Phoenix (image right), Glendale (center), and Peoria (left). While the major street grid is oriented north-south, the northwest-southeast oriented Grand Avenue cuts across the three cities at image center. Grand Avenue is a major transportation corridor through the western metropolitan area; the lighting patterns of large industrial and commercial properties are visible along its length. Other brightly lit properties include large shopping centers, strip malls, and gas stations, which tend to be located at the intersections of north-south and east-west trending streets.\n\nThe urban grid encourages growth outwards along a city's borders by providing optimal access to new real estate. Fueled by the adoption of widespread personal automobile use during the twentieth century, the Phoenix metropolitan area today includes 25 other municipalities (many of them largely suburban and residential) linked by a network of surface streets and freeways.\n\nWhile much of the land area highlighted in this image is urbanized, there are several noticeably dark areas. The Phoenix Mountains are largely public parks and recreational land. To the west, agricultural fields provide a sharp contrast to the lit streets of residential developments. The Salt River channel appears as a dark ribbon within the urban grid.\n\n\n<!-- PageFooter=\"Earth at Night\" -->\n<!-- PageNumber=\"88\" -->",
"page_number": 104
},
"rerankerScore": 2.6394622,
"docKey": "earth_at_night_508_page_104_verbalized"
},
{
"type": "searchIndex",
"id": "1",
"activitySource": 2,
"sourceData": {
"id": "earth_at_night_508_page_105_verbalized",
"page_chunk": "# Urban Structure\n\n## March 16, 2013\n\n### Phoenix Metropolitan Area at Night\n\nThis figure presents a nighttime satellite view of the Phoenix metropolitan area, highlighting urban structure and transport corridors. City lights illuminate the layout of several cities and major thoroughfares.\n\n**Labeled Urban Features:**\n\n- **Phoenix:** Central and brightest area in the right-center of the image.\n- **Glendale:** Located to the west of Phoenix, this city is also brightly lit.\n- **Peoria:** Further northwest, this area is labeled and its illuminated grid is seen.\n- **Grand Avenue:** Clearly visible as a diagonal, brightly lit thoroughfare running from Phoenix through Glendale and Peoria.\n- **Salt River Channel:** Identified in the southeast portion, running through illuminated sections.\n- **Phoenix Mountains:** Dark, undeveloped region to the northeast of Phoenix.\n- **Agricultural Fields:** Southwestern corner of the image, grid patterns are visible but with much less illumination, indicating agricultural land use.\n\n**Additional Notes:**\n\n- The overall pattern shows a grid-like urban development typical of western U.S. cities, with scattered bright nodes at major intersections or city centers.\n- There is a clear transition from dense urban development to sparsely populated or agricultural land, particularly evident towards the bottom and left of the image.\n- The illuminated areas follow the existing road and street grids, showcasing the extensive spread of the metropolitan area.\n\n**Figure Description:** \nA satellite nighttime image captured on March 16, 2013, showing Phoenix and surrounding areas (including Glendale and Peoria). Major landscape and infrastructural features, such as the Phoenix Mountains, Grand Avenue, the Salt River Channel, and agricultural fields, are labeled. The image reveals the extent of urbanization and the characteristic street grid illuminated by city lights.\n\n---\n\nPage 89",
"page_number": 105
},
"rerankerScore": 2.565024,
"docKey": "earth_at_night_508_page_105_verbalized"
}
]
}
Informazioni sul codice
Annotazioni
I frammenti di codice in questa sezione potrebbero essere stati modificati per la leggibilità. Per un esempio funzionante completo, vedere il codice sorgente.
Dopo aver eseguito il codice, è possibile suddividere i passaggi principali:
- Creare un indice di ricerca
- Caricare documenti nell'indice
- Creare una fonte di informazioni
- Creare una knowledge base
- Eseguire la pipeline di recupero
Creare un indice di ricerca
In Azure AI Search, un indice è una raccolta strutturata di dati. Il codice seguente definisce un indice denominato .
Lo schema dell'indice contiene campi per l'identificazione dei documenti e il contenuto della pagina, gli incorporamenti e i numeri. Lo schema include anche configurazioni per la classificazione semantica e la ricerca vettoriale, che usa la distribuzione per vettorizzare il testo e associare i documenti in base alla similarità semantica.
### Create an index
PUT {{search-url}}/indexes/{{index-name}}?api-version={{api-version}} HTTP/1.1
Content-Type: application/json
Authorization: Bearer {{token}}
{
"name": "{{index-name}}",
"fields": [
{
"name": "id",
"type": "Edm.String",
"key": true
},
{
"name": "page_chunk",
"type": "Edm.String",
"searchable": true
},
{
"name": "page_embedding_text_3_large",
"type": "Collection(Edm.Single)",
"stored": false,
"dimensions": 3072,
"vectorSearchProfile": "hnsw_text_3_large"
},
{
"name": "page_number",
"type": "Edm.Int32",
"filterable": true
}
],
"semantic": {
"defaultConfiguration": "semantic_config",
"configurations": [
{
"name": "semantic_config",
"prioritizedFields": {
"prioritizedContentFields": [
{
"fieldName": "page_chunk"
}
]
}
}
]
},
"vectorSearch": {
"profiles": [
{
"name": "hnsw_text_3_large",
"algorithm": "alg",
"vectorizer": "azure_openai_text_3_large"
}
],
"algorithms": [
{
"name": "alg",
"kind": "hnsw"
}
],
"vectorizers": [
{
"name": "azure_openai_text_3_large",
"kind": "azureOpenAI",
"azureOpenAIParameters": {
"resourceUri": "{{aoai-url}}",
"deploymentId": "{{aoai-embedding-deployment}}",
"modelName": "{{aoai-embedding-model}}"
}
}
]
}
}
Riferimento:Indici - Creazione
Caricare documenti nell'indice
Attualmente, l'indice è vuoto. Il codice seguente popola l'indice con i documenti JSON dell'e-book Earth at Night della NASA. Come richiesto da Azure AI Search, ogni documento è conforme ai campi e ai tipi di dati definiti nello schema dell'indice.
### Upload documents
POST {{search-url}}/indexes/{{index-name}}/docs/index?api-version={{api-version}} HTTP/1.1
Content-Type: application/json
Authorization: Bearer {{token}}
{
"value": [
{
"@search.action": "upload",
"id": "earth_at_night_508_page_104_verbalized",
"page_chunk": "<!-- PageHeader=\"Urban Structure\" -->\n\n### Location of Phoenix, Arizona\n\nThe image depicts a globe highlighting the location of Phoenix, Arizona, in the southwestern United States, marked with a blue pinpoint on the map of North America. Phoenix is situated in the central part of Arizona, which is in the southwestern region of the United States.\n\n---\n\n### Grid of City Blocks-Phoenix, Arizona\n\nLike many large urban areas of the central and western United States, the Phoenix metropolitan area is laid out along a regular grid of city blocks and streets. While visible during the day, this grid is most evident at night, when the pattern of street lighting is clearly visible from the low-Earth-orbit vantage point of the ISS.\n\nThis astronaut photograph, taken on March 16, 2013, includes parts of several cities in the metropolitan area, including Phoenix (image right), Glendale (center), and Peoria (left). While the major street grid is oriented north-south, the northwest-southeast oriented Grand Avenue cuts across the three cities at image center. Grand Avenue is a major transportation corridor through the western metropolitan area; the lighting patterns of large industrial and commercial properties are visible along its length. Other brightly lit properties include large shopping centers, strip malls, and gas stations, which tend to be located at the intersections of north-south and east-west trending streets.\n\nThe urban grid encourages growth outwards along a city's borders by providing optimal access to new real estate. Fueled by the adoption of widespread personal automobile use during the twentieth century, the Phoenix metropolitan area today includes 25 other municipalities (many of them largely suburban and residential) linked by a network of surface streets and freeways.\n\nWhile much of the land area highlighted in this image is urbanized, there are several noticeably dark areas. The Phoenix Mountains are largely public parks and recreational land. To the west, agricultural fields provide a sharp contrast to the lit streets of residential developments. The Salt River channel appears as a dark ribbon within the urban grid.\n\n\n<!-- PageFooter=\"Earth at Night\" -->\n<!-- PageNumber=\"88\" -->",
"page_embedding_text_3_large": [
-0.002984904684126377, 0.0007500237552449107, -0.004803949501365423, 0.010587676428258419, -0.008392670191824436, -0.043565936386585236, 0.05432070791721344, 0.024532422423362732, -0.03305421024560928, -0.011362385004758835, 0.0029678153805434704, 0.0520421527326107, 0.019276559352874756, -0.05398651957511902, -0.025550175458192825, 0.018592992797493935, -0.02951485849916935, 0.036365706473588943, -0.02734263800084591, 0.028664197772741318, 0.027874300256371498, 0.008255957625806332, -0.05046235769987106, 0.01759042963385582, -0.003096933476626873, 0.03682141751050949, -0.002149434993043542, 0.009190164506435394, 0.0026716035790741444, -0.0031633912585675716, -0.014354884624481201, 0.004758378490805626, 0.01637520082294941, -0.010299060493707657, 0.004705212078988552, 0.016587866470217705, 0.0440824069082737, 0.019033513963222504, 0.039130352437496185, 0.04028481990098953, 0.018760086968541145, -0.05720687285065651, 0.030608562752604485, 0.010526915080845356, 0.020431026816368103, -0.04772809147834778, 0.03262887895107269, -0.02760087326169014, 0.03305421024560928, 0.009068641811609268, -0.003104528645053506, -0.035727713257074356, -0.04490268602967262, -0.039403777569532394, 0.026491977274417877, 0.01214468851685524, 0.037732839584350586, 0.08652425557374954, 0.005525491200387478, -0.0031994683668017387, 0.04684705287218094, 0.02872495912015438, 0.010481344535946846, 0.024076711386442184, 0.015813158825039864, 0.023180481046438217, -0.015949871391057968, 0.014749834313988686, -0.0006285008857958019, 0.0005739105399698019, 0.007192632649093866, 0.05787524953484535, 0.0043748221360147, 0.00038687934284098446, 0.04110509902238846, -0.0028273046482354403, 0.01397512573748827, -0.009106617420911789, -0.00770910456776619, -0.015304281376302242, 0.002582360291853547, -0.01092945970594883, -0.008552169427275658, 0.06665527075529099, 0.04657362401485443, -0.012197853997349739, -0.028861673548817635, -0.08925852179527283, -0.003831766778603196, 0.056538499891757965, -0.023453906178474426, -0.03083641827106476, -0.022223487496376038, -0.010253489017486572, 0.010807937011122704, 0.00313301058486104, 0.033904869109392166, -0.010116775520145893, 0.01742333546280861, 0.02594512514770031, -0.007777461316436529, -0.0002520649286452681, 0.005202696193009615, -0.02594512514770031, 0.010648438706994057, -0.01740814559161663, 0.0031254154164344072, -0.007542010862380266, 0.026142599061131477, 0.01731700450181961, 0.013504224829375744, -0.036183424293994904, -0.006357163190841675, -0.010428178124129772, -0.061338648200035095, 0.005457134917378426, 0.05316624045372009, 0.007861007936298847, 0.04311022534966469, 0.03867464140057564, -0.0021570303943008184, 0.016496725380420685, 0.05246748402714729, 0.007200228050351143, -0.003930503968149424, 0.007785056717693806, 0.017484096810221672, -0.003875439055263996, -0.0031538973562419415, 0.03180859982967377, -0.02497294172644615, 0.03627456724643707, 0.02533750981092453, 0.008385075256228447, -0.007298965007066727, 0.009866135194897652, -0.030168043449521065, 0.02594512514770031, 0.026233742013573647, 0.02079559490084648, -0.03396563231945038, -0.012607993558049202, -0.016162537038326263, -0.03378334641456604, -0.020582929253578186, -0.013846008107066154, 0.010215513408184052, 0.03317573294043541, 0.015706826001405716, -0.015296686440706253, 0.008491408079862595, 0.014727048575878143, 0.021828539669513702, 0.009942086413502693, -0.014096648432314396, -0.00913699809461832, -0.014354884624481201, 0.01672457903623581, -0.06118674576282501, 0.009212949313223362, 0.029970569536089897, -0.016572676599025726, 0.013071299530565739, -0.015828348696231842, 0.0012218741467222571, -0.04663438722491264, 0.01722586154937744, -0.02793506160378456, -0.035909995436668396, 0.007386309560388327, 0.04283680021762848, -0.051252253353595734, -0.036608751863241196, 0.006281211506575346, 0.029043957591056824, -0.022405771538615227, 0.011878857389092445, -0.0073141553439199924, -0.028785720467567444, -0.009904110804200172, -0.023013386875391006, -0.03527200222015381, 0.019534794613718987, -0.005905250087380409, -0.020491788163781166, 0.00045927087194286287, 0.0038450583815574646, -0.013435868546366692, 0.03840121626853943, -0.0059508210979402065, -0.023453906178474426, 0.004492547363042831, 0.05404727905988693, -0.01075477059930563, 0.04760656878352165, -0.04028481990098953, 0.03411753475666046, -0.008878761902451515, -0.02558055706322193, -0.013785246759653091, -0.010071204975247383, -0.01092945970594883, -0.04396088421344757, 0.017909428104758263, 0.03317573294043541, 0.03742903098464012, 0.02349947765469551, -0.013557391241192818, -0.004367226734757423, 0.03970758616924286, -0.002141839824616909, -0.032780785113573074, -0.008324313908815384, -0.025702079758048058, -0.02767682448029518, 0.02166144549846649, 0.03369220718741417, -0.043839361518621445, 0.011871261522173882, -0.024608373641967773, 0.015296686440706253, 0.02942371554672718, -0.015737207606434822, 0.017620811238884926, -0.01663343794643879, -0.03126174956560135, -0.02532231993973255, 0.018334757536649704, -0.04927751049399376, -0.03894806653261185, -0.02002088725566864, -0.025140035897493362, 0.016056204214692116, 0.02898319624364376, 0.029271813109517097, 0.020567739382386208, -0.006436912342905998, 0.022603247314691544, -0.023712143301963806, -0.004386214539408684, 0.030243994668126106, 0.0013244090368971229, -0.019276559352874756, -0.017043577507138252, 0.06234121322631836, -0.01757523976266384, -0.02829962968826294, 0.027099592611193657, 0.02088673785328865, 0.030168043449521065, 0.01005601417273283, -0.01537263859063387, 0.015737207606434822, 0.027904679998755455, 0.05744991824030876, -0.002301338594406843, -0.0022975411266088486, 0.004716604948043823, -0.0006194816087372601, 0.01985379308462143, -0.0403759628534317, 0.03612266108393669, 0.003028576960787177, 0.022694388404488564, 0.014218171127140522, 0.006710338871926069, -0.0023374157026410103, 0.0069951582700014114, 0.011202885769307613, -0.023195670917630196, 0.029742714017629623, -0.057753726840019226, 0.025747649371623993, -0.024000760167837143, 0.015395424328744411, -0.0019073388539254665, 0.019899364560842514, -0.009987657889723778, 0.004492547363042831, -0.018137283623218536, -0.002177916932851076, 0.004283679649233818, 0.03211240842938423, -0.03039589896798134, -0.04830532521009445, 0.037034083157777786, -0.016208108514547348, -0.018349947407841682, -0.010716794990003109, -0.0410747192800045, -0.022846292704343796, -0.08069115877151489, -0.008126839064061642, 0.024532422423362732, 0.03244659677147865, -0.010663628578186035, 0.01184847578406334, -0.05781448632478714, -0.04894332215189934, 0.002551979385316372, -0.008635716512799263, 0.028573056682944298, -0.06471090763807297, 0.033206112682819366, 0.0027589481323957443, 0.0271755438297987, -0.03211240842938423, 0.026598310098052025, -0.04472040385007858, -0.0648931935429573, -0.0012171270791441202, -0.012288996949791908, 0.0015370739856734872, -0.019200608134269714, -0.002876673359423876, 0.011954808607697487, 0.03196050599217415, -0.005316623952239752, -0.011932022869586945, -0.02916548028588295, 0.025534985587000847, -0.044446974992752075, -0.016344821080565453, 0.0257780309766531, -0.02141840010881424, 0.01109655387699604, 0.0007789803203195333, -0.022238679230213165, 0.0008444887353107333, -0.036791037768125534, -0.03806702792644501, 0.008347099646925926, 0.0020070255268365145, -0.021114591509103775, 0.05814867466688156, -0.028512295335531235, 0.031140226870775223, 0.03402639180421829, -0.0044887494295835495, 0.030517421662807465, 0.02401595003902912, -0.018000569194555283, -0.02106902189552784, -0.009676255285739899, 0.02673502266407013, -0.03305421024560928, 0.004750783089548349, 0.03314535319805145, -0.024274185299873352, -0.0007766068447381258, 0.0010823127813637257, 0.016177726909518242, -0.000631823786534369, -0.026507167145609856, 0.025200797244906425, 0.016162537038326263, -0.03621380403637886, -0.015813158825039864, 0.032598499208688736, -0.024775467813014984, 0.03305421024560928, -0.03387448936700821, -0.031565554440021515, 0.006262223701924086, -0.0447811633348465, 0.03232507407665253, -0.014878951944410801, 0.0027342636603862047, 0.005290040746331215, 0.020825974643230438, -0.0506446398794651, 0.030335137620568275, -0.04447735846042633, -0.013299155049026012, -0.01180290523916483, -0.022512104362249374, 0.003322890028357506, -0.004298869986087084, -0.008643311448395252, -0.003376056207343936, -0.0018057533307000995, 0.07036171853542328, 0.03445172309875488, -0.010640842840075493, 0.04554068297147751, 0.045662205666303635, -0.003444412723183632, -0.02305895835161209, 0.018395518884062767, 0.011939618736505508, -0.021175352856516838, -0.03445172309875488, 0.021874109283089638, -0.03867464140057564, 0.0188968013972044, -0.014408051036298275, -0.0021646255627274513, 0.006604006513953209, 0.03663913533091545, 0.022755149751901627, 0.00563562149181962, 0.05122187361121178, 0.0026165384333580732, 0.042624134570360184, -0.016056204214692116, 0.06070065498352051, 0.02384885586798191, -0.04630019888281822, 0.0049976264126598835, -0.038340453058481216, -0.014742238447070122, -0.0049368650652468204, -0.002063989406451583, -0.01803095079958439, -0.009342067874968052, 0.019534794613718987, -0.019868982955813408, 0.023742523044347763, 0.0024361531250178814, -0.006436912342905998, 0.005582455080002546, 0.0036969524808228016, -0.0536523312330246, 0.03132250905036926, -0.0433836504817009, -0.0010073103476315737, 0.012623184360563755, 0.0250792745500803, -0.01018513273447752, 0.017043577507138252, 0.0026279313024133444, -0.011962403543293476, -0.006569828372448683, 0.03332763537764549, -0.03091237135231495, 0.0039039209950715303, 0.014643501490354538, 0.010511725209653378, 0.013481439091265202, -0.03855311870574951, -0.022618437185883522, 0.03882654383778572, -0.010785151273012161, -0.024745086207985878, -0.01646634377539158, 0.05407766252756119, -0.003926706500351429, 0.01502326037734747, 0.03265926241874695, -0.034968193620443344, -0.037489794194698334, 0.04219880327582359, -0.031474415212869644, -0.0060381656512618065, 0.017043577507138252, -0.013921959325671196, -0.018395518884062767, -0.009061045944690704, 0.015486566349864006, -0.02646159753203392, 0.033114973455667496, -0.02116016298532486, 0.005882464814931154, -0.0690857321023941, 0.007568594068288803, -0.003814677707850933, -0.010823126882314682, 0.02915029041469097, 0.012600398622453213, -0.021372828632593155, 0.029408525675535202, 0.014590335078537464, -0.013390297070145607, 0.062280453741550446, -0.011180100962519646, 0.014438431710004807, -0.01636001095175743, -0.033388398587703705, 0.03888730704784393, -0.02839077264070511, -0.039312634617090225, 0.035120099782943726, 0.026051457971334457, -0.01792461797595024, 0.011742143891751766, 0.02456280216574669, 0.0014563752338290215, 0.0029070540331304073, -0.035818856209516525, 0.0275249220430851, 0.041317764669656754, 0.004484951961785555, 0.005028007086366415, -0.01323839370161295, 0.0003873540263157338, 0.01275230199098587, -0.04572296515107155, -8.188550418708473e-05, -0.008278743363916874, 0.0322035513818264, -0.05887781083583832, 0.01584353856742382, -0.014240956865251064, 0.0069951582700014114, -0.01022310834378004, 0.006417924538254738, 0.01923098787665367, 0.00792176928371191, -0.01127124298363924, -0.010777556337416172, 0.02018798142671585, -0.009744612500071526, -0.006653374992311001, -0.01602582447230816, 0.01602582447230816, -0.02673502266407013, 0.011514288373291492, 0.004579891916364431, 0.020415835082530975, -0.012995348311960697, -0.0016813823021948338, -0.009805373847484589, -0.00036077090771868825, -0.01827399618923664, 0.0027969239745289087, 0.003070350270718336, 0.01828918606042862, -0.013648533262312412, 0.003320991061627865, -0.009539542719721794, -0.02699325978755951, 0.03603151813149452, 0.026355264708399773, -0.019382892176508904, 0.021570302546024323, -0.008316718973219395, -0.024669134989380836, 0.01271432638168335, 0.039130352437496185, -0.005605240818113089, -0.03551504760980606, 0.0018370834877714515, 0.0001732649834593758, 0.025702079758048058, 0.010352225974202156, 0.018258806318044662, -0.008461027406156063, -0.002624133601784706, 0.008400266058743, 0.0012892812956124544, -0.005757144186645746, -0.005077376030385494, -0.0036342921666800976, 0.010443368926644325, -0.013830817304551601, -0.031292129307985306, 0.006797683425247669, 0.00988132506608963, -0.016663817688822746, 0.026598310098052025, -0.002910851500928402, -0.016496725380420685, -0.01913984678685665, -0.01593468151986599, -0.017438527196645737, -0.007093895226716995, -0.027874300256371498, 0.028405962511897087, 0.0023583024740219116, 0.02081078477203846, -0.01214468851685524, -0.008134434930980206, 0.023985568434000015, 0.02281591109931469, 0.018395518884062767, 0.019079085439443588, -0.020066456869244576, -0.050614260137081146, -0.012091522105038166, -0.006638184655457735, -0.0011829488212242723, 0.007397702429443598, 0.01698281615972519, -0.0028197094798088074, 0.0017298015300184488, -0.020506978034973145, 0.004435583483427763, 0.0005658406880684197, 0.009919301606714725, 0.012349758297204971, 0.030365517362952232, 0.026233742013573647, 0.04630019888281822, 0.03414791449904442, 0.011347194202244282, 0.029028765857219696, -0.0015256812330335379, 0.0027494539972394705, 0.0026962878182530403, -0.02627931348979473, 0.026005886495113373, 0.02027912251651287, 0.011248457245528698, -0.02561093680560589, 0.008278743363916874, 0.016253678128123283, 0.07868603616952896, -0.001408905372954905, 0.03284154459834099, -0.004644450731575489, -0.011164910160005093, -0.011233266443014145, 0.024577993899583817, -0.02395518869161606, 0.013846008107066154, -0.03505933657288551, -0.004386214539408684, 0.028861673548817635, 0.013982720673084259, -0.05587012320756912, 0.01092945970594883, -0.009911705739796162, 0.01775752380490303, -0.00600398750975728, -0.035484667867422104, -0.0010338934371247888, 0.00200322805903852, 0.020127220079302788, -0.01231937762349844, -0.055930882692337036, 0.015038450248539448, -0.02673502266407013, 0.008992689661681652, -0.05103959143161774, 0.008719263598322868, -0.008514193817973137, -0.013709294609725475, 0.00500522181391716, -0.01453716866672039, -0.045297637581825256, -0.013040918856859207, 0.0412873812019825, 0.009463590569794178, -0.02254248596727848, 0.0054685273207724094, 0.007697712164372206, -0.012425709515810013, -0.02732744626700878, 0.023286812007427216, 0.022922243922948837, -0.0006603057263419032, 0.004731795284897089, 0.0024855216033756733, -0.003024779260158539, 0.01537263859063387, -0.03091237135231495, -0.012045950628817081, -0.021266495808959007, -0.024836229160428047, -0.03755055367946625, -0.017620811238884926, 0.027843918651342392, 0.0030399695970118046, -0.014127029106020927, 0.017803095281124115, 0.010595272295176983, -0.005001423880457878, 0.005407765973359346, 0.024274185299873352, 0.0004153612535446882, 0.012395328842103481, 0.015456185676157475, 0.032082028687000275, 0.008331908844411373, 0.024866608902812004, -0.033479541540145874, 0.008916737511754036, 0.008947118185460567, -0.006923004053533077, 0.011947213672101498, 0.015220735222101212, 0.009326877072453499, 0.013686508871614933, -0.02594512514770031, 0.007234406191855669, -0.013504224829375744, 0.038613881915807724, -0.014544764533638954, 0.03244659677147865, -0.0011525681475177407, -0.01838032901287079, -0.020856356248259544, -0.014954904094338417, 0.0023222253657877445, -0.009425614960491657, 0.01035982184112072, -0.006714136339724064, -0.0026279313024133444, 0.01626886986196041, -0.02037026546895504, -0.015949871391057968, -0.022314630448818207, 0.014430836774408817, -0.00010496772301848978, -0.018562613055109978, 0.04137852415442467, -0.012175069190561771, 0.010268679820001125, -0.028330011293292046, -0.0020241145975887775, 0.003621000563725829, -0.004329251125454903, -0.005065983161330223, 0.034087155014276505, -7.624845602549613e-05, -0.009326877072453499, -0.04611791670322418, -0.0033817526418715715, -0.007936960086226463, -0.0006455900729633868, 0.012137092649936676, -0.00012140415492467582, -0.03183898329734802, -0.01626886986196041, -0.011407955549657345, -0.02899838611483574, -0.01838032901287079, -0.007219215855002403, -4.57490750704892e-05, 0.004815342370420694, -0.022329820320010185, -0.009653470478951931, 0.016846103593707085, -0.005700180307030678, -0.008559764362871647, -0.020431026816368103, -0.019291749224066734, 0.009714231826364994, -0.0012645969400182366, -0.020142409950494766, -0.002806417876854539, -0.01898794248700142, 0.026233742013573647, -0.02134244702756405, -0.010435773059725761, 0.040163297206163406, 0.01838032901287079, -0.0038716415874660015, -0.006736922077834606, 0.007219215855002403, 0.0035735308192670345, -0.02489699050784111, -0.0037842970341444016, -0.034087155014276505, 0.008536978624761105, 0.009592708200216293, -0.0002598974679131061, -0.03039589896798134, -0.0035811259876936674, 0.01219025906175375, 0.004606474656611681, 0.01323079876601696, -0.03998101130127907, 0.04469002038240433, -0.010769961401820183, 0.0019633532501757145, -0.0002748504630289972, 0.004454571288079023, 0.02664388157427311, -0.0019177822396159172, 0.012387733906507492, 0.0025671699550002813, -0.023013386875391006, -0.020598120987415314, -0.005992594640702009, 0.0157523974776268, 0.0038203741423785686, 0.013671319000422955, -0.005859679076820612, -0.013678913936018944, -0.004496344830840826, -0.021722206845879555, -0.0014782113721594214, 0.004564701579511166, 0.006919206120073795, -0.03250735625624657, 0.039555683732032776, -0.026188170537352562, -0.06938953697681427, 0.007678723894059658, 0.02097787894308567, 0.010975031182169914, -0.0006498623406514525, -0.027813538908958435, 0.011749738827347755, -0.010207917541265488, 0.01358777191489935, -0.007576189003884792, -0.009630684740841389, 0.012782682664692402, 0.044811543077230453, 0.010131966322660446, 0.003269723616540432, 0.009402829222381115, -0.012600398622453213, -0.03518085926771164, 0.015205544419586658, -0.014757429249584675, 0.01705876737833023, 0.014240956865251064, 0.022952625527977943, -0.004268489312380552, -0.001107946503907442, 0.03755055367946625, -0.016603056341409683, 0.0009769296739250422, -0.010542105883359909, 0.028603436425328255, 0.011149720288813114, -0.01792461797595024, -0.009197759442031384, 0.02412228286266327, 0.00500522181391716, 0.0014297920279204845, -0.004929270129650831, -0.015691636130213737, -0.011461121961474419, -0.015691636130213737, 0.012068736366927624, 0.007185037713497877, -0.0030304756946861744, 0.014476407319307327, 0.0034159307833760977, 0.05626507103443146, 0.0014782113721594214, 0.025793220847845078, -0.008833191357553005, 0.029271813109517097, -0.012630779296159744, 0.013291560113430023, 0.020005695521831512, 0.010853508487343788, 0.027221115306019783, -0.019079085439443588, 0.015858730301260948, 0.019276559352874756, -0.0007253393996506929, -0.011468717828392982, 0.015813158825039864, 0.032264310866594315, 0.04241146892309189, 0.03864426165819168, -0.019428463652729988, 0.04271527752280235, -0.0178486667573452, 0.0076141650788486, -0.008020507171750069, 0.00018252160225529224, -0.021965252235531807, -0.00827114749699831, -0.003489983966574073, -0.0001274565584026277, 0.005100161302834749, 0.011407955549657345, 0.00624703336507082, 0.007496439851820469, 0.02410709112882614, 0.019215798005461693, -0.019428463652729988, -0.016299249604344368, -0.01705876737833023, 0.0013680813135579228, 0.02986423671245575, -0.009410424157977104, 0.009592708200216293, -0.007196430116891861, 0.01201556995511055, 0.01541820913553238, -0.023028576746582985, 0.013656128197908401, -0.0010490837739780545, 0.011537074111402035, 0.028330011293292046, 0.020871546119451523, -0.02778315730392933, -0.007750878110527992, -0.011787714436650276, -0.02202601358294487, -0.003393145278096199, -0.027828728780150414, -0.013694103807210922, 0.0005321371136233211, -0.039494920521974564, 0.008453432470560074, 0.008954714052379131, -0.02175258658826351, 0.00085967913037166, -0.016511915251612663, 0.0049748411402106285, 0.029757903888821602, 0.014689072035253048, 0.012121902778744698, 0.011073768138885498, 0.021281685680150986, -0.007758473511785269, 0.030152853578329086, -0.028861673548817635, 0.027737585827708244, 0.009030665270984173, 0.04830532521009445, 0.04189499840140343, -0.010731984861195087, 0.006212854757905006, 0.003949492238461971, -0.021433589980006218, 0.020415835082530975, -0.0033342826645821333, -0.006193866953253746, -0.009083831682801247, -0.033996012061834335, 0.009752207435667515, 0.019717080518603325, -0.026947688311338425, 0.012091522105038166, 0.007929365150630474, -0.014119434170424938, 0.009623088873922825, -0.007488844450563192, -0.018182853236794472, 0.02662869170308113, -0.034087155014276505, 1.7727024896885268e-06, -0.0016813823021948338, 0.008757239207625389, 0.010215513408184052, -0.013496629893779755, -0.022481724619865417, -0.03341877833008766, -0.007678723894059658, -0.014453621581196785, 0.014939713291823864, -0.0037368270568549633, 0.010154752060770988, -0.01681572198867798, -0.032598499208688736, 0.010162346996366978, -0.0094484006986022, -0.002876673359423876, 0.01882084831595421, -0.008400266058743, 0.023529859259724617, -0.039221495389938354, 0.0031159212812781334, 0.03797588497400284, -0.000209816760616377, 0.0016424570931121707, -0.02236020192503929, -0.01838032901287079, -0.004241906572133303, -0.014240956865251064, -0.0061027249321341515, -0.0022690591868013144, -0.018592992797493935, 0.012000380083918571, -0.025383081287145615, -0.008529383689165115, -0.029469287022948265, -0.043657079339027405, -0.01005601417273283, 0.006000190041959286, 0.02456280216574669, -0.01838032901287079, 0.021919680759310722, -0.018304375931620598, 0.01257761288434267, 0.014795404858887196, 0.0023545047733932734, -0.005187505856156349, 0.015349852852523327, 0.010823126882314682, 0.020962689071893692, 0.006915408652275801, 0.00277413846924901, 0.038705021142959595, 0.03527200222015381, -0.03524162247776985, 0.01757523976266384, -0.010488939471542835, 0.017803095281124115, 0.01687648333609104, -0.004872306250035763, -0.04074053093791008, 0.004982436075806618, -0.06264501810073853, -0.01836513727903366, -0.012691540643572807, 0.014370075426995754, 0.008453432470560074, -0.008643311448395252, -0.006592613644897938, 0.023712143301963806, 0.00448115449398756, -0.029879426583647728, -0.01035982184112072, -0.006505269091576338, 0.012243425473570824, -0.015965061262249947, -0.0006550840334966779, 0.004652046132832766, -0.013519415631890297, 0.03323649615049362, 0.0034254249185323715, 0.0174992885440588, -0.006858444772660732, 0.007428083103150129, 0.029226241633296013, -0.024502040818333626, 0.01882084831595421, 0.003157694824039936, 0.03314535319805145, -0.016162537038326263, -0.009949682280421257, -0.008780024945735931, -0.00687743304297328, 0.0018978448351845145, 0.012152283452451229, -0.003020981792360544, -0.007936960086226463, -0.0016899269539862871, 0.021099401637911797, -0.0005853033508174121, 0.028846481814980507, -0.011187695898115635, -0.028193296864628792, -0.021433589980006218, 0.03797588497400284, -0.005202696193009615, -0.00019106616673525423, 0.00047090096632018685, 0.02046140655875206, 0.01376246102154255, 0.0012864330783486366, -0.015509351156651974, 0.03448210284113884, 0.0009873730596154928, -0.03089717961847782, -0.01932213082909584, 0.03335801884531975, -0.02829962968826294, 0.00448115449398756, -0.018425898626446724, -0.0054191588424146175, 0.02204120345413685, -0.011081363074481487, -0.012076331302523613, -0.002903256332501769, -0.0012494066031649709, 0.02281591109931469, 0.024623563513159752, 0.023985568434000015, -0.0017649292713031173, 0.017119528725743294, -0.0025918541941791773, 0.010549700818955898, 0.023970378562808037, 0.0015807462623342872, 0.0002632203686516732, -0.027570493519306183, 0.01992974430322647, 0.0029089527670294046, 0.006596411112695932, 0.0006773948553018272, -0.0038526535499840975, 0.010086394846439362, 0.005905250087380409, 0.005134339910000563, -0.0005159973516128957, 0.01070920005440712, -0.017377765849232674, -0.01288142055273056, 0.010762365534901619, 0.011575049720704556, -0.03718598559498787, 0.03882654383778572, -0.003734928322955966, -0.0017468907171860337, 0.011499098502099514, -0.005833095870912075, -0.008468622341752052, 0.006417924538254738, -0.006797683425247669, 0.022846292704343796, 0.022071585059165955, 0.011726953089237213, -0.004446976352483034, -0.01882084831595421, -0.01698281615972519, 0.08925852179527283, -0.00021812399791087955, 0.011377574875950813, 0.01362574752420187, -0.002124750753864646, -0.00016377100837416947, -0.011400360614061356, 0.011149720288813114, 0.01058008149266243, -0.01958036608994007, 0.0257780309766531, 0.014810595661401749, -0.008985094726085663, 0.0010661729611456394, 0.027373017743229866, -0.029028765857219696, -0.013944745063781738, 0.037216369062662125, -0.002675401046872139, 0.019398082047700882, 0.012152283452451229, 0.014977688901126385, -0.00391911156475544, -0.01345865335315466, 0.0028216082137078047, -0.015076426789164543, 0.03776321932673454, 0.011537074111402035, -0.0031538973562419415, -0.012304186820983887, -0.017271433025598526, -0.019018324092030525, -0.008362289518117905, -0.007644545752555132, -0.022420963272452354, -0.00122946931514889, -0.018957562744617462, 0.004439380951225758, 0.012615589424967766, 0.009342067874968052, -0.0181980449706316, 0.028770530596375465, 0.0033475742675364017, -0.02515522576868534, -0.005020412150770426, -0.013162441551685333, -0.01414221990853548, 0.020947499200701714, 0.013732080347836018, -0.005760941654443741, -0.007010348606854677, -0.02114497311413288, -0.0006152093410491943, -0.024699516594409943, -0.018592992797493935, 0.003148200921714306, -0.012607993558049202, -0.004184942692518234, 0.02270958013832569, 0.017301812767982483, -0.014043482020497322, -0.00896990392357111, -0.008559764362871647, -0.021995631977915764, -0.009174973703920841, -0.009524351917207241, -0.013428272679448128, -0.008635716512799263, -0.0040824078023433685, 0.026431215927004814, -0.03284154459834099, -0.004086205270141363, 0.011514288373291492, -0.012213044799864292, 0.007485046982765198, 0.027388207614421844, 0.0049102818593382835, 0.01602582447230816, 0.007150859106332064, 0.017438527196645737, -0.00228424952365458, 0.00759517727419734, -0.011369979940354824, -0.004302667919546366, -0.0073901074938476086, -0.025033703073859215, 0.004720402415841818, 0.007371119223535061, -0.01967150904238224, 0.001319661969318986, -0.03177822008728981, 0.018699325621128082, -0.030076900497078896, 0.011901642195880413, -0.008088863454759121, -0.011780119501054287, 0.0382796935737133, -0.010982626117765903, 0.008088863454759121, 0.008802809752523899, 0.029013575986027718, -0.00255577708594501, 0.01775752380490303, -0.028330011293292046, -0.001745941350236535, -0.021312067285180092, -0.009425614960491657, 0.03083641827106476, -0.017362574115395546, 0.003930503968149424, -0.024243805557489395, -0.007211620453745127, 0.002403873484581709, 0.02204120345413685, 0.02166144549846649, 0.013109276071190834, 0.021129783242940903, -0.021388018503785133, -0.02097787894308567, 0.02125130593776703, -0.010124371387064457, 0.027129972353577614, 0.008529383689165115, -0.0078002470545470715, 0.02421342395246029, 0.020339883863925934, 0.005612835753709078, -0.010526915080845356, 0.008430646732449532, 0.014119434170424938, -0.025048894807696342, -0.0014620715519413352, 0.014871357008814812, -0.0010709199123084545, 0.009964872151613235, -0.01375486608594656, 0.018046140670776367, -0.026081837713718414, 0.006292604375630617, 0.028254058212041855, -0.008681287057697773, -0.006535649765282869, 0.021813347935676575, 0.011233266443014145, -0.0028216082137078047, 0.005795120261609554, -0.03666951507329941, 0.010428178124129772, 0.004834330175071955, 0.0018304376862943172, -0.0008891104371286929, -0.03232507407665253, -0.020506978034973145, -0.022527296096086502, 0.009919301606714725, 0.012866229750216007, -0.007378714624792337, -0.005939428694546223, 0.012129497714340687, -0.014909332618117332, 0.005126744508743286, -0.017711952328681946, 0.0015019462443888187, -0.00339504424482584, 0.020506978034973145, 0.02184372954070568, 0.012152283452451229, -0.012395328842103481, -0.0033456755336374044, -0.00840786099433899, 0.0066078039817512035, -0.024441279470920563, -0.014073862694203854, 0.0019244280410930514, 0.03587961569428444, 0.006387543864548206, 0.008362289518117905, -0.012509256601333618, 0.02236020192503929, -0.009790183044970036, -0.03423905745148659, -0.01593468151986599, -0.009228140115737915, 0.011909238062798977, 0.02854267507791519, 0.016572676599025726, -0.0039001235272735357, 0.009699041023850441, 0.012463685125112534, -0.00021171556727495044, -0.0019671509508043528, 0.025459034368395805, -0.006596411112695932, -0.014392860233783722, 0.0011364283272996545, -0.00900787953287363, -0.006448305211961269, -0.02360581047832966, 0.02401595003902912, -0.0031975696329027414, -0.01127883791923523, -0.010162346996366978, 0.0069040157832205296, 0.008878761902451515, -0.019960125908255577, -0.003357068169862032, -0.02778315730392933, 0.0020677868742495775, -0.0024171650875359774, -0.015000474639236927, 0.03153517469763756, 0.005791322328150272, -0.004891294054687023, -0.03575809299945831, 0.03335801884531975, -0.00223108334466815, -0.0022861482575535774, 0.0013899174518883228, 0.008726858533918858, 0.011286432854831219, 0.0036779644433408976, -0.007238203659653664, 0.019868982955813408, 0.001202886109240353, -0.036608751863241196, 0.0026735023129731417, 0.004993828944861889, -0.022588057443499565, -0.006543245166540146, -0.007990126498043537, 0.02517041750252247, 0.005331814289093018, 0.020522167906165123, -0.007731890305876732, -0.019261369481682777, -0.01079274620860815, -0.00421912083402276, 0.025383081287145615, -0.010093990713357925, 0.04222918301820755, -0.006660970393568277, 0.0013832716504111886, -0.00664198212325573, 0.006193866953253746, -0.02646159753203392, -8.930266631068662e-05, -0.006368556059896946, -0.007553403731435537, -0.015091616660356522, -0.005647014360874891, -0.029104718938469887, 0.013291560113430023, -0.035302381962537766, -0.007602772209793329, -0.006577423308044672, -0.019382892176508904, -0.01566125452518463, -0.015152378007769585, -0.0064862812869250774, -0.012737112119793892, -0.019443653523921967, 0.016056204214692116, 0.0001465631794417277, -0.010314250364899635, 0.004503939766436815, 0.011324409395456314, -0.03515047952532768, -0.010207917541265488, 0.024137472733855247, 0.002639323938637972, -0.02237539179623127, -0.02515522576868534, -0.009501566179096699, -0.01109655387699604, 0.006520459428429604, -0.001006360980682075, -0.00272097229026258, 0.0031444032210856676, -0.001634861808270216, 0.0027589481323957443, 0.004841925576329231, 0.011294028721749783, 0.012737112119793892, 0.01053451094776392, 0.01619291678071022, 0.014590335078537464, -0.021266495808959007, 0.019443653523921967, 0.030426278710365295, 0.014172600582242012, 0.000182165575097315, 0.017286622896790504, 0.007686319295316935, 0.028147725388407707, -0.0031425044871866703, -0.008818000555038452, -0.03414791449904442, 0.010147156193852425, -0.01637520082294941, -0.005369790364056826, -0.0017791702412068844, 0.026947688311338425, 0.042168423533439636, -0.009418019093573093, -0.02229944057762623, -0.018577802926301956, 0.00013884932559449226, 0.021129783242940903, -0.017894236370921135, -0.008901547640562057, -0.009539542719721794, -0.003169087693095207, -0.0014582739677280188, 0.006041963584721088, 0.009828158654272556, -0.01888160966336727, -0.017833475023508072, 0.020613310858607292, -0.023803284391760826, -0.013025728985667229, -0.002684895182028413, -0.019990505650639534, -0.01906389370560646, -0.0012266210978850722, -0.012683945707976818, 0.006049558520317078, -0.0031823792960494757, 0.001622519688680768, -0.02924143150448799, -0.020704451948404312, -0.03275040164589882, -0.009197759442031384, 0.0009256622288376093, -0.024577993899583817, 0.010101585648953915, 0.017651190981268883, 0.019170226529240608, -0.0074128927662968636, -0.03247697651386261, 0.017438527196645737, -0.01057248655706644, -0.015494161285459995, -0.03100351244211197, -0.02038545534014702, -0.007424285635352135, 0.015873920172452927, -0.010861103422939777, -0.010845912620425224, 0.014863761141896248, 0.013359916396439075, -0.028178106993436813, 0.017043577507138252, -0.03545428812503815, 0.0034406152553856373, 0.006455900613218546, 0.014438431710004807, 0.011020601727068424, -0.007891388610005379, 0.02447166107594967, 0.021114591509103775, 0.007526820525527, 0.012220639735460281, -0.03305421024560928, -0.007424285635352135, -0.01363334245979786, 0.01983860321342945, -0.006524256896227598, 0.0060381656512618065, 0.004473559092730284, -0.016694199293851852, 0.0008981297141872346, -0.0038089812733232975, -0.0017155606765300035, -0.007260989397764206, 0.011871261522173882, 0.0055672647431492805, -0.00826355256140232, 0.04125700145959854, -0.0012361151166260242, -0.017651190981268883, -0.017636001110076904, 0.014461217448115349, 0.01200797501951456, -0.005768537055701017, -0.026659071445465088, -0.03475553169846535, -0.012509256601333618, -0.011195290833711624, 0.03193012252449989, 0.015509351156651974, 0.02097787894308567, -0.011195290833711624, -0.02559574693441391, -0.021220924332737923, -0.0161017756909132, 0.024608373641967773, 0.02942371554672718, 0.0014013102045282722, -0.006566030438989401, 0.04839646816253662, -0.023180481046438217, -0.012805468402802944, 0.003148200921714306, 0.0069305989891290665, -4.082407758687623e-05, 0.006497674155980349, -0.0042001330293715, 0.007067312486469746, -0.02079559490084648, 0.01201556995511055, 0.009980062954127789, -0.03551504760980606, -0.023529859259724617, 0.0012085825437679887, -0.0011041489196941257, -0.012554828077554703, -0.01740814559161663, -0.0017991075292229652, 0.015600494109094143, -0.0089243333786726, 0.0054457420483231544, 0.02523117884993553, 0.024395707994699478, -0.0017544858856126666, 0.007306560408324003, -0.026355264708399773, 0.013739675283432007, -0.012858634814620018, -0.009630684740841389, 0.0001252017536899075, 0.0020943700801581144, 0.01096743531525135, 0.010139561258256435, -0.00827114749699831, 0.012851039879024029, -0.013291560113430023, -0.012509256601333618, 0.004697617143392563, 0.011073768138885498, 0.015114402398467064, -0.010147156193852425, -0.012129497714340687, -0.00840786099433899, 0.005290040746331215, -0.015114402398467064, -0.0012313680490478873, 0.003875439055263996, 0.016162537038326263, 0.0040254439227283, 0.001309218700043857, -0.0060381656512618065, -0.00448115449398756, 0.0032070635352283716, 0.01379284169524908, 0.017392955720424652, -4.346458808868192e-05, -0.021281685680150986, -0.0012664957903325558, 0.006763505283743143, -0.019185416400432587, 0.02037026546895504, -0.0016823316691443324, -0.008704072795808315, 0.018137283623218536, -0.011081363074481487, 0.0040444317273795605, 0.03256811946630478, -0.008886356838047504, 0.010853508487343788, -0.006000190041959286, 0.009645874612033367, 0.01180290523916483, 0.00502420961856842, 0.00598499970510602, -0.004781163763254881, 0.0015275799669325352, -0.005738156381994486, -0.013823222368955612, 0.008468622341752052, -0.012266211211681366, 0.010040824301540852, -0.005290040746331215, -0.017347384244203568, -0.00592423789203167, 0.019428463652729988, 0.03177822008728981, 0.007473654113709927, 0.0058027151972055435, 0.028679389506578445, -0.018243614584207535, -0.004371024202555418, 0.01602582447230816, 0.01502326037734747, -0.014218171127140522, 0.00858255010098219, -0.02239058166742325, -0.0044052028097212315, 0.010352225974202156, -0.007272382266819477, -0.011028196662664413, 0.0007091996376402676, -0.014172600582242012, -0.0007509731221944094, 0.025124846026301384, -0.002405772218480706, -0.004484951961785555, 0.009524351917207241, 0.0029754105489701033, -0.002367796376347542, -0.0010243995347991586, 0.002379189245402813, 0.00827114749699831, -0.03065413422882557, 0.016906864941120148, 0.01628405973315239, 0.010769961401820183, -0.022253869101405144, -0.01184088084846735, 0.011377574875950813, -0.0087496442720294, 0.012159878388047218, 0.006019177846610546, 0.023894427344202995, 0.01001044362783432, 0.017089148983359337, 0.007553403731435537, -0.0028292033821344376, 0.008567359298467636, 0.006600209046155214, 0.032264310866594315, -0.01661824807524681, 0.005028007086366415, 0.0022462736815214157, -0.006345770321786404, -0.010694009251892567, -0.013527010567486286, 0.011134529486298561, 0.004090002737939358, 0.002563372254371643, 0.0071166809648275375, 0.004424190614372492, -0.0027228710241615772, -0.011901642195880413, 0.01253963727504015, 0.005806512665003538, 0.009205354377627373, -0.000719168339855969, 0.002172220731154084, 0.017377765849232674, -0.022086774930357933, 0.01061805710196495, 0.0010557295754551888, 0.0025481819175183773, -0.002544384216889739, -0.012106711976230145, 0.008020507171750069, 0.01288142055273056, -0.011856071650981903, 0.016679009422659874, 0.007997721433639526, -0.014924522489309311, -0.008043292909860611, 0.051677584648132324, -0.01593468151986599, -0.0032678248826414347, -0.006436912342905998, 0.004268489312380552, -0.011407955549657345, -0.008514193817973137, -0.006919206120073795, -0.0014326402451843023, 0.012380138970911503, 6.770388426957652e-05, -0.03232507407665253, -0.008977498859167099, 0.008780024945735931, -0.013253583572804928, -0.006436912342905998, -0.003717839252203703, -0.0044014048762619495, 0.010823126882314682, -0.01950441487133503, -0.014628310687839985, 0.012463685125112534, 0.006960979662835598, 0.021296877413988113, 0.004667236469686031, 0.00827114749699831, -0.014066267758607864, -0.015949871391057968, -0.007006550673395395, 0.007868603803217411, -0.01593468151986599, -0.026172980666160583, 0.008855976164340973, -0.000833095982670784, -0.0031273141503334045, -0.018243614584207535, -0.01345865335315466, 0.007568594068288803, 0.008772429078817368, -0.0015028956113383174, -0.0010111079318448901, 0.001840881071984768, 0.007185037713497877, -0.004902686923742294, 0.0018836038652807474, 0.011149720288813114, -0.020613310858607292, -0.014658691361546516, -0.021281685680150986, -0.0030152853578329086, 0.016998006030917168, 0.017089148983359337, 0.0008340454078279436, -0.01257761288434267, 0.0026962878182530403, 0.0023469096049666405, -0.0004457419563550502, 0.02160068415105343, 0.0036760657094419003, 0.00949397124350071, 0.005939428694546223, 0.019003132358193398, -0.03135289251804352, -0.011757333762943745, 0.009023070335388184, 0.016344821080565453, -0.007504034787416458, 0.002474128967151046, -0.0008796164183877409, -0.007777461316436529, -0.009212949313223362, -0.0036779644433408976, -0.011187695898115635, 0.0031633912585675716, -0.008164815604686737, -0.010595272295176983, 0.005472325254231691, 0.010610462166368961, 0.004690021742135286, -0.011711763218045235, 0.0012769391760230064, -0.006216652225703001, -0.01803095079958439, 0.005282445810735226, -0.009774993173778057, -0.012235830537974834, -0.0011867464054375887, -0.01844109036028385, -0.009402829222381115, -0.006167283747345209, -0.0010177537333220243, -0.001499098027125001, 0.003470995929092169, -0.013170037418603897, -0.002641222905367613, 0.0003273046750109643, 0.013185227289795876, -0.005848286207765341, -0.00753441546112299, -0.013739675283432007, 0.007671128958463669, 0.017195479944348335, 0.0215854924172163, 0.013595366850495338, 0.005658406764268875, 0.003121617715805769, 0.019625937566161156, 0.021524731069803238, 0.011468717828392982, -0.009630684740841389, -0.017879046499729156, -0.008491408079862595, -0.005100161302834749, 0.002193107269704342, 0.03560619056224823, 0.0027095794212073088, -0.0016851798864081502, 0.026081837713718414, -0.02517041750252247, -0.005138137377798557, 0.02169182524085045, -0.013185227289795876, -0.01436247956007719, -0.011020601727068424, 0.011688977479934692, -0.025140035897493362, 0.015137188136577606, 0.02071964368224144, -0.013375107198953629, -0.005821703001856804, 0.001578847412019968, 0.024076711386442184, 0.009243330918252468, -0.01950441487133503, 0.004811544436961412, -0.011932022869586945, 0.0031026299111545086, -0.010671223513782024, 0.016830911859869957, -0.0032735213171690702, 0.010458558797836304, -0.004686224274337292, 0.021388018503785133, 0.01898794248700142, 0.005126744508743286, -0.008172410540282726, 0.013504224829375744, 0.010337036103010178, -0.0034652994945645332, -0.0006337225786410272, 0.010602867230772972, 0.009714231826364994, -0.010678819380700588, -0.006026772782206535, -0.011438336223363876, 0.015152378007769585, 0.006395139265805483, -0.0017089148750528693, 0.014453621581196785, 0.007967340759932995, -0.013511819764971733, -0.004086205270141363, -0.009600304067134857, -0.010777556337416172, -0.00014217222633305937, -0.012448495253920555, -0.005282445810735226, -0.006979967933148146, 0.016329631209373474, -0.0013234595535323024, -0.03697332367300987, -0.016694199293851852, -3.245751577196643e-05, 0.00021824266877956688, -0.020051266998052597, -2.18509685510071e-05, 0.0002836323983501643, 0.01200797501951456, -0.014058672823011875, -0.017742333933711052, -0.012038355693221092, 0.00391911156475544, 0.0072647868655622005, 0.01740814559161663, -0.009061045944690704, -0.007576189003884792, -0.0011554163647815585, 0.013656128197908401, 0.022496914491057396, -0.031033894047141075, 0.008301528170704842, 0.0011411753948777914, 0.03457324579358101, -0.00792176928371191, 0.012311781756579876, 0.009364853613078594, -0.01872970722615719, 0.0009209152194671333, 0.02229944057762623, 0.00762176001444459, 0.017256243154406548, -0.006828064098954201, -0.010937054641544819, 0.0038336655125021935, 0.005612835753709078, 0.008430646732449532, -0.02038545534014702, 0.010283869691193104, 0.011696572415530682, 0.017089148983359337, -0.00379758863709867, 0.009463590569794178, -0.004834330175071955, -0.011810500174760818, -0.022739959880709648, -0.01235735323280096, -0.002682996215298772, -0.011810500174760818, -0.011985189281404018, -0.03265926241874695, -0.009524351917207241, -0.00552928913384676, -0.005498907994478941, 0.002538688015192747, 0.03463400900363922, 0.020309504121541977, 0.009873730130493641, 0.004777366295456886, -0.004314060788601637, 0.012030760757625103, 0.02559574693441391, 0.0022899459581822157, -0.020233551040291786, -0.029727522283792496, 0.0019633532501757145, -0.0011734548024833202, 0.003332383930683136, -0.0019633532501757145, -0.01271432638168335, -0.00788379367440939, 0.008734453469514847, 0.00019616918871179223, 0.00029241430456750095, 0.0010690211784094572, -0.020157599821686745, -0.018182853236794472, 0.019990505650639534, 0.01567644625902176, 0.011483907699584961, -0.004371024202555418, -0.016830911859869957, -0.0023393144365400076, -0.030927561223506927, -0.01053451094776392, -0.014757429249584675, 0.013094085268676281, -0.008157219737768173, -0.02011202834546566, 0.0075609986670315266, -0.009699041023850441, -0.0025045096408575773, 0.0031595935579389334, -0.0017117629759013653, 0.005191303323954344, 0.013306749984622002, 0.015782777220010757, 0.01219025906175375, -0.004014051053673029, -0.008248362690210342, 0.0062242476269602776, 0.013329535722732544, 0.014446026645600796, -0.010261083953082561, -0.006885027978569269, -0.008499003015458584, 0.003005791222676635, -0.00201272196136415, -0.011210481636226177, 0.016557486727833748, -0.012418114580214024, 0.013694103807210922, 0.00672932667657733, 0.0090990224853158, -0.004796354100108147, -0.021266495808959007, -0.01305610965937376, 0.0005330864805728197, 0.003987467847764492, -0.003070350270718336, 0.015327067114412785, -0.02524636872112751, -0.035909995436668396, 0.009569923393428326, -0.018258806318044662, 0.005734358914196491, -0.045996394008398056, -0.01541061419993639, 0.01202316489070654, 0.032780785113573074, -0.008893952704966068, 0.011066173203289509, 0.013808031566441059, 0.01467388216406107, -0.010139561258256435, -0.025140035897493362, -1.90324462892022e-05, 0.021782968193292618, -0.0075002373196184635, 0.007454666309058666, 0.001183898188173771, 0.0012883319286629558, -0.004450773820281029, 0.00017468907753936946, -0.005624228622764349, -0.018866419792175293, 0.020750023424625397, -0.006774898152798414, -0.008468622341752052, -0.005191303323954344, -0.020780405029654503, 0.0040254439227283, -0.013640938326716423, 0.020066456869244576, 0.0027057817205786705, 0.0025481819175183773, 0.003041868330910802, -0.007659736089408398, 0.027054021134972572, -0.024274185299873352, 0.0016054305015131831, -0.0015038450947031379, 0.012106711976230145, -0.005020412150770426, 0.00918256863951683, 0.004967245738953352, -0.01941327191889286, 0.006786290556192398, 0.010640842840075493, 0.003960884641855955, -0.012076331302523613, 0.0035545427817851305, 0.01144593209028244, 0.030243994668126106, 0.008802809752523899, -0.010466153733432293, 0.01058008149266243, -0.027281876653432846, -0.003262128448113799, 0.019443653523921967, 0.0035127694718539715, 0.006649577524513006, -0.02592993527650833, 0.008331908844411373, 0.02726668491959572, -0.009304092265665531, -0.020522167906165123, 0.026856545358896255, -0.003953289706259966, -0.01074717566370964, 0.01897275261580944, -0.021448779851198196, 0.0048874965868890285, 0.020947499200701714, -0.002352606039494276, 0.011924427933990955, -0.0002855311904568225, 0.005255862604826689, 0.002405772218480706, -0.0005995442625135183, -0.002310832729563117, -0.01235735323280096, -0.007340738549828529, -0.014947308227419853, 0.007823032326996326, -0.015266305766999722, -0.0003391721402294934, -0.004735592752695084, -0.01236494816839695, -0.01453716866672039, -0.0064217220060527325, 0.01626886986196041, 0.018258806318044662, 0.004876103717833757, -0.006520459428429604, -0.00391911156475544, 0.00948637630790472, -0.00517991092056036, -0.0008554068044759333, -0.004731795284897089, -0.004090002737939358, 0.0019462641794234514, 0.0027494539972394705, -0.0036266969982534647, 0.016162537038326263, -0.003227950306609273, 0.012220639735460281, -0.00014668185031041503, 0.003191873198375106, 0.0014487800654023886, 0.003829868044704199, 0.018957562744617462, 0.007188835181295872, 0.0037501186598092318, 0.011073768138885498, 0.010040824301540852, -0.008931928314268589, -0.040862053632736206, -0.01127883791923523, -0.02384885586798191, 0.006360960658639669, -0.007014146074652672, 0.01179531030356884, -0.0017715750727802515, 0.000940852565690875, 0.016086585819721222, 0.006957182195037603, 0.018304375931620598, 0.0026545142754912376, -0.008073673583567142, -0.00589765515178442, 0.026613499969244003, -0.009805373847484589, 0.012425709515810013, -0.02185891941189766, 0.017742333933711052, 0.0171499103307724, -0.02778315730392933, -0.012152283452451229, -0.0025159025099128485, -0.010253489017486572, -0.002141839824616909, 0.01994493417441845, -0.01681572198867798, -0.0037767018657177687, -0.009121807292103767, 0.021023450419306755, -0.006000190041959286, -0.00448115449398756, 0.005305231083184481, -0.007944555021822453, -0.004819139838218689, 0.0023298205342143774, 0.003227950306609273, 0.009721826761960983, -0.01687648333609104, 0.007469856645911932, 0.006767302751541138, -0.008871166966855526, 0.002476027701050043, -0.018942371010780334, 0.006087534595280886, -0.019170226529240608, 0.014825785532593727, 0.007743283174932003, 0.007128073833882809, 0.011263648048043251, 0.0063989367336034775, -0.009045856073498726, 0.020248742774128914, 0.006793885957449675, 0.015889110043644905, 0.0004813443520106375, -0.010853508487343788, 0.0021285484544932842, 0.010944650508463383, -0.00913699809461832, -0.0034539068583399057, -0.0016073293518275023, -0.007090097758919001, 0.0041051930747926235, 0.0005345105892047286, -0.008536978624761105, -0.02471470646560192, 0.013656128197908401, -0.0047242003493011, 0.0016377100255340338, 0.009812968783080578, -0.011164910160005093, -0.011590240523219109, -0.0028443937189877033, 0.005096363835036755, 0.03594037890434265, 0.016056204214692116, 0.0039039209950715303, 0.012911801226437092, 0.004165954422205687, -0.004678628873080015, 0.013048513792455196, -0.017787905409932137, 0.000356498610926792, 0.014377670362591743, -0.009471185505390167, -0.0033361816313117743, -0.003700749948620796, 0.01958036608994007, -0.0013766258489340544, -0.027221115306019783, -0.010952245444059372, 0.005009019281715155, -0.01092945970594883, 0.007405297830700874, -0.017529668286442757, -0.011476312763988972, 0.012433304451406002, 0.021023450419306755, -0.007131871301680803, -0.001692775054834783, -0.00231842789798975, -0.01742333546280861, 0.0020772810094058514, 0.005783727392554283, -0.005335611756891012, 0.014392860233783722, 0.010245894081890583, 0.036608751863241196, 0.00528624327853322, -0.019033513963222504, 0.01341308280825615, 0.0036760657094419003, 0.005009019281715155, -0.01801575906574726, -0.007215418387204409, 0.006045761052519083, -0.00037073958083055913, -0.004777366295456886, -0.002088673645630479, 0.01880565844476223, 0.0004727997584268451, 0.02037026546895504, -0.006569828372448683, 0.0008805658435449004, 0.015722015872597694, 0.003767207730561495, -0.00809645839035511, -0.00044052026350982487, 0.011240862309932709, 0.0008473369525745511, -0.01793980784714222, 0.0002572866214904934, -0.0027418588288128376, -0.015030855312943459, -0.0012313680490478873, 0.006600209046155214, 0.0006560334004461765, 0.006152093410491943, 0.019398082047700882, 0.0073901074938476086, 0.011126934550702572, -0.02272477000951767, -0.004014051053673029, 0.0011164910392835736, 0.007511630188673735, 0.011681382544338703, 0.004895091522485018, 0.010800342075526714, -0.0018741099629551172, 0.008947118185460567, 0.015220735222101212, -0.0038431596476584673, -0.0036532802041620016, 0.016846103593707085, 0.006941991858184338, 0.019808221608400345, 0.0052330768667161465, -0.006482483819127083, -0.014278932474553585, -0.0060153803788125515, -0.022846292704343796, 0.014127029106020927, -0.023803284391760826, -0.0009550935355946422, 0.0013395993737503886, -0.01836513727903366, 0.0069078137166798115, 0.01792461797595024, -0.020522167906165123, 0.005962213966995478, 0.0014041583053767681, 0.02195006236433983, -0.009076236747205257, -0.0073521314188838005, -0.010610462166368961, 0.00519889872521162, 0.02011202834546566, -0.02088673785328865, -0.0028728756587952375, -7.945267134346068e-05, -0.000648912915494293, 0.017651190981268883, 0.01882084831595421, 0.025990696623921394, -0.0020848761778324842, 0.006566030438989401, 0.014506787993013859, 0.03350992128252983, -0.01619291678071022, 0.029909808188676834, -0.000627076777163893, 0.0008145827450789511, 0.0028026204090565443, -0.02925662137567997, 0.002639323938637972, -0.0012456090189516544, -0.021296877413988113, -0.008423051796853542, 0.008369885385036469, -0.007967340759932995, -9.212119039148092e-06, -0.009812968783080578, -0.022238679230213165, -0.006030570715665817, 0.006436912342905998, 0.013344726525247097, 0.0015968859661370516, -0.004295072518289089, 0.012000380083918571, -0.0073141553439199924, 0.005650811828672886, -0.014749834313988686, -0.0322035513818264, 0.012448495253920555, -0.014559954404830933, 0.010071204975247383, -0.00681667122989893, -0.028952814638614655, -0.0157523974776268, 0.005377385299652815, -0.006945789325982332, -0.011088958941400051, -0.014924522489309311, -0.016937244683504105, 0.0033817526418715715, 0.004359631799161434, 0.0035735308192670345, -0.0012579512549564242, 0.01344346348196268, -0.006239437963813543, 0.0045760939829051495, 0.013420677743852139, -0.01162062119692564, -0.003655178938060999, 0.008187600411474705, -0.010261083953082561, 0.0031007309444248676, 0.004921674728393555, -0.02071964368224144, 0.008073673583567142, -0.018486661836504936, 0.0014297920279204845, 0.002538688015192747, 0.02219310775399208, -0.012843444012105465, 0.009737016633152962, 0.006706541404128075, -0.0023374157026410103, 0.018091712146997452, 0.0006826165481470525, -0.0075002373196184635, -0.003619101829826832, 0.0027171745896339417, -0.015349852852523327, -0.005248267203569412, 0.0174992885440588, -0.03475553169846535, 0.012797873467206955, -0.006216652225703001, 0.01670938916504383, 0.021205734461545944, -0.013557391241192818, -0.0013747269986197352, -0.03082122839987278, -0.009433209896087646, 0.006774898152798414, 0.015737207606434822, 0.015706826001405716, 0.007302762940526009, -0.007162251975387335, -0.002536789048463106, 0.021433589980006218, 0.004302667919546366, -0.004671033937484026, 0.011286432854831219, -0.006174879148602486, -0.0005644165794365108, -0.010701604187488556, -0.0067824930883944035, 0.008992689661681652, -0.017438527196645737, 0.006068546324968338, -0.013990316540002823, -0.014385265298187733, -0.002001329092308879, 0.014134624972939491, 0.011939618736505508, 0.004803949501365423, 0.00047730939695611596, -0.011688977479934692, 0.008711667731404305, 0.011567454785108566, -0.005498907994478941, 0.0049748411402106285, -0.029484476894140244, -0.008673692122101784, 0.026689453050494194, -0.004659641068428755, -0.005347004625946283, 0.0003961359616369009, 0.0036494825035333633, 0.001312066800892353, 0.02855786494910717, 0.019306940957903862, 0.008552169427275658, 0.05304471775889397, 0.015889110043644905, -0.010633247904479504, -0.005081173498183489, 0.0002791227598208934, 0.0026564132422208786, 0.010944650508463383, 0.0059508210979402065, 0.021965252235531807, 0.012547232210636139, 0.007815437391400337, 0.004538118373602629, 0.017347384244203568, -0.015478970482945442, -0.018167663365602493, 0.0028235071804374456, 0.013116871006786823, -0.0019918351899832487, 0.007321750745177269, 0.014096648432314396, -0.01018513273447752, -0.009904110804200172, 0.016694199293851852, -0.010595272295176983, -0.01005601417273283, -0.008977498859167099, -0.00483053270727396, -0.014757429249584675, 0.010610462166368961, 0.011597835458815098, 0.0073141553439199924, 0.002544384216889739, -0.032082028687000275, 0.012782682664692402, -0.0062508308328688145, -0.006136903073638678, -0.011878857389092445, 0.01544858980923891, -0.005039399955421686, -0.007629355415701866, -0.004055824596434832, -0.009797777980566025, 0.005703977774828672, -0.008704072795808315, -0.002508307108655572, 0.00983575452119112, 0.005981201771646738, -0.002367796376347542, -0.007967340759932995, 0.007724294904619455, -0.008423051796853542, 0.01271432638168335, -0.009266115725040436, -0.018349947407841682, -0.0028728756587952375, 0.002962118946015835, -0.012213044799864292, -0.007074907422065735, -0.00228424952365458, -0.010952245444059372, 0.006053355988115072, -0.009053451009094715, 0.011514288373291492, 0.019352510571479797, 0.009258520789444447, -0.0039001235272735357, 0.0007324598846025765, -0.00792176928371191, 0.011180100962519646, -0.01558530330657959, -0.0054457420483231544, 0.008719263598322868, 0.0003204215317964554, -0.011673787608742714, 0.008590145036578178, 0.009387638419866562, -0.0019481629133224487, -0.03463400900363922, 0.016208108514547348, -0.020248742774128914, -0.0033893478102982044, -0.0012655464233830571, -0.0056546092964708805, 0.011947213672101498, 0.00826355256140232, 0.012167473323643208, 0.007355928886681795, 0.013344726525247097, -0.004260894376784563, -0.0051229470409452915, 0.01810690201818943, 0.0069040157832205296, -0.004564701579511166, -0.005453336983919144, -0.0011601633159443736, 0.036699894815683365, 0.01023070327937603, 0.005422956310212612, -0.013352321460843086, 0.0025652709882706404, 0.0012380138505250216, -0.012592803686857224, 0.0031102250795811415, -0.005438146647065878, 0.008134434930980206, -0.014780214987695217, -0.01092945970594883, 0.013640938326716423, 0.0023924808483570814, 0.0001991360477404669, 0.004033038858324289, -0.0016130257863551378, -0.01271432638168335, -0.026932498440146446, -0.01663343794643879, 0.013732080347836018, -0.014932118356227875, 0.00509256636723876, -0.02760087326169014, 0.00949397124350071, -0.0026450203731656075, -0.019990505650639534, 0.005290040746331215, 0.004705212078988552, -0.007238203659653664, -0.01509921159595251, 0.01035982184112072, -0.01001044362783432, -0.0029792082495987415, -0.011050982400774956, -0.03168707713484764, -0.02088673785328865, 0.010033228434622288, 0.011742143891751766, -0.0007091996376402676, -0.03013766184449196, 0.008673692122101784, 0.0009432260412722826, -0.01733219437301159, 0.015691636130213737, -0.00421912083402276, -0.004226716235280037, -0.0038013861048966646, -0.005434349179267883, 0.008719263598322868, -0.00456849904730916, 0.01897275261580944, -0.0058900597505271435, 0.02743377909064293, 0.014871357008814812, -0.022223487496376038, 0.004116585943847895, 0.013777650892734528, 0.01992974430322647, -0.0050583877600729465, 0.0038963258266448975, 0.003560239216312766, -0.02009683847427368, -0.001692775054834783, -0.004496344830840826, 0.0036001140251755714, 0.008544574491679668, -0.02541346289217472, -0.01654229499399662, -0.0056318240240216255, 0.009683851152658463, -0.029469287022948265, -0.004674831405282021, -0.007238203659653664, 0.005324219353497028, 0.006676160730421543, -0.002755150431767106, 0.010868698358535767, 0.0019918351899832487, -0.0045533087104558945, -0.009121807292103767, -0.0006308744195848703, -0.012873824685811996, -0.005582455080002546, -0.007340738549828529, -0.002474128967151046, -0.0062508308328688145, 0.020339883863925934, -0.007321750745177269, 0.00689642084762454, -0.0033912465441972017, -0.01672457903623581, -0.021555112674832344, 0.022952625527977943, -0.023636190220713615, -0.002037406200543046, 0.008134434930980206, -0.012813063338398933, 0.003096933476626873, -0.0001596173970028758, -0.006945789325982332, 0.00195955578237772, -0.011559859849512577, -0.004234311170876026, 0.022481724619865417, -0.02114497311413288, 0.016329631209373474, -0.007511630188673735, 0.014172600582242012, -0.013564986176788807, -0.0076483432203531265, -0.03054780140519142, 0.0035450488794595003, -0.011218076571822166, 0.01827399618923664, -0.005886262282729149, -0.026248931884765625, 0.021220924332737923, 0.0018105002818629146, 0.0005307130049914122, -0.029712332412600517, -0.001513338997028768, 0.0018617677269503474, -0.014689072035253048, 0.01035982184112072, -0.010344631038606167, 0.022436153143644333, 0.03475553169846535, -0.021023450419306755, 0.017377765849232674, -0.011605430394411087, 0.007074907422065735, -0.008567359298467636, -0.011263648048043251, -0.004355833865702152, -0.00988132506608963, 0.013071299530565739, 0.01253204233944416, -0.005403968505561352, -0.02176777832210064, -0.02907433733344078, 0.007747080642729998, 0.009342067874968052, 0.0005378334899432957, 0.010382606647908688, 0.026583120226860046, 0.00163201370742172, 0.011195290833711624, 0.005753346718847752, -0.018091712146997452, -0.004173549823462963, 0.0005098262336105108, -0.013010538183152676, 0.011704168282449245, -0.01363334245979786, 0.015615683980286121, -0.02132725715637207, -0.02655273862183094, 0.022071585059165955, 0.0049102818593382835, 0.008385075256228447, 0.009410424157977104, -0.00918256863951683, 0.0007709104684181511, 0.005225481931120157, -0.016208108514547348, -0.01637520082294941, -0.007249596528708935, -0.017210671678185463, -0.008559764362871647, -0.011088958941400051, -0.0036874585784971714, 0.009243330918252468, 0.007750878110527992, 0.0045267255045473576, -0.006406531669199467, -0.006748314946889877, -0.016253678128123283, 0.012828254140913486, -0.0004716130206361413, 0.022648818790912628, 0.003839361947029829, 0.02734263800084591, 0.028937624767422676, 0.003846957115456462, -0.01619291678071022, -0.002626032568514347, -0.0005259659956209362, 0.0002826830022968352, 0.00037952151615172625, -0.007363524287939072, 0.00826355256140232, 0.002903256332501769, -0.013549796305596828, -0.0015835943631827831, 0.008893952704966068, -0.004276084713637829, 0.0008929080213420093, -0.022876672446727753, 0.009372448548674583, 0.009174973703920841, -0.011172505095601082, 0.023377954959869385, 0.006019177846610546, -0.009888920933008194, -0.01913984678685665, 0.016496725380420685, -0.007853413000702858, 0.0038811354897916317, 0.006463495548814535, 0.003831766778603196, 0.02134244702756405, 0.006566030438989401, 0.0014364378293976188, -0.011461121961474419, 0.011088958941400051, 0.016663817688822746, 0.009615493938326836, -0.005662204697728157, -0.0027570491656661034, 0.023621000349521637, -0.020263932645320892, -0.0012361151166260242, -0.0024266589898616076, 0.009395234286785126, -0.0024855216033756733, -0.019109465181827545, -0.004697617143392563, 0.015965061262249947, 0.00456849904730916, 0.00983575452119112, -0.007724294904619455, 0.0037842970341444016, 0.012911801226437092, -0.017013195902109146, 0.01358777191489935, 0.0017668281216174364, -0.015737207606434822, -0.018213234841823578, -0.003848856082186103, 0.0046140700578689575, -0.009114212356507778, -0.022071585059165955, -0.0032773190177977085, 0.004416595678776503, 0.014453621581196785, 0.017620811238884926, -0.008947118185460567, 0.008878761902451515, 0.03350992128252983, -0.019079085439443588, 0.02671983279287815, -0.0029640179127454758, 0.010033228434622288, -0.007306560408324003, -0.016329631209373474, 0.0018731605960056186, -0.014438431710004807, -0.025534985587000847, 0.01396753080189228, 0.02629450336098671, -0.003941896837204695, 0.013390297070145607, 0.014453621581196785, 0.011871261522173882, 0.0028045191429555416, 0.010071204975247383, 0.006653374992311001, 0.03293268755078316, -0.014939713291823864, 0.013306749984622002, -0.00788379367440939, -0.001630114857107401, 0.010982626117765903, -0.0035203646402806044, -0.01376246102154255, 0.027190733700990677, -0.016405582427978516, -0.0018399315886199474, -0.002897560130804777, 0.0033285864628851414, 0.010420583188533783, -0.02079559490084648, -0.01201556995511055, -0.00953194685280323, -0.007101490627974272, 0.039312634617090225, -0.006064748857170343, -0.0014202981255948544, -0.008559764362871647, -0.006114117335528135, -0.025641318410634995, 0.002684895182028413, -0.010428178124129772, -0.007807841990143061, 9.054875408764929e-05, 0.006638184655457735, 0.0007400550530292094, -0.017620811238884926, -0.0226336270570755, -0.01376246102154255, -0.012410519644618034, -0.02018798142671585, -0.01731700450181961, 0.010861103422939777, 0.014020697213709354, 0.014233361929655075, 0.002946928609162569, -0.02795025147497654, 0.005525491200387478, -0.016132155433297157, -0.0085749551653862, -0.01536504365503788, 0.017134718596935272, 0.0016557485796511173, 0.007325548212975264, -0.03976834565401077, -0.0030646538361907005, -0.005973606836050749, -0.0078761987388134, -0.004671033937484026, 0.0018038545968011022, -0.012106711976230145, 0.0037767018657177687, 0.0005872021429240704, -0.011818095110356808, 0.0039343019016087055, 0.006972372531890869, -0.011742143891751766, 0.0072268107905983925, -0.018562613055109978, -0.025793220847845078, 0.0034690971951931715, 0.015889110043644905, -0.013420677743852139, -0.003786195768043399, 0.0007870502304285765, -0.010526915080845356, -0.016663817688822746, -0.005183708388358355, 0.006022975314408541, -0.024775467813014984, -0.02421342395246029, 0.009896515868604183, -0.02002088725566864, 0.007792651653289795, 0.02793506160378456, -0.0014839076902717352, 0.005411563441157341, 0.012478875927627087, 0.006938194390386343, -0.0006546093500219285, 0.0016358112916350365, 0.00025277698296122253, 0.010428178124129772, -0.010086394846439362, -0.004853317979723215, 0.01362574752420187, -0.02176777832210064, 0.01601063273847103, -0.005248267203569412, -0.016481533646583557, -0.005411563441157341, 0.009061045944690704, 0.01005601417273283, 0.004424190614372492, 0.019048703834414482, -0.030061710625886917, 0.009790183044970036, 0.013846008107066154, -0.005711573176085949, -0.007982530631124973, -0.01366372313350439, 0.010633247904479504, -0.009212949313223362, 0.007762270979583263, 0.01558530330657959, -0.008726858533918858, -0.004959650803357363, -0.012797873467206955, -0.019306940957903862, 0.004769771359860897, 0.005240672267973423, -0.009288901463150978, 0.003507073037326336, -0.02210196480154991, -0.012167473323643208, 0.02125130593776703, 0.005878666881471872, -0.015258710831403732, 0.015501756221055984, -0.02592993527650833, -0.02664388157427311, -0.017560049891471863, 0.016041014343500137, 0.016922054812312126, 0.008658502250909805, -0.018349947407841682, -0.021479161456227303, 0.015722015872597694, 0.012380138970911503, 0.0031633912585675716, 0.05371309071779251, 0.0004884648369625211, -4.657979661715217e-05, -0.014575145207345486, 0.0026450203731656075, -0.001096553634852171, 0.0014174499083310366, -0.01932213082909584, -0.003262128448113799, -0.014514382928609848, 0.0015940377488732338, -0.001965251984074712, -0.021919680759310722, 0.0016139751533046365, -0.008893952704966068, 0.028223678469657898, 0.0014250450767576694, -0.007279977202415466, -0.00988132506608963, -0.013701699674129486, -0.021782968193292618, -0.005628026090562344, 0.010838317684829235, -0.011651001870632172, 0.019914554432034492, 0.01879046857357025, -0.009752207435667515, -0.002563372254371643, -0.000522643094882369, -0.015319472178816795, 0.014651096425950527, -0.012782682664692402, 0.00138232228346169, -0.0018342352705076337, 0.0020506978034973145, 0.0006356213707476854, -0.04441659525036812, -0.006281211506575346, 0.013109276071190834, -0.016314439475536346, 0.006030570715665817, -0.017453717067837715, 0.005301433615386486, -0.0017326497472822666, 0.0010614260099828243, -0.014529573731124401, 0.0001401547488057986, -0.009220545180141926, -0.015182758681476116, -0.030593372881412506, -0.007553403731435537, 0.004648248199373484, -0.019048703834414482, 0.019534794613718987, -0.020825974643230438, 0.00792176928371191, 0.00349188270047307, 0.010071204975247383, -0.002132345922291279, 0.008278743363916874, 0.02204120345413685, 0.0007970188744366169, -0.018228424713015556, 0.015030855312943459, 0.00010728187771746889, 0.018046140670776367, -0.010724389925599098, -0.002833001082763076, 0.01366372313350439, 0.0038792367558926344, 0.014727048575878143, 0.0029943985864520073, 0.0022500711493194103, 0.009896515868604183, -0.002897560130804777, 0.0021038639824837446, -0.01271432638168335, -0.005392575636506081, 0.017818285152316093, -0.0044052028097212315, 0.00984334945678711, 0.011909238062798977, -0.010481344535946846, -0.006539447233080864, -0.01184088084846735, -0.016557486727833748, -0.009767397306859493, -0.011681382544338703, 0.011992784217000008, -0.008772429078817368, 0.009258520789444447, 0.007298965007066727, 0.007131871301680803, -0.02090192772448063, 0.013549796305596828, 0.0034425139892846346, -0.022071585059165955, -0.0076255579479038715, 0.007386309560388327, 0.0013101680669933558, 0.007724294904619455, 0.01127124298363924, -0.01231937762349844, -0.012790278531610966, 0.02307414822280407, -0.009759802371263504, 0.013306749984622002, 0.005666002165526152, 0.006923004053533077, -0.002937434706836939, -0.009288901463150978, -0.01626886986196041, -0.007891388610005379, -0.021403208374977112, 0.00858255010098219, 0.010382606647908688, -0.0007993924082256854, -0.008559764362871647, -0.0034690971951931715, 0.008461027406156063, -0.016056204214692116, 0.011894047260284424, 0.019109465181827545, 0.005882464814931154, -0.026431215927004814, -0.014218171127140522, 0.0014848571736365557, 0.0071432641707360744, 0.005806512665003538, -0.0004839551984332502, -0.01144593209028244, 0.013853603042662144, 0.02125130593776703, 0.018501851707696915, 0.014225766994059086, 0.016557486727833748, 0.00843824166804552, -0.030927561223506927, 0.015630874782800674, 0.012964967638254166, -0.03803664818406105, 0.012721921317279339, -0.009957277216017246, -0.01768157258629799, 0.0018997436854988337, 0.0005406816489994526, 0.0030190828256309032, -0.015828348696231842, 0.0021665242966264486, -0.0067559098824858665, -0.008536978624761105, 0.010458558797836304, 0.0315047949552536, -0.010131966322660446, -0.012205449864268303, -0.0329023078083992, 0.0007523972308263183, -0.008278743363916874, 0.02099306881427765, 0.011050982400774956, -0.015600494109094143, 0.01363334245979786, -0.003907718695700169, 0.007409095298498869, -0.001107946503907442, -0.011544669046998024, -0.01932213082909584, -0.003300104523077607, -0.018836038187146187, 0.011043387465178967, -0.003972277510911226, 0.003315294859930873, -0.002624133601784706, 0.018167663365602493, 0.009509162046015263, -0.006679958198219538, 0.009630684740841389, -0.0005800816579721868, -0.004283679649233818, -0.01501566544175148, 0.00511914910748601, 0.0029450298752635717, 0.0174992885440588, -0.02594512514770031, 0.009114212356507778, -0.007693914230912924, -0.003619101829826832, 0.011681382544338703, 0.016861293464899063, -0.0014354884624481201, 0.007652140688151121, -0.02497294172644615, 0.010443368926644325, 0.008909142576158047, -0.018911991268396378, 4.767753853229806e-05, -0.01305610965937376, 0.004283679649233818, -0.02656792849302292, -0.02550460398197174, -0.002367796376347542, 0.00517991092056036, -0.01853223145008087, 0.007378714624792337
],
"page_number": 104
},
{
"@search.action": "upload",
"id": "earth_at_night_508_page_105_verbalized",
"page_chunk": "# Urban Structure\n\n## March 16, 2013\n\n### Phoenix Metropolitan Area at Night\n\nThis figure presents a nighttime satellite view of the Phoenix metropolitan area, highlighting urban structure and transport corridors. City lights illuminate the layout of several cities and major thoroughfares.\n\n**Labeled Urban Features:**\n\n- **Phoenix:** Central and brightest area in the right-center of the image.\n- **Glendale:** Located to the west of Phoenix, this city is also brightly lit.\n- **Peoria:** Further northwest, this area is labeled and its illuminated grid is seen.\n- **Grand Avenue:** Clearly visible as a diagonal, brightly lit thoroughfare running from Phoenix through Glendale and Peoria.\n- **Salt River Channel:** Identified in the southeast portion, running through illuminated sections.\n- **Phoenix Mountains:** Dark, undeveloped region to the northeast of Phoenix.\n- **Agricultural Fields:** Southwestern corner of the image, grid patterns are visible but with much less illumination, indicating agricultural land use.\n\n**Additional Notes:**\n\n- The overall pattern shows a grid-like urban development typical of western U.S. cities, with scattered bright nodes at major intersections or city centers.\n- There is a clear transition from dense urban development to sparsely populated or agricultural land, particularly evident towards the bottom and left of the image.\n- The illuminated areas follow the existing road and street grids, showcasing the extensive spread of the metropolitan area.\n\n**Figure Description:** \nA satellite nighttime image captured on March 16, 2013, showing Phoenix and surrounding areas (including Glendale and Peoria). Major landscape and infrastructural features, such as the Phoenix Mountains, Grand Avenue, the Salt River Channel, and agricultural fields, are labeled. The image reveals the extent of urbanization and the characteristic street grid illuminated by city lights.\n\n---\n\nPage 89",
"page_embedding_text_3_large": [
-0.012408008798956871, -0.010935738682746887, -0.01799791119992733, 0.021761255338788033, 0.008125041611492634, -0.04487668350338936, 0.03457866609096527, 0.03738148882985115, -0.025697806850075722, -0.0032535595819354057, -0.00041063150274567306, 0.07577073574066162, 0.032972551882267, -0.049852482974529266, -0.020564543083310127, 0.003302766475826502, -0.040751177817583084, 0.030327189713716507, -0.015344676561653614, 0.03243718296289444, 0.027981005609035492, -0.01735231839120388, -0.02837466076016426, 0.020958198234438896, -0.004117632284760475, 0.02560332790017128, 0.020596034824848175, 0.015486392192542553, 0.004263285081833601, 0.009408357553184032, -0.01991894841194153, 0.006778741255402565, 0.021336106583476067, -0.02295796573162079, -0.003273242386057973, 0.02432788535952568, 0.019604025408625603, 0.008589554578065872, 0.041003115475177765, 0.019037161022424698, 0.0077431960962712765, -0.06295332312583923, 0.02824869193136692, 0.008188026025891304, -0.00022856600116938353, -0.039743419736623764, 0.018722238019108772, -0.010534211061894894, 0.027303919196128845, 0.0054796794429421425, -0.010565703734755516, -0.02750862017273903, -0.049411591142416, -0.02887853980064392, 0.025902505964040756, 0.01876947656273842, 0.04966352880001068, 0.07766028493642807, 0.00472386134788394, -0.005298597738146782, 0.03256314992904663, 0.012911887839436531, 0.0014516032533720136, 0.018155373632907867, 0.017887689173221588, 0.0418219193816185, -0.012439501471817493, -0.0007174364291131496, -0.010384622029960155, -0.008920225314795971, -0.009266640990972519, 0.0633942186832428, 0.00955794658511877, 0.009030448272824287, 0.06909434497356415, -0.017824703827500343, 0.025414373725652695, -0.007003124337643385, -0.012974872253835201, -0.005278915166854858, 0.017824703827500343, -0.016139859333634377, -0.009014702402055264, 0.07192866504192352, 0.015620235353708267, -0.010211413726210594, -0.03596433252096176, -0.09422528743743896, 0.016895677894353867, 0.03662567213177681, -0.03854670748114586, -0.03634224086999893, -0.013478751294314861, 0.009683915413916111, 0.0032594643998891115, 0.0016395736020058393, 0.05630842596292496, 0.00037963115028105676, 0.02637489326298237, 0.02623317763209343, 0.006991314701735973, 0.008613173849880695, 0.0029150161426514387, -0.028689585626125336, 0.03369687870144844, -0.021257376298308372, -0.010305890813469887, 0.0011199488071724772, 0.0005688316305167973, 0.03750745952129364, 0.01686418429017067, -0.030075250193476677, -0.007231444586068392, -0.02017088793218136, -0.03240568935871124, -0.0022910728584975004, 0.018722238019108772, 0.00937686488032341, 0.06676390767097473, 0.03259464353322983, 0.019194623455405235, -0.0023501210380345583, 0.0367831327021122, -0.007833736948668957, -0.01837582141160965, 0.003137431340292096, 0.01836007460951805, -0.014628224074840546, -0.0023383114021271467, 0.04487668350338936, -0.04878174141049385, 0.02837466076016426, 0.009455596096813679, 0.01572258584201336, -0.009353245608508587, -0.014392031356692314, -0.0132976695895195, 0.008668285794556141, 0.021745508536696434, 0.0123450243845582, -0.020076410844922066, -0.014415650628507137, 0.0002598123683128506, -0.028595108538866043, -0.034893590956926346, 0.006046542432159185, 0.02141483873128891, 0.044561758637428284, 0.013911771588027477, -0.01040036790072918, -0.011274282820522785, -0.005522981286048889, 0.04538056254386902, -0.004034964833408594, -0.019966186955571175, -0.006751185283064842, -0.0053025344386696815, -0.00039709958946332335, -0.043522510677576065, 0.0038656932301819324, 0.015549377538263798, 0.004452239256352186, -0.0015155721921473742, -0.027918020263314247, 0.013163827359676361, -0.04002685099840164, 0.026674071326851845, -0.04966352880001068, -0.04487668350338936, 0.010738911107182503, 0.047962937504053116, -0.022280879318714142, -0.03508254513144493, -0.003668865654617548, 0.02865809202194214, -0.040593717247247696, 0.011974988505244255, 0.027697574347257614, -0.03939700499176979, 0.0065386113710701466, -0.024800272658467293, -0.041506994515657425, 0.0040743304416537285, -0.0155257573351264, 0.0019062749342992902, -0.00855806190520525, 0.03015398234128952, -0.004231792408972979, 0.028815554454922676, -0.005263168830424547, -0.00288155535236001, 0.03473612666130066, 0.06181959807872772, -0.02966585010290146, 0.031098755076527596, -0.028563614934682846, 0.027807798236608505, -0.02686302550137043, -0.01597452536225319, -0.012722933664917946, -0.01924186199903488, -0.007144840434193611, -0.021084168925881386, 0.037696413695812225, 0.02571355178952217, 0.02270602621138096, 0.01977723278105259, -0.0039660753682255745, -0.008447838947176933, 0.01623433642089367, 0.0011051867622882128, -0.061882585287094116, -0.009904362261295319, -0.026894517242908478, -0.021761255338788033, 0.01760425604879856, 0.016013890504837036, -0.02840615250170231, 0.013541735708713531, -0.03213800489902496, 0.028185706585645676, 0.029193462803959846, 0.007758942432701588, 0.017462540417909622, -0.0062551796436309814, -0.027020487934350967, -0.028579361736774445, 0.010841261595487595, -0.06071736663579941, -0.018218358978629112, -0.027713319286704063, -0.022863488644361496, 0.01273867953568697, 0.025398628786206245, 0.025697806850075722, 0.012612709775567055, 0.004385318141430616, 0.02028111182153225, -0.011447491124272346, -0.019037161022424698, 0.016753962263464928, -0.005393075291067362, -0.026658324524760246, -0.026579594239592552, 0.049600545316934586, -0.019320592284202576, -0.019415071234107018, 0.03347643092274666, 0.014612478204071522, 0.035271499305963516, 0.009164291433990002, -0.020202379673719406, 0.0329095683991909, 0.018564775586128235, 0.028957270085811615, 0.017667241394519806, -0.003540927777066827, 0.008077803067862988, 0.005456059705466032, 0.007652655243873596, -0.03243718296289444, 0.042010873556137085, -0.01273867953568697, 0.027225187048316002, 0.0006318164523690939, 0.015313183888792992, -0.02317841351032257, 0.005873334128409624, 0.003970012068748474, -0.03911357372999191, 0.03253166005015373, -0.06770867854356766, 0.01850179024040699, -0.023792514577507973, 0.012518232688307762, -0.0032791472040116787, 0.015895793214440346, -0.016801200807094574, -0.0006948012742213905, -0.002169039798900485, 0.001939735608175397, -0.007530622184276581, 0.025650566443800926, -0.04424683377146721, -0.03829476982355118, 0.026768548414111137, -0.017383810132741928, -0.013982629403471947, -0.015029752627015114, -0.04103460907936096, -0.015919413417577744, -0.06701584905385971, 0.006707882974296808, 0.006877155043184757, 0.032626137137413025, -0.005306471139192581, 0.004995483439415693, -0.05983557924628258, -0.04777398332953453, 0.007298365700989962, -0.008337615057826042, 0.04134953394532204, -0.052403368055820465, 0.010242906399071217, 0.013502370566129684, 0.04345952346920967, -0.018564775586128235, 0.04638832062482834, -0.016753962263464928, -0.046199362725019455, -0.002481995616108179, -0.026815786957740784, 0.008935971185564995, -0.00938473828136921, 0.01760425604879856, 0.008046310395002365, 0.030342936515808105, 0.006621278822422028, -0.008408472873270512, -0.017131870612502098, 0.02017088793218136, -0.04843532666563988, -0.0032437180634588003, 0.006892900913953781, -0.019178876653313637, 0.010660180822014809, -0.00824313797056675, -0.008211645297706127, -0.02369803749024868, -0.02165103144943714, -0.01280953735113144, 0.008605300448834896, 0.001155377714894712, -0.0020037044305354357, 0.03479911386966705, -0.009180037304759026, 0.026689816266298294, 0.027461381629109383, -0.00021737143106292933, 0.01607687585055828, 0.015895793214440346, -0.02155655436217785, -0.031114500015974045, -0.020580289885401726, 0.008935971185564995, -0.02382400818169117, -0.010998724028468132, 0.015029752627015114, -0.00855806190520525, 0.003346068551763892, 0.0010677895043045282, 0.020816482603549957, -0.020060664042830467, -0.018470298498868942, 0.009597311727702618, 0.021509315818548203, -0.03117748536169529, -0.03602731600403786, 0.0557415634393692, -0.01291976124048233, 0.02902025543153286, -0.055174700915813446, -0.04160147160291672, 0.018045149743556976, -0.03690910339355469, 0.035680901259183884, -0.012313531711697578, 0.003662960836663842, -0.00025538375484757125, 0.009148544631898403, -0.04361698776483536, 0.023146919906139374, -0.03637373447418213, -0.009282387793064117, 0.004153061658143997, -0.031618379056453705, 0.0380113385617733, -0.01057357620447874, -0.012431629002094269, 0.007203888613730669, -0.024753034114837646, 0.05234038457274437, 0.027020487934350967, 0.0038617567624896765, 0.011597080156207085, 0.05794603377580643, -0.00849507749080658, -0.025965491309762, 0.018942683935165405, 0.004700242076069117, -0.0008862160611897707, -0.016407545655965805, 0.033633891493082047, -0.020092157647013664, 0.034925080835819244, 0.0014319204492494464, -0.008282504044473171, -0.00969178881496191, 0.016171352937817574, 0.04131804034113884, -0.0030783829279243946, 0.04245176911354065, 0.028075482696294785, 0.06487436592578888, -0.002304850611835718, 0.05051382631063461, 0.021493569016456604, -0.03451567888259888, 0.0068495990708470345, -0.01876947656273842, 0.0035743885673582554, -0.007971515879034996, -0.008534442633390427, -0.02102118358016014, 0.0013266177847981453, 0.01476206723600626, -0.011904130689799786, 0.035775378346443176, 0.003956234082579613, 0.016061129048466682, -0.0011622667079791427, -0.00256466306746006, -0.055552609264850616, 0.024264901876449585, -0.013218938373029232, 0.0024583761114627123, -0.00038430580752901733, 0.01475419383496046, -0.0048025925643742085, 0.00835336185991764, 0.03977491334080696, -0.014714828692376614, 0.009636676870286465, -0.0017389714485034347, -0.0025764727033674717, -0.005121453199535608, 0.018202612176537514, 0.013069350272417068, 0.007967579178512096, -0.030138235539197922, -0.03634224086999893, 0.020722005516290665, 0.013793675228953362, -0.012085212394595146, -0.013707071542739868, 0.03942849487066269, 0.0027929830830544233, -0.0077353231608867645, 0.012321405112743378, -0.030468905344605446, -0.03407478705048561, 0.042010873556137085, -0.05104919523000717, -0.02141483873128891, 0.021115660667419434, -0.021477822214365005, -0.005873334128409624, -0.019430816173553467, 0.009605185128748417, -0.022658787667751312, 0.014478635042905807, -0.022611549124121666, 0.004660876467823982, -0.07274746894836426, 0.0070661092177033424, 0.013588974252343178, -0.011093201115727425, 0.029980773106217384, 0.01607687585055828, 0.0012419818667694926, 0.04446728155016899, -6.22774678049609e-05, -0.04978949949145317, 0.07281044870615005, -0.027587350457906723, 0.0034385775215923786, -0.022580057382583618, -0.04128654673695564, 0.02065902017056942, -0.026296161115169525, -0.03665716573596001, 0.03501955792307854, 0.016675230115652084, -0.014132218435406685, -0.0018472266383469105, 0.024264901876449585, 0.0009073750698007643, 0.014549492858350277, -0.04471922293305397, 0.01760425604879856, 0.035428959876298904, 0.006845662370324135, -0.006511055398732424, -0.0072747464291751385, -0.012203308753669262, 0.00535764591768384, -0.03470463678240776, 0.0006490388768725097, -0.014305426739156246, 0.046703241765499115, -0.06474839150905609, 0.03508254513144493, -0.001677954918704927, -0.01071529183536768, -0.003456291975453496, 0.006416578311473131, 0.003907027188688517, 0.012400136329233646, -0.030232712626457214, -0.007621163036674261, 0.014699081890285015, -0.00040325045119971037, -0.007825863547623158, -0.0354919470846653, 0.015872174873948097, -0.02026536501944065, 0.030216965824365616, 0.0033874022774398327, 0.006861408706754446, -0.004420747049152851, 0.00862891972064972, -0.02346184477210045, -0.002019450766965747, -0.01248674001544714, -0.012526106089353561, 0.013092969544231892, 0.014360538683831692, -0.02713070996105671, 0.005495425313711166, -0.03949148207902908, -0.037570443004369736, 0.04106610268354416, 0.028028244152665138, -0.003505498869344592, 0.004212109837681055, -0.022989459335803986, -0.02587101422250271, 0.03391732648015022, 0.0158485546708107, -0.004861640743911266, -0.03281509131193161, 0.019855964928865433, 0.0018245914252474904, 0.033381953835487366, 0.018706491217017174, 0.023099681362509727, 0.012785918079316616, 0.012061593122780323, -0.0012439502170309424, -0.006270925980061293, -0.005404884926974773, -0.0016661452827975154, -0.0017173204105347395, 0.029429657384753227, -0.02560332790017128, -0.011101074516773224, 0.00409007677808404, -0.0004212109779473394, -0.015754077583551407, 0.03640522435307503, -0.015313183888792992, -0.014966767281293869, -0.031508155167102814, 0.011959242634475231, -0.017525525763630867, -0.0008035484934225678, -0.01599027030169964, 0.02700474113225937, -0.004822275135666132, 0.028280183672904968, -0.022721773013472557, 0.0072235711850225925, 0.011935623362660408, 0.024705795571208, 0.023414606228470802, 0.031004276126623154, -0.012289912439882755, -0.02242259494960308, -0.015069117769598961, -0.013604721054434776, 0.004767163656651974, 0.0019613865297287703, 0.033130016177892685, 0.012896141968667507, -0.00424753874540329, -0.01273867953568697, -0.00267882295884192, 0.0035625786986202, 0.026563847437500954, 0.0021651030983775854, 0.03081532195210457, 0.01545489951968193, 0.0532536655664444, 0.004940371494740248, 0.01659649983048439, 0.014407777227461338, -0.014360538683831692, 0.005727681796997786, 0.010227159596979618, -0.026658324524760246, 0.017887689173221588, 0.022973712533712387, 0.01900566928088665, -0.012707186862826347, 0.018816715106368065, 0.029114732518792152, 0.07564476877450943, 0.0007440081681124866, 0.029949281364679337, -0.006794487126171589, -0.03081532195210457, -0.001780305290594697, 0.02776055969297886, -0.011974988505244255, 0.02092670649290085, -0.03917655721306801, -0.0028205388225615025, 0.04027879238128662, 0.016187097877264023, -0.03001226671040058, 0.0136204669252038, 0.0017753845313563943, 0.02991778962314129, -0.00721963495016098, -0.029429657384753227, -0.01451800111681223, -0.016659485176205635, 0.0057867299765348434, -0.027225187048316002, -0.06726778298616409, 0.012982745654881, -0.018580522388219833, 0.018596267327666283, -0.051269643008708954, -0.007215698249638081, -0.019950442016124725, -0.02320990525186062, 0.0018442742293700576, 0.006369339767843485, -0.013447258621454239, -0.022847743704915047, 0.03464164957404137, -0.016565008088946342, -0.006570104043930769, 0.009502834640443325, 0.0008581681759096682, -0.027571603655815125, -0.040089838206768036, 0.015116356313228607, -0.008833620697259903, -0.014242442324757576, 0.01810813508927822, -0.0028854920528829098, 0.010235032998025417, 0.015447027049958706, -0.03190181031823158, -0.016832692548632622, -0.020706258714199066, -0.004857704043388367, -0.01082551572471857, -0.02609146200120449, 0.02457982487976551, -0.02330438233911991, -0.004286904353648424, 0.010746784508228302, 0.032106511294841766, -0.008014817722141743, -0.010628688149154186, 0.012911887839436531, -0.020485812798142433, 0.013321288861334324, 0.004456175956875086, 0.03220098838210106, -0.006026859860867262, 0.02242259494960308, -0.02878406271338463, -0.01216394267976284, 0.009983093477785587, -0.0018954493571072817, 0.014651843346655369, 0.0016622086986899376, 0.0008586602052673697, 0.0017625908367335796, -0.028343169018626213, 0.007821926847100258, -0.01620284467935562, 0.05363157391548157, -0.005932382773607969, 0.00022364531469065696, -0.0015362390549853444, -0.011841146275401115, -0.0354604534804821, -0.0030350808519870043, 0.007373160216957331, -0.008069929666817188, -0.0016100493958219886, -0.004188490565866232, 0.012533978559076786, 0.049222636967897415, -0.04679771885275841, -0.005578092765063047, -0.026579594239592552, -0.010975104756653309, 0.0026768548414111137, -0.029240701347589493, 0.035932838916778564, -0.011045962572097778, 0.00803450122475624, -0.034011803567409515, 0.008920225314795971, -0.005889080464839935, 0.003944424446672201, 0.0007213730132207274, 0.01710037887096405, 0.026138700544834137, -0.015021879225969315, -0.02862660028040409, 0.005751301068812609, 0.0003437101258896291, -0.00023643911117687821, 0.02091095969080925, -0.002879587234929204, -0.022123416885733604, 9.939791925717145e-05, -0.015746204182505608, -0.033759862184524536, -0.014864416792988777, -0.000627879926469177, -0.007046426646411419, 0.006266989279538393, -0.027666080743074417, -0.03265762701630592, 0.006207941100001335, -0.0013423638883978128, -0.017289333045482635, -0.022485580295324326, -0.019714247435331345, -0.0016543356468901038, -0.007459764368832111, -0.026390638202428818, -0.0050505949184298515, -0.013659832067787647, 0.01724209450185299, -0.029177717864513397, -0.029429657384753227, 0.019178876653313637, 0.023146919906139374, -0.00020580780983436853, -0.0171161238104105, 0.0020548796746879816, -0.0027063789311796427, -0.016250083222985268, -0.012463120743632317, -0.02017088793218136, 0.0148880360648036, 0.0023678354918956757, 0.015061244368553162, -0.00969178881496191, 0.002747712656855583, -0.009211529977619648, -0.005152945406734943, 0.01750977896153927, -0.050860241055488586, 0.05038785561919212, 0.003877502866089344, -0.002647330751642585, -0.003251591231673956, -0.009739027358591557, 0.023587815463542938, 2.2681300833937712e-05, 0.0052277399227023125, 0.0024012962821871042, -0.008376981131732464, -0.009243021719157696, 0.025304151698946953, 0.0246900487691164, 0.02317841351032257, 0.02028111182153225, -0.017147617414593697, -0.006680327467620373, -0.0010392494732514024, -0.022721773013472557, 0.0055190445855259895, 0.018438804894685745, 0.007503066677600145, -0.01153409481048584, 0.03464164957404137, -0.025288404896855354, -0.05520619451999664, 0.015124229714274406, 0.017037393525242805, 0.011864765547215939, 0.01812388189136982, -0.035554930567741394, 0.026815786957740784, -0.008329742588102818, 0.008636793121695518, 0.018029404804110527, -0.011187678202986717, 0.00938473828136921, 0.024753034114837646, 0.023666545748710632, 0.017320824787020683, -0.007987262681126595, 0.0007868181564845145, -0.03750745952129364, 0.003698389744386077, -0.025052212178707123, 0.015596616081893444, 0.01000671274960041, 0.018045149743556976, -0.0027634589932858944, 0.0031315265223383904, 0.021383345127105713, -0.02229662612080574, 0.008069929666817188, -0.010683800093829632, 0.006605532951653004, -0.012896141968667507, -0.0040231551975011826, -0.003849947126582265, 0.004160934593528509, 0.005117516499012709, -0.004412873648107052, -0.025571836158633232, 0.0011347108520567417, 0.007073982618749142, -0.005830032285302877, 0.004944308195263147, 0.009431976824998856, -0.006869281642138958, 0.027902275323867798, -0.020312603563070297, 0.04282967746257782, 0.00012609265104401857, 0.02522541955113411, -0.009526453912258148, 0.034263741225004196, -0.014691208489239216, 0.014273934066295624, 0.014336919412016869, 0.004306586924940348, 0.022784758359193802, -0.00962880440056324, 0.012022227048873901, -0.006514992099255323, 0.01026652567088604, -0.013903899118304253, 0.02763458900153637, 0.027272425591945648, 0.027650335803627968, 0.037822384387254715, -0.008731270208954811, 0.0316498726606369, -0.010250778868794441, 0.0055190445855259895, -0.008613173849880695, 0.018722238019108772, -0.019037161022424698, 0.006432324647903442, 0.0012734743067994714, 0.014966767281293869, -0.007471574004739523, 0.0042003002017736435, -0.010392495431005955, 0.004361698869615793, 0.02612295374274254, 0.013494497165083885, -0.015494265593588352, -0.020737752318382263, -0.02269028127193451, -0.010927866213023663, 0.03116173855960369, 0.0002306573005625978, 0.0005560378776863217, 0.0043656351044774055, 0.04068819433450699, 0.017840450629591942, -0.005499362014234066, 0.0036531195510178804, 0.004121568985283375, 0.009109179489314556, 0.002728029852733016, 0.0183915663510561, -0.020107902586460114, -0.01887969858944416, -0.012069465592503548, -0.003096097381785512, 3.210749491699971e-05, -0.02635914646089077, -0.00372397736646235, 0.013588974252343178, -0.019588278606534004, 0.018407313153147697, -0.00324568641372025, 0.008723397739231586, -0.00987287051975727, -0.01001458615064621, -0.0015283660031855106, 0.011730922386050224, 0.0064953095279634, 0.009487087838351727, 0.02902025543153286, 0.017651494592428207, -0.0050112297758460045, 0.02154080756008625, -0.018706491217017174, 0.01801365800201893, -0.008266757242381573, 0.0329410582780838, 0.014147965237498283, -0.011478982865810394, 0.020470065996050835, -0.003619658760726452, -0.002357994206249714, 0.02026536501944065, 3.678214852698147e-05, 0.005467869341373444, -0.002413105918094516, -0.02459557168185711, 0.023493336513638496, 0.012148196808993816, -0.025697806850075722, 0.01773022674024105, 0.006022923160344362, 0.005393075291067362, 0.012274166569113731, -0.016816945746541023, -0.004275094717741013, 0.03741298243403435, -0.025052212178707123, -0.0023127237800508738, 0.023115428164601326, 0.011045962572097778, -0.013911771588027477, 0.0028913968708366156, -0.011093201115727425, -0.020344097167253494, 0.003117748536169529, -0.016313068568706512, 0.014281807467341423, 0.0009152481216005981, 0.03564940765500069, -0.03196479380130768, -0.03637373447418213, 0.015793442726135254, 0.00481046549975872, 0.013250431045889854, -0.008565935306251049, -0.015415534377098083, 0.005798540078103542, -0.03624776378273964, 0.004475858528167009, 0.03448418900370598, 0.001021535019390285, 0.0027103153988718987, -0.016265830025076866, -0.020989689975976944, 0.009959474205970764, -0.0032909568399190903, 0.004050711169838905, 0.018549028784036636, -0.034673143178224564, 0.023729531094431877, -0.03040592186152935, -0.021509315818548203, -0.019871709868311882, -0.03816879913210869, -0.030894054099917412, 0.0057788570411503315, 8.349794370587915e-06, -0.007932150736451149, 0.0069243935868144035, -0.023162666708230972, 0.013242557644844055, 0.035680901259183884, -0.015943031758069992, -0.005885143764317036, 0.014714828692376614, 0.01659649983048439, 0.028091229498386383, -0.002649298869073391, 0.017824703827500343, 0.041884902864694595, 0.04462474212050438, -0.02698899433016777, 0.006416578311473131, -0.0001847718667704612, 0.004318396560847759, 0.013770055957138538, 0.0076605286449193954, -0.032012034207582474, 0.0006962774787098169, -0.05470231547951698, -0.018974175676703453, -0.022501327097415924, 0.01927335374057293, 0.015565123409032822, 0.004983673803508282, -0.013809421099722385, -0.0018452584045007825, -0.004849831108003855, -0.012274166569113731, 0.009809885174036026, -0.01032163668423891, -0.001655319705605507, -0.011967115104198456, -0.02295796573162079, -0.01812388189136982, -0.02294222079217434, 0.03574388474225998, 0.005408821161836386, 0.013793675228953362, -0.00930600706487894, 0.0018718300852924585, 0.024044454097747803, -0.01388027984648943, 0.009817758575081825, 0.015580869279801846, 0.025241166353225708, -0.026453623548150063, 0.01090424694120884, -0.031020022928714752, 0.0048025925643742085, 0.01007757056504488, 0.022737519815564156, -0.0183915663510561, -0.00835336185991764, 0.0017586542526260018, 0.020611781626939774, 0.008062057197093964, 0.021194390952587128, -0.003353941487148404, -0.02520967274904251, -0.01083338912576437, 0.02687877044081688, -0.0030252395663410425, -0.02080073580145836, -0.002733934670686722, 0.031508155167102814, 0.005959938280284405, -0.00803843792527914, -0.014171584509313107, 0.04160147160291672, -0.015517884865403175, -0.005467869341373444, -0.024107439443469048, 0.025571836158633232, -0.031712856143713, 0.01887969858944416, -0.017194855958223343, -0.001075662556104362, 0.03253166005015373, -0.024422364309430122, -0.018423059955239296, -0.005306471139192581, -0.0012734743067994714, 0.019194623455405235, 0.01914738491177559, 0.036310747265815735, -0.0015391914639621973, 0.009746900759637356, 0.0017891625175252557, 0.0033992119133472443, 0.010203540325164795, 0.014565239660441875, 0.011951369233429432, -0.008447838947176933, 0.011014469899237156, 0.01033738348633051, 0.0034425139892846346, 0.010494844987988472, -0.013415765948593616, 0.02180849388241768, -0.007085792254656553, 0.006444134283810854, -0.0032122258562594652, -0.006605532951653004, -0.03204352781176567, 0.006026859860867262, 0.0038401056081056595, -0.010864880867302418, -0.02432788535952568, 0.030500398948788643, -0.008010881952941418, 0.0034129898995161057, 0.011770287528634071, -0.01323468517512083, -0.015635980293154716, 0.0005309423431754112, -0.013714944012463093, 0.023288637399673462, 0.023650798946619034, 0.006570104043930769, 0.004546716809272766, -0.019855964928865433, -0.010990850627422333, 0.096303790807724, 0.013470877893269062, 0.01051059179008007, 0.015242326073348522, 0.007388906553387642, -0.0029799691401422024, -0.030594876036047935, 0.009683915413916111, 0.028689585626125336, -0.007211761549115181, 0.014171584509313107, 0.004763226956129074, -0.018832460045814514, -0.009431976824998856, 0.013533863238990307, -0.04349101707339287, -0.005058468319475651, 0.03198054060339928, -0.0027378713712096214, 0.026327654719352722, 0.007684147916734219, 0.003531086491420865, -0.01965126395225525, -0.0031020021997392178, -0.010628688149154186, -0.02015514113008976, 0.04569548740983009, 0.004345952533185482, 0.006133146584033966, -0.018470298498868942, -0.021714016795158386, -0.027162203565239906, -0.002909111324697733, -0.009613057598471642, -0.02650086209177971, 0.01153409481048584, -0.002015514299273491, 0.01697440817952156, 0.01999768055975437, 0.010250778868794441, -0.017651494592428207, 0.028075482696294785, -0.005223803222179413, -0.020580289885401726, -0.002773300278931856, -0.005082087591290474, -0.006322101224213839, 0.018564775586128235, 0.004593955352902412, -0.004778973292559385, -0.00424753874540329, -0.02155655436217785, 0.014210949651896954, -0.030972784385085106, -0.01773022674024105, 0.02902025543153286, -0.014911655336618423, 0.006778741255402565, 0.023036697879433632, 0.008872986771166325, 0.011943495832383633, 0.002852031262591481, -0.010526337660849094, -0.022249387577176094, 0.00994372833520174, 0.009857123717665672, -0.0048419577069580555, -0.005751301068812609, 0.010030332021415234, 0.009998840279877186, -0.03479911386966705, 0.002857936080545187, 0.0054363771341741085, -0.00408614007756114, -0.002852031262591481, 0.023477591574192047, -0.003580293385311961, -0.0016061129281297326, -0.006637025158852339, 0.00930600706487894, 0.0021670714486390352, -8.002270624274388e-05, -0.007884912192821503, 0.0075345588847994804, -0.008534442633390427, -0.013541735708713531, 0.0030823196284472942, -0.001230172230862081, -0.03341344743967056, -0.010486972518265247, -0.02965010330080986, 0.03716104477643967, -0.03243718296289444, 0.00913279876112938, -0.01813962683081627, -0.009117052890360355, 0.041003115475177765, -0.01977723278105259, -0.0035980078391730785, 0.009109179489314556, 0.025288404896855354, -0.0011898225639015436, 0.029051747173070908, -0.011998607777059078, 0.0005225771456025541, -0.02393423020839691, -0.021005436778068542, 0.019541040062904358, -0.000627879926469177, -0.0029465085826814175, -0.0056528872810304165, -0.003536991309374571, 0.002296977676451206, 0.0234303530305624, 0.029492640867829323, 0.002674886491149664, 0.008699778467416763, -0.0036787071730941534, -0.021241629496216774, -0.0007046426762826741, -0.0133134163916111, 0.02799675241112709, 0.014321173541247845, 0.003098065732046962, 0.015053371898829937, 0.008904478512704372, 0.00955794658511877, -0.003798771882429719, 0.012313531711697578, 0.0014899845700711012, -0.015195087529718876, -0.004420747049152851, 0.006593723315745592, 0.031224723905324936, -0.0015332866460084915, -0.025697806850075722, 0.034925080835819244, -0.027445634827017784, 0.011636445298790932, 0.011557714082300663, -0.02054879628121853, -0.00204307003878057, 0.022217893972992897, 0.02332012914121151, -0.0027693638112396, 0.0046175746247172356, -0.031020022928714752, 0.013998376205563545, 0.014407777227461338, 0.009077686816453934, 0.022973712533712387, -0.010943612083792686, -0.007664464879781008, -0.009164291433990002, -4.846878437092528e-05, 0.007455827668309212, -0.0006869281642138958, 0.01432904601097107, 0.020060664042830467, -0.021855732426047325, 0.0015844618901610374, -0.018060896545648575, -0.013431512750685215, -0.01400624867528677, 0.024753034114837646, 0.0297760721296072, 0.011014469899237156, 0.030311444774270058, -0.005841841921210289, -0.020816482603549957, 0.01999768055975437, -0.018344327807426453, -0.004515224136412144, 0.010959358885884285, 0.0158406812697649, 0.027193695306777954, -0.006845662370324135, 0.0027634589932858944, 0.02394997701048851, -0.005326153710484505, -0.021729761734604836, -0.023005204275250435, -0.027036232873797417, 0.027776304632425308, 0.0065897866152226925, 0.009361119009554386, 0.0018747824942693114, -0.006554357707500458, 0.005621395073831081, -0.008290376514196396, 0.005684379953891039, 0.0316498726606369, 0.003436609171330929, -0.0009708519210107625, 0.006310291588306427, -0.0024249155540019274, -0.0061646392568945885, -0.03234270587563515, 0.027335410937666893, -0.01597452536225319, 0.005345836281776428, -0.005499362014234066, 0.0007016902673058212, 0.02698899433016777, -0.009400484152138233, 0.0036019443068653345, -0.025020718574523926, 0.010794023051857948, -0.005495425313711166, -0.013392146676778793, 0.02875256910920143, 0.012274166569113731, -0.009581565856933594, -0.031744349747896194, 0.03133494779467583, -0.010518464259803295, 0.00706217298284173, -0.010471225716173649, 0.0024741224478930235, 0.020942451432347298, 0.003137431340292096, -0.011392379179596901, 0.011061708442866802, -0.001651383237913251, -0.04204236716032028, 0.007829800248146057, 0.025571836158633232, -0.012195435352623463, -0.009927982464432716, -0.012589090503752232, 0.030090996995568275, 0.005802476312965155, 0.010250778868794441, -8.752675785217434e-05, -0.02736690454185009, 0.011085327714681625, -0.02357206866145134, 0.008817874826490879, 0.0007420398760586977, 0.036688655614852905, 0.011069581843912601, -0.020060664042830467, 0.009613057598471642, 0.028059735894203186, -0.026910264045000076, -0.00012154101568739861, -0.007440081797540188, -0.02015514113008976, -0.013856659643352032, -0.0014112535864114761, -0.020706258714199066, 0.017068885266780853, -0.02583952248096466, 0.004385318141430616, -0.0008222471224144101, -0.02256431058049202, -0.014132218435406685, -0.008896606042981148, -0.01823410578072071, -0.011683683842420578, -0.02459557168185711, 0.004153061658143997, 0.019367830827832222, 0.0009191847057081759, 0.0038125498685985804, -0.0019771328661590815, -0.02650086209177971, -0.012604836374521255, 0.026658324524760246, -0.006601596251130104, -0.0183915663510561, 0.0034936892334371805, -0.011683683842420578, -0.006310291588306427, 0.008857239969074726, 0.0037318505346775055, -0.008439965546131134, -0.021477822214365005, 0.004558526445180178, 0.0027851099148392677, -0.008132915012538433, -0.004597891587764025, 0.02080073580145836, 0.0021375473588705063, 0.0033933070953935385, 0.019037161022424698, -0.017021646723151207, 0.008644666522741318, 0.025918252766132355, 0.02127312310039997, -0.013242557644844055, 0.026768548414111137, 0.011360886506736279, 0.03514552861452103, 0.0064244517125189304, -0.020233873277902603, -0.044404298067092896, 0.01570683903992176, -0.0032102575059980154, -0.0056961895897984505, 0.013959010131657124, 0.012510359287261963, 0.04727010801434517, -0.004853767808526754, -0.021777000278234482, -0.025902505964040756, 0.0012291880557313561, 0.014951021410524845, -0.011967115104198456, -0.012659948319196701, -0.01573833078145981, 0.004700242076069117, -0.003635405097156763, 0.03385433927178383, -0.0016415418358519673, -0.012124577537178993, -0.010864880867302418, 0.02089521288871765, -0.007896721363067627, -0.031208977103233337, -0.01900566928088665, -0.025335643440485, 0.001469317707233131, 0.010518464259803295, -0.03284658119082451, 0.011069581843912601, -0.0107625313103199, -0.007255063857883215, -0.014880163595080376, -0.020092157647013664, -0.027823543176054955, -0.010723165236413479, -0.0022359611466526985, -0.011478982865810394, 0.0152108334004879, 0.02939816378057003, 0.01008544396609068, -0.0005265137297101319, -0.02483176440000534, 0.018926937133073807, -0.00408614007756114, -0.005589902866631746, -0.0316341258585453, -0.01248674001544714, 0.003739723702892661, 0.006955885794013739, -0.002747712656855583, 0.0028402216266840696, 0.0034425139892846346, -0.0022418659646064043, -0.03432672470808029, 0.01146323699504137, -0.037696413695812225, 0.012045846320688725, -0.00018329566228203475, 0.024705795571208, 0.013896025717258453, -0.0037220090162009, 0.021777000278234482, 0.0004303142486605793, 0.022280879318714142, 0.0005304502556100488, -0.035177022218704224, -0.013447258621454239, -0.0032063208054751158, 0.01177816092967987, -0.005818222649395466, 0.0005151961231604218, 0.006365403067320585, -0.00481440220028162, -0.0018964335322380066, -7.448693213518709e-05, -0.014029867947101593, -0.01160495262593031, 0.009014702402055264, 0.001914147986099124, -0.009644550271332264, 0.030185474082827568, -0.004389254376292229, -0.008140787482261658, -0.01606900244951248, 0.0010451542912051082, -0.001415190170519054, 0.015069117769598961, -0.01008544396609068, -0.033161506056785583, -0.00288155535236001, -0.004145188257098198, 0.026422131806612015, 0.019320592284202576, 0.03464164957404137, -0.014045614749193192, -0.007503066677600145, -0.010998724028468132, -0.01965126395225525, 0.02067476697266102, 0.015273818746209145, -0.004184553865343332, -0.010282271541655064, 0.01824985072016716, -0.00976264663040638, -0.0031236533541232347, -0.005711935926228762, 0.004235729109495878, 0.008203772827982903, -0.00251939264126122, 0.006983441766351461, 0.006310291588306427, -0.03128770738840103, 0.014376284554600716, 0.020596034824848175, -0.018281344324350357, -0.018045149743556976, -0.001103218412026763, 0.00027039184351451695, -0.0030705099925398827, -0.01573045924305916, -0.014226695522665977, 0.005959938280284405, -0.013108715415000916, -0.008778508752584457, 0.023005204275250435, 0.04273520037531853, -0.010534211061894894, 0.002596155507490039, -0.01645478419959545, -0.00388340768404305, -0.026815786957740784, 0.002192659070715308, -0.010408241301774979, -0.00943984929472208, 0.0158485546708107, -0.003322449279949069, -0.009274514392018318, 0.011912004090845585, -0.01539191510528326, -0.0152108334004879, 0.012211182154715061, 0.02583952248096466, 0.017415301874279976, -0.00987287051975727, -0.01773022674024105, -0.0038164863362908363, 0.0037377553526312113, -0.011982861906290054, -0.0012262356467545033, 0.013888152316212654, 0.010298017412424088, -0.009148544631898403, -0.004672686103731394, 0.0009678995120339096, -0.0013167763827368617, 0.0054875523783266544, 0.007085792254656553, 0.017399556934833527, 0.009069813415408134, -0.02294222079217434, 0.0028166023548692465, 0.007022807374596596, -0.013636212795972824, 0.024170424789190292, -0.009644550271332264, -0.01242375560104847, 0.029996519908308983, -0.0058969538658857346, -0.00048198149306699634, 0.03204352781176567, -0.0003114796127192676, 0.00913279876112938, -0.02952413447201252, 0.01051059179008007, 0.0005535774980671704, 0.005223803222179413, 0.002968159504234791, -0.005731618497520685, -0.008857239969074726, 0.0024544396437704563, -0.011274282820522785, 0.011408125050365925, -0.007259000558406115, 0.005920573137700558, -0.012242673896253109, 0.0009324705461040139, 0.009298133663833141, 0.014958894811570644, 0.04736458510160446, 0.004483731929212809, 0.008408472873270512, 0.019336339086294174, -0.005810349714010954, -0.009990966878831387, 0.023335875943303108, 0.012494613416492939, -0.0035507690627127886, 0.007581797428429127, -0.018407313153147697, -0.0018147501396015286, 0.0008438981603831053, -0.01736806333065033, -0.005711935926228762, -0.00697163213044405, -0.017462540417909622, -0.0033657513558864594, 0.04015282168984413, -0.014565239660441875, 0.008928097784519196, 0.011447491124272346, 0.0017084631836041808, 0.003300798125565052, -0.0023638990242034197, 0.0012656012549996376, 0.01280953735113144, -0.011227044276893139, 0.015510011464357376, 0.018454551696777344, 0.009502834640443325, -0.02295796573162079, -0.015265945345163345, 0.01475419383496046, -0.006668517831712961, 0.00016607325233053416, 0.00810929574072361, 0.020202379673719406, 0.014242442324757576, 0.00576704740524292, 0.0067984238266944885, -0.008935971185564995, 0.0009368991595692933, 0.016911424696445465, 0.022485580295324326, -0.029051747173070908, 0.00031295581720769405, 0.005530854221433401, -0.0017980197444558144, 0.00026399496709927917, -0.005263168830424547, 0.013329162262380123, 0.013069350272417068, -0.004963991232216358, 0.0017350349808111787, -0.003409053198993206, 0.014840797521173954, -0.009400484152138233, 0.00937686488032341, 0.006133146584033966, 0.00032427339465357363, -0.00721963495016098, 0.001130774267949164, -0.002411137567833066, -0.023776769638061523, -0.0042081731371581554, -0.015250199474394321, 0.004227856174111366, 0.010526337660849094, -0.0035488009452819824, 0.0008935971418395638, 0.03144517168402672, 0.000392670975998044, 0.023886991664767265, 0.0027693638112396, -0.02621743083000183, -0.01861201412975788, 0.0404992401599884, -0.011990734376013279, -0.006853535771369934, 0.008416346274316311, 0.012431629002094269, -0.010282271541655064, -0.013848787173628807, -0.011447491124272346, 0.0008148660999722779, 0.009345372207462788, 0.012502486817538738, -0.023509083315730095, 0.0019200528040528297, 0.0058969538658857346, 0.0018550996901467443, 0.002113928087055683, -0.0032279719598591328, -0.012360770255327225, -0.0016996059566736221, -0.015801316127181053, -0.013423639349639416, 0.007243254221975803, 0.0026315844152122736, 0.02776055969297886, -0.0014801432844251394, 0.012053719721734524, -0.011053835973143578, -0.015935158357024193, -0.011415998451411724, 0.019367830827832222, -0.008010881952941418, -0.009904362261295319, 0.0171161238104105, 0.006416578311473131, 0.006546484772115946, -0.014392031356692314, -0.014848670922219753, 0.0027181885670870543, 0.002127705840393901, -0.007436145097017288, 0.00035945631680078804, 0.003690516809001565, -0.004397127777338028, -0.004944308195263147, -0.0017911307513713837, 0.017903434112668037, -0.02941391058266163, -0.012589090503752232, -0.006219750735908747, 0.006522865500301123, 0.004464048892259598, 0.0034523552749305964, 0.0034425139892846346, 0.0025508850812911987, 0.00983350444585085, -0.000918200530577451, -0.0076605286449193954, 0.028043990954756737, 0.005566283129155636, -0.0026847277767956257, 0.02267453446984291, 0.012904014438390732, -0.030374428257346153, -0.0008872002363204956, 0.00424360204488039, 0.02051730453968048, -0.023036697879433632, 0.016627991572022438, -0.011486856266856194, -0.015761950984597206, -0.021099913865327835, -0.022280879318714142, -0.008282504044473171, -0.0004652511270251125, -0.015628108754754066, -0.014998259954154491, -0.004940371494740248, 0.006625215522944927, -0.013179573230445385, 0.0018560838652774692, 0.004700242076069117, 0.0023717719595879316, -0.024674301967024803, -0.0031098753679543734, -0.022107671946287155, -0.007932150736451149, 0.008298249915242195, -0.01861201412975788, -0.01355748251080513, -0.0142660615965724, -0.00160119216889143, -0.00032205908792093396, 0.0019200528040528297, -0.012022227048873901, -0.012360770255327225, -0.0006455943803302944, 0.017320824787020683, 0.0009792171185836196, 0.004353825468569994, -0.02368229255080223, 0.022658787667751312, 0.011762415058910847, 0.02431214042007923, 0.013770055957138538, 0.006436261348426342, 0.008518696762621403, 0.027729066088795662, 0.022737519815564156, 0.02051730453968048, -0.0285321231931448, -0.02292647399008274, 0.005735555198043585, 0.0010067729745060205, 0.0049679274670779705, 0.036184776574373245, 0.0014584922464564443, 0.003905058838427067, 0.025918252766132355, -0.0202496200799942, -0.011667937971651554, 0.01991894841194153, -0.010423987172544003, -0.0022398976143449545, -0.007936087436974049, 0.007507002912461758, -0.013911771588027477, 0.01572258584201336, 0.020123649388551712, -0.0017606224864721298, -0.014021995477378368, 0.003580293385311961, 0.022391103208065033, 0.008912351913750172, -0.01645478419959545, 0.00440106401219964, -0.004188490565866232, 0.0023422478698194027, -0.00888085924088955, 0.023272890597581863, 0.0017143680015578866, 0.014872290194034576, 0.00799513515084982, 0.014140091836452484, 0.01762000285089016, 0.003962138667702675, -0.011203425005078316, -0.005503298714756966, 0.014565239660441875, 0.001233124639838934, -0.0023796451278030872, -0.006148892920464277, 0.003847978776320815, -0.027319664135575294, -0.02089521288871765, -0.01153409481048584, 0.031350694596767426, 0.0020863721147179604, 0.003328354097902775, 0.0152108334004879, 0.0058615244925022125, 0.006259116344153881, 0.002174944616854191, -0.007329858373850584, -0.007873102091252804, -0.016816945746541023, -0.008195899426937103, 0.0026866961270570755, 4.560863453662023e-05, 0.006129210349172354, 0.003879471216350794, -0.023367367684841156, -0.02544586732983589, -3.60748017556034e-05, -0.014880163595080376, -0.016627991572022438, -0.001232140464708209, 0.010313764214515686, 0.016753962263464928, -0.010038205422461033, -0.02105267532169819, -0.019352085888385773, -0.0011593142990022898, 0.015903666615486145, 0.02785503678023815, -0.009187910705804825, -0.00535764591768384, 0.005782793741673231, 0.015297438018023968, 0.02609146200120449, -0.038704171776771545, 0.009927982464432716, 0.007203888613730669, 0.03536597639322281, -0.01064443401992321, 0.013927518390119076, 0.02155655436217785, -0.01636030711233616, -0.006700010038912296, 0.03700358048081398, -0.0012744584819301963, 0.022391103208065033, -0.016139859333634377, 0.00043646511039696634, -0.002877618884667754, -0.001989926677197218, 0.011132566258311272, -0.01121917087584734, 0.012124577537178993, 0.0023678354918956757, 0.02801249735057354, -0.005755237769335508, 0.021887224167585373, -0.01007757056504488, -0.011297902092337608, -0.014486508443951607, -0.007455827668309212, -0.011935623362660408, -0.00976264663040638, -0.02332012914121151, -0.018297089263796806, -0.00288352370262146, -0.003544864244759083, -0.011164058931171894, -0.0142581881955266, 0.02394997701048851, 0.001074678497388959, 0.00697163213044405, -0.007333794608712196, 0.011187678202986717, -0.001207537017762661, 0.014203076250851154, 0.00497580086812377, -0.0025548217818140984, -0.02927219495177269, 0.011069581843912601, -0.006613405887037516, 0.007105474825948477, -0.01007757056504488, -0.002544980263337493, -0.005881207529455423, -0.004613637924194336, -0.007542431820183992, 0.00816440675407648, -0.007770752068608999, -0.011242790147662163, -0.026280416175723076, 0.011242790147662163, 0.026170192286372185, 0.007034617010504007, 0.00624337000772357, -0.0071290940977633, -0.0008114216034300625, -0.028721077367663383, -0.010786150582134724, -0.010353129357099533, -0.0008596443803980947, -0.008975336328148842, -0.034673143178224564, -0.008518696762621403, -0.01634456031024456, 0.004582145716995001, 0.008313995786011219, 0.015218706801533699, 0.012935507111251354, 0.0002050697075901553, 0.026784293353557587, -0.006314228288829327, -0.0025331706274300814, -0.003727913834154606, 7.030434062471613e-05, 0.011376633308827877, 0.02621743083000183, 0.0043656351044774055, 0.0002908127207774669, 0.016029635444283485, 0.01876947656273842, 0.004586081951856613, 0.00449554156512022, 0.01621859148144722, -0.0025981238577514887, 0.015620235353708267, -0.003826327621936798, 0.021603792905807495, -0.00401725061237812, -0.021336106583476067, -0.006700010038912296, -0.010179921053349972, 0.011132566258311272, -0.015092737041413784, 0.010557830333709717, -0.02812272123992443, -0.04623085632920265, 0.018674999475479126, -0.028327422216534615, 0.005790666677057743, -0.033507924526929855, -0.020344097167253494, 0.004767163656651974, 0.016565008088946342, 0.014722701162099838, 0.003176796715706587, 0.015769824385643005, 0.014053487218916416, -0.019792979583144188, -0.013738563284277916, -0.005089960526674986, 0.018848206847906113, 0.010384622029960155, 0.016021763905882835, 0.00017529954493511468, 0.011006597429513931, -0.0028146340046077967, -0.0060701617039740086, 0.004448303021490574, -0.014951021410524845, 0.01710037887096405, -0.007101538125425577, -0.012392262928187847, -0.012408008798956871, -0.015092737041413784, 0.024611318483948708, -0.004279030952602625, 0.014234568923711777, 0.009085560217499733, 0.011801780201494694, 0.013431512750685215, 0.00608197133988142, 0.03662567213177681, -0.025146689265966415, -0.007121221162378788, 0.0036767388228327036, 0.00737709691748023, -0.017194855958223343, 0.00045122718438506126, 0.010502718389034271, -0.0014968735631555319, -0.006408705376088619, 0.020470065996050835, -0.001258712261915207, -0.00471992464736104, -0.0011967115569859743, 0.013045731000602245, 0.024044454097747803, 0.0005452123587019742, -0.012880395166575909, 0.011880511417984962, -0.029996519908308983, 0.0067157563753426075, 0.0015323025872930884, 0.006290608551353216, 0.007495193276554346, -0.029445402324199677, 0.0069322665221989155, 0.03391732648015022, -0.009431976824998856, -0.019714247435331345, 0.02229662612080574, -0.008266757242381573, -0.006278798915445805, 0.012045846320688725, -0.00236193067394197, 0.002426883904263377, 0.00955794658511877, 0.0036826436407864094, 0.006892900913953781, -0.01210095826536417, 0.004901006352156401, 0.00020408557611517608, -0.003981821704655886, -0.0027713319286704063, -0.02114715240895748, -0.012951252982020378, -0.005735555198043585, 0.006078035105019808, -0.016250083222985268, -0.0001238168333657086, 0.011250663548707962, -0.010951485484838486, -0.0070070610381662846, 6.34153766441159e-05, 0.014738447964191437, 0.020186634734272957, -0.01000671274960041, -0.013415765948593616, 0.0016307163750752807, -0.003613753942772746, 0.007573924493044615, -0.009101306088268757, 0.0016927169635891914, 0.00874701701104641, 0.00037101993802934885, 0.007428272161632776, 0.006601596251130104, 0.009707535617053509, -0.012565471231937408, 0.011770287528634071, -0.00037913909181952477, 0.003224035492166877, 0.0013531894655898213, 0.005940255708992481, 0.018785221502184868, 0.009266640990972519, 0.013588974252343178, -0.007510939612984657, -0.0005147040355950594, -0.0139353908598423, -0.020092157647013664, -0.013337035663425922, -0.03684611991047859, 0.014706955291330814, -0.009487087838351727, 0.008707650937139988, 6.821304850745946e-05, 0.006207941100001335, 0.018533281981945038, -0.003033112734556198, 0.010361002758145332, 0.011030216701328754, -0.009888616390526295, -0.00535764591768384, 0.016753962263464928, -0.015084863640367985, 0.009156418032944202, -0.010046078823506832, 0.009392610751092434, 0.008644666522741318, -0.027729066088795662, -0.005593839101493359, -0.01273867953568697, -0.020312603563070297, -0.017210600897669792, 0.014919528737664223, -0.009219402447342873, -0.011675810441374779, -0.0021946271881461143, 0.010982978157699108, -0.01572258584201336, -0.011935623362660408, 0.014210949651896954, -0.006416578311473131, -0.0183915663510561, 0.0018491948721930385, -0.005806413013488054, 0.014470761641860008, -0.01337640080600977, 0.0007833736599422991, -0.010298017412424088, -0.014478635042905807, 0.012699314393103123, -0.021084168925881386, 0.002639457583427429, -0.010935738682746887, 0.024642810225486755, 0.002143452176824212, 0.007869165390729904, 0.0048419577069580555, 0.007636909373104572, -0.011195551604032516, 0.01606900244951248, 0.011305774562060833, 0.003475974779576063, 0.010486972518265247, -0.004227856174111366, 0.004621510859578848, 0.01191987656056881, -0.015407660976052284, 0.0018167183734476566, -0.007329858373850584, -0.010951485484838486, 0.012573344632983208, 0.0005240533500909805, -0.01837582141160965, -0.02141483873128891, 0.026800040155649185, -0.010242906399071217, -0.008022691123187542, 0.01773022674024105, -0.0049679274670779705, 0.0006849599303677678, 0.0015618266770616174, 0.0004130918241571635, 0.025335643440485, 0.013833040371537209, 0.009715408086776733, 0.008392727002501488, 0.024879002943634987, 0.002192659070715308, 0.0029720962047576904, -0.015549377538263798, -0.010211413726210594, 0.006727566011250019, -0.019304847344756126, 0.0023205969482660294, -0.0015815094811841846, 0.02042282745242119, -0.003586198203265667, -0.003515340154990554, -0.005680443253368139, 0.010526337660849094, -0.01606900244951248, 0.016423290595412254, -0.004117632284760475, -0.010794023051857948, 0.016753962263464928, 0.010368876159191132, 0.005664696916937828, -0.0013315384276211262, -0.01464396994560957, -0.004302650224417448, -0.0017744004726409912, 0.0007735323160886765, -0.013006364926695824, 0.0177617184817791, 0.015998143702745438, 0.02114715240895748, 0.016690976917743683, -0.010841261595487595, 0.019210370257496834, 0.0036373732145875692, -0.0006273878389038146, -0.012762298807501793, 0.001337443245574832, 0.006133146584033966, -0.0024386935401707888, 0.0048025925643742085, -0.005959938280284405, 0.00791640393435955, -0.002619774779304862, 0.024249155074357986, -0.017667241394519806, 0.006865345407277346, 0.016250083222985268, 0.013470877893269062, -0.007821926847100258, 0.001833448652178049, 0.007625099737197161, 0.0008655491983518004, -0.0074007161892950535, 0.004025123547762632, 0.011290028691291809, 0.0012409978080540895, -0.0009590422851033509, -0.007404652889817953, 0.006282735615968704, 0.0011130598140880466, 0.017525525763630867, 0.0075345588847994804, 0.019541040062904358, -0.002749681007117033, -0.016502022743225098, -0.011597080156207085, 0.001962370704859495, -0.0011475046630948782, -0.0016464624786749482, 0.007262936793267727, -0.002913047792389989, 0.009975221008062363, 0.012573344632983208, 0.009014702402055264, 0.006148892920464277, 0.00033337666536681354, 0.021997448056936264, 0.027335410937666893, -0.003720040898770094, 0.0056961895897984505, -0.01064443401992321, -0.010919992811977863, -0.040247298777103424, -0.0056135221384465694, -0.0120301004499197, 0.011345140635967255, -0.008376981131732464, -0.02267453446984291, -0.009754774160683155, 0.0164862759411335, -0.04194789007306099, 0.010038205422461033, 0.010612942278385162, 0.022107671946287155, -0.0074440180324018, 0.003639341564849019, -0.014273934066295624, -0.0003132018609903753, 0.012691440992057323, -0.028799807652831078, -0.006829916033893824, -8.531244384357706e-05, 0.003216162323951721, 0.02042282745242119, -0.003962138667702675, 0.027303919196128845, -0.002586314221844077, 0.00240720110014081, 0.01160495262593031, 0.030059505254030228, -0.0032102575059980154, 0.013218938373029232, -0.002176912734284997, -0.018218358978629112, -0.0019357990240678191, -0.029461149126291275, -0.006644898559898138, 0.006125273648649454, -0.020706258714199066, -0.013092969544231892, 0.010880627669394016, -0.010778277181088924, -7.942299816932064e-06, -0.026044221594929695, -0.010935738682746887, -0.0068102334626019, -0.005869397893548012, 0.02053305134177208, 0.004168807528913021, 0.0003776628873310983, 0.012447374872863293, 0.0026827596593648195, 0.00021269677381496876, -0.012329278513789177, -0.030327189713716507, 0.009219402447342873, -0.0034976257011294365, 0.010620814748108387, -0.005503298714756966, -0.017147617414593697, -0.026059968397021294, -0.01184901874512434, -0.012872522696852684, -0.013116588816046715, -0.010738911107182503, -0.009786265902221203, 0.004897069651633501, 0.011187678202986717, 0.004621510859578848, 0.003826327621936798, 0.012321405112743378, -0.007388906553387642, -0.014392031356692314, 0.02240685001015663, -0.02520967274904251, 0.003460228443145752, 0.008526570163667202, 0.00393064646050334, -0.0018797031370922923, 0.0059560020454227924, -0.02650086209177971, -3.210749491699971e-05, -0.013470877893269062, -0.0025528534315526485, -0.01938357762992382, 0.028280183672904968, -0.0026276479475200176, 0.019446562975645065, 0.010628688149154186, 0.005314344074577093, 0.015746204182505608, 0.00976264663040638, -0.011951369233429432, -0.007636909373104572, 0.005530854221433401, -0.02028111182153225, -0.005030912347137928, 0.005298597738146782, -0.021210137754678726, 0.01210095826536417, 0.012297785840928555, 0.015927286818623543, 0.020989689975976944, -0.019588278606534004, -0.0066724540665745735, -0.022343864664435387, -0.0016464624786749482, 0.004361698869615793, 0.011455363593995571, 0.004070393741130829, 0.0008817874477244914, 0.0013138239737600088, -0.004448303021490574, 0.022123416885733604, 0.00440500071272254, -0.0014968735631555319, 0.006452007219195366, -0.0030449223704636097, 0.006554357707500458, 0.0031059389002621174, -0.013683452270925045, 0.0005565299070440233, -0.006353593431413174, 0.013864533044397831, -0.0034779428970068693, -0.023650798946619034, 0.01596665196120739, 0.010471225716173649, 0.010841261595487595, 0.0025981238577514887, 0.0003894725232385099, 0.0020588161423802376, 0.0035291181411594152, 0.0073495409451425076, -0.01058144960552454, 0.019352085888385773, -0.007424335461109877, 0.0011721081100404263, 0.016816945746541023, 0.009274514392018318, -0.0031827015336602926, 0.007018870674073696, 0.0006490388768725097, -0.004310523625463247, 0.01861201412975788, 0.008432092145085335, 0.002704410580918193, 0.036058809608221054, 0.005582029465585947, -0.0014014121843501925, 0.0028756505344063044, 0.0029150161426514387, 0.012368643656373024, 0.0014329046243801713, 0.009487087838351727, 0.011140439659357071, 0.006522865500301123, 0.0012862681178376079, 0.013179573230445385, 0.016171352937817574, -0.014116472564637661, -0.009258768521249294, -0.0024012962821871042, 0.008581681177020073, -0.004735670983791351, 0.008258884772658348, -2.0021052478114143e-05, -0.01813962683081627, 0.004397127777338028, 0.009920109063386917, -0.007943959906697273, -0.007676274981349707, -0.011486856266856194, -0.005574156530201435, -0.015887919813394547, 0.01152622140944004, 0.0021414838265627623, 0.014226695522665977, -0.0026315844152122736, -0.023146919906139374, 0.019415071234107018, -0.00664883479475975, 0.0028185707051306963, -0.00803450122475624, 0.017399556934833527, -0.004204236436635256, -0.008054183796048164, -0.0164705291390419, -0.013667705468833447, 0.015628108754754066, -0.004042838234454393, -0.02042282745242119, 0.003989694640040398, -0.0029189526103436947, 0.017194855958223343, -0.0018678935011848807, -0.00983350444585085, 0.0003562578931450844, 0.021210137754678726, -0.0272566806524992, -0.023351620882749557, -0.018438804894685745, 0.010998724028468132, -0.010486972518265247, -0.0038637248799204826, -0.008085676468908787, 0.00880212802439928, 0.017147617414593697, -0.004948244895786047, 0.004294777289032936, 0.007471574004739523, 0.007959706708788872, 0.0133055429905653, -0.0028185707051306963, -0.0013905867235735059, 0.009400484152138233, -0.011408125050365925, -0.007739259395748377, 0.005204120650887489, 0.0007090712897479534, -0.00471992464736104, -0.0008822795352898538, -0.003905058838427067, -0.00931388046592474, -0.0253513902425766, 0.007821926847100258, -0.03347643092274666, -0.012447374872863293, -0.0028402216266840696, 0.007093665190041065, 0.02801249735057354, 0.0015401756390929222, 0.002277294872328639, -0.00029548737802542746, 0.008125041611492634, 0.008282504044473171, -0.007892784662544727, 0.02420191653072834, 0.013604721054434776, -0.0025252974592149258, -0.0070661092177033424, 0.005818222649395466, 0.028847046196460724, 0.0002920428814832121, 0.015431280247867107, -0.006078035105019808, -0.002102118218317628, 0.00535764591768384, -0.01121917087584734, -0.00912492536008358, 0.004897069651633501, 0.009510708041489124, -0.005054531618952751, -0.02017088793218136, 0.013014238327741623, -0.011447491124272346, -0.0009236133191734552, 0.002621743129566312, -0.0020607844926416874, -0.017840450629591942, -0.01599027030169964, -0.014840797521173954, 0.007668401580303907, -0.005743428133428097, 0.019336339086294174, -0.02812272123992443, 0.003115780185908079, -0.003513371804729104, -0.026579594239592552, 0.006766931619495153, 0.021084168925881386, -0.01950954832136631, -0.011124693788588047, 0.013344908133149147, -0.008321869187057018, 0.0001590612664585933, -0.012360770255327225, -0.01990320347249508, -0.017966419458389282, -0.0005516092060133815, 0.005999303888529539, 0.0031571141444146633, -0.016407545655965805, 0.0037613746244460344, -0.0005063388962298632, -0.018958430737257004, 0.011549840681254864, -0.0034917208831757307, 0.006644898559898138, -0.005365519318729639, 0.004641193896532059, 0.009676042944192886, 0.0003653611638583243, 0.004042838234454393, -0.0007774688419885933, 0.018155373632907867, 0.001312839798629284, 0.0029740643221884966, -0.00017726782243698835, 0.0133134163916111, 0.022627295926213264, -0.014951021410524845, 0.008699778467416763, -0.004507351201027632, -0.026926010847091675, 0.004479795228689909, -0.0010569640435278416, -0.006577976979315281, 0.005306471139192581, -0.02862660028040409, -0.016549261286854744, -0.016171352937817574, 0.0148959094658494, -0.027209442108869553, -0.013463005423545837, 0.005593839101493359, -0.0027969195507466793, 0.011415998451411724, -0.010140555910766125, 0.013754310086369514, 0.014281807467341423, -0.005385201890021563, -0.019210370257496834, -0.00345038715749979, -0.005105706863105297, -0.009723281487822533, -0.015376169234514236, -0.009117052890360355, -0.010148429311811924, 0.01636030711233616, -0.018659252673387527, 0.005459996405988932, -0.015289564616978168, -0.006822043098509312, -0.03253166005015373, 0.013659832067787647, -0.023225652053952217, 0.006141019985079765, 0.001732082455419004, -0.011431744322180748, 0.009518580511212349, -0.0005845778505317867, 0.002171007916331291, 0.005546600557863712, -0.003430704353377223, 0.011707303114235401, 0.013100842013955116, 0.00440500071272254, 0.012722933664917946, 0.0026827596593648195, -0.0007922309450805187, -0.0068062967620790005, -0.009266640990972519, -0.016769707202911377, -0.003844042308628559, 0.011171932332217693, 0.01661224663257599, 0.006274862680584192, -0.03621627017855644, 0.023603560402989388, -0.0031256217043846846, 0.011801780201494694, -0.027666080743074417, -0.0025036465376615524, 0.0006913567776791751, -0.03180733323097229, 0.009542199783027172, 0.006089844740927219, 0.020958198234438896, 0.022202149033546448, -0.026406385004520416, 0.012565471231937408, -0.007664464879781008, 0.003198447870090604, 0.004916752222925425, -0.013037857599556446, -0.0023698038421571255, -0.009408357553184032, 0.01407710649073124, 0.0129906190559268, 0.004597891587764025, -0.019966186955571175, -0.027146456763148308, -0.004397127777338028, 0.011376633308827877, 0.006668517831712961, 0.018060896545648575, 0.026453623548150063, 0.0033362270332872868, 0.015494265593588352, 0.0063811494037508965, -0.017194855958223343, 0.00024111375387292355, -0.0002543996088206768, -0.014864416792988777, 0.01057357620447874, -0.01684843935072422, 0.011376633308827877, -0.02269028127193451, -0.029476895928382874, 0.013588974252343178, -0.0018039245624095201, 0.009888616390526295, 0.007203888613730669, -0.007688084617257118, -0.00576311070472002, 0.0031827015336602926, 0.0013699198607355356, -0.02179274708032608, -0.0054442500695586205, -0.027540111914277077, -0.026800040155649185, -0.0023481526877731085, -0.0011189646320417523, 0.0037101993802934885, 0.007975452579557896, 0.0053025344386696815, -0.003753501456230879, -0.009164291433990002, -0.026910264045000076, 0.00936899147927761, 0.013415765948593616, 0.016879931092262268, -0.005263168830424547, 0.02483176440000534, 0.026437876746058464, -0.00497186416760087, -0.012581217102706432, -0.0008970415801741183, 0.004731734283268452, -0.006436261348426342, -0.0046766228042542934, -0.021194390952587128, 0.0008581681759096682, 0.012636329047381878, -0.02623317763209343, -0.002853999612852931, 0.016391798853874207, -0.0012272198218852282, -0.009636676870286465, -0.02925644814968109, 0.0072747464291751385, 0.003113812068477273, -0.012589090503752232, 0.01798216626048088, 0.01750977896153927, -0.011927749961614609, -0.005747364833950996, 0.017714479938149452, 0.0031236533541232347, -0.003505498869344592, 0.006459880620241165, 0.003844042308628559, 0.009164291433990002, -0.009266640990972519, -0.004786846227943897, -0.02114715240895748, -0.01128215529024601, 0.022233640775084496, 0.017431048676371574, -0.0014023963594809175, 0.0018462424632161856, 0.021588046103715897, -0.020485812798142433, -0.007546368520706892, -0.005416694562882185, 0.013392146676778793, 0.0024741224478930235, -0.020501557737588882, -0.00018526393978390843, 0.01146323699504137, -0.0008822795352898538, 0.018297089263796806, -0.011085327714681625, 0.007841610349714756, 0.018470298498868942, -0.008644666522741318, 0.01991894841194153, -0.0073495409451425076, -0.003745628520846367, -0.003430704353377223, -0.005566283129155636, 0.01032951008528471, -0.014990386553108692, -0.023855499923229218, -0.005743428133428097, 0.0004792750987689942, 0.026406385004520416, 0.012211182154715061, -0.0018472266383469105, 0.015328929759562016, 0.02143058367073536, 0.0008926129667088389, 0.0126756951212883, -0.00969966221600771, -0.003688548458740115, -0.0064638168551027775, -0.01621859148144722, -0.011447491124272346, -0.0013276018435135484, -0.019100146368145943, 0.0018747824942693114, 0.01686418429017067, 0.0026119016110897064, 0.016313068568706512, 0.01798216626048088, 0.008872986771166325, 0.006105591077357531, 0.015439153648912907, -0.0076605286449193954, 0.018706491217017174, -0.015998143702745438, 0.002387518296018243, -0.010731038637459278, -0.011266409419476986, 0.0139353908598423, -0.006613405887037516, -0.018076643347740173, 0.03382284939289093, -0.002485932083800435, 0.005208057351410389, 0.0013423638883978128, 0.01621859148144722, 0.013636212795972824, -0.026658324524760246, -0.01418733038008213, 0.005499362014234066, -0.0107625313103199, 0.03220098838210106, 0.0062394337728619576, -0.0042081731371581554, -0.0029563498683273792, -0.01597452536225319, -0.015336803160607815, 0.005235612858086824, -0.012612709775567055, -0.014021995477378368, -0.010872754268348217, 0.005853651557117701, 0.012746552936732769, -0.012360770255327225, -0.015021879225969315, 0.0012459184508770704, -0.013722817413508892, -0.021131407469511032, -0.024658557027578354, 0.008479331620037556, 0.020470065996050835, 0.010022459551692009, -0.003324417397379875, -0.04541205242276192, 0.011486856266856194, -0.009022574871778488, -0.0019505610689520836, -0.00874701701104641, 0.032626137137413025, 0.0013561418745666742, 0.003351973369717598, -0.025130942463874817, 0.0017409397987648845, 0.008723397739231586, 0.00267882295884192, 0.0018462424632161856, -0.0021257377229630947, -0.005707999225705862, 0.0005073230131529272, -0.0011602984741330147, -0.009746900759637356, 0.009707535617053509, 0.01724209450185299, -0.015163594856858253, 0.0022103735245764256, -0.006078035105019808, -0.034043293446302414, 0.004704178776592016, 0.004263285081833601, -0.017147617414593697, -0.02089521288871765, -0.001467349473387003, -0.02839040756225586, -0.013494497165083885, -0.007987262681126595, -0.0005826095584779978, -0.0228005051612854, -0.01388027984648943, 0.005648951046168804, -0.017305077984929085, 0.009739027358591557, 0.03265762701630592, 0.010794023051857948, 0.012935507111251354, 0.009077686816453934, 0.010534211061894894, 0.0009934870759025216, 0.005223803222179413, -0.006577976979315281, 0.011612826026976109, -0.014840797521173954, -0.013392146676778793, 0.016942916437983513, -0.018942683935165405, 0.013337035663425922, -0.004349889233708382, -0.010872754268348217, -0.00409007677808404, -0.006637025158852339, 0.010235032998025417, 0.012242673896253109, 0.020706258714199066, -0.02432788535952568, 0.0077668153680861, 0.01569896563887596, 0.011156185530126095, 0.003113812068477273, -0.007247190456837416, 0.004897069651633501, 0.0015116356080397964, 0.0038066450506448746, -0.0015047467313706875, -0.025256913155317307, 0.0030606684740632772, 0.00044384613283909857, -0.010534211061894894, 0.005641077645123005, 0.024028709158301353, -0.006617342587560415, 0.0011839177459478378, -0.012187561951577663, -0.015344676561653614, 0.011982861906290054, 0.0027359030209481716, -0.023855499923229218, 0.007522749248892069, -0.036814626306295395, -0.015289564616978168, -0.01670672371983528, 0.01873798295855522, 0.009904362261295319, 0.00994372833520174, -0.004275094717741013, -0.01887969858944416, 0.003540927777066827, -0.0023934231139719486, 0.00471992464736104, 0.05882782116532326, -0.01001458615064621, 0.0009196767932735384, -0.021761255338788033, 0.008652538992464542, 0.0008680095197632909, 0.0019564658869057894, -0.024296393617987633, -0.0054875523783266544, -0.00045836216304451227, 0.001520492834970355, -0.0001845258375396952, -0.008298249915242195, -0.005641077645123005, -0.004385318141430616, 0.011297902092337608, -0.006282735615968704, 0.004523097071796656, -0.00930600706487894, -0.0171161238104105, -0.009746900759637356, -0.004590018652379513, 0.009006829001009464, 0.001047122641466558, 0.024422364309430122, -0.0053025344386696815, -0.012510359287261963, 0.006050479132682085, -0.008518696762621403, -0.03079957701265812, 0.021635284647345543, -0.024154677987098694, 0.002143452176824212, -6.864361057523638e-05, -0.01064443401992321, 0.003464164910838008, -0.03435821831226349, -0.0048773870803415775, 0.016391798853874207, -0.009613057598471642, 0.0142581881955266, 0.003554705763235688, 0.011959242634475231, 0.010864880867302418, -0.014368412084877491, -0.006829916033893824, 0.005830032285302877, -0.015132103115320206, -0.0016100493958219886, -0.023335875943303108, 0.000774024345446378, 0.005168691743165255, -0.005369455553591251, 0.03240568935871124, -0.021950209513306618, -0.004530970472842455, -0.0025882823392748833, 0.021603792905807495, -0.0055387276224792, 0.014053487218916416, 0.005908763501793146, -0.0026611085049808025, -0.00881000142544508, 0.0003259956429246813, 0.005841841921210289, 0.017588511109352112, -0.011297902092337608, -0.008518696762621403, 0.004818338435143232, -0.015494265593588352, 0.02484751120209694, -0.01000671274960041, 0.01242375560104847, 0.01089637354016304, 0.02064327336847782, -0.0016740183345973492, -0.020580289885401726, 0.0016405576607212424, 0.025697806850075722, -0.008770636282861233, 0.0164705291390419, -0.0020568480249494314, -0.000957073993049562, -0.00943984929472208, -0.018690744414925575, -0.02950838766992092, -0.006731502711772919, -0.0016622086986899376, 0.0310515146702528, -0.006483499892055988, 0.01952529326081276, 0.009794139303267002, -0.003668865654617548, -0.003046890487894416, 0.004901006352156401, -0.0035763566847890615, -0.011691557243466377, -0.002745744539424777, 0.00855806190520525, 0.0048773870803415775, -0.0005811333539895713, 0.011549840681254864, -0.01887969858944416, 0.0007700878195464611, 0.03131920099258423, -0.00640083197504282, 0.008888732641935349, 0.0071251573972404, 0.005971747916191816, -0.009101306088268757, -0.006680327467620373, -0.011723048985004425, -0.006558294408023357, -0.014478635042905807, 0.0017724321223795414, 0.001913163810968399, 0.002068657660856843, 0.003753501456230879, -0.002586314221844077, 0.007566051557660103, -0.02711496502161026, 0.008896606042981148, 0.0164705291390419, -0.0009664233075454831, -0.018060896545648575, -0.015801316127181053, -0.0016877963207662106, 0.004830148071050644, 0.0060386694967746735, -0.010620814748108387, 0.002643394051119685, 0.01450225431472063, 0.02938241697847843, 0.028453391045331955, 0.025036465376615524, 0.00873914361000061, 0.006066225469112396, -0.012219054624438286, 0.009203656576573849, 0.002048974856734276, -0.023398859426379204, 0.0060386694967746735, -0.005424567498266697, -0.010872754268348217, 0.015683220699429512, 0.0011061708210036159, -0.0019239893881604075, -0.009715408086776733, 0.006322101224213839, -0.0145809855312109, -0.0046687498688697815, 0.011990734376013279, 0.03867267817258835, -0.0028146340046077967, -0.005853651557117701, -0.01762000285089016, -0.01147111039608717, -0.020044919103384018, 0.01419520378112793, 0.013274050317704678, -0.010723165236413479, 0.017210600897669792, 0.007168459706008434, 0.0046254475601017475, 0.0142660615965724, -0.010518464259803295, -0.012951252982020378, -0.00671969261020422, 0.00034986098762601614, 0.013966883532702923, 0.0016070969868451357, 0.014203076250851154, -0.001782273524440825, 0.0068810912780463696, 0.01412434596568346, -0.015478518791496754, 0.02128886803984642, -0.015903666615486145, 0.008251011371612549, -0.021225884556770325, 0.005334026645869017, -4.161057586316019e-05, 0.03602731600403786, -0.013762182556092739, 0.00440500071272254, -0.0038401056081056595, -0.003954265732318163, 0.009014702402055264, -0.0002566139155533165, 0.014691208489239216, -0.0002895825309678912, -0.028185706585645676, -0.002828411990776658, 0.005818222649395466, -0.015171468257904053, 0.008006945252418518, -0.020627528429031372, 0.016407545655965805, -0.018029404804110527, -0.024170424789190292, 0.014533746987581253, 0.0011229012161493301, -0.02028111182153225, 0.0004876402672380209
],
"page_number": 105
}
]
}
Riferimento: Documenti - Indice
Creare una fonte di informazioni
Una fonte di conoscenza è un riferimento riutilizzabile ai dati sorgente. Il codice seguente definisce un'origine di conoscenza denominata che è destinata all'indice .
specifica i campi di indice inclusi nei riferimenti di citazione. Questo esempio include solo campi leggibili per evitare incorporamenti lunghi e non interpretabili nelle risposte.
### Create a knowledge source
POST {{search-url}}/knowledgesources?api-version={{api-version}} HTTP/1.1
Content-Type: application/json
Authorization: Bearer {{token}}
{
"name": "{{knowledge-source-name}}",
"description": "This knowledge source pulls from a search index that contains pages from the Earth at Night e-book.",
"kind": "searchIndex",
"searchIndexParameters": {
"searchIndexName": "{{index-name}}",
"sourceDataFields": [
{ "name": "id" },
{ "name": "page_chunk" },
{ "name": "page_number" }
]
}
}
Riferimento:Fonti di Conoscenza - Crea
Creare una knowledge base
Per impostare come destinazione e la distribuzione in fase di query, è necessaria una knowledge base. Il codice seguente definisce una base denominata .
è impostato su , abilitando le risposte in linguaggio naturale che citano i documenti recuperati e seguono le istruzioni fornite .
### Create a knowledge base
PUT {{search-url}}/knowledgebases/{{knowledge-base-name}}?api-version={{api-version}} HTTP/1.1
Content-Type: application/json
Authorization: Bearer {{token}}
{
"name": "{{knowledge-base-name}}",
"knowledgeSources": [
{
"name": "{{knowledge-source-name}}"
}
],
"models": [
{
"kind": "azureOpenAI",
"azureOpenAIParameters": {
"resourceUri": "{{aoai-url}}",
"deploymentId": "{{aoai-gpt-deployment}}",
"modelName": "{{aoai-gpt-model}}"
}
}
],
"outputMode": "answerSynthesis",
"answerInstructions": "Provide a two sentence concise and informative answer based on the retrieved documents."
}
Reference:Basi di Conoscenza - Creare
Eseguire la pipeline di recupero
Si è pronti per eseguire il recupero agentico. Il codice seguente invia una query utente in due parti a , che:
- Analizza l'intera conversazione per dedurre le informazioni necessarie all'utente.
- Scompone la query composta in sottoquery in evidenza.
- Esegue le sottoquery contemporaneamente rispetto alla fonte delle informazioni.
- Usa il ranker semantico per classificare nuovamente e filtrare i risultati. L'esempio esclude le risposte con un punteggio reranker pari o inferiore.
- Sintetizza i risultati principali in una risposta in linguaggio naturale.
### Run agentic retrieval
POST {{search-url}}/knowledgebases/{{knowledge-base-name}}/retrieve?api-version={{api-version}} HTTP/1.1
Content-Type: application/json
Authorization: Bearer {{token}}
{
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "Why do suburban belts display larger December brightening than urban cores even though absolute light levels are higher downtown? Why is the Phoenix nighttime street grid is so sharply visible from space, whereas large stretches of the interstate between midwestern cities remain comparatively dim?"
}
]
}
],
"knowledgeSourceParams": [
{
"knowledgeSourceName": "{{knowledge-source-name}}",
"kind": "searchIndex",
"includeReferences": true,
"includeReferenceSourceData": true,
"alwaysQuerySource": true,
"rerankerThreshold": 2.5
}
],
"includeActivity": true,
"retrievalReasoningEffort": { "kind": "low" }
}
Riferimento:Recupero della Conoscenza - Recuperare
L'output deve contenere i componenti seguenti:
fornisce una risposta sintetizzata generata da LLM alla query che cita i documenti recuperati. Quando la sintesi delle risposte non è abilitata, questa sezione contiene contenuto estratto direttamente dai documenti.
tiene traccia dei passaggi eseguiti durante il processo di recupero, incluse le sottoquery generate dalla distribuzione di e i token usati per la classificazione semantica, la pianificazione delle query e la sintesi delle risposte.
elenca i documenti che hanno contribuito alla risposta, ognuno identificato dal relativo .
Pulire le risorse
Quando si lavora nella propria sottoscrizione, è consigliabile completare un progetto rimuovendo le risorse non più necessarie. Le risorse lasciate in esecuzione possono avere un costo.
Nel portale di Azure selezionare Tutte le risorse o Gruppi di risorse dal riquadro sinistro per trovare e gestire le risorse. È possibile eliminare le risorse singolarmente o eliminare il gruppo di risorse per rimuovere tutte le risorse contemporaneamente.
In alternativa, le seguenti richieste da hanno eliminato gli oggetti che hai creato in questa guida introduttiva.
Eliminare la Knowledge Base
### Delete the knowledge base
DELETE {{search-url}}/knowledgebases/{{knowledge-base-name}}?api-version={{api-version}} HTTP/1.1
Content-Type: application/json
Authorization: Bearer {{token}}
Eliminare la fonte di informazioni
### Delete the knowledge source
DELETE {{search-url}}/knowledgesources/{{knowledge-source-name}}?api-version={{api-version}} HTTP/1.1
Content-Type: application/json
Authorization: Bearer {{token}}
Eliminare l'indice di ricerca
### Delete the index
DELETE {{search-url}}/indexes/{{index-name}}?api-version={{api-version}} HTTP/1.1
Content-Type: application/json
Authorization: Bearer {{token}}
Contenuti correlati
- Recupero agentico in Azure AI Search
- Creare una knowledge base
- Usare una Knowledge Base per recuperare i dati
- Esercitazione: Costruire una soluzione di recupero agentico end-to-end