Bagikan melalui


Respons Latar Belakang Agen

Microsoft Agent Framework mendukung respons latar belakang untuk menangani operasi jangka panjang yang mungkin membutuhkan waktu untuk diselesaikan. Fitur ini memungkinkan agen untuk mulai memproses permintaan dan mengembalikan token kelanjutan yang dapat digunakan untuk melakukan polling untuk hasil atau melanjutkan aliran yang terganggu.

Petunjuk / Saran

Untuk contoh kerja lengkap, lihat sampel Respons Latar Belakang.

Kapan Menggunakan Respons Latar Belakang

Respons latar belakang sangat berguna untuk:

  • Tugas penalaran kompleks yang membutuhkan waktu pemrosesan yang signifikan
  • Operasi yang mungkin terganggu oleh masalah jaringan atau batas waktu klien
  • Skenario di mana Anda ingin memulai tugas yang berjalan lama dan memeriksa kembali nanti untuk hasilnya

Cara Kerja Respons Latar Belakang

Respons latar belakang menggunakan mekanisme token kelanjutan untuk menangani operasi yang berjalan lama. Saat Anda mengirim permintaan ke agen dengan respons latar belakang diaktifkan, salah satu dari dua hal terjadi:

  1. Penyelesaian segera: Agen menyelesaikan tugas dengan cepat dan mengembalikan respons akhir tanpa token kelanjutan
  2. Pemrosesan latar belakang: Agen mulai memproses di latar belakang dan mengembalikan token kelanjutan alih-alih hasil akhir

Token kelanjutan berisi semua informasi yang diperlukan untuk polling untuk penyelesaian menggunakan API agen non-streaming atau melanjutkan aliran yang terganggu dengan API agen streaming. Ketika token kelanjutan adalah null, operasi selesai - ini terjadi ketika respons latar belakang telah selesai, gagal, atau tidak dapat melanjutkan lebih lanjut (misalnya, ketika input pengguna diperlukan).

Mengaktifkan Respons Latar Belakang

Untuk mengaktifkan respons latar belakang, atur properti ke AllowBackgroundResponsestrue di AgentRunOptions:

AgentRunOptions options = new()
{
    AllowBackgroundResponses = true
};

Nota

Saat ini, hanya agen yang menggunakan OPENAI Responses API yang mendukung respons latar belakang: OpenAI Responses Agent dan Azure OpenAI Responses Agent.

Beberapa agen mungkin tidak mengizinkan kontrol eksplisit atas respons latar belakang. Agen-agen ini dapat memutuskan secara otonom apakah akan memulai respons latar belakang berdasarkan kompleksitas operasi, terlepas dari pengaturannya AllowBackgroundResponses .

Respons Latar Belakang Non-Streaming

Untuk skenario non-streaming, ketika Anda awalnya menjalankan agen, itu mungkin atau mungkin tidak mengembalikan token kelanjutan. Jika tidak ada token kelanjutan yang dikembalikan, itu berarti operasi telah selesai. Jika token kelanjutan dikembalikan, itu menunjukkan bahwa agen telah memulai respons latar belakang yang masih diproses dan akan memerlukan polling untuk mengambil hasil akhir:

AIAgent agent = new AzureOpenAIClient(
    new Uri("https://<myresource>.openai.azure.com"),
    new AzureCliCredential())
    .GetOpenAIResponseClient("<deployment-name>")
    .AsAIAgent();

AgentRunOptions options = new()
{
    AllowBackgroundResponses = true
};

AgentSession session = await agent.GetNewSessionAsync();

// Get initial response - may return with or without a continuation token
AgentResponse response = await agent.RunAsync("Write a very long novel about otters in space.", session, options);

// Continue to poll until the final response is received
while (response.ContinuationToken is not null)
{
    // Wait before polling again.
    await Task.Delay(TimeSpan.FromSeconds(2));

    options.ContinuationToken = response.ContinuationToken;
    response = await agent.RunAsync(session, options);
}

Console.WriteLine(response.Text);

Poin Penting:

  • Panggilan awal dapat segera selesai (tidak ada token kelanjutan) atau memulai operasi latar belakang (dengan token kelanjutan)
  • Jika tidak ada token kelanjutan yang dikembalikan, operasi selesai dan respons berisi hasil akhir
  • Jika token kelanjutan dikembalikan, agen telah memulai proses latar belakang yang memerlukan polling
  • Gunakan token kelanjutan dari respons sebelumnya dalam panggilan polling berikutnya
  • Ketika ContinuationToken adalah null, operasi selesai

Respons Latar Belakang Streaming

Dalam skenario streaming, respons latar belakang berfungsi seperti respons streaming reguler - agen mengalirkan semua pembaruan kembali ke konsumen secara real time. Namun, perbedaan utamanya adalah bahwa jika aliran asli terganggu, agen mendukung penerbitan ulang aliran melalui token kelanjutan. Setiap pembaruan mencakup token kelanjutan yang menangkap status saat ini, memungkinkan aliran dilanjutkan dari tempat yang ditinggalkannya dengan meneruskan token ini ke panggilan API streaming berikutnya:

AIAgent agent = new AzureOpenAIClient(
    new Uri("https://<myresource>.openai.azure.com"),
    new AzureCliCredential())
    .GetOpenAIResponseClient("<deployment-name>")
    .AsAIAgent();

AgentRunOptions options = new()
{
    AllowBackgroundResponses = true
};

AgentSession session = await agent.GetNewSessionAsync();

AgentResponseUpdate? latestReceivedUpdate = null;

await foreach (var update in agent.RunStreamingAsync("Write a very long novel about otters in space.", session, options))
{
    Console.Write(update.Text);

    latestReceivedUpdate = update;

    // Simulate an interruption
    break;
}

// Resume from interruption point captured by the continuation token
options.ContinuationToken = latestReceivedUpdate?.ContinuationToken;
await foreach (var update in agent.RunStreamingAsync(session, options))
{
    Console.Write(update.Text);
}

Poin Penting:

  • Masing-masing AgentResponseUpdate berisi token kelanjutan yang dapat digunakan untuk dimulai kembali
  • Simpan token kelanjutan dari pembaruan terakhir yang diterima sebelum gangguan
  • Gunakan token kelanjutan tersimpan untuk melanjutkan aliran dari titik gangguan

Nota

Dukungan respons latar belakang di Python akan segera hadir. Fitur ini saat ini tersedia dalam implementasi .NET dari Agent Framework.

Praktik Terbaik

Saat bekerja dengan respons latar belakang, pertimbangkan praktik terbaik berikut:

  • Menerapkan interval polling yang sesuai untuk menghindari kewalahan layanan
  • Gunakan backoff eksponensial untuk interval polling jika operasi memakan waktu lebih lama dari yang diharapkan
  • Selalu periksa null token kelanjutan untuk menentukan kapan pemrosesan selesai
  • Pertimbangkan untuk menyimpan token kelanjutan secara terus-menerus untuk operasi yang dapat mencakup sesi pengguna

Batasan dan Pertimbangan

  • Respons latar belakang bergantung pada layanan AI yang mendasar yang mendukung operasi jangka panjang
  • Tidak semua jenis agen dapat mendukung respons latar belakang
  • Gangguan jaringan atau mulai ulang klien mungkin memerlukan penanganan khusus untuk mempertahankan token kelanjutan

Langkah selanjutnya