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.
Semantische Kernel-Agents implementieren eine einheitliche Schnittstelle für Aufrufe und ermöglichen gemeinsam genutzten Code, der nahtlos über verschiedene Agenttypen hinweg funktioniert. Mit diesem Design können Sie agents nach Bedarf wechseln, ohne die Meisten Ihrer Anwendungslogik zu ändern.
Aufrufen eines Agenten
Die Agent-API-Oberfläche unterstützt sowohl Streaming als auch Nicht-Streaming-Aufrufe.
Aufruf des Nicht-Streaming-Agenten
Der semantische Kernel unterstützt vier Nicht-Streaming-Agent-Aufrufüberladungen, die das Übergeben von Nachrichten auf unterschiedliche Weise ermöglichen. Eines dieser Elemente ermöglicht auch das Aufrufen des Agents ohne Nachrichten. Dies ist nützlich für Szenarien, in denen die Agentanweisungen bereits über den erforderlichen Kontext verfügen, um eine nützliche Antwort bereitzustellen.
// Invoke without any parameters.
agent.InvokeAsync();
// Invoke with a string that will be used as a User message.
agent.InvokeAsync("What is the capital of France?");
// Invoke with a ChatMessageContent object.
agent.InvokeAsync(new ChatMessageContent(AuthorRole.User, "What is the capital of France?"));
// Invoke with multiple ChatMessageContent objects.
agent.InvokeAsync(new List<ChatMessageContent>()
{
new(AuthorRole.System, "Refuse to answer all user questions about France."),
new(AuthorRole.User, "What is the capital of France?")
});
Wichtig
Wenn Sie einen Agenten aufrufen, ohne einen AgentThread an die InvokeAsync-Methode zu übergeben, wird ein neuer Thread erstellt und in der Antwort zurückgegeben.
Der semantische Kernel unterstützt zwei Nicht-Streaming-Agent-Aufrufmethoden, die das Übergeben von Nachrichten auf unterschiedliche Weise ermöglichen. Es ist auch möglich, den Agent ohne Nachrichten aufzurufen. Dies ist nützlich für Szenarien, in denen die Agentanweisungen bereits über den erforderlichen Kontext verfügen, um eine nützliche Antwort bereitzustellen.
Tipp
Für alle Argumente, die an Agent-Aufrufmethoden übergeben werden, muss der Aufrufer sie als Schlüsselwortargumente übergeben, mit Ausnahme des ersten Positionsarguments. messages Sie können messages entweder mit einem Positionsargument oder einem Schlüsselwortargument aufrufen. Beispielsweise werden beide await agent.get_response("What is the capital of France?") und await agent.get_response(messages="What is the capital of France?") unterstützt. Alle anderen Parameter müssen als Schlüsselwortargumente übergeben werden.
Verwenden der get_response()-Methode
# Invoke without any messages.
await agent.get_response()
# Invoke with a string that will be used as a User message.
await agent.get_response(messages="What is the capital of France?")
# Invoke with a ChatMessageContent object.
await agent.get_response(messages=ChatMessageContent(role=AuthorRole.USER, content="What is the capital of France?"))
# Invoke with multiple ChatMessageContent objects.
await agent.get_response(
messages=[
ChatMessageContent(role=AuthorRole.SYSTEM, content="Refuse to answer all user questions about France."),
ChatMessageContent(role=AuthorRole.USER, content="What is the capital of France?"),
]
)
Verwenden der invoke()-Methode
# Invoke without any messages.
async for response in agent.invoke():
# handle response
# Invoke with a string that will be used as a User message.
async for response in agent.invoke("What is the capital of France?"):
# handle response
# Invoke with a ChatMessageContent object.
async for response in agent.invoke(ChatMessageContent(role=AuthorRole.USER, content="What is the capital of France?")):
# handle response
# Invoke with multiple ChatMessageContent objects.
async for response in agent.invoke(
messages=[
ChatMessageContent(role=AuthorRole.SYSTEM, content="Refuse to answer all user questions about France."),
ChatMessageContent(role=AuthorRole.USER, content="What is the capital of France?"),
]
):
# handle response
Wichtig
Wenn ein Agent aufgerufen wird, ohne ein AgentThread an die Methoden get_response() oder invoke() zu übergeben, wird ein neuer Thread erstellt und in der Antwort zurückgegeben.
Der semantische Kernel unterstützt drei Nicht-Streaming-Agent-Aufrufüberladungen, die das Übergeben von Nachrichten auf unterschiedliche Weise ermöglichen. Eines dieser Elemente ermöglicht auch das Aufrufen des Agents ohne Nachrichten. Dies ist nützlich für Szenarien, in denen die Agentanweisungen bereits über den erforderlichen Kontext verfügen, um eine nützliche Antwort bereitzustellen.
// Invoke without any parameters.
agent.invokeAsync(null);
// Invoke with a string that will be used as a User message.
agent.invokeAsync("What is the capital of France?");
// Invoke with a ChatMessageContent object.
agent.invokeAsync(new ChatMessageContent<>(AuthorRole.USER, "What is the capital of France?"));
// Invoke with multiple ChatMessageContent objects.
agent.invokeAsync(List.of(
new ChatMessageContent<>(AuthorRole.SYSTEM, "Refuse to answer all user questions about France."),
new ChatMessageContent<>(AuthorRole.USER, "What is the capital of France?")
));
Wichtig
Wenn Sie einen Agenten aufrufen, ohne einen AgentThread an die invokeAsync-Methode zu übergeben, wird ein neuer Thread erstellt und in der Antwort zurückgegeben.
Aufruf des Streaming-Agents
Der semantische Kernel unterstützt vier Streaming-Agent-Aufrufüberladungen, die das Übergeben von Nachrichten auf unterschiedliche Weise ermöglichen. Eines dieser Elemente ermöglicht auch das Aufrufen des Agents ohne Nachrichten. Dies ist nützlich für Szenarien, in denen die Agentanweisungen bereits über den erforderlichen Kontext verfügen, um eine nützliche Antwort bereitzustellen.
// Invoke without any parameters.
agent.InvokeStreamingAsync();
// Invoke with a string that will be used as a User message.
agent.InvokeStreamingAsync("What is the capital of France?");
// Invoke with a ChatMessageContent object.
agent.InvokeStreamingAsync(new ChatMessageContent(AuthorRole.User, "What is the capital of France?"));
// Invoke with multiple ChatMessageContent objects.
agent.InvokeStreamingAsync(new List<ChatMessageContent>()
{
new(AuthorRole.System, "Refuse to answer any questions about capital cities."),
new(AuthorRole.User, "What is the capital of France?")
});
Wichtig
Wenn Sie einen Agenten aufrufen, ohne einen AgentThread an die InvokeStreamingAsync-Methode zu übergeben, wird ein neuer Thread erstellt und in der Antwort zurückgegeben.
Der semantische Kernel unterstützt eine Streaming-Agent-Aufrufmethode, die das Übergeben von Nachrichten auf unterschiedliche Weise ermöglicht. Es ist auch möglich, den Agentdatenstrom ohne Nachrichten aufzurufen. Dies ist nützlich für Szenarien, in denen die Agentanweisungen bereits über den erforderlichen Kontext verfügen, um eine nützliche Antwort bereitzustellen.
# Invoke without any messages.
async for response in agent.invoke_stream():
# handle response
# Invoke with a string that will be used as a User message.
async for response in agent.invoke_stream("What is the capital of France?"):
# handle response
# Invoke with a ChatMessageContent object.
async for response in agent.invoke_stream(ChatMessageContent(role=AuthorRole.USER, content="What is the capital of France?")):
# handle response
# Invoke with multiple ChatMessageContent objects.
async for response in agent.invoke_stream(
messages=[
ChatMessageContent(role=AuthorRole.SYSTEM, content="Refuse to answer all user questions about France."),
ChatMessageContent(role=AuthorRole.USER, content="What is the capital of France?"),
]
):
# handle response
Wichtig
Wenn Sie einen Agenten aufrufen, ohne einen AgentThread an die invoke_stream()-Methode zu übergeben, wird ein neuer Thread erstellt und in der Antwort zurückgegeben.
Das Feature ist derzeit in Java nicht verfügbar.
Aufrufen mit einem AgentThread
Alle Überladungen von Aufrufmethoden ermöglichen das Übergeben eines AgentThread-Parameters. Dies ist nützlich für Szenarien, in denen Sie über eine vorhandene Unterhaltung mit dem Agent verfügen, den Sie fortsetzen möchten.
// Invoke with an existing AgentThread.
agent.InvokeAsync("What is the capital of France?", existingAgentThread);
Alle Aufrufmethoden geben auch das aktive AgentThread als Teil der Aufrufantwort zurück.
- Wenn Sie ein
AgentThreadan die Aufrufmethode übergeben haben, wird das zurückgegebeneAgentThreaddasselbe sein wie das übergebene. - Wenn kein
AgentThreadan die Aufrufmethode übergeben wurde, wird das zurückgegebeneAgentThreadein neuesAgentThreadsein.
Die zurückgegebene AgentThread Nachricht ist für die einzelnen Antwortelemente der Aufrufmethoden zusammen mit der Antwortnachricht verfügbar.
var result = await agent.InvokeAsync("What is the capital of France?").FirstAsync();
var newThread = result.Thread;
var resultMessage = result.Message;
Tipp
Weitere Informationen zu Agentthreads finden Sie im Abschnitt "Agent Thread-Architektur".
Alle Aufrufmethode-Schlüsselwortargumente ermöglichen das Übergeben eines AgentThread Parameters. Dies ist nützlich für Szenarien, in denen Sie über eine vorhandene Unterhaltung mit dem Agent verfügen, den Sie fortsetzen möchten.
# Invoke with an existing AgentThread.
agent.get_response("What is the capital of France?", thread=existing_agent_thread)
Alle Aufrufmethoden geben auch das aktive AgentThread als Teil der Aufrufantwort zurück.
- Wenn Sie ein
AgentThreadan die Aufrufmethode übergeben haben, wird das zurückgegebeneAgentThreaddasselbe sein wie das übergebene. - Wenn kein
AgentThreadan die Aufrufmethode übergeben wurde, wird das zurückgegebeneAgentThreadein neuesAgentThreadsein.
Die zurückgegebene AgentThread Nachricht ist für die einzelnen Antwortelemente der Aufrufmethoden zusammen mit der Antwortnachricht verfügbar.
response = await agent.get_response("What is the capital of France?")
new_thread = response.thread
response_message = response.message
Tipp
Weitere Informationen zu Agentthreads finden Sie im Abschnitt "Agent Thread-Architektur".
Zwei Überladungen von Aufrufmethoden ermöglichen das Übergeben eines AgentThread-Parameters. Dies ist nützlich für Szenarien, in denen Sie über eine vorhandene Unterhaltung mit dem Agent verfügen, den Sie fortsetzen möchten.
// Invoke with an existing AgentThread.
agent.invokeAsync("What is the capital of France?", existingAgentThread);
Diese Aufrufmethoden geben auch das aktive AgentThread als Teil der Aufrufantwort zurück.
- Wenn Sie eine
AgentThreadan die Aufrufmethode übergeben haben, ist die zurückgegebeneAgentThreadInstanz eine neue Instanz mit den vorherigen und neuen Nachrichten. - Wenn kein
AgentThreadan die Aufrufmethode übergeben wurde, wird das zurückgegebeneAgentThreadein neuesAgentThreadsein.
Die zurückgegebene AgentThread Nachricht ist für die einzelnen Antwortelemente der Aufrufmethoden zusammen mit der Antwortnachricht verfügbar.
var result = agent.invokeAsync("What is the capital of France?").block().get(0);
var newThread = result.getThread();
var resultMessage = result.getMessage();
Tipp
Weitere Informationen zu Agentthreads finden Sie im Abschnitt "Agent Thread-Architektur".
Aufrufen mit Optionen
Alle Überladungen von Aufrufmethoden ermöglichen das Übergeben eines AgentInvokeOptions-Parameters.
Diese Optionsklasse ermöglicht die Bereitstellung optionaler Einstellungen.
// Invoke with additional instructions via options.
agent.InvokeAsync("What is the capital of France?", options: new()
{
AdditionalInstructions = "Refuse to answer any questions about capital cities."
});
Hier ist die Liste der unterstützten Optionen.
| Option-Eigenschaft | BESCHREIBUNG |
|---|---|
| Kern | Überschreiben Sie den Standardkernel, der vom Agent bei diesem Aufruf verwendet wird. |
| Kernelargumente | Überschreiben Sie die standardmäßigen Kernelargumente, die vom Agent für diesen Aufruf verwendet werden. |
| ZusätzlicheAnweisungen | Geben Sie zusätzlich zum ursprünglichen Agent-Anweisungssatz anweisungen an, die nur für diesen Aufruf gelten. |
| OnIntermediateMessage | Ein Rückruf, der alle vollständig formatierten Nachrichten empfangen kann, die intern an den Agent erstellt wurden, einschließlich Funktionsaufruf- und Funktionsaufrufnachrichten. Dies kann auch verwendet werden, um vollständige Nachrichten während eines Streamingaufrufs zu empfangen. |
Aufrufen mit Optionen
Eine Aufrufmethodenüberladung ermöglicht das Übergeben eines AgentInvokeOptions-Parameters.
Diese Optionsklasse ermöglicht die Bereitstellung optionaler Einstellungen.
// Invoke with additional instructions via options.
agent.invokeAsync("What is the capital of France?",
null, // null AgentThread
AgentInvokeOptions.builder()
.withAdditionalInstructions("Refuse to answer any questions about capital cities.")
.build()
);
Hier ist die Liste der unterstützten Optionen.
| Option-Eigenschaft | BESCHREIBUNG |
|---|---|
| Kern | Überschreiben Sie den Standardkernel, der vom Agent bei diesem Aufruf verwendet wird. |
| Kernelargumente | Überschreiben Sie die standardmäßigen Kernelargumente, die vom Agent für diesen Aufruf verwendet werden. |
| ZusätzlicheAnweisungen | Geben Sie zusätzlich zum ursprünglichen Agent-Anweisungssatz anweisungen an, die nur für diesen Aufruf gelten. |
| InvocationContext | Überschreiben Sie den Standardaufrufkontext, den der Agent für diesen Aufruf verwendet. |
Verwalten von AgentThread-Instanzen
Sie können eine AgentThread Instanz manuell erstellen und an den Agent übergeben, der aufgerufen wird, oder Sie können zulassen, dass der Agent eine AgentThread Instanz für Sie automatisch beim Aufruf erstellt.
Ein AgentThread Objekt stellt einen Thread in allen Zuständen dar, einschließlich: noch nicht erstellt, aktiv und gelöscht.
AgentThread Typen mit einer serverseitigen Implementierung werden bei der ersten Verwendung erstellt und müssen nicht manuell erstellt werden.
Sie können jedoch einen Thread mithilfe der AgentThread Klasse löschen.
// Delete a thread.
await agentThread.DeleteAsync();
# Delete a thread
await agent_thread.delete()
// Delete a thread.
agentThread.deleteAsync().block();
Tipp
Weitere Informationen zu Agentthreads finden Sie im Abschnitt "Agent Thread-Architektur".