Как выполнять потоковую передачу ответов агента. (экспериментальная возможность)
Предупреждение
Платформа агента семантического ядра является экспериментальной, по-прежнему в разработке и подлежит изменению.
Что такое потокованный ответ?
Потоковый ответ предоставляет содержимое сообщения небольшими добавочными блоками. Этот подход улучшает взаимодействие с пользователем, позволяя им просматривать и взаимодействовать с сообщением по мере его развертывания, а не ожидая всего ответа на загрузку. Пользователи могут немедленно начать обработку информации, улучшить чувство реагирования и интерактивности. В результате это сводит к минимуму задержки и позволяет пользователям более активно заниматься в процессе обмена данными.
Ссылки на потоковую передачу:
- Руководство по потоковой передаче ИИ
- Потоковая передача завершения чата СИ
- Открытие потоковой передачи помощника по искусственному интеллекту
- REST API службы Azure OpenAI
Потоковая передача в семантическом ядре
Службы ИИ, поддерживающие потоковую передачу в семантическом ядре, используют различные типы контента по сравнению с теми, которые используются для полностью сформированных сообщений. Эти типы контента специально предназначены для обработки добавочного характера потоковых данных. Те же типы контента также используются в агентной платформе для аналогичных целей. Это обеспечивает согласованность и эффективность обеих систем при работе с потоковой информацией.
Агенты в настоящее время недоступны в Java.
Вызов агента потоковой передачи
Agent Framework поддерживает потоковые ответы при использовании чата агента или при непосредственном вызове агента завершения чата или агента Open AI Assistant. В любом режиме платформа асинхронно предоставляет ответы по мере их потоковой передачи. Наряду с потоковым ответом для отслеживания беседы поддерживается последовательный, непотоковый журнал. Это обеспечивает взаимодействие в режиме реального времени и надежную запись потока беседы.
Потоковая передача ответа из агента завершения чата
При вызове потокового ответа из агента завершения чата журнал чата обновляется после получения полного ответа. Хотя ответ передается постепенно, журнал записывает только полное сообщение. Это гарантирует, что журнал чата отражает полностью сформированные ответы для согласованности.
// 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)...
}
Агенты в настоящее время недоступны в Java.
Потоковая передача ответа от агента Open AI Assistant
При вызове потокового ответа от агента Помощника по open AI при необходимости можно предоставить необязательный журнал чата для записи полных сообщений для дальнейшего анализа. Так как помощник поддерживает состояние беседы как удаленный поток, запись этих сообщений не всегда необходима. Решение о хранении и анализе полного ответа зависит от конкретных требований взаимодействия.
// 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)...
Агенты в настоящее время недоступны в Java.
Потоковая передача с помощью чата агента
При использовании чата агента журнал бесед всегда сохраняется и может быть доступен непосредственно через экземпляр чата агента. Таким образом, ключевое различие между потоковой и непотоковой вызовами лежит в методе доставки и результирующем типе контента. В обоих случаях пользователи по-прежнему могут получить доступ к полному журналу, но потоковые ответы предоставляют обновления в режиме реального времени по мере выполнения беседы. Это обеспечивает большую гибкость в обработке взаимодействий в зависимости от потребностей приложения.
// 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
Агенты в настоящее время недоступны в Java.