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.
Peringatan
Fungsionalitas RAG Agen Kernel Semantik bersifat eksperimental, dapat berubah, dan hanya akan diselesaikan berdasarkan umpan balik dan evaluasi.
Menggunakan TextSearchProvider untuk RAG
memungkinkan Microsoft.SemanticKernel.Data.TextSearchProvider agen untuk mengambil dokumen yang relevan berdasarkan input pengguna dan menyuntikkannya ke dalam konteks agen untuk respons yang lebih terinformasi.
Ini mengintegrasikan instance Microsoft.SemanticKernel.Data.ITextSearch dengan agen Kernel Semantik.
Ada beberapa ITextSearch implementasi, mendukung pencarian kesamaan pada penyimpanan vektor dan integrasi mesin pencari.
Informasi lebih lanjut dapat ditemukan di sini.
Kami juga menyediakan Microsoft.SemanticKernel.Data.TextSearchStore, yang menawarkan penyimpanan vektor sederhana dan tertentu dari data tekstual untuk tujuan Generasi Berbasis Pengambilan.
TextSearchStore memiliki skema bawaan untuk menyimpan dan mengambil data tekstual di penyimpanan vektor. Jika Anda ingin menggunakan skema Anda sendiri untuk penyimpanan, lihat VectorStoreTextSearch.
Menyiapkan TextSearchProvider
TextSearchProvider dapat digunakan dengan VectorStore dan TextSearchStore untuk menyimpan dan mencari dokumen teks.
Contoh berikut menunjukkan cara menyiapkan dan menggunakan TextSearchProvider dengan TextSearchStore dan InMemoryVectorStore agar agen melakukan RAG sederhana melalui teks.
// Create an embedding generator using Azure OpenAI.
var embeddingGenerator = new AzureOpenAIClient(new Uri("<Your_Azure_OpenAI_Endpoint>"), new AzureCliCredential())
.GetEmbeddingClient("<Your_Deployment_Name>")
.AsIEmbeddingGenerator(1536);
// Create a vector store to store documents.
var vectorStore = new InMemoryVectorStore(new() { EmbeddingGenerator = embeddingGenerator });
// Create a TextSearchStore for storing and searching text documents.
using var textSearchStore = new TextSearchStore<string>(vectorStore, collectionName: "FinancialData", vectorDimensions: 1536);
// Upsert documents into the store.
await textSearchStore.UpsertTextAsync(new[]
{
"The financial results of Contoso Corp for 2024 is as follows:\nIncome EUR 154 000 000\nExpenses EUR 142 000 000",
"The Contoso Corporation is a multinational business with its headquarters in Paris."
});
// Create an agent.
Kernel kernel = new Kernel();
ChatCompletionAgent agent = new()
{
Name = "FriendlyAssistant",
Instructions = "You are a friendly assistant",
Kernel = kernel,
// This setting must be set to true when using the on-demand RAG feature
UseImmutableKernel = true
};
// Create an agent thread and add the TextSearchProvider.
ChatHistoryAgentThread agentThread = new();
var textSearchProvider = new TextSearchProvider(textSearchStore);
agentThread.AIContextProviders.Add(textSearchProvider);
// Use the agent with RAG capabilities.
ChatMessageContent response = await agent.InvokeAsync("Where is Contoso based?", agentThread).FirstAsync();
Console.WriteLine(response.Content);
Fitur Tingkat Lanjut: Kutipan dan Pemfilteran
TextSearchStore mendukung fitur lanjutan seperti memfilter hasil menurut namespace dan menyertakan kutipan dalam respons.
Termasuk Kutipan
Dokumen dalam TextSearchStore dapat menyertakan metadata seperti nama sumber dan tautan, memungkinkan pembuatan kutipan dalam respons agen.
await textSearchStore.UpsertDocumentsAsync(new[]
{
new TextSearchDocument
{
Text = "The financial results of Contoso Corp for 2023 is as follows:\nIncome EUR 174 000 000\nExpenses EUR 152 000 000",
SourceName = "Contoso 2023 Financial Report",
SourceLink = "https://www.contoso.com/reports/2023.pdf",
Namespaces = ["group/g2"]
}
});
TextSearchProvider Ketika mengambil dokumen ini, secara default akan menyertakan nama sumber dan tautan dalam responsnya.
Pemfilteran menurut Namespace
Saat meningkatkan dokumen, Anda dapat secara opsional menyediakan satu atau beberapa namespace untuk setiap dokumen.
Namespace dapat berupa string apa pun yang menentukan cakupan dokumen.
Anda kemudian dapat mengonfigurasi TextSearchStore untuk membatasi hasil pencarian hanya untuk rekaman yang cocok dengan namespace yang diminta.
using var textSearchStore = new TextSearchStore<string>(
vectorStore,
collectionName: "FinancialData",
vectorDimensions: 1536,
new() { SearchNamespace = "group/g2" }
);
RAG Otomatis vs RAG Sesuai Permintaan
TextSearchProvider dapat melakukan pencarian otomatis saat setiap agen dipanggil atau memungkinkan pencarian sesuai permintaan menggunakan panggilan alat ketika agen membutuhkan informasi tambahan.
Pengaturan default adalah BeforeAIInvoke, yang berarti bahwa pencarian akan dilakukan sebelum setiap pemanggilan agen menggunakan pesan yang diteruskan ke agen.
Ini dapat diubah menjadi OnDemandFunctionCalling, yang akan memungkinkan Agen untuk melakukan panggilan alat untuk melakukan pencarian menggunakan string pencarian pilihan agen.
var options = new TextSearchProviderOptions
{
SearchTime = TextSearchProviderOptions.RagBehavior.OnDemandFunctionCalling,
};
var provider = new TextSearchProvider(mockTextSearch.Object, options: options);
Peringatan
Saat menggunakan TextSearchProvider dengan OnDemandFunctionCalling, UseImmutableKernel pengaturan pada agen harus diatur ke true karena fitur memerlukan kloning kernel saat memanggil agen.
Perhatikan bahwa pengaturan UseImmutableKernel ke true akan berarti bahwa setiap modifikasi data kernel yang dilakukan selama pemanggilan agen misalnya plugin, tidak akan dipertahankan setelah pemanggilan selesai.
Opsi PenyediaPencarianTeks
TextSearchProvider dapat dikonfigurasi dengan berbagai opsi untuk menyesuaikan perilakunya. Opsi disediakan ke konstruktor TextSearchProviderOptions menggunakan kelas TextSearchProvider.
Teratas
Menentukan jumlah maksimum hasil yang akan dikembalikan dari pencarian kesamaan.
- Default: 3
WaktuPencarian
Mengontrol kapan pencarian teks dilakukan. Opsinya meliputi:
- BeforeAIInvoke: Pencarian dilakukan setiap kali model/agen dipanggil, tepat sebelum pemanggilan, dan hasilnya diberikan kepada model/agen melalui konteks pemanggilan.
- OnDemandFunctionCalling: Pencarian dapat dilakukan oleh model/agen sesuai permintaan melalui panggilan fungsi.
PluginFunctionName
Menentukan nama metode plugin yang akan tersedia untuk mencari jika SearchTime diatur ke OnDemandFunctionCalling.
- Default: "Cari"
PluginFunctionDescription
Memberikan deskripsi metode plugin yang akan tersedia untuk mencari jika SearchTime diatur ke OnDemandFunctionCalling.
- Default: "Memungkinkan pencarian informasi tambahan untuk membantu menjawab pertanyaan pengguna."
ContextPrompt
Saat memberikan potongan teks ke model AI pada pemanggilan, perintah diperlukan untuk menunjukkan kepada model AI untuk apa gugus teks tersebut dan bagaimana potongan teks tersebut harus digunakan.
Pengaturan ini memungkinkan pengesampingan pesan default yang disertakan dalam TextSearchProvider.
Permintaan Sertakan Kutipan
Saat memberikan potongan teks ke model AI pada pemanggilan, perintah diperlukan untuk memberi tahu model AI apakah dan cara melakukan kutipan.
Pengaturan ini memungkinkan pengesampingan pesan default yang disertakan dalam TextSearchProvider.
ContextFormatter
Panggilan balik opsional ini dapat digunakan untuk sepenuhnya menyesuaikan teks yang dihasilkan oleh TextSearchProvider.
Secara default TextSearchProvider akan menghasilkan teks yang menyertakan
- Perintah yang memberi tahu model AI untuk apa potongan teks tersebut.
- Daftar potongan teks dengan tautan dan nama sumber.
- Perintah yang menginstruksikan model AI tentang menyertakan kutipan.
Anda dapat menulis output Anda sendiri dengan menerapkan dan menyediakan panggilan balik ini.
Catatan: Jika delegasi ini diberikan, pengaturan ContextPrompt dan IncludeCitationsPrompt tidak akan digunakan.
Menggabungkan RAG dengan Penyedia Lain
TextSearchProvider dapat dikombinasikan dengan penyedia lain, seperti mem0 atau WhiteboardProvider, untuk membentuk agen yang memiliki kemampuan memori dan penarikan data.
// Add both mem0 and TextSearchProvider to the agent thread.
agentThread.AIContextProviders.Add(mem0Provider);
agentThread.AIContextProviders.Add(textSearchProvider);
// Use the agent with combined capabilities.
ChatMessageContent response = await agent.InvokeAsync("What was Contoso's income for 2023?", agentThread).FirstAsync();
Console.WriteLine(response.Content);
Dengan menggabungkan fitur-fitur ini, agen dapat memberikan pengalaman yang lebih personal dan sadar konteks.
Langkah selanjutnya
Segera datang
Informasi lebih lanjut akan segera hadir.
Segera datang
Informasi lebih lanjut akan segera hadir.