Miért érdemes függvényhívást használni szemantikus kernelszöveg-kereséssel?

Az előző, Retrieval-Augmented Generation (RAG) alapú példákban a releváns információk lekérésekor a felhasználói kérést használták keresési lekérdezésként. A felhasználó megkérdezése hosszú lehet, és több témakörre is kiterjedhet, vagy több különböző keresési implementáció érhető el, amelyek speciális eredményeket biztosítanak. Ezen forgatókönyvek bármelyike esetén hasznos lehet engedélyezni, hogy az AI-modell kinyerje a keresési lekérdezést vagy lekérdezéseket a felhasználótól, és függvényhívással kérje le a szükséges információkat.

Tipp

Az ezen a lapon látható minták futtatásához lépjen a GettingStartedWithTextSearch/Step3_Search_With_FunctionCalling.cs lapra.

Tipp

Az ebben a szakaszban szereplő minták egy szűrő használatával IFunctionInvocationFilter naplózják a modell által meghívt függvényt és az általa küldött paramétereket. Érdekes látni, hogy a modell mit használ keresési lekérdezésként a SearchPluginhívás során.

Itt található a IFunctionInvocationFilter szűrő implementációja.

private sealed class FunctionInvocationFilter(TextWriter output) : IFunctionInvocationFilter
{
    public async Task OnFunctionInvocationAsync(FunctionInvocationContext context, Func<FunctionInvocationContext, Task> next)
    {
        if (context.Function.PluginName == "SearchPlugin")
        {
            output.WriteLine($"{context.Function.Name}:{JsonSerializer.Serialize(context.Arguments)}\n");
        }
        await next(context);
    }
}

Az alábbi minta létrehoz egy SearchPlugin Bing-alapú webes keresést. Ez a beépülő modul az AI-modell számára lesz meghirdetve automatikus függvényhíváshoz való használatra, a(z) FunctionChoiceBehavior használatával az utasítás-végrehajtási beállításokban. A minta futtatásakor ellenőrizze a konzol kimenetét, hogy lássa, milyen modellt használt a keresési lekérdezés.

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.OpenAI;
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>");
kernelBuilder.Services.AddSingleton<ITestOutputHelper>(output);
kernelBuilder.Services.AddSingleton<IFunctionInvocationFilter, FunctionInvocationFilter>();
Kernel kernel = kernelBuilder.Build();

// Create a search service with 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
OpenAIPromptExecutionSettings settings = new() { FunctionChoiceBehavior = FunctionChoiceBehavior.Auto() };
KernelArguments arguments = new(settings);
Console.WriteLine(await kernel.InvokePromptAsync("What is the Semantic Kernel?", arguments));

Függvényhívás a Bing szöveges kereső és hivatkozások használatával

Az alábbi minta tartalmazza az idézetek hozzáadásához szükséges módosításokat:

  1. A SearchPlugin létrehozásához használja a(z) CreateWithGetTextSearchResults elemet, így az információ eredeti forrására mutató hivatkozás is szerepelni fog benne.
  2. Módosítsa a kérést, hogy utasítsa a modellt, hogy idézőjeleket tartalmazzon a válaszában.
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.OpenAI;
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>");
kernelBuilder.Services.AddSingleton<ITestOutputHelper>(output);
kernelBuilder.Services.AddSingleton<IFunctionInvocationFilter, FunctionInvocationFilter>();
Kernel kernel = kernelBuilder.Build();

// Create a search service with 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.CreateWithGetTextSearchResults("SearchPlugin");
kernel.Plugins.Add(searchPlugin);

// Invoke prompt and use text search plugin to provide grounding information
OpenAIPromptExecutionSettings settings = new() { FunctionChoiceBehavior = FunctionChoiceBehavior.Auto() };
KernelArguments arguments = new(settings);
Console.WriteLine(await kernel.InvokePromptAsync("What is the Semantic Kernel? Include citations to the relevant information where it is referenced in the response.", arguments));

Függvényhívás a Bing szöveges keresésének és szűrésének használatával

A szakasz utolsó mintája bemutatja, hogyan használható szűrő függvényhívással. Ebben a mintában csak a Microsoft Developer Blogs webhely keresési eredményei jelennek meg. Létrejön a(z) TextSearchFilter egy példánya, és a(z) devblogs.microsoft.com webhelyhez való illesztéshez egy egyenlőségi záradék lesz hozzáadva. Ezt a szűrőt akkor használja a rendszer, ha a függvényt a rendszer meghívja a modelltől érkező függvényhívási kérésre válaszul.

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.OpenAI;
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>");
kernelBuilder.Services.AddSingleton<ITestOutputHelper>(output);
kernelBuilder.Services.AddSingleton<IFunctionInvocationFilter, FunctionInvocationFilter>();
Kernel kernel = kernelBuilder.Build();

// Create a search service with 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 filter = new TextSearchFilter().Equality("site", "devblogs.microsoft.com");
var searchOptions = new TextSearchOptions() { Filter = filter };
var searchPlugin = KernelPluginFactory.CreateFromFunctions(
    "SearchPlugin", "Search Microsoft Developer Blogs site only",
    [textSearch.CreateGetTextSearchResults(searchOptions: searchOptions)]);
kernel.Plugins.Add(searchPlugin);

// Invoke prompt and use text search plugin to provide grounding information
OpenAIPromptExecutionSettings settings = new() { FunctionChoiceBehavior = FunctionChoiceBehavior.Auto() };
KernelArguments arguments = new(settings);
Console.WriteLine(await kernel.InvokePromptAsync("What is the Semantic Kernel? Include citations to the relevant information where it is referenced in the response.", arguments));

Hamarosan

Hamarosan továbbiak is lesznek.

Hamarosan

Hamarosan továbbiak is lesznek.

Következő lépések