Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ostrzeżenie
Funkcjonalność RAG dla agenta jądra semantycznego jest eksperymentalna, może ulec zmianom i zostanie sfinalizowana dopiero po uzyskaniu opinii oraz przeprowadzeniu oceny.
Używanie usługi TextSearchProvider dla RAG
Umożliwia Microsoft.SemanticKernel.Data.TextSearchProvider agentom pobieranie odpowiednich dokumentów na podstawie danych wejściowych użytkownika i wstrzykiwanie ich do kontekstu agenta w celu uzyskania bardziej świadomych odpowiedzi.
Integruje Microsoft.SemanticKernel.Data.ITextSearch wystąpienie z semantycznymi agentami jądra.
Istnieje wiele ITextSearch implementacji, które obsługują wyszukiwania podobieństwa w magazynach wektorów i integrację z wyszukiwarką.
Więcej informacji można znaleźć tutaj.
Udostępniamy również narzędzie Microsoft.SemanticKernel.Data.TextSearchStore, które zapewnia prostą, dedykowaną wektorową pamięć danych tekstowych na potrzeby rozszerzonego generowania danych w procesie odzyskiwania informacji.
TextSearchStore ma wbudowany schemat do przechowywania i pobierania danych tekstowych w składnicy wektorów. Jeśli chcesz użyć własnego schematu do przechowywania, zapoznaj się z pozycją VectorStoreTextSearch.
Konfigurowanie dostawcy TextSearchProvider
Element TextSearchProvider może być używany z elementem VectorStore i TextSearchStore do przechowywania i wyszukiwania dokumentów tekstowych.
W poniższym przykładzie pokazano, jak skonfigurować i użyć TextSearchProvider z TextSearchStore i InMemoryVectorStore, aby agent mógł wykonać prostą analizę RAG nad tekstem.
// 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);
Funkcje zaawansowane: cytaty i filtrowanie
TextSearchStore obsługuje zaawansowane funkcje, takie jak filtrowanie wyników według przestrzeni nazw oraz włączanie cytatów do odpowiedzi.
Dołączanie cytatów
Dokumenty w programie TextSearchStore mogą zawierać metadane, takie jak nazwy źródłowe i linki, co umożliwia generowanie cytatów w odpowiedziach agenta.
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"]
}
});
Gdy TextSearchProvider pobiera ten dokument, domyślnie zawiera nazwę źródłową i link w odpowiedzi.
Filtrowanie według przestrzeni nazw
Podczas upsertowania dokumentów można opcjonalnie podać jedną lub więcej przestrzeni nazw dla każdego dokumentu.
Przestrzenie nazw mogą być dowolnym ciągiem definiującym zakres dokumentu.
Następnie można skonfigurować parametr , TextSearchStore aby ograniczyć wyniki wyszukiwania tylko do tych rekordów, które są zgodne z żądaną przestrzenią nazw.
using var textSearchStore = new TextSearchStore<string>(
vectorStore,
collectionName: "FinancialData",
vectorDimensions: 1536,
new() { SearchNamespace = "group/g2" }
);
Automatyczne kontra na żądanie RAG
Narzędzie TextSearchProvider może automatycznie wykonywać wyszukiwania podczas każdego wywołania agenta lub zezwalać na wyszukiwanie na żądanie za pośrednictwem wywołań narzędzi, gdy agent potrzebuje dodatkowych informacji.
Ustawieniem domyślnym jest BeforeAIInvoke, co oznacza, że wyszukiwania będą wykonywane przed wywołaniem każdego agenta przy użyciu komunikatu przekazanego do agenta.
Można to zmienić na OnDemandFunctionCalling, co umożliwi agentowi wykonanie wywołania narzędzia do przeprowadzania wyszukiwań przy użyciu wybranej frazy wyszukiwania agenta.
var options = new TextSearchProviderOptions
{
SearchTime = TextSearchProviderOptions.RagBehavior.OnDemandFunctionCalling,
};
var provider = new TextSearchProvider(mockTextSearch.Object, options: options);
Ostrzeżenie
W przypadku używania TextSearchProvider z OnDemandFunctionCalling, ustawienie agenta musi zostać skonfigurowane na wartość true, ponieważ funkcja wymaga sklonowania jądra systemu podczas wywoływania agenta.
Należy pamiętać, że ustawienie UseImmutableKernel na true oznacza, że wszelkie modyfikacje danych jądra wykonywane podczas wywołania agenta przez np. wtyczki zostaną utracone po zakończeniu wywołania.
Opcje TextSearchProvider
Różne opcje konfiguracji TextSearchProvider pozwalają dostosować jego funkcjonalność. Opcje są dostarczane używając TextSearchProviderOptions klasy w konstruktorze TextSearchProvider.
Do góry
Określa maksymalną liczbę wyników do zwrócenia z wyszukiwania podobnych elementów.
- Wartość domyślna: 3
Czas wyszukiwania
Określa, kiedy jest wykonywane wyszukiwanie tekstu. Dostępne opcje:
- BeforeAIInvoke: wyszukiwanie jest wykonywane za każdym razem, gdy jest wywoływany model/agent, tuż przed wywołaniem, a wyniki są udostępniane modelowi/agentowi za pośrednictwem kontekstu wywołania.
- OnDemandFunctionCalling: wyszukiwanie może być wykonywane przez model/agent na żądanie za pośrednictwem wywołania funkcji.
PluginFunctionName
Określa nazwę metody wtyczki, która zostanie udostępniona do wyszukiwania, jeśli SearchTime jest ustawiona na OnDemandFunctionCalling.
- Ustawienie domyślne: "Wyszukaj"
OpisFunkcjiWtyczki
Zawiera opis metody wtyczki, która zostanie udostępniona do wyszukiwania, jeśli SearchTime jest ustawiona na OnDemandFunctionCalling.
- Ustawienie domyślne: "Umożliwia wyszukiwanie dodatkowych informacji, aby pomóc w udzieleniu odpowiedzi na pytanie użytkownika".
ContextPrompt
Podczas podawania fragmentów tekstu do modelu sztucznej inteligencji podczas wywołania jest wymagany monit, aby wskazać modelowi sztucznej inteligencji, jaki są fragmenty tekstu i jak powinny być używane.
To ustawienie umożliwia zastąpienie domyślnej wiadomości wbudowanej w TextSearchProvider.
UwzględnijCytatyKomunikat
Przy podawaniu fragmentów tekstu do modelu sztucznej inteligencji przy wywołaniu wymagane jest zapytanie informujące model AI, czy i jak wykonać cytowanie.
To ustawienie umożliwia zastąpienie domyślnej wiadomości wbudowanej w TextSearchProvider.
ContextFormatter
Tego opcjonalnego wywołania zwrotnego można użyć do całkowitego dostosowania tekstu generowanego przez element TextSearchProvider.
Domyślnie TextSearchProvider wygeneruje tekst, który zawiera
- Komunikat informujący model sztucznej inteligencji o celu fragmentów tekstu.
- Lista fragmentów tekstu z linkami źródłowymi i nazwami.
- Monit z instrukcją modelu sztucznej inteligencji o dołączaniu cytatów.
Możesz napisać własne dane wyjściowe, implementując i dostarczając to wywołanie zwrotne.
Uwaga: Jeśli ten delegat zostanie podany, ustawienia ContextPrompt i IncludeCitationsPrompt nie będą używane.
Łączenie programu RAG z innymi dostawcami
TextSearchProvider Można je połączyć z innymi dostawcami, takimi jak mem0 lub WhiteboardProvider, w celu utworzenia agentów z możliwościami pamięci i pobierania.
// 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);
Łącząc te funkcje, agenci mogą dostarczać bardziej spersonalizowane i świadome kontekstu doświadczenie.
Dalsze kroki
Wkrótce
Więcej informacji można znaleźć wkrótce.
Wkrótce
Więcej informacji można znaleźć wkrótce.