Semantik Çekirdek Metin Araması ile işlev çağrıları neden kullanılır?

Önceki Retrieval-Augmented Generation (RAG) tabanlı örneklerde, ilgili bilgiler getirilirken arama sorgusu olarak kullanıcının sorusu kullanılmıştır. Kullanıcının isteği uzun olabilir ve birden çok konuya yayılabilir veya özel sonuçlar sağlayan birden çok farklı arama uygulaması kullanılabilir. Bu senaryolardan herhangi biri için yapay zeka modelinin arama sorgusunu veya kullanıcıdan gelen sorguları ayıklamasına izin vermek ve işlev çağrısını kullanarak ihtiyaç duyduğu ilgili bilgileri alması yararlı olabilir.

İpucu

Bu sayfada gösterilen örnekleri çalıştırmak için GettingStartedWithTextSearch/Step3_Search_With_FunctionCalling.cs bölümüne gidin.

İpucu

Bu bölümdeki örneklerde, modelin çağırdığı işlevi ve hangi parametreleri gönderdiğini günlüğe kaydetmek için bir IFunctionInvocationFilter filtresi kullanılır. Modelin SearchPlugin çağırırken hangi arama sorgusunu kullandığını görmek ilginçtir.

Filtre uygulaması aşağıdadır IFunctionInvocationFilter .

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

Aşağıdaki örnek, Bing web araması kullanarak bir SearchPlugin oluşturur. Bu eklenti, istem yürütme ayarlarındaki FunctionChoiceBehavior kullanılarak otomatik işlev çağırma ile kullanılmak üzere yapay zeka modeline tanıtılacaktır. Bu örneği çalıştırdığınızda, arama sorgusu olarak kullanılan modeli görmek için konsol çıkışını denetleyin.

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

Bing metin araması ve atıfları kullanarak fonksiyon çağırma

Aşağıdaki örnek, alıntıları dahil etmek için gerekli değişiklikleri içerir:

  1. SearchPlugin oluşturmak için CreateWithGetTextSearchResults kullanın; bu, bilgilerin orijinal kaynağına olan bağlantıyı içerecektir.
  2. Modelin yanıtına alıntılar eklemesini bildirmek için istemi değiştirin.
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));

Bing metin arama ve filtreleme ile işlev çağrısı

Bu bölümdeki son örnekte işlev çağrısıyla filtrenin nasıl kullanılacağı gösterilmektedir. Bu örnek için yalnızca Microsoft Geliştirici Blogları sitesindeki arama sonuçları eklenir. TextSearchFilter örneği oluşturulur ve devblogs.microsoft.com sitesiyle eşleşmesi için bir eşitlik koşulu eklenir. Bu filtre, işlev modelden gelen bir işlev çağırma isteğine yanıt olarak çağrıldığında kullanılır.

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

Yakında

Daha fazlası çok yakında.

Yakında

Daha fazlası çok yakında.

Sonraki adımlar