Apa itu Pencarian Teks Kernel Semantik?

Peringatan

Fungsionalitas Kernel Semantik Text Search masih dalam pratinjau, dan peningkatan yang memerlukan perubahan yang menyebabkan inkompatibilitas masih dapat terjadi dalam keadaan terbatas sebelum dirilis.

Kernel Semantik menyediakan kemampuan yang memungkinkan pengembang untuk mengintegrasikan pencarian saat memanggil Model Bahasa Besar (LLM). Ini penting karena LLM dilatih pada himpunan data tetap dan mungkin memerlukan akses ke data tambahan untuk merespons permintaan pengguna secara akurat.

Proses penyediaan konteks tambahan saat meminta LLM disebut Retrieval-Augmented Generation (RAG). RAG biasanya melibatkan pengambilan data tambahan yang relevan dengan permintaan pengguna saat ini dan menambah prompt yang dikirim ke LLM dengan data ini. LLM dapat menggunakan pelatihannya ditambah konteks tambahan untuk memberikan respons yang lebih akurat.

Contoh sederhana ketika ini menjadi penting adalah ketika permintaan pengguna terkait dengan informasi terbaru yang tidak disertakan dalam himpunan data pelatihan LLM. Dengan melakukan pencarian teks yang sesuai dan menyertakan hasilnya dengan permintaan pengguna, respons yang lebih akurat akan dicapai.

Kernel Semantik menyediakan serangkaian kemampuan Pencarian Teks yang memungkinkan pengembang melakukan pencarian menggunakan Web Search atau Vector Database dan dengan mudah menambahkan RAG ke aplikasi mereka.

Kernel Semantik menyediakan API untuk melakukan pengambilan data pada tingkat abstraksi yang berbeda.

Pencarian teks memungkinkan pencarian pada tingkat tinggi dalam tumpukan, di mana input adalah teks dengan dukungan untuk pemfilteran dasar. Antarmuka pencarian teks mendukung berbagai jenis output, termasuk dukungan untuk hanya mengembalikan string sederhana. Ini memungkinkan pencarian teks untuk mendukung banyak implementasi, termasuk mesin pencari web dan penyimpanan vektor. Tujuan utama pencarian teks adalah untuk menyediakan antarmuka sederhana yang dapat diekspos sebagai plugin untuk penyelesaian obrolan.

Tips

Untuk semua implementasi pencarian teks di luar kotak, lihat Pencarian Teks Di Luar Kotak.

Pencarian vektor berada pada tingkat yang lebih rendah di tumpukan, di mana input adalah vektor. Ini juga mendukung pemfilteran dasar, ditambah memilih vektor dari penyimpanan data untuk membandingkan vektor input. Ini mengembalikan model data yang berisi data dari penyimpanan data.

Ketika Anda ingin melakukan RAG dengan penyimpanan Vektor, masuk akal untuk menggunakan pencarian teks dan pencarian vektor bersama-sama. Cara untuk melakukan ini, adalah dengan membungkus koleksi penyimpanan vektor, yang mendukung pencarian vektor, dengan pencarian teks dan kemudian mengekspos pencarian teks sebagai plugin untuk penyelesaian obrolan. Kernel Semantik memungkinkan hal ini dilakukan dengan mudah secara bawaan. Lihat tips berikut untuk informasi selengkapnya tentang cara melakukannya.

Tips

Untuk melihat cara mengekspos pencarian vektor ke penyelesaian obrolan, lihat Cara menggunakan Vector Stores dengan Kernel Semantik Text Search.

Tips

Untuk informasi selengkapnya tentang penyimpanan vektor dan pencarian vektor, lihat Apa itu konektor penyimpanan vektor Kernel Semantik?.

Dalam kode sampel berikut, Anda dapat memilih antara menggunakan Bing atau Google untuk melakukan operasi pencarian web.

Tips

Untuk menjalankan sampel yang ditampilkan di halaman ini, buka GettingStartedWithTextSearch/Step1_Web_Search.cs.

Membuat instans pencarian teks

Setiap sampel membuat instans pencarian teks lalu melakukan operasi pencarian untuk mendapatkan hasil untuk kueri yang disediakan. Hasil pencarian akan berisi cuplikan teks dari halaman web yang menjelaskan isinya. Ini hanya menyediakan konteks terbatas yaitu, subset konten halaman web dan tidak ada tautan ke sumber informasi. Sampel selanjutnya menunjukkan cara mengatasi batasan ini.

