Aracılığıyla paylaş


Microsoft Agent Framework İş Akışları - Durum Yalıtımı

Gerçek dünyadaki uygulamalarda, birden çok görev veya isteği işlerken durumun düzgün yönetilmesi kritik önem taşır. Düzgün yalıtım olmadan, farklı iş akışı yürütmeleri arasındaki paylaşılan durum beklenmeyen davranışlara, veri bozulmasına ve yarış koşullarına yol açabilir. Bu makalede, en iyi yöntemler ve yaygın tuzaklar hakkında içgörüler sağlayarak Microsoft Agent Framework İş Akışları içinde durum yalıtımının nasıl sağlanmaları açıklanır.

Değişken İş Akışı Oluşturucuları ile Sabit İş Akışları Karşılaştırması

İş akışları iş akışı oluşturucuları tarafından oluşturulur. İş akışı oluşturucuları, genellikle değişebilir olarak kabul edilir; yani, oluşturucu veya iş akışı oluşturulduktan sonra başlangıç yürütücüsü veya diğer yapılandırmalar eklenebilir veya değiştirilebilir. Öte yandan, iş akışları bir iş akışı oluşturulduktan sonra değiştirilemez (bir iş akışını değiştirmek için genel API yoktur).

Farklı iş akışı yürütmelerinde durumun nasıl yönetildiğini etkilediği için bu ayrım önemlidir. İstenmeyen durum paylaşımına neden olabileceğinden, birden çok görev veya istek için tek bir iş akışı örneğinin yeniden kullanılması önerilmez. Bunun yerine, uygun durum yalıtımı ve iş parçacığı güvenliği sağlamak üzere her görev veya istek için oluşturucudan yeni bir iş akışı örneği oluşturmanız önerilir.

İş Akışı Oluşturucularında Durum Yalıtımını Sağlama

Bir yürütücü örneği doğrudan bir iş akışı oluşturucusundan geçirildiğinde, yürütücü örneği oluşturucudan oluşturulan tüm iş akışı örnekleri arasında paylaşılır. Yürütücü örneği birden çok iş akışı yürütmesinde paylaşılmaması gereken bir durum içeriyorsa bu sorunlara yol açabilir. Düzgün durum yalıtımı ve iş parçacığı güvenliği sağlamak için, her iş akışı örneği için yeni bir yürütücü örneği oluşturan fabrika işlevlerinin kullanılması önerilir.

Çok yakında...

İş parçacığı güvenliği olmayan bir örnek:

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()

İş parçacığı güvenliği örneği:

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

Düzgün durum yalıtımı ve iş parçacığı güvenliği sağlamak için, fabrika işlevleri tarafından oluşturulan yürütücü örneklerinin değiştirilebilir durumu paylaşmadığından da emin olun.

Ajan Durum Yönetimi

Aracı bağlamı iş parçacıkları aracılığıyla yönetilir. Varsayılan olarak, bir iş akışındaki her ajan, özel bir yürütücü tarafından yönetilmediği sürece kendi iş parçacığını alır. Daha fazla bilgi için Bkz. Aracılarla Çalışma.

Aracı iş parçacıkları iş akışı çalıştırmaları arasında kalıcıdır. Bu, bir iş akışının ilk çalıştırmasında bir aracı çağrılırsa, aracı tarafından oluşturulan içeriğin aynı iş akışı örneğinin sonraki çalıştırmalarında kullanılabilir olacağı anlamına gelir. Bu, tek bir görev içinde sürekliliği korumak için yararlı olsa da, aynı iş akışı örneği farklı görevler veya istekler için yeniden kullanılırsa istenmeyen durum paylaşımına da yol açabilir. Her görevin yalıtılmış aracı durumuna sahip olduğundan emin olmak için iş akışı oluşturucunuzdaki aracı fabrikası işlevlerini kullanarak her görev veya istek için yeni bir iş akışı örneği oluşturun.

Çok yakında...

İş parçacığı güvenli olmayan örnek:

writer_agent = AzureOpenAIChatClient(credential=AzureCliCredential()).create_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()).create_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()

Güvenli iş parçacığı örneği:

def create_writer_agent() -> ChatAgent:
    """Factory function to create a Writer agent."""
    return AzureOpenAIChatClient(credential=AzureCliCredential()).create_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()).create_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()

Sonuç

Microsoft Agent Framework İş Akışlarında durum yalıtımı, yeni yürütücü ve aracı örnekleri oluşturmak için iş akışı oluşturucularıyla fabrika işlevleri kullanılarak etkili bir şekilde yönetilebilir. Her görev veya istek için yeni iş akışı örnekleri oluşturarak, uygun durum yalıtımını koruyabilir ve farklı iş akışı yürütmeleri arasında istenmeyen durum paylaşımından kaçınabilirsiniz.

Sonraki Adımlar