Зачем использовать вызов функции с помощью поиска текста семантического ядра?
В предыдущих примерах на основе получения дополненного поколения (RAG) запрос пользователя использовался в качестве поискового запроса при получении соответствующих сведений. Запрос пользователя может быть длинным и может охватывать несколько разделов, или может быть несколько различных реализаций поиска, доступных для предоставления специализированных результатов. Для любого из этих сценариев может быть полезно разрешить модели ИИ извлекать поисковый запрос или запросы от пользователя запрашивать и использовать вызов функции для получения соответствующих сведений, необходимых ему.
Совет
Чтобы запустить примеры, показанные на этой странице, перейдите в раздел GettingStartedWithTextSearch/Step3_Search_With_FunctionCalling.cs.
Вызов функции с помощью поиска текста Bing
Совет
В примерах этого раздела используется IFunctionInvocationFilter
фильтр для регистрации функции, вызываемой моделью и параметрами, которые он отправляет.
Интересно увидеть, что модель использует в качестве поискового запроса при вызове SearchPlugin
.
Ниже приведена 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);
}
}
В приведенном SearchPlugin
ниже примере создается веб-поиск Bing.
Этот подключаемый модуль будет объявлен в модели ИИ для использования с автоматическим вызовом функций, используя FunctionChoiceBehavior
параметры выполнения запроса.
При запуске этого примера проверьте выходные данные консоли, чтобы увидеть, какая модель используется в качестве поискового запроса.
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 и ссылок
В приведенном ниже примере содержатся необходимые изменения для включения ссылок:
- Используйте
CreateWithGetTextSearchResults
для созданияSearchPlugin
, это будет включать ссылку на исходный источник информации. - Измените запрос, чтобы указать модели включить ссылки в ответ.
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
Последний пример в этом разделе показывает, как использовать фильтр с вызовом функции.
Для этого примера будут включены только результаты поиска на сайте блогов разработчиков Майкрософт.
Создается экземпляр TextSearchFilter
и добавляется предложение равенства для сопоставления devblogs.microsoft.com
сайта.
Фильтр Ths будет использоваться при вызове функции в ответ на запрос вызова функции из модели.
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));
Скоро
В ближайшее время будет больше.
Скоро
В ближайшее время будет больше.