Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Výstraha
Funkce RAG sémantického agenta jádra je experimentální, může se změnit a bude dokončena pouze na základě zpětné vazby a hodnocení.
Použití TextSearchProvideru pro RAG
Umožňuje Microsoft.SemanticKernel.Data.TextSearchProvider agentům vyhledat relevantní dokumenty na základě uživatelského vstupu a vložit je do kontextu agenta pro poskytnutí lépe informovaných odpovědí.
Integruje instanci se sémantickými agentami jádra Microsoft.SemanticKernel.Data.ITextSearch.
Existuje více ITextSearch implementací, které podporují vyhledávání podobností v úložištích vektorů a integraci vyhledávacího webu.
Další informace najdete tady.
Také poskytujeme Microsoft.SemanticKernel.Data.TextSearchStore, které zajišťuje jednoduché a optimalizované vektorové úložiště textových dat pro účely generování s podporou načítání.
TextSearchStore obsahuje integrované schéma pro ukládání a načítání textových dat v úložišti vektorů. Pokud chcete pro úložiště použít vlastní schéma, podívejte se na VectorStoreTextSearch.
Nastavení poskytovatele TextSearchProvider
TextSearchProvider lze použít s VectorStore a TextSearchStore k ukládání a prohledávání textových dokumentů.
Následující příklad ukazuje, jak nastavit a použít TextSearchProvider s TextSearchStore a InMemoryVectorStore pro agenta, aby prováděl zjednodušený RAG přes text.
// 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);
Pokročilé funkce: Citace a filtrování
TextSearchStore nabízí podporu pokročilých funkcí, jako je filtrování výsledků podle jmenného prostoru a zahrnutí citací do odpovědí.
Zahrnutí citací
Dokumenty v této TextSearchStore sadě můžou obsahovat metadata, jako jsou názvy zdrojů a odkazy, což umožňuje generování citací v odpovědích agenta.
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"]
}
});
Když tento TextSearchProvider dokument načte, bude ve výchozím nastavení obsahovat název zdroje a odkaz v odpovědi.
Filtrování podle oboru názvů
Při upsertování dokumentů můžete volitelně poskytnout jeden nebo více oborů názvů pro každý dokument.
Jmenné prostory mohou být libovolné řetězce, které definují rozsah dokumentu.
Potom můžete nakonfigurovat TextSearchStore , aby se výsledky hledání omezily jenom na ty záznamy, které odpovídají požadovanému oboru názvů.
using var textSearchStore = new TextSearchStore<string>(
vectorStore,
collectionName: "FinancialData",
vectorDimensions: 1536,
new() { SearchNamespace = "group/g2" }
);
Automatické vs. RAG na vyžádání
Může TextSearchProvider provádět vyhledávání automaticky během každého vyvolání agenta nebo povolit vyhledávání na vyžádání prostřednictvím volání nástrojů, když agent potřebuje další informace.
Výchozí nastavení je BeforeAIInvoke, což znamená, že hledání se provede před každým vyvoláním agenta pomocí zprávy předané agentovi.
To se dá změnit na OnDemandFunctionCalling, což umožní agentovi provést volání nástroje k hledání pomocí vyhledávacího řetězce podle výběru agenta.
var options = new TextSearchProviderOptions
{
SearchTime = TextSearchProviderOptions.RagBehavior.OnDemandFunctionCalling,
};
var provider = new TextSearchProvider(mockTextSearch.Object, options: options);
Výstraha
Při použití TextSearchProvider ve spojení s OnDemandFunctionCalling, musí být nastavení agenta nastaveno na UseImmutableKernel, protože funkce vyžaduje klonování jádra při vyvolání agenta.
Všimněte si, že nastavení UseImmutableKernel na true znamená, že jakékoli úpravy dat jádra provedené během vyvolání agenta, například prostřednictvím pluginů, nebudou po dokončení tohoto vyvolání zachovány.
Možnosti TextSearchProvider
Lze nakonfigurovat TextSearchProvider pomocí různých možností, které přizpůsobují jeho chování. Možnosti jsou k dispozici pomocí TextSearchProviderOptions třídy konstruktoru TextSearchProvider .
Vrchol
Určuje maximální počet výsledků, které se mají vrátit z hledání podobnosti.
- Výchozí hodnota: 3
Čas hledání
Určuje, kdy je vyhledávání textu provedeno. K dispozici jsou následující možnosti:
- BeforeAIInvoke: Vyhledávání se provádí při každém vyvolání modelu nebo agenta, těsně před vyvoláním a výsledky se do modelu nebo agenta zadají prostřednictvím kontextu vyvolání.
- OnDemandFunctionCalling: Vyhledávání může provést model nebo agent na vyžádání prostřednictvím volání funkce.
PluginFunctionName
Určuje název metody modulu plug-in, která bude zpřístupněna pro vyhledávání, pokud SearchTime je nastavena na OnDemandFunctionCalling.
- Výchozí: "Vyhledávání"
PopisFunkcePluginu
Poskytuje popis metody modulu plug-in, která bude zpřístupněna pro vyhledávání, pokud SearchTime je nastavena na OnDemandFunctionCalling.
- Výchozí: "Umožňuje hledání dalších informací, které vám pomůžou odpovědět na otázku uživatele.".
ContextPrompt
Při zadávání textových bloků do modelu AI při vyvolání se vyžaduje výzva k označení modelu AI, k čemu jsou textové bloky určené a jak se mají použít.
Toto nastavení umožňuje přepsat výchozí zprávování, které je součástí TextSearchProvider.
ZahrnoutVýzvuKCitacím
Při zadávání textových bloků do modelu AI při vyvolání se vyžaduje výzva, která modelu AI sdělí, jestli a jak provádět citace.
Toto nastavení umožňuje přepsat výchozí zprávování, které je součástí TextSearchProvider.
ContextFormatter
Tento volitelný callback lze použít k kompletnímu přizpůsobení textu generovaného pomocí TextSearchProvider.
Ve výchozím nastavení TextSearchProvider vytvoří text, který obsahuje
- Výzva s oznámením modelu AI, k čemu jsou textové bloky dat.
- Seznam textových bloků se zdrojovými odkazy a názvy
- Výzva instrukující model AI o zahrnutí citací.
Vlastní výstup můžete napsat implementací a poskytnutím tohoto zpětného volání.
Poznámka: Pokud je tento delegát zadaný, nebudou použita nastavení ContextPrompt a IncludeCitationsPrompt.
Kombinování RAG s jinými poskytovateli
Objekt TextSearchProvider lze kombinovat s jinými poskytovateli, například mem0 nebo WhiteboardProvider, k vytváření agentů s možnostmi paměti i načítání.
// 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);
Kombinací těchto funkcí můžou agenti poskytovat přizpůsobenější prostředí s podporou kontextu.
Další kroky
Již brzy
Další informace budou brzy k dispozici.
Již brzy
Další informace budou brzy k dispozici.