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.
Avvertimento
La funzionalità RAG dell'agente del kernel semantico è sperimentale, soggetta a modifica e verrà finalizzata solo in base al feedback e alla valutazione.
Uso di TextSearchProvider per RAG
Microsoft.SemanticKernel.Data.TextSearchProvider
Consente agli agenti di recuperare i documenti pertinenti in base all'input dell'utente e inserirli nel contesto dell'agente per risposte più informate.
Integra un'istanza Microsoft.SemanticKernel.Data.ITextSearch
con gli agenti Semantic Kernel.
Esistono più ITextSearch
implementazioni, supportando ricerche di somiglianza negli archivi vettoriali e nell'integrazione del motore di ricerca.
Altre informazioni sono disponibili qui.
Forniamo inoltre un Microsoft.SemanticKernel.Data.TextSearchStore
, che offre una semplice archiviazione vettoriale strutturata di dati testuali ai fini della generazione aumentata con recupero.
TextSearchStore
ha uno schema predefinito per l'archiviazione e il recupero di dati testuali in un archivio vettoriale. Per usare uno schema personalizzato per l'archiviazione, vedere VectorStoreTextSearch.
Configurazione di TextSearchProvider
Può TextSearchProvider
essere utilizzato con un oggetto VectorStore
e TextSearchStore
per archiviare e cercare documenti di testo.
Nell'esempio seguente viene illustrato come configurare e usare TextSearchProvider
con un TextSearchStore
e InMemoryVectorStore
affinché un agente possa eseguire semplici operazioni RAG su testo.
// Create an embedding generator using Azure OpenAI.
var embeddingGenerator = new AzureOpenAIClient(new Uri("<Your_Azure_OpenAI_Endpoint>"), new AzureCliCredential())
.GetEmbeddingClient("<Your_Deployment_Name>")
.AsIEmbeddingGenerator(1536);
// Create a vector store to store documents.
var vectorStore = new InMemoryVectorStore(new() { EmbeddingGenerator = embeddingGenerator });
// Create a TextSearchStore for storing and searching text documents.
using var textSearchStore = new TextSearchStore<string>(vectorStore, collectionName: "FinancialData", vectorDimensions: 1536);
// Upsert documents into the store.
await textSearchStore.UpsertTextAsync(new[]
{
"The financial results of Contoso Corp for 2024 is as follows:\nIncome EUR 154 000 000\nExpenses EUR 142 000 000",
"The Contoso Corporation is a multinational business with its headquarters in Paris."
});
// Create an agent.
Kernel kernel = new Kernel();
ChatCompletionAgent agent = new()
{
Name = "FriendlyAssistant",
Instructions = "You are a friendly assistant",
Kernel = kernel,
// This setting must be set to true when using the on-demand RAG feature
UseImmutableKernel = true
};
// Create an agent thread and add the TextSearchProvider.
ChatHistoryAgentThread agentThread = new();
var textSearchProvider = new TextSearchProvider(textSearchStore);
agentThread.AIContextProviders.Add(textSearchProvider);
// Use the agent with RAG capabilities.
ChatMessageContent response = await agent.InvokeAsync("Where is Contoso based?", agentThread).FirstAsync();
Console.WriteLine(response.Content);
Funzionalità avanzate: citazioni e filtri
TextSearchStore
supporta funzionalità avanzate, ad esempio il filtro dei risultati in base allo spazio dei nomi e l'inclusione di citazioni nelle risposte.
Inclusione di citazioni
I documenti in TextSearchStore
possono includere metadati come nomi di origine e collegamenti, abilitando la generazione di citazioni nelle risposte dell'agente.
await textSearchStore.UpsertDocumentsAsync(new[]
{
new TextSearchDocument
{
Text = "The financial results of Contoso Corp for 2023 is as follows:\nIncome EUR 174 000 000\nExpenses EUR 152 000 000",
SourceName = "Contoso 2023 Financial Report",
SourceLink = "https://www.contoso.com/reports/2023.pdf",
Namespaces = ["group/g2"]
}
});
Quando recupera TextSearchProvider
questo documento, per impostazione predefinita includerà il nome e il collegamento di origine nella risposta.
Filtro per spazio dei nomi
Quando si aggiornano i documenti, è possibile specificare facoltativamente uno o più spazi dei nomi per ogni documento.
Gli spazi dei nomi possono essere qualsiasi stringa che definisce l'ambito di un documento.
È quindi possibile configurare per limitare i TextSearchStore
risultati della ricerca solo ai record che corrispondono allo spazio dei nomi richiesto.
using var textSearchStore = new TextSearchStore<string>(
vectorStore,
collectionName: "FinancialData",
vectorDimensions: 1536,
new() { SearchNamespace = "group/g2" }
);
Rag automatico e su richiesta
TextSearchProvider
può eseguire ricerche automaticamente durante ogni chiamata dell'agente o consentire ricerche su richiesta tramite chiamate di strumenti quando l'agente necessita di informazioni aggiuntive.
L'impostazione predefinita è BeforeAIInvoke
, il che significa che le ricerche verranno eseguite prima di ogni chiamata dell'agente usando il messaggio passato all'agente.
Questa operazione può essere modificata in OnDemandFunctionCalling
, che consentirà all'agente di effettuare una chiamata di strumento per eseguire ricerche usando una stringa di ricerca della scelta dell'agente.
var options = new TextSearchProviderOptions
{
SearchTime = TextSearchProviderOptions.RagBehavior.OnDemandFunctionCalling,
};
var provider = new TextSearchProvider(mockTextSearch.Object, options: options);
Avvertimento
Quando si usa TextSearchProvider
con OnDemandFunctionCalling
, l'impostazione UseImmutableKernel
dell'agente deve essere impostata su true
come la funzionalità richiede la clonazione del kernel quando si richiama l'agente.
Si noti che l'impostazione UseImmutableKernel
su true
significa che tutte le modifiche ai dati del kernel eseguite durante la chiamata dell'agente, ad esempio plug-in, non verranno mantenute al termine della chiamata.
Opzioni TextSearchProvider
TextSearchProvider
Può essere configurato con varie opzioni per personalizzarne il comportamento. Le opzioni vengono fornite usando la TextSearchProviderOptions
classe per il TextSearchProvider
costruttore.
In alto
Specifica il numero massimo di risultati da restituire dalla ricerca di somiglianza.
- Impostazione predefinita: 3
Tempo di Ricerca
Controlla quando viene eseguita la ricerca di testo. Le opzioni includono:
- BeforeAIInvoke: viene eseguita una ricerca ogni volta che viene richiamato il modello/agente, subito prima della chiamata e i risultati vengono forniti al modello/agente tramite il contesto di chiamata.
- OnDemandFunctionCalling: una ricerca può essere eseguita dal modello/agente su richiesta tramite chiamata di funzione.
PluginFunctionName
Specifica il nome del metodo plug-in che verrà reso disponibile per la ricerca se SearchTime
è impostato su OnDemandFunctionCalling
.
- Impostazione predefinita: "Cerca"
PluginFunctionDescription
Fornisce una descrizione del metodo plug-in che verrà reso disponibile per la ricerca se SearchTime
è impostato su OnDemandFunctionCalling
.
- Impostazione predefinita: "Consente la ricerca di informazioni aggiuntive per rispondere alla domanda dell'utente".
ContextPrompt
Quando si specificano i blocchi di testo al modello di intelligenza artificiale alla chiamata, è necessario un prompt per indicare al modello di intelligenza artificiale quali blocchi di testo sono per e come devono essere usati.
Questa impostazione consente di eseguire l'override della messaggistica predefinita incorporata in TextSearchProvider
.
IncludiCitazioniPrompt
Quando si specificano i blocchi di testo al modello di intelligenza artificiale alla chiamata, è necessario un prompt per indicare al modello di intelligenza artificiale se e come eseguire citazioni.
Questa impostazione consente di eseguire l'override della messaggistica predefinita incorporata in TextSearchProvider
.
ContextFormatter
Questo callback facoltativo può essere usato per personalizzare completamente il testo prodotto da TextSearchProvider
.
Per impostazione predefinita, l'oggetto TextSearchProvider
produrrà testo che include
- Un prompt che informa il modello di intelligenza artificiale sull'uso delle porzioni di testo.
- Elenco di blocchi di testo con collegamenti e nomi di origine.
- Richiesta che indica al modello di intelligenza artificiale di includere citazioni.
È possibile scrivere un output personalizzato implementando e fornendo questo callback.
Nota: se questo delegato viene specificato, le ContextPrompt
impostazioni e IncludeCitationsPrompt
non verranno usate.
Combinazione di RAG con altri provider
TextSearchProvider
Può essere combinato con altri provider, ad esempio mem0
o WhiteboardProvider
, per creare agenti con funzionalità di memoria e recupero.
// Add both mem0 and TextSearchProvider to the agent thread.
agentThread.AIContextProviders.Add(mem0Provider);
agentThread.AIContextProviders.Add(textSearchProvider);
// Use the agent with combined capabilities.
ChatMessageContent response = await agent.InvokeAsync("What was Contoso's income for 2023?", agentThread).FirstAsync();
Console.WriteLine(response.Content);
Combinando queste funzionalità, gli agenti possono offrire un'esperienza più personalizzata e compatibile con il contesto.
Passaggi successivi
Presto disponibili
Altre informazioni saranno presto disponibili.
Presto disponibili
Altre informazioni saranno presto disponibili.