Come trasmettere le risposte dell'agente. (Experimental)
Avviso
Il framework dell'agente del kernel semantico è sperimentale, ancora in fase di sviluppo ed è soggetto a modifiche.
Che cos'è una risposta con flusso?
Una risposta trasmessa recapita il contenuto del messaggio in blocchi incrementali di piccole dimensioni. Questo approccio migliora l'esperienza utente consentendo loro di visualizzare e interagire con il messaggio mentre si svolge, invece di attendere il caricamento dell'intera risposta. Gli utenti possono iniziare immediatamente a elaborare le informazioni, migliorando il senso di velocità di risposta e interattività. Di conseguenza, riduce al minimo i ritardi e mantiene gli utenti più coinvolti durante il processo di comunicazione.
Riferimenti di streaming:
- Aprire la Guida per lo streaming di intelligenza artificiale
- Open AI Chat Completion Streaming
- Aprire lo streaming di Assistente intelligenza artificiale
- API REST del servizio OpenAI di Azure
Streaming nel kernel semantico
I servizi di intelligenza artificiale che supportano lo streaming nel kernel semantico usano tipi di contenuto diversi rispetto a quelli usati per i messaggi completamente formati. Questi tipi di contenuto sono progettati specificamente per gestire la natura incrementale dei dati di streaming. Gli stessi tipi di contenuto vengono usati anche all'interno di Agent Framework per scopi simili. Ciò garantisce coerenza ed efficienza in entrambi i sistemi quando si gestiscono le informazioni di streaming.
Gli agenti non sono attualmente disponibili in Java.
Chiamata dell'agente di streaming
Agent Framework supporta le risposte in streaming quando si usa La chat dell'agente o quando si richiama direttamente un agente di completamento chat o open AI Assistant Agent. In entrambe le modalità, il framework fornisce risposte in modo asincrono man mano che vengono trasmessi. Insieme alla risposta trasmessa, viene mantenuta una cronologia coerente e non trasmessa per tenere traccia della conversazione. Ciò garantisce sia l'interazione in tempo reale che un record affidabile del flusso della conversazione.
Risposta trasmessa dall'agente di completamento chat
Quando si richiama una risposta trasmessa da un agente di completamento chat, la cronologia chat viene aggiornata dopo la ricezione della risposta completa. Anche se la risposta viene trasmessa in modo incrementale, la cronologia registra solo il messaggio completo. In questo modo, la cronologia delle chat riflette le risposte completamente formate per coerenza.
// Define agent
ChatCompletionAgent agent = ...;
// Create a ChatHistory object to maintain the conversation state.
ChatHistory chat = [];
// Add a user message to the conversation
chat.Add(new ChatMessageContent(AuthorRole.User, "<user input>"));
// Generate the streamed agent response(s)
await foreach (StreamingChatMessageContent response in agent.InvokeStreamingAsync(chat))
{
// Process streamed response(s)...
}
# Define agent
agent = ChatCompletionAgent(...)
# Create a ChatHistory object to maintain the conversation state.
chat = ChatHistory()
# Add a user message to the conversation
chat.add_message(ChatMessageContent(AuthorRole.USER, "<user input>"))
# Generate the streamed agent response(s)
async for response in agent.invoke_stream(chat)
{
# Process streamed response(s)...
}
Gli agenti non sono attualmente disponibili in Java.
Risposta trasmessa dall'agente Open AI Assistant
Quando si richiama una risposta trasmessa da un agente Open AI Assistant, è possibile fornire una cronologia chat facoltativa per acquisire i messaggi completi per ulteriori analisi, se necessario. Poiché l'assistente mantiene lo stato della conversazione come thread remoto, l'acquisizione di questi messaggi non è sempre necessaria. La decisione di archiviare e analizzare la risposta completa dipende dai requisiti specifici dell'interazione.
// Define agent
OpenAIAssistantAgent agent = ...;
// Create a thread for the agent conversation.
string threadId = await agent.CreateThreadAsync();
// Add a user message to the conversation
chat.Add(threadId, new ChatMessageContent(AuthorRole.User, "<user input>"));
// Generate the streamed agent response(s)
await foreach (StreamingChatMessageContent response in agent.InvokeStreamingAsync(threadId))
{
// Process streamed response(s)...
}
// Delete the thread when it is no longer needed
await agent.DeleteThreadAsync(threadId);
# Define agent
agent = OpenAIAssistantAgent(...)
# Create a thread for the agent conversation.
thread_id = await agent.create_thread()
# Add user message to the conversation
await agent.add_chat_message(ChatMessageContent(role=AuthorRole.USER, content="<user input>"))
# Generate the streamed agent response(s)
async for response in agent.invoke_stream(thread_id=thread_id):
# Process streamed response(s)...
Gli agenti non sono attualmente disponibili in Java.
Streaming con Agent Chat
Quando si usa Agent Chat, la cronologia completa delle conversazioni viene sempre mantenuta e accessibile direttamente tramite l'istanza di Agent Chat. Di conseguenza, la differenza principale tra le chiamate tra flussi e non trasmessi risiede nel metodo di recapito e nel tipo di contenuto risultante. In entrambi i casi, gli utenti possono comunque accedere alla cronologia completa, ma le risposte in streaming forniscono aggiornamenti in tempo reale man mano che la conversazione procede. Ciò consente una maggiore flessibilità nella gestione delle interazioni, a seconda delle esigenze dell'applicazione.
// Define agents
ChatCompletionAgent agent1 = ...;
OpenAIAssistantAgent agent2 = ...;
// Create chat with participating agents.
AgentGroupChat chat =
new(agent1, agent2)
{
// Override default execution settings
ExecutionSettings =
{
TerminationStrategy = { MaximumIterations = 10 }
}
};
// Invoke agents
string lastAgent = string.Empty;
await foreach (StreamingChatMessageContent response in chat.InvokeStreamingAsync())
{
if (!lastAgent.Equals(response.AuthorName, StringComparison.Ordinal))
{
// Process begining of agent response
lastAgent = response.AuthorName;
}
// Process streamed content...
}
# Define agents
agent1 = ChatCompletionAgent(...)
agent2 = OpenAIAssistantAgent(...)
# Create chat with participating agents
chat = AgentGroupChat(
agents=[agent1, agent2],
termination_strategy=DefaultTerminationStrategy(maximum_iterations=10),
)
# Invoke agents
last_agent = None
async for response in chat.invoke_stream():
if message.content is not None:
if last_agent != response.name:
# Process beginning of agent response
last_agent = message.name
# Process streamed content
Gli agenti non sono attualmente disponibili in Java.