Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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.
Miben különbözik a szöveges keresés a vektoros kereséstől?
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?.
Rag implementálása webes szövegkereséssel
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
Bing webes keresés
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);
}
Google webes keresés
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:
- Hozzon létre egy
Kernelelemet, amelyhez regisztrálva van egy OpenAI-szolgáltatás. Ezt arra használják majd, hogy agpt-4omodellt a prompttal meghívják. - Hozzon létre egy szövegkereső példányt.
- Hozzon létre egy keresési beépülő modult a szövegkeresési példányból.
- 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.
- 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:
- A válasz nem tartalmaz olyan idézeteket, amelyek a földelési környezet biztosításához használt weblapokat mutatják.
- A válasz bármilyen webhelyről tartalmaz adatokat, jobb lenne, ha ezt megbízható webhelyekre korlátozná.
- 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.