Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Warnung
Die RAG-Funktionalität des semantischen Kernel-Agents ist experimentell, kann Änderungen unterliegen und wird nur auf Basis von Feedback und Auswertung finalisiert.
Verwenden des TextSearchProvider für RAG
Die Microsoft.SemanticKernel.Data.TextSearchProvider Agenten können relevante Dokumente auf Basis von Benutzereingaben abrufen und in den Kontext des Agenten einfügen, um fundierte Antworten zu ermöglichen.
Sie integriert eine Microsoft.SemanticKernel.Data.ITextSearch Instanz in semantische Kernel-Agents.
Es gibt mehrere ITextSearch Implementierungen, die Ähnlichkeitssuchen in Vektorspeichern und Suchmaschinenintegration unterstützen.
Weitere Informationen finden Sie hier.
Wir stellen auch ein Microsoft.SemanticKernel.Data.TextSearchStore zur Verfügung, das eine einfache, kommentierte Vektorspeicherung von Textdaten für die Zwecke der Retrieval Augmented Generation ermöglicht.
TextSearchStore verfügt über ein integriertes Schema zum Speichern und Abrufen von Textdaten in einem Vektorspeicher. Wenn Sie Ihr eigenes Schema für den Speicher verwenden möchten, schauen Sie sich VectorStoreTextSearch an.
Einrichten des TextSearchProvider
Dieses TextSearchProvider kann mit einer VectorStore und TextSearchStore zum Speichern und Durchsuchen von Textdokumenten verwendet werden.
Im folgenden Beispiel wird veranschaulicht, wie Sie TextSearchProvider zusammen mit TextSearchStore und InMemoryVectorStore einrichten und verwenden, damit ein Agent einfache RAG-Aufgaben über Text durchführen kann.
// 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);
Erweiterte Features: Zitate und Filterung
Die TextSearchStore unterstützt erweiterte Funktionen, wie das Filtern von Ergebnissen anhand von Namespace und das Einschließen von Zitaten in Antworten.
Einschließlich Zitate
Dokumente in der TextSearchStore Datei können Metadaten wie Quellnamen und Links enthalten, wodurch die Generierung von Zitaten in Agentantworten ermöglicht wird.
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"]
}
});
Wenn das TextSearchProvider dieses Dokument abruft, enthält es standardmäßig den Quellnamen und den Link in seiner Antwort.
Filtern nach Namespace
Beim Upserting (einfügen und aktualisieren) von Dokumenten können Sie optional einen oder mehrere Namenspaces für jedes Dokument angeben.
Namespaces können eine beliebige Zeichenfolge sein, die den Bereich eines Dokuments definiert.
Anschließend können Sie die TextSearchStore Suchergebnisse so konfigurieren, dass nur die Datensätze beschränkt werden, die dem angeforderten Namespace entsprechen.
using var textSearchStore = new TextSearchStore<string>(
vectorStore,
collectionName: "FinancialData",
vectorDimensions: 1536,
new() { SearchNamespace = "group/g2" }
);
Automatische ggü. bedarfsgesteuerte RAG
Die TextSearchProvider kann bei jedem Aufruf des Agenten automatisch eine Suche durchführen oder eine On-Demand-Suche über Tool-Anfragen ermöglichen, wenn der Agent zusätzliche Informationen benötigt.
Die Standardeinstellung lautet BeforeAIInvoke, was bedeutet, dass Suchvorgänge vor jedem Agentaufruf mithilfe der an den Agent übergebenen Nachricht ausgeführt werden.
Diese Änderung zu OnDemandFunctionCalling ermöglicht dem Agenten, ein Werkzeug aufzurufen, um Suchvorgänge mit einer vom Agenten gewählten Suchzeichenfolge durchzuführen.
var options = new TextSearchProviderOptions
{
SearchTime = TextSearchProviderOptions.RagBehavior.OnDemandFunctionCalling,
};
var provider = new TextSearchProvider(mockTextSearch.Object, options: options);
Warnung
Bei Verwendung von TextSearchProvider mit OnDemandFunctionCalling muss die UseImmutableKernel Einstellung für den Agenten auf true gesetzt werden, da die Funktion das Clonen des Kernels beim Aufrufen des Agenten erfordert.
Beachten Sie, dass die Einstellung UseImmutableKerneltrue bedeutet, dass alle Kerneldatenänderungen, die während des Agent-Aufrufs durch z. B. Plug-Ins vorgenommen werden, nach Abschluss des Aufrufs nicht beibehalten werden.
TextSearchProvider-Optionen
Die TextSearchProvider Konfiguration kann mit verschiedenen Optionen erfolgen, um das Verhalten anzupassen. Optionen werden mithilfe der TextSearchProviderOptions Klasse für den TextSearchProvider Konstruktor bereitgestellt.
Top
Gibt die maximale Anzahl der Ergebnisse an, die aus der Ähnlichkeitssuche zurückgegeben werden sollen.
- Standard: 3
Suchzeit
Steuert, wenn die Textsuche ausgeführt wird. Zu den Optionen gehören:
- BeforeAIInvoke: Eine Suche wird jedes Mal ausgeführt, wenn das Modell/Agent aufgerufen wird, direkt vor dem Aufruf, und die Ergebnisse werden dem Modell/Agent über den Aufrufkontext bereitgestellt.
- OnDemandFunctionCalling: Eine Suche kann vom Modell/Agent bei Bedarf über Funktionsaufrufe durchgeführt werden.
PluginFunctionName
Gibt den Namen der Plug-In-Methode an, die für die Suche verfügbar gemacht wird, wenn SearchTime auf OnDemandFunctionCalling festgelegt wurde.
- Standard: „Suchen“
Plug-in-Funktionsbeschreibung
Liefert eine Beschreibung der Plugin-Methode, die für die Suche verfügbar gemacht wird, wenn SearchTime auf OnDemandFunctionCalling gesetzt ist.
- Standard: "Ermöglicht die Suche nach zusätzlichen Informationen, um die Benutzerfrage zu beantworten."
ContextPrompt
Beim Bereitstellen der Textblöcke für das KI-Modell bei Aufrufen ist eine Eingabeaufforderung erforderlich, um dem KI-Modell anzugeben, wofür die Textblöcke gelten und wie sie verwendet werden sollen.
Mit dieser Einstellung können Sie die Standardnachrichten, die im TextSearchProvider integriert sind, außer Kraft setzen.
IncludeCitationsPrompt
Beim Bereitstellen der Textblöcke für das KI-Modell beim Aufrufen ist eine Eingabeaufforderung erforderlich, um dem KI-Modell mitzuteilen, ob und wie Zitate ausgeführt werden sollen.
Mit dieser Einstellung können Sie die Standardnachrichten, die im TextSearchProvider integriert sind, außer Kraft setzen.
ContextFormatter
Dieser optionale Rückruf kann verwendet werden, um den Text, der von TextSearchProvider erzeugt wird, vollständig anzupassen.
Standardmäßig produziert der TextSearchProvider Text, der Folgendes enthält
- Eine Eingabeaufforderung, die dem KI-Modell mitteilt, wofür die Textblöcke gehören.
- Die Liste der Textblöcke mit Quelllinks und Namen.
- Eine Aufforderung zum Anweisen des KI-Modells zum Einschließen von Zitaten.
Sie können Ihre eigene Ausgabe schreiben, indem Sie diese Callback-Funktion implementieren und bereitstellen.
Hinweis: Wenn dieser Delegat angegeben wird, werden die ContextPrompt- und IncludeCitationsPrompt-Einstellungen nicht verwendet.
Kombinieren von RAG mit anderen Anbietern
Der TextSearchProvider kann mit anderen Anbietern kombiniert werden, wie mem0 oder WhiteboardProvider, um Agenten mit Speicher- und Abruffunktionen zu erstellen.
// 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);
Durch die Kombination dieser Features können Agents eine personalisiertere und kontextorientiertere Erfahrung bieten.
Nächste Schritte
Bald verfügbar
Weitere Informationen werden in Kürze verfügbar sein.
Bald verfügbar
Weitere Informationen werden in Kürze verfügbar sein.