Co je sémantické vyhledávání textu jádra?
Upozorňující
Funkce Vyhledávání textu v sémantickém jádru je ve verzi Preview a vylepšení, která vyžadují zásadní změny, se mohou před vydáním stále vyskytovat za omezených okolností.
Sémantické jádro poskytuje možnosti, které vývojářům umožňují integrovat vyhledávání při volání velkého jazykového modelu (LLM). To je důležité, protože LLM je vytrénované na pevných datových sadách a může potřebovat přístup k dalším datům, aby uživatel mohl přesně reagovat na dotaz uživatele.
Proces poskytnutí dalšího kontextu při zobrazení výzvy LLM se nazývá načítání rozšířené generace (RAG). Rag obvykle zahrnuje načtení dalších dat, která jsou relevantní pro aktuálního uživatele, a rozšíření výzvy odeslané do LLM s použitím těchto dat. LLM může využít své trénování a další kontext k zajištění přesnější odpovědi.
Jednoduchým příkladem toho, kdy se to stane důležitým, je, když se dotaz uživatele týká aktuálních informací, které nejsou zahrnuty do trénovací datové sady LLM. Provedením odpovídajícího textového vyhledávání a zahrnutím výsledků s dotazem uživatele se dosáhne přesnějších odpovědí.
Sémantické jádro poskytuje sadu funkcí vyhledávání textu, které vývojářům umožňují provádět vyhledávání pomocí webového vyhledávání nebo vektorových databází a snadno přidávat rag do svých aplikací.
Implementace RAG pomocí vyhledávání webového textu
V následujícím ukázkovém kódu si můžete vybrat mezi používáním Bingu nebo Google k provádění operací vyhledávání na webu.
Tip
Pokud chcete spustit ukázky uvedené na této stránce, přejděte na GettingStartedWithTextSearch/Step1_Web_Search.cs.
Vytvoření instance vyhledávání textu
Každá ukázka vytvoří instanci textového vyhledávání a pak provede operaci hledání, která získá výsledky zadaného dotazu. Výsledky hledání budou obsahovat fragment textu z webové stránky, který popisuje jeho obsah. To poskytuje pouze omezený kontext, tj. podmnožinu obsahu webové stránky a žádný odkaz na zdroj informací. Další ukázky ukazují, jak tato omezení vyřešit.
Tip
Následující ukázkový kód používá konektor OpenAI sémantické jádro a moduly plug-in Web, nainstalujte ho pomocí následujících příkazů:
dotnet add package Microsoft.SemanticKernel
dotnet add package Microsoft.SemanticKernel.Plugins.Web
Vyhledávání na webu Bingu
using Microsoft.SemanticKernel.Data;
using Microsoft.SemanticKernel.Plugins.Web.Bing;
// Create an ITextSearch instance using Bing search
var textSearch = new BingTextSearch(apiKey: "<Your Bing API Key>");
var query = "What is the Semantic Kernel?";
// Search and return results
KernelSearchResults<string> searchResults = await textSearch.SearchAsync(query, new() { Top = 4 });
await foreach (string result in searchResults.Results)
{
Console.WriteLine(result);
}
Vyhledávání na webu Google
using Microsoft.SemanticKernel.Data;
using Microsoft.SemanticKernel.Plugins.Web.Google;
// Create an ITextSearch instance using Google search
var textSearch = new GoogleTextSearch(
searchEngineId: "<Your Google Search Engine Id>",
apiKey: "<Your Google API Key>");
var query = "What is the Semantic Kernel?";
// Search and return results
KernelSearchResults<string> searchResults = await textSearch.SearchAsync(query, new() { Top = 4 });
await foreach (string result in searchResults.Results)
{
Console.WriteLine(result);
}
Tip
Další informace o typech výsledků hledání, které lze načíst, najdete v dokumentaci k modulům plug-in vyhledávání textu.
Rozšíření výzvy pomocí výsledků hledání textu
Dalším postupem je vytvoření modulu plug-in z vyhledávání webového textu a vyvolání modulu plug-in pro přidání výsledků hledání do výzvy.
Následující ukázkový kód ukazuje, jak toho dosáhnout:
- Vytvořte zaregistrovanou
Kernel
službu OpenAI. Použije se k volánígpt-4o
modelu s výzvou. - Vytvořte instanci vyhledávání textu.
- Vytvořte modul plug-in hledání z instance vyhledávání textu.
- Vytvořte šablonu výzvy, která vyvolá modul plug-in vyhledávání s dotazem a zahrne výsledky hledání do výzvy spolu s původním dotazem.
- Vyvolání výzvy a zobrazení odpovědi
Model poskytne odpověď, která je uzemněna v nejnovějších informacích dostupných z webového vyhledávání.
Vyhledávání na webu Bingu
using Microsoft.SemanticKernel.Data;
using Microsoft.SemanticKernel.Plugins.Web.Bing;
// Create a kernel with OpenAI chat completion
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddOpenAIChatCompletion(
modelId: "gpt-4o",
apiKey: "<Your OpenAI API Key>");
Kernel kernel = kernelBuilder.Build();
// Create a text search using Bing search
var textSearch = new BingTextSearch(apiKey: "<Your Bing API Key>");
// Build a text search plugin with Bing search and add to the kernel
var searchPlugin = textSearch.CreateWithSearch("SearchPlugin");
kernel.Plugins.Add(searchPlugin);
// Invoke prompt and use text search plugin to provide grounding information
var query = "What is the Semantic Kernel?";
var prompt = "{{SearchPlugin.Search $query}}. {{$query}}";
KernelArguments arguments = new() { { "query", query } };
Console.WriteLine(await kernel.InvokePromptAsync(prompt, arguments));
Vyhledávání na webu Google
using Microsoft.SemanticKernel.Data;
using Microsoft.SemanticKernel.Plugins.Web.Google;
// Create a kernel with OpenAI chat completion
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddOpenAIChatCompletion(
modelId: "gpt-4o",
apiKey: "<Your OpenAI API Key>");
Kernel kernel = kernelBuilder.Build();
// Create an ITextSearch instance using Google search
var textSearch = new GoogleTextSearch(
searchEngineId: "<Your Google Search Engine Id>",
apiKey: "<Your Google API Key>");
// Build a text search plugin with Google search and add to the kernel
var searchPlugin = textSearch.CreateWithSearch("SearchPlugin");
kernel.Plugins.Add(searchPlugin);
// Invoke prompt and use text search plugin to provide grounding information
var query = "What is the Semantic Kernel?";
var prompt = "{{SearchPlugin.Search $query}}. {{$query}}";
KernelArguments arguments = new() { { "query", query } };
Console.WriteLine(await kernel.InvokePromptAsync(prompt, arguments));
Existuje řada problémů s výše uvedenými ukázkami:
- Odpověď neobsahuje citace zobrazující webové stránky, které byly použity k poskytnutí kontextu zemnění.
- Odpověď bude obsahovat data z libovolného webu, bylo by lepší tuto možnost omezit na důvěryhodné weby.
- K zajištění základního kontextu modelu se používá pouze fragment kódu každé webové stránky. Fragment kódu nemusí obsahovat data potřebná k poskytnutí přesné odpovědi.
Podívejte se na stránku, která popisuje moduly plug-in pro vyhledávání textu pro řešení těchto problémů.
Dále doporučujeme podívat se na abstrakce hledání textu.
Již brzy
Další připravujeme.
Již brzy
Další připravujeme.
Další kroky
Abstrakcevyhledávání textu Moduly plug-inpro vyhledávání textu volání funkce vyhledávání textu s využitímvektorových úložišť