Udostępnij za pośrednictwem


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:

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.