Tips

Kode sampel berikut menggunakan konektor Kernel Semantik OpenAI dan plugin Web, instal menggunakan perintah berikut:

dotnet add package Microsoft.SemanticKernel
dotnet add package Microsoft.SemanticKernel.Plugins.Web

using Microsoft.SemanticKernel.Data;
using Microsoft.SemanticKernel.Plugins.Web.Bing;

// Create an ITextSearch instance using Bing search
var textSearch = new BingTextSearch(apiKey: "<Your Bing API Key>");

var query = "What is the Semantic Kernel?";

// Search and return results
KernelSearchResults<string> searchResults = await textSearch.SearchAsync(query, new() { Top = 4 });
await foreach (string result in searchResults.Results)
{
    Console.WriteLine(result);
}
using Microsoft.SemanticKernel.Data;
using Microsoft.SemanticKernel.Plugins.Web.Google;

// Create an ITextSearch instance using Google search
var textSearch = new GoogleTextSearch(
    searchEngineId: "<Your Google Search Engine Id>",
    apiKey: "<Your Google API Key>");

var query = "What is the Semantic Kernel?";

// Search and return results
KernelSearchResults<string> searchResults = await textSearch.SearchAsync(query, new() { Top = 4 });
await foreach (string result in searchResults.Results)
{
    Console.WriteLine(result);
}

Tips

Untuk informasi selengkapnya tentang jenis hasil pencarian apa yang dapat diambil, lihat dokumentasi tentang Plugin Pencarian Teks.

Menggunakan hasil pencarian teks untuk menambah perintah

Langkah selanjutnya adalah membuat Plugin dari pencarian teks web dan memanggil Plugin untuk menambahkan hasil pencarian ke prompt.

Kode sampel di bawah ini menunjukkan cara mencapai hal ini:

  1. Buat Kernel yang memiliki layanan OpenAI terdaftar. Ini akan digunakan untuk memanggil gpt-4o model dengan perintah .
  2. Membuat instans pencarian teks.
  3. Buat Plugin Pencarian dari instans pencarian teks.
  4. Buat templat perintah yang akan memanggil Plugin Pencarian dengan kueri dan sertakan hasil pencarian dalam perintah bersama dengan kueri asli.
  5. Panggil perintah dan tampilkan respons.

Model tersebut akan memberikan respons yang berdasarkan informasi terbaru yang tersedia dari pencarian web.

Penelusuran web Bing

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>");
Kernel kernel = kernelBuilder.Build();

// Create a text search using 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
var query = "What is the Semantic Kernel?";
var prompt = "{{SearchPlugin.Search $query}}. {{$query}}";
KernelArguments arguments = new() { { "query", query } };
Console.WriteLine(await kernel.InvokePromptAsync(prompt, arguments));

Pencarian web Google

using Microsoft.SemanticKernel.Data;
using Microsoft.SemanticKernel.Plugins.Web.Google;

// Create a kernel with OpenAI chat completion
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddOpenAIChatCompletion(
        modelId: "gpt-4o",
        apiKey: "<Your OpenAI API Key>");
Kernel kernel = kernelBuilder.Build();

// Create an ITextSearch instance using Google search
var textSearch = new GoogleTextSearch(
    searchEngineId: "<Your Google Search Engine Id>",
    apiKey: "<Your Google API Key>");

// Build a text search plugin with Google 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
var query = "What is the Semantic Kernel?";
var prompt = "{{SearchPlugin.Search $query}}. {{$query}}";
KernelArguments arguments = new() { { "query", query } };
Console.WriteLine(await kernel.InvokePromptAsync(prompt, arguments));

Ada sejumlah masalah dengan sampel di atas:

  1. Respons tidak menyertakan kutipan yang menunjukkan halaman web yang digunakan untuk memberikan konteks grounding.
  2. Respons akan mencakup data dari situs web mana pun, akan lebih baik untuk membatasi ini ke situs tepercaya.
  3. Hanya cuplikan setiap halaman web yang digunakan untuk memberikan konteks grounding ke model, cuplikan mungkin tidak berisi data yang diperlukan untuk memberikan respons yang akurat.

Lihat halaman yang menjelaskan Plugin Pencarian Teks untuk solusi untuk masalah ini.

Selanjutnya kami sarankan untuk melihat Abstraksi Pencarian Teks.

Segera hadir

Segera hadir lebih banyak lagi.

Segera hadir

Segera hadir lebih banyak lagi.

Langkah berikutnya