Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dalam sampel berbasis Retrieval-Augmented Generation (RAG) sebelumnya yang diminta pengguna telah digunakan sebagai kueri pencarian saat mengambil informasi yang relevan. Permintaan pengguna bisa panjang dan mungkin mencakup beberapa topik atau mungkin ada beberapa implementasi pencarian berbeda yang tersedia yang memberikan hasil khusus. Untuk salah satu skenario ini, dapat berguna untuk memungkinkan model AI mengekstrak kueri pencarian atau kueri dari pengguna meminta dan menggunakan panggilan fungsi untuk mengambil informasi relevan yang dibutuhkannya.
Tip
Untuk menjalankan sampel yang diperlihatkan di halaman ini, buka GettingStartedWithTextSearch/Step3_Search_With_FunctionCalling.cs.
Pemanggilan fungsi dengan pencarian teks Bing
Tip
Sampel di bagian ini menggunakan IFunctionInvocationFilter filter untuk mencatat fungsi yang dipanggil model dan parameter apa yang dikirimnya.
Menarik untuk melihat apa yang digunakan model sebagai kueri pencarian saat memanggil SearchPlugin.
Berikut adalah IFunctionInvocationFilter implementasi filter.
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);
}
}
Sampel di bawah ini membuat SearchPlugin pencarian web Bing menggunakan.
Plugin ini akan diiklankan ke model AI untuk digunakan dengan panggilan fungsi otomatis, menggunakan FunctionChoiceBehavior dalam pengaturan eksekusi prompt.
Saat Anda menjalankan sampel ini, periksa output konsol untuk melihat apa model yang digunakan sebagai kueri pencarian.
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));
Pemanggilan fungsi dengan pencarian teks Bing dan kutipan
Sampel di bawah ini mencakup perubahan yang diperlukan untuk menyertakan kutipan:
- Gunakan
CreateWithGetTextSearchResultsuntuk membuatSearchPlugin, ini akan menyertakan tautan ke sumber asli informasi. - Ubah perintah untuk menginstruksikan model untuk menyertakan kutipan dalam responsnya.
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));
Pemanggilan fungsi dengan pencarian dan pemfilteran teks Bing
Sampel akhir di bagian ini menunjukkan cara menggunakan filter dengan panggilan fungsi.
Untuk sampel ini, hanya hasil pencarian dari situs Blog Pengembang Microsoft yang akan disertakan.
Instans TextSearchFilter dibuat dan klausa kesetaraan ditambahkan agar sesuai dengan devblogs.microsoft.com situs.
Filter Ths akan digunakan ketika fungsi dipanggil sebagai respons terhadap permintaan panggilan fungsi dari model.
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));
Segera hadir
Lebih segera datang.
Segera hadir
Lebih segera datang.