Sdílet prostřednictvím


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í.

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

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);
}
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:

  1. Vytvořte zaregistrovanou Kernel službu OpenAI. Použije se k volání gpt-4o modelu s výzvou.
  2. Vytvořte instanci vyhledávání textu.
  3. Vytvořte modul plug-in hledání z instance vyhledávání textu.
  4. 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.
  5. 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:

  1. Odpověď neobsahuje citace zobrazující webové stránky, které byly použity k poskytnutí kontextu zemnění.
  2. Odpověď bude obsahovat data z libovolného webu, bylo by lepší tuto možnost omezit na důvěryhodné weby.
  3. 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šť