Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uyarı
Semantik Çekirdek Aracısı RAG işlevi deneyseldir, değişikliğe tabidir ve yalnızca geri bildirim ve değerlendirmeye göre sonlandırılır.
RAG için TextSearchProvider kullanma
aracıların Microsoft.SemanticKernel.Data.TextSearchProvider
kullanıcı girişine göre ilgili belgeleri almasına ve daha bilinçli yanıtlar için aracı bağlamlarına eklemesine olanak tanır.
Bir Microsoft.SemanticKernel.Data.ITextSearch
örneğini Semantik Çekirdek ajanlarıyla entegre eder.
Vektör depolarında benzerlik aramalarını ve arama altyapısı tümleştirmesini destekleyen birden çok ITextSearch
uygulama vardır.
Burada daha fazla bilgi bulabilirsiniz.
Ayrıca, Alma Artırılmış Nesli amaçları doğrultusunda metin verilerinin basit, fikirlendirilmiş vektör depolamasını sağlayan bir Microsoft.SemanticKernel.Data.TextSearchStore
sağlarız.
TextSearchStore
bir vektör deposunda metin verilerini depolamak ve almak için yerleşik bir şemaya sahiptir. Depolama için kendi şemanızı kullanmak istiyorsanız VectorStoreTextSearch'e göz atın.
TextSearchProvider'i Ayarlama
TextSearchProvider
, VectorStore
ve TextSearchStore
ile birlikte metin belgelerini depolamak ve aramak için kullanılabilir.
Aşağıdaki örnek, bir aracının metin üzerinde basit RAG gerçekleştirmesi için TextSearchProvider
, TextSearchStore
ve InMemoryVectorStore
ile uygulamanın nasıl ayarlanıp kullanılacağını göstermektedir.
// 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);
Gelişmiş Özellikler: Alıntılar ve Filtreleme
, TextSearchStore
sonuçları ad alanına göre filtreleme ve yanıtlara alıntılar ekleme gibi gelişmiş özellikleri destekler.
Alıntılar dahil
içindeki TextSearchStore
belgeler kaynak adları ve bağlantılar gibi meta veriler içerebilir ve aracı yanıtlarında alıntı oluşturmayı etkinleştirir.
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"]
}
});
bu belgeyi TextSearchProvider
aldığında, varsayılan olarak yanıta kaynak adı ve bağlantıyı ekler.
Ad Alanına Göre Filtreleme
Belgeleri yukarı dağıtırken, isteğe bağlı olarak her belge için bir veya daha fazla ad alanı sağlayabilirsiniz.
Ad alanları, belgenin kapsamını tanımlayan herhangi bir dize olabilir.
Ardından arama sonuçlarını yalnızca istenen ad alanıyla eşleşen kayıtlarla sınırlamak için öğesini yapılandırabilirsiniz TextSearchStore
.
using var textSearchStore = new TextSearchStore<string>(
vectorStore,
collectionName: "FinancialData",
vectorDimensions: 1536,
new() { SearchNamespace = "group/g2" }
);
Otomatik ve isteğe bağlı RAG karşılaştırması
aracı TextSearchProvider
çağrıları sırasında otomatik olarak arama yapabilir veya aracı ek bilgilere ihtiyaç duyduğunda araç çağrıları aracılığıyla isteğe bağlı aramalara izin verebilir.
Varsayılan ayar olan BeforeAIInvoke
, aracıya geçirilen mesaj kullanılarak, her bir aracın çağrılmasından önce aramaların gerçekleştirileceği anlamına gelir.
Bu, Temsilci'nin tercih ettiği bir arama dizesi kullanarak arama yapmak için bir araç çağrısı yapmasına olanak tanıyan OnDemandFunctionCalling
olarak değiştirilebilir.
var options = new TextSearchProviderOptions
{
SearchTime = TextSearchProviderOptions.RagBehavior.OnDemandFunctionCalling,
};
var provider = new TextSearchProvider(mockTextSearch.Object, options: options);
Uyarı
Ajanı çalıştırırken TextSearchProvider
ile OnDemandFunctionCalling
kullandığınızda, özelliğin ajanı çağırırken çekirdeği kopyalamayı gerektirmesi nedeniyle, ajandaki UseImmutableKernel
ayarının true
olarak ayarlanması gerekir.
Not edin ki UseImmutableKernel
'yi true
olarak ayarlamak, aracı çağırma sırasında örneğin eklentiler tarafından yapılan çekirdek veri değişikliklerinin, çağrı tamamlandıktan sonra korunmaması anlamına gelir.
TextSearchProvider seçenekleri
, TextSearchProvider
davranışını özelleştirmek için çeşitli seçeneklerle yapılandırılabilir. Seçenekler oluşturucuya TextSearchProviderOptions
sınıfı TextSearchProvider
kullanılarak sağlanır.
Yukarı
Benzerlik aramasından döndürülecek en fazla sonuç sayısını belirtir.
- Varsayılan: 3
Arama Zamanı
Metin aramasının ne zaman gerçekleştirildiğini denetler. Seçenekler şunlardır:
- BeforeAIInvoke: Çağrıdan hemen önce model/aracı her çağrıldığında bir arama gerçekleştirilir ve sonuçlar çağırma bağlamı aracılığıyla modele/aracıya sağlanır.
- OnDemandFunctionCalling: Model/aracı tarafından isteğe bağlı olarak işlev çağrısı yoluyla bir arama gerçekleştirilebilir.
PluginFunctionName
olarak ayarlandıysa SearchTime
OnDemandFunctionCalling
, arama için kullanılabilir hale getirilecek eklenti yönteminin adını belirtir.
- Varsayılan: "Ara"
Eklenti İşlev Açıklaması
olarak ayarlanmışsa SearchTime
OnDemandFunctionCalling
, arama için kullanılabilir hale getirilecek eklenti yönteminin açıklamasını sağlar.
- Varsayılan: "Kullanıcı sorusunu yanıtlamaya yardımcı olmak için ek bilgi aramaya izin verir."
ContextPrompt
Çağrı sırasında yapay zeka modeline metin öbekleri sağlarken, yapay zeka modeline metin öbeklerinin ne için olduğunu ve bunların nasıl kullanılacağını belirtmek için bir istem gerekir.
Bu ayar, TextSearchProvider
içinde yerleşik olarak bulunan varsayılan mesajlaşmanın geçersiz kılınmasına izin verir.
AlıntılarıDahilEtUyarısı
Çağrı sırasında yapay zeka modeline metin öbekleri sağlarken, yapay zeka modeline alıntıların yapılıp yapılmayacağını ve nasıl yapılacağını bildirmek için bir istem gerekir.
Bu ayar, TextSearchProvider
içinde yerleşik olarak bulunan varsayılan mesajlaşmanın geçersiz kılınmasına izin verir.
ContextFormatter
Bu isteğe bağlı geri arama, TextSearchProvider
tarafından üretilen metni tamamen özelleştirmek için kullanılabilir.
Varsayılan olarak, TextSearchProvider
içeren metin üretecektir.
- Yapay zeka modeline metin öbeklerinin ne için olduğunu belirten bir istem.
- Kaynak bağlantıları ve adları olan metin öbeklerinin listesi.
- Yapay zeka modeline alıntıları dahil etme hakkında bilgi veren bir istem.
Geri aramayı uygulayıp sağlayarak kendi çıktınızı yazabilirsiniz.
Not: Bu temsilci sağlandığında, ContextPrompt
ve IncludeCitationsPrompt
ayarları kullanılmayacaktır.
RAG'i Diğer Sağlayıcılarla Birleştirme
TextSearchProvider
, hem bellek hem de alma özelliklerine sahip ajanlar oluşturmak için mem0
veya WhiteboardProvider
gibi diğer sağlayıcılarla birleştirilebilir.
// 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);
Aracılar bu özellikleri birleştirerek daha kişiselleştirilmiş ve bağlama duyarlı bir deneyim sunabilir.
Sonraki Adımlar
Çok Yakında
Daha fazla bilgi yakında sunulacaktır.
Çok Yakında
Daha fazla bilgi yakında sunulacaktır.