如何串流代理程序回應。 (實驗性)
警告
語意核心代理程式架構是實驗性的,仍在開發中,而且可能會變更。
什麼是串流回應?
串流回應會以小型累加區塊傳遞訊息內容。 這種方法可讓他們在訊息展開時檢視和參與訊息,而不是等候整個回應載入,藉此增強用戶體驗。 使用者可以立即開始處理資訊,改善回應性和互動性感。 因此,它會將延遲降到最低,並讓用戶在整個通訊過程中更加參與。
串流參考:
語意核心中的串流
相較於用於完整格式訊息的內容類型,支援語意核心中串流的 AI 服務 會使用不同的內容類型。 這些內容類型特別設計用來處理串流數據的累加本質。 代理程式架構中也會針對類似用途使用相同的內容類型。 這可確保處理串流資訊時,這兩個系統的一致性和效率。
代理程式目前無法在Java中使用。
串流代理程式調用
Agent Framework 支援使用代理程式聊天或直接叫用聊天完成代理程式或 Open AI Assistant Agent 時的串流回應。 在任一模式中,架構會在串流時以異步方式傳遞回應。 除了串流回應之外,會保留一致的非串流歷程記錄來追蹤交談。 這可確保即時互動和交談流程的可靠記錄。
來自 聊天完成代理程式的串流回應
從聊天完成代理程式叫用串流回應時,收到完整響應之後,就會更新聊天歷程記錄。 雖然回應是以累加方式串流,但記錄只會記錄完整的訊息。 這可確保 聊天記錄 會反映完整格式的一致性回應。
// 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 Agent 的串流回應
從 Open AI Assistant Agent 叫用串流回應時,可以選擇性聊天記錄來擷取完整的訊息,以視需要進一步分析。 由於助理會將交談狀態維持為遠端線程,因此擷取這些訊息並非總是必要。 儲存和分析完整回應的決定取決於互動的特定需求。
// 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中使用。