Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dalam aplikasi dunia nyata, mengelola status dengan benar sangat penting saat menangani beberapa tugas atau permintaan. Tanpa isolasi yang tepat, status bersama antara eksekusi alur kerja yang berbeda dapat menyebabkan perilaku tak terduga, kerusakan data, dan kondisi ras. Artikel ini menjelaskan cara memastikan isolasi status dalam Alur Kerja Kerangka Kerja Agen Microsoft, memberikan wawasan tentang praktik terbaik dan perangkap umum.
Penyusun Alur Kerja yang Dapat Diubah vs Alur Kerja yang Tidak Dapat Diubah
Alur kerja dibuat oleh penyusun alur kerja. Penyusun alur kerja umumnya dianggap dapat diubah-ubah, di mana kita dapat menambahkan, memodifikasi pelaksana mula atau konfigurasi lain setelah penyusun dibuat atau bahkan setelah alur kerja dibangun. Di sisi lain, alur kerja tidak dapat diubah karena setelah alur kerja dibuat, alur kerja tidak dapat dimodifikasi (tidak ada API publik untuk memodifikasi alur kerja).
Perbedaan ini penting karena memengaruhi bagaimana status dikelola di berbagai eksekusi alur kerja. Tidak disarankan untuk menggunakan kembali satu instans alur kerja untuk beberapa tugas atau permintaan, karena ini dapat menyebabkan berbagi status yang tidak diinginkan. Sebagai gantinya, disarankan untuk membuat instans alur kerja baru dari penyusun untuk setiap tugas atau permintaan untuk memastikan isolasi status dan keamanan utas yang tepat.
Memastikan Isolasi Status di Perancang Alur Kerja
Saat instans pelaksana diteruskan langsung ke penyusun alur kerja, instans pelaksana tersebut dibagikan di antara semua instans alur kerja yang dibuat dari penyusun. Ini dapat menyebabkan masalah jika instans pelaksana berisi status yang tidak boleh dibagikan di beberapa eksekusi alur kerja. Untuk memastikan isolasi status dan keamanan utas yang tepat, disarankan untuk menggunakan fungsi pabrik yang membuat instans pelaksana baru untuk setiap instans alur kerja.
Segera datang...
Contoh non-thread-safe:
executor_a = CustomExecutorA()
executor_b = CustomExecutorB()
workflow_builder = WorkflowBuilder()
# executor_a and executor_b are passed directly to the workflow builder
workflow_builder.add_edge(executor_a, executor_b)
workflow_builder.set_start_executor(executor_b)
# All workflow instances created from the builder will share the same executor instances
workflow_a = workflow_builder.build()
workflow_b = workflow_builder.build()
Contoh thread-safe:
workflow_builder = WorkflowBuilder()
# Register executor factory functions with the workflow builder
workflow_builder.register_executor(factory_func=CustomExecutorA, name="executor_a")
workflow_builder.register_executor(factory_func=CustomExecutorB, name="executor_b")
# Add edges using registered factory function names
workflow_builder.add_edge("executor_a", "executor_b")
workflow_builder.set_start_executor("executor_b")
# Each workflow instance created from the builder will have its own executor instances
workflow_a = workflow_builder.build()
workflow_b = workflow_builder.build()
Tip
Untuk memastikan isolasi status dan keamanan utas yang tepat, pastikan juga bahwa instans pelaksana yang dibuat oleh fungsi pabrik tidak berbagi status yang dapat diubah.
Manajemen Status Agen
Konteks agen dikelola melalui thread agen. Secara default, setiap agen dalam alur kerja akan mendapatkan utasnya sendiri kecuali agen dikelola oleh pelaksana kustom. Untuk informasi selengkapnya, lihat Bekerja dengan Agen.
Utas agen dipertahankan di seluruh pelaksanaan alur kerja. Ini berarti bahwa jika agen dipanggil dalam eksekusi pertama alur kerja, konten yang dihasilkan oleh agen akan tersedia dalam eksekusi berikutnya dari instans alur kerja yang sama. Meskipun ini dapat berguna untuk mempertahankan kelangsungan dalam satu tugas, ini juga dapat menyebabkan berbagi status yang tidak diinginkan jika instans alur kerja yang sama digunakan kembali untuk tugas atau permintaan yang berbeda. Untuk memastikan setiap tugas memiliki status agen terisolasi, gunakan fungsi pabrik agen di penyusun alur kerja Anda untuk membuat instans alur kerja baru untuk setiap tugas atau permintaan.
Segera datang...
Contoh yang tidak aman dalam thread:
writer_agent = AzureOpenAIChatClient(credential=AzureCliCredential()).as_agent(
instructions=(
"You are an excellent content writer. You create new content and edit contents based on the feedback."
),
name="writer_agent",
)
reviewer_agent = AzureOpenAIChatClient(credential=AzureCliCredential()).as_agent(
instructions=(
"You are an excellent content reviewer."
"Provide actionable feedback to the writer about the provided content."
"Provide the feedback in the most concise manner possible."
),
name="reviewer_agent",
)
builder = WorkflowBuilder()
# writer_agent and reviewer_agent are passed directly to the workflow builder
builder.add_edge(writer_agent, reviewer_agent)
builder.set_start_executor(writer_agent)
# All workflow instances created from the builder will share the same agent
# instances and agent threads
workflow = builder.build()
Contoh thread-safe:
def create_writer_agent() -> ChatAgent:
"""Factory function to create a Writer agent."""
return AzureOpenAIChatClient(credential=AzureCliCredential()).as_agent(
instructions=(
"You are an excellent content writer. You create new content and edit contents based on the feedback."
),
name="writer_agent",
)
def create_reviewer_agent() -> ChatAgent:
"""Factory function to create a Reviewer agent."""
return AzureOpenAIChatClient(credential=AzureCliCredential()).as_agent(
instructions=(
"You are an excellent content reviewer."
"Provide actionable feedback to the writer about the provided content."
"Provide the feedback in the most concise manner possible."
),
name="reviewer_agent",
)
builder = WorkflowBuilder()
# Register agent factory functions with the workflow builder
builder.register_agent(factory_func=create_writer_agent, name="writer_agent")
builder.register_agent(factory_func=create_reviewer_agent, name="reviewer_agent")
# Add edges using registered factory function names
builder.add_edge("writer_agent", "reviewer_agent")
builder.set_start_executor("writer_agent")
# Each workflow instance created from the builder will have its own agent
# instances and agent threads
workflow = builder.build()
Conclusion
Isolasi status dalam Alur Kerja Kerangka Kerja Agen Microsoft dapat dikelola secara efektif dengan menggunakan fungsi pabrik dengan penyusun alur kerja untuk membuat eksekutor baru dan instans agen. Dengan membuat instans alur kerja baru untuk setiap tugas atau permintaan, Anda dapat mempertahankan isolasi status yang tepat dan menghindari berbagi status yang tidak diinginkan antara eksekusi alur kerja yang berbeda.