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

Önceki Alma Artırılmış Nesil (RAG) tabanlı örneklerde, kullanıcının sormuş olduğu örneklerde ilgili bilgiler alınırken arama sorgusu olarak 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 örnekler, modelin çağırdığını ve hangi parametreleri gönderdiğini günlüğe kaydetmek için bir IFunctionInvocationFilter filtre kullanır. modelin çağrılırken arama sorgusu olarak ne kullandığını görmek ilginçtir SearchPlugin.

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 kullanılarak otomatik işlev çağrısıyla kullanılmak üzere yapay zeka modeline FunctionChoiceBehavior tanıtılı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 alıntılarla işlev çağrısı

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

  1. öğesini oluşturmak SearchPluginiçin kullanınCreateWithGetTextSearchResults. Bu, bilgilerin özgün kaynağının bağlantısını içerir.
  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. Örneği TextSearchFilter oluşturulur ve siteyle devblogs.microsoft.com eşleşmesi için bir eşitlik yan tümcesi eklenir. Ths filtresi, modelden gelen bir işlev çağırma isteğine yanıt olarak işlev ç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