Jak przesyłać strumieniowo odpowiedzi agenta. (Eksperymentalne)
Ostrzeżenie
Struktura agenta jądra semantycznego jest eksperymentalna, nadal w programowania i może ulec zmianie.
Co to jest odpowiedź strumieniowa?
Odpowiedź strumieniowa dostarcza zawartość komunikatu w małych fragmentach przyrostowych. Takie podejście zwiększa środowisko użytkownika, umożliwiając im wyświetlanie i angażowanie się w komunikat podczas jego rozwoju, zamiast czekać na całą odpowiedź na załadowanie. Użytkownicy mogą natychmiast rozpocząć przetwarzanie informacji, poprawiając poczucie reakcji i interakcyjności. W rezultacie minimalizuje opóźnienia i zwiększa zaangażowanie użytkowników w całym procesie komunikacji.
Odwołania do przesyłania strumieniowego:
- Otwórz przewodnik przesyłania strumieniowego sztucznej inteligencji
- Otwieranie przesyłania strumieniowego po zakończeniu czatu sztucznej inteligencji
- Otwieranie przesyłania strumieniowego asystenta sztucznej inteligencji
- Interfejs API REST usługi Azure OpenAI
Przesyłanie strumieniowe w jądrze semantycznym
Usługi sztucznej inteligencji, które obsługują przesyłanie strumieniowe w jądrze semantycznym, używają różnych typów zawartości w porównaniu z usługami używanymi do w pełni sformułowanych komunikatów. Te typy zawartości są specjalnie zaprojektowane w celu obsługi przyrostowego charakteru danych przesyłanych strumieniowo. Te same typy zawartości są również używane w strukturze agentów do podobnych celów. Zapewnia to spójność i wydajność w obu systemach podczas pracy z informacjami przesyłanymi strumieniowo.
Agenci są obecnie niedostępni w języku Java.
Wywołanie agenta przesyłania strumieniowego
Struktura agenta obsługuje przesyłanie strumieniowe odpowiedzi podczas korzystania z czatu agenta lub bezpośredniego wywoływania agenta uzupełniania czatu lub otwierania agenta asystenta sztucznej inteligencji. W obu trybach platforma dostarcza odpowiedzi asynchronicznie, gdy są przesyłane strumieniowo. Oprócz przesyłanej strumieniowo odpowiedzi spójna historia nieprzesyłania strumieniowego jest utrzymywana w celu śledzenia konwersacji. Zapewnia to zarówno interakcję w czasie rzeczywistym, jak i niezawodny zapis przepływu konwersacji.
Przesyłana strumieniowo odpowiedź od agenta uzupełniania czatu
Podczas wywoływania przesyłania strumieniowego odpowiedzi od agenta uzupełniania czatu historia czatu jest aktualizowana po otrzymaniu pełnej odpowiedzi. Chociaż odpowiedź jest przesyłana strumieniowo przyrostowo, historia rejestruje tylko pełny komunikat. Dzięki temu historia czatów odzwierciedla w pełni sformułowane odpowiedzi w celu zapewnienia spójności.
// 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)...
}
Agenci są obecnie niedostępni w języku Java.
Odpowiedź strumieniowa od agenta Asystenta open AI
Podczas wywoływania przesyłania strumieniowego odpowiedzi od agenta asystenta open AI można podać opcjonalną historię czatów w celu przechwycenia pełnych wiadomości w celu dalszej analizy, jeśli jest to konieczne. Ponieważ asystent utrzymuje stan konwersacji jako wątek zdalny, przechwytywanie tych wiadomości nie zawsze jest konieczne. Decyzja o przechowywaniu i analizowaniu pełnej odpowiedzi zależy od konkretnych wymagań interakcji.
// 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)...
Agenci są obecnie niedostępni w języku Java.
Przesyłanie strumieniowe za pomocą czatu agenta
W przypadku korzystania z czatu agenta pełna historia konwersacji jest zawsze zachowywana i może być dostępna bezpośrednio za pośrednictwem wystąpienia czatu agenta. W związku z tym kluczową różnicą między wywołaniami przesyłanymi strumieniowo i bez strumienia jest metoda dostarczania i wynikowy typ zawartości. W obu przypadkach użytkownicy mogą nadal uzyskiwać dostęp do pełnej historii, ale przesyłane strumieniowo odpowiedzi zapewniają aktualizacje w czasie rzeczywistym w miarę postępu konwersacji. Pozwala to na większą elastyczność obsługi interakcji w zależności od potrzeb aplikacji.
// 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
Agenci są obecnie niedostępni w języku Java.