共用方式為


如何串流代理程序回應。 (實驗性)

警告

語意核心代理程式架構是實驗性的,仍在開發中,而且可能會變更。

什麼是串流回應?

串流回應會以小型累加區塊傳遞訊息內容。 這種方法可讓他們在訊息展開時檢視和參與訊息,而不是等候整個回應載入,藉此增強用戶體驗。 使用者可以立即開始處理資訊,改善回應性和互動性感。 因此,它會將延遲降到最低,並讓用戶在整個通訊過程中更加參與。

串流參考:

語意核心中的串流

相較於用於完整格式訊息的內容類型,支援語意核心中串流的 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中使用。