Cara Melakukan Streaming Respons Agen. (Eksperimental)
Peringatan
Kerangka Kerja Agen Kernel Semantik bersifat eksperimental, masih dalam pengembangan dan dapat berubah.
Apa itu Respons Yang Dialirkan?
Respons yang dialirkan mengirimkan konten pesan dalam potongan kecil dan tambahan. Pendekatan ini meningkatkan pengalaman pengguna dengan memungkinkan mereka melihat dan terlibat dengan pesan saat terungkap, daripada menunggu seluruh respons dimuat. Pengguna dapat segera mulai memproses informasi, meningkatkan rasa responsivitas dan interaktivitas. Akibatnya, ini meminimalkan penundaan dan membuat pengguna lebih terlibat sepanjang proses komunikasi.
Referensi Streaming:
- Buka Panduan Streaming AI
- Buka Streaming Penyelesaian Obrolan AI
- Buka Streaming Asisten AI
- Rest API Layanan Azure OpenAI
Streaming di Kernel Semantik
Layanan AI yang mendukung streaming di Kernel Semantik menggunakan jenis konten yang berbeda dibandingkan dengan yang digunakan untuk pesan yang sepenuhnya terbentuk. Jenis konten ini dirancang khusus untuk menangani sifat inkremental data streaming. Jenis konten yang sama juga digunakan dalam Kerangka Kerja Agen untuk tujuan serupa. Ini memastikan konsistensi dan efisiensi di kedua sistem saat berhadapan dengan informasi streaming.
Agen saat ini tidak tersedia di Java.
Pemanggilan Agen Streaming
Kerangka Kerja Agen mendukung respons yang dialirkan saat menggunakan Obrolan Agen atau saat langsung memanggil Agen Penyelesaian Obrolan atau Agen Asisten Open AI. Dalam kedua mode, kerangka kerja memberikan respons secara asinkron saat dialirkan. Selain respons yang dialirkan, riwayat yang konsisten dan tidak dialirkan dipertahankan untuk melacak percakapan. Ini memastikan interaksi real-time dan catatan yang dapat diandalkan dari alur percakapan.
Respons streaming dari Agen Penyelesaian Obrolan
Saat memanggil respons streaming dari Agen Penyelesaian Obrolan, Riwayat Obrolan diperbarui setelah respons penuh diterima. Meskipun respons dialirkan secara bertahap, riwayat hanya mencatat pesan lengkap. Ini memastikan bahwa Riwayat Obrolan mencerminkan respons yang sepenuhnya terbentuk untuk konsistensi.
// 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)...
}
Agen saat ini tidak tersedia di Java.
Respons yang dialirkan dari Agen Asisten AI Terbuka
Saat memanggil respons yang dialirkan dari Agen Asisten AI Terbuka, Riwayat Obrolan opsional dapat disediakan untuk mengambil pesan lengkap untuk analisis lebih lanjut jika diperlukan. Karena asisten mempertahankan status percakapan sebagai utas jarak jauh, menangkap pesan-pesan ini tidak selalu diperlukan. Keputusan untuk menyimpan dan menganalisis respons penuh tergantung pada persyaratan spesifik interaksi.
// 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)...
Agen saat ini tidak tersedia di Java.
Streaming dengan Obrolan Agen
Saat menggunakan Obrolan Agen, riwayat percakapan lengkap selalu dipertahankan dan dapat diakses langsung melalui instans Obrolan Agen. Oleh karena itu, perbedaan utama antara pemanggilan yang dialirkan dan tidak dialirkan terletak pada metode pengiriman dan jenis konten yang dihasilkan. Dalam kedua kasus, pengguna masih dapat mengakses riwayat lengkap, tetapi respons yang dialirkan memberikan pembaruan real time saat percakapan berlangsung. Hal ini memungkinkan fleksibilitas yang lebih besar dalam menangani interaksi, tergantung pada kebutuhan aplikasi.
// 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
Agen saat ini tidak tersedia di Java.