Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Semantiska kernelagenter implementerar ett enhetligt gränssnitt för anrop, vilket möjliggör delad kod som fungerar sömlöst mellan olika agenttyper. Med den här designen kan du växla agenter efter behov utan att ändra merparten av programlogik.
Anropa en agent
Agent-API-ytan stöder både strömning och icke-direktuppspelningsanrop.
Agentanrop utan direktuppspelning
Semantisk kernel stöder fyra överlagringar av icke-strömmande agentanrop som gör det möjligt att skicka meddelanden på olika sätt. En av dessa tillåter också att agenten anropas utan meddelanden. Detta är värdefullt för scenarier där agentinstruktionerna redan har all nödvändig kontext för att ge ett användbart svar.
// 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?")
});
Viktigt!
Om du anropar en agent utan att skicka en AgentThread till InvokeAsync metoden skapas en ny tråd och den nya tråden returneras i svaret.
Semantic Kernel stöder två metoder för agentanrop som inte är direktuppspelningsmetoder och som möjliggör att skicka meddelanden på olika sätt. Det går också att anropa agenten utan meddelanden. Detta är värdefullt för scenarier där agentinstruktionerna redan har all nödvändig kontext för att ge ett användbart svar.
Tips/Råd
Alla argument som skickas till agentanropsmetoder kräver att anroparen skickar dem som nyckelordsargument, förutom det första positionsargumentet, messages. Du kan anropa med antingen ett positions- eller nyckelordsargument för messages. Till exempel stöds både await agent.get_response("What is the capital of France?") och await agent.get_response(messages="What is the capital of France?"). Alla andra parametrar måste skickas som nyckelordsargument.
Använda metoden get_response()
# 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?"),
    ]
)
Använda metoden invoke()
# 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
Viktigt!
Om du anropar en agent utan att skicka en AgentThread till get_response() metoderna eller invoke() skapas en ny tråd och den nya tråden returneras i svaret.
Semantisk kernel har stöd för tre överlagringar av icke-direktuppspelningsagenter som gör det möjligt att skicka meddelanden på olika sätt. En av dessa tillåter också att agenten anropas utan meddelanden. Detta är värdefullt för scenarier där agentinstruktionerna redan har all nödvändig kontext för att ge ett användbart svar.
// 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?")
));
Viktigt!
Om du anropar en agent utan att skicka en AgentThread till invokeAsync metoden skapas en ny tråd och den nya tråden returneras i svaret.
Anrop av direktuppspelningsagent
Semantisk kernel stöder fyra överlagringar av anrop av strömningsagenter som gör det möjligt att skicka meddelanden på olika sätt. En av dessa tillåter också att agenten anropas utan meddelanden. Detta är värdefullt för scenarier där agentinstruktionerna redan har all nödvändig kontext för att ge ett användbart svar.
// 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?")
});
Viktigt!
Om du anropar en agent utan att skicka en AgentThread till InvokeStreamingAsync metoden skapas en ny tråd och den nya tråden returneras i svaret.
Semantisk kernel stöder en anropsmetod för strömningsagenter som gör det möjligt att skicka meddelanden på olika sätt. Det går också att anropa agentströmmen utan meddelanden. Detta är värdefullt för scenarier där agentinstruktionerna redan har all nödvändig kontext för att ge ett användbart svar.
# 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
Viktigt!
Om du anropar en agent utan att skicka en AgentThread till invoke_stream() metoden skapas en ny tråd och den nya tråden returneras i svaret.
Funktionen är för närvarande inte tillgänglig i Java.
Anropa med en AgentThread
Alla överbelastningar av anropsmetoden tillåter att AgentThread-parametern skickas. Detta är användbart för scenarier där du har en befintlig konversation med agenten som du vill fortsätta.
// Invoke with an existing AgentThread.
agent.InvokeAsync("What is the capital of France?", existingAgentThread);
Alla anropsmetoder returnerar också den aktiva AgentThread som en del av anropssvaret.
- Om du har skickat en 
AgentThreadtill anropa-metoden blir den returneradeAgentThreadsamma som den som skickades in. - Om du har skickat nej 
AgentThreadtill metoden invoke blir den returneradeAgentThreaden nyAgentThread. 
Den returnerade AgentThread är tillgänglig för de enskilda svarsobjekten i anropande metoder tillsammans med svarsmeddelandet.
var result = await agent.InvokeAsync("What is the capital of France?").FirstAsync();
var newThread = result.Thread;
var resultMessage = result.Message;
Tips/Råd
Mer information om agenttrådar finns i avsnittet Agenttrådsarkitektur.
Alla nyckelordsargument för anropsmetoden tillåter att en parameter skickas AgentThread . Detta är användbart för scenarier där du har en befintlig konversation med agenten som du vill fortsätta.
# Invoke with an existing AgentThread.
agent.get_response("What is the capital of France?", thread=existing_agent_thread)
Alla anropsmetoder returnerar också den aktiva AgentThread som en del av anropssvaret.
- Om du har skickat en 
AgentThreadtill anropa-metoden blir den returneradeAgentThreadsamma som den som skickades in. - Om du har skickat nej 
AgentThreadtill metoden invoke blir den returneradeAgentThreaden nyAgentThread. 
Den returnerade AgentThread är tillgänglig för de enskilda svarsobjekten i anropande metoder tillsammans med svarsmeddelandet.
response = await agent.get_response("What is the capital of France?")
new_thread = response.thread
response_message = response.message
Tips/Råd
Mer information om agenttrådar finns i avsnittet Agenttrådsarkitektur.
Med två överbelastningar av anropsmetoden kan en AgentThread-parameter skickas. Detta är användbart för scenarier där du har en befintlig konversation med agenten som du vill fortsätta.
// Invoke with an existing AgentThread.
agent.invokeAsync("What is the capital of France?", existingAgentThread);
Dessa anropsmetoder returnerar också den aktiva AgentThread som en del av anropssvaret.
- Om du har skickat en 
AgentThreadtill metoden invoke blir den returneradeAgentThreaden ny instans med föregående och nya meddelanden. - Om du har skickat nej 
AgentThreadtill metoden invoke blir den returneradeAgentThreaden nyAgentThread. 
Den returnerade AgentThread är tillgänglig för de enskilda svarsobjekten i anropande metoder tillsammans med svarsmeddelandet.
var result = agent.invokeAsync("What is the capital of France?").block().get(0);
var newThread = result.getThread();
var resultMessage = result.getMessage();
Tips/Råd
Mer information om agenttrådar finns i avsnittet Agenttrådsarkitektur.
Anropa med alternativ
Alla överbelastningar av anropsmetoden tillåter att AgentInvokeOptions-parametern skickas.
Med den här alternativklassen kan du ange valfria inställningar.
// 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."
});
Här är listan över de alternativ som stöds.
| Alternativ egenskap | Beskrivning | 
|---|---|
| Kärna | Åsidosätt standardkärnan som används av agenten för det här anropet. | 
| Kärnargument | Åsidosätt standardkärnargumenten som används av agenten för det här anropet. | 
| YtterligareInstruktioner | Ange instruktioner utöver den ursprungliga agentinstruktionsuppsättningen som endast gäller för det här anropet. | 
| PåMellanmeddelande | Ett återanrop som kan ta emot alla fullständigt formade meddelanden som skapats internt inom agenten, inklusive meddelanden om funktionsanrop och funktionsinitiering. Detta kan också användas för att ta emot fullständiga meddelanden under ett direktuppspelningsanrop. | 
Anropa med alternativ
En överlagring av anropsmetod gör det möjligt att skicka en AgentInvokeOptions parameter.
Med den här alternativklassen kan du ange valfria inställningar.
// 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()
);
Här är listan över de alternativ som stöds.
| Alternativ egenskap | Beskrivning | 
|---|---|
| Kärna | Åsidosätt standardkärnan som används av agenten för det här anropet. | 
| Kärnargument | Åsidosätt standardkärnargumenten som används av agenten för det här anropet. | 
| YtterligareInstruktioner | Ange instruktioner utöver den ursprungliga agentinstruktionsuppsättningen som endast gäller för det här anropet. | 
| AnropContext | Åsidosätt standardkontexten för anrop som agenten använder för det här anropet. | 
Hantera AgentThread-instanser
Du kan skapa en AgentThread instans manuellt och skicka den till agenten när den anropas, eller så kan du låta agenten skapa en AgentThread instans åt dig automatiskt vid anrop.
Ett AgentThread objekt representerar en tråd i alla dess tillstånd, inklusive: ännu inte skapat, aktivt och borttaget.
              AgentThread typer som har en implementering på serversidan skapas vid första användningen och behöver inte skapas manuellt.
Du kan dock ta bort en tråd med hjälp av AgentThread klassen .
// Delete a thread.
await agentThread.DeleteAsync();
# Delete a thread
await agent_thread.delete()
// Delete a thread.
agentThread.deleteAsync().block();
Tips/Råd
Mer information om agenttrådar finns i avsnittet Agenttrådsarkitektur.