Mi az a szemantikus kernelszöveg-keresés?

Figyelmeztetés

A Szemantic Kernel Text Search funkciója előzetes verziójú, és a kompatibilitástörő módosításokat igénylő fejlesztések még korlátozott körülmények között előfordulhatnak a kiadás előtt.

A Szemantic Kernel olyan képességeket biztosít, amelyekkel a fejlesztők integrálhatók a keresést egy nagy nyelvi modell (LLM) meghívásakor. Ez azért fontos, mert az LLM-ek rögzített adathalmazokra vannak betanítve, és előfordulhat, hogy további adatokhoz kell hozzáférnie ahhoz, hogy pontosan válaszoljanak egy felhasználó kérésére.

Azt a folyamatot, amikor egy LLM promptolásakor további kontextust biztosítunk, Retrieval-Augmented Generationnek (RAG) nevezzük. A RAG általában az aktuális felhasználó számára releváns további adatok beolvasását és az llm-nek küldött üzenet ezen adatokkal való kibővítését foglalja magában. Az LLM a tanítása során szerzett ismereteit és a további kontextust felhasználva pontosabb választ adhat.

Egy egyszerű példa arra, amikor ez fontossá válik, amikor a felhasználó kérése olyan naprakész információkhoz kapcsolódik, amelyek nem szerepelnek az LLM betanítási adatkészletében. Megfelelő szöveges keresés elvégzésével, majd az eredményeknek a felhasználó kéréséhez csatolásával pontosabb válaszok érhetők el.

A Szemantic Kernel olyan szövegkeresési képességeket biztosít, amelyek lehetővé teszik a fejlesztők számára, hogy webkereséssel vagy vektoradatbázisokkal végezzenek keresést, és egyszerűen hozzáadhassák a RAG-ot az alkalmazásaikhoz.

Szemantikus kernel api-kat biztosít az adatok lekéréséhez különböző absztrakciós szinteken.

A szöveges keresés lehetővé teszi a keresést a stack magasabb szintjén, ahol a bemenet szöveg, és alapvető szűrési lehetőségeket is támogat. A szöveges keresési felület különböző típusú kimeneteket támogat, beleértve az egyszerű sztringek visszaadásának támogatását is. Ez lehetővé teszi, hogy a szöveges keresés számos implementációt támogatjon, beleértve a webes keresőmotorokat és a vektortárolókat. A szöveges keresés fő célja egy egyszerű felület biztosítása, amely beépülő modulként érhető el a csevegés befejezéséhez.

Tipp

Az összes beépített szövegkeresési implementáció esetében lásd a Beépített szövegkeresés című témakört.

A vektorkeresés a rendszer egy alacsonyabb szintjén található, ahol a bemenet egy vektor. Emellett támogatja az alapszintű szűrést, valamint kiválaszt egy vektort az adattárból a bemeneti vektor összehasonlításához. Az adattárból származó adatokat tartalmazó adatmodellt ad vissza.

Ha RAG-ot szeretne használni vektortárolókkal, érdemes a szöveges keresést és a vektorkeresést együtt használni. Ennek módja egy vektortár-gyűjtemény körbefuttatása, amely támogatja a vektorkeresést, szövegkereséssel, majd a szöveges keresés beépülő modulként való megjelenítésével a csevegés befejezéséhez. A Szemantikus kernel beépítetten lehetővé teszi ennek egyszerű megvalósítását. Ennek módjáról az alábbi tippekben talál további információt.

Tipp

Ha meg szeretné tudni, hogyan teheti elérhetővé a vektorkeresést a csevegés befejezéséhez, tekintse meg a A Vektortárolók használata Szemantikus kernel Szövegkereséssel.

Tipp

A vektortárakról és a vektorkeresésről további információért lásd: Mik azok a Szemantikus kernel vektortár-összekötők?.

Az alábbi mintakódban választhat a Bing vagy a Google webes keresési műveleteinek végrehajtása között.

Tipp

Az ezen a lapon látható minták futtatásához nyissa meg a GettingStartedWithTextSearch/Step1_Web_Search.cs.

Szövegkeresési példány létrehozása

Minden minta létrehoz egy szöveges keresési példányt, majd végrehajt egy keresési műveletet a megadott lekérdezés eredményeinek lekéréséhez. A keresési eredmények a weblap tartalmát leíró szövegrészletet tartalmaznak. Ez csak korlátozott környezetet biztosít, azaz a weblap tartalmának egy részét, és nincs hivatkozás az információ forrására. A későbbi minták bemutatják, hogyan lehet kezelni ezeket a korlátozásokat.

Tipp

Az alábbi mintakód a Szemantic Kernel OpenAI-összekötőt és webes beépülő modulokat használja, és az alábbi parancsokkal telepítheti:

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

Tipp

A keresési találatok típusával kapcsolatos további információkért tekintse meg a szövegkeresési beépülő modulok dokumentációját.

Szövegkeresési eredmények használata a parancssor kiegészítéséhez

A következő lépés egy beépülő modul létrehozása a webes szövegkeresésből, és a beépülő modul meghívása a keresési eredmények parancssorba való hozzáadásához.

Az alábbi mintakód bemutatja, hogyan érheti el ezt:

  1. Hozzon létre egy Kernel elemet, amelyhez regisztrálva van egy OpenAI-szolgáltatás. Ezt arra használják majd, hogy a gpt-4o modellt a prompttal meghívják.
  2. Hozzon létre egy szövegkereső példányt.
  3. Hozzon létre egy keresési beépülő modult a szövegkeresési példányból.
  4. Hozzon létre egy parancssori sablont, amely meghívja a keresési beépülő modult a lekérdezéssel, és tartalmazza a keresési eredményeket a parancssorban az eredeti lekérdezéssel együtt.
  5. Hívja meg a kérést, és jelenítse meg a választ.

A modell olyan választ ad, amely a webes keresésből elérhető legfrissebb információkra alapozott.

Bing webes keresés

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

Google webes keresés

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

A fenti mintával kapcsolatban számos probléma merült fel:

  1. A válasz nem tartalmaz olyan idézeteket, amelyek a földelési környezet biztosításához használt weblapokat mutatják.
  2. A válasz bármilyen webhelyről tartalmaz adatokat, jobb lenne, ha ezt megbízható webhelyekre korlátozná.
  3. A modell alapkörnyezetének megadásához csak az egyes weblapok egy-egy részlete használható, a kódrészlet nem feltétlenül tartalmazza a pontos válasz megadásához szükséges adatokat.

A problémák megoldásához tekintse meg a szövegkeresési beépülő modulokat ismertető oldalt.

Ezután javasoljuk, hogy tekintse át a Szöveges keresés absztrakcióit.

Hamarosan

Hamarosan továbbiak is lesznek.

Hamarosan

Hamarosan továbbiak is lesznek.

Következő lépések