Aracılığıyla paylaş


AgentGroupChat Orkestrasyon Geçiş Kılavuzu

Bu, Anlam Çekirdeği'nde kullanan AgentGroupChat ve yeni GroupChatOrchestrationöğesine geçiş yapmak isteyen geliştiriciler için bir geçiş kılavuzudur. Yeni sınıf, aracılar arasındaki grup sohbeti etkileşimlerini yönetmek için daha esnek ve güçlü bir yol sağlar.

AgentGroupChat'den GroupChatOrchestration'ye geçiş

Yeni GroupChatOrchestration sınıf, AgentGroupChat ile birleştirilmiş ve genişletilebilir bir orkestrasyon modeli getiriyor. C# kodunuzu şu şekilde geçireceksiniz:

1. Adım: Kullanımlar ve Sınıf Referanslarını Değiştirme

  • using ifadelerini veya AgentChat ve AgentGroupChat referanslarını kaldırın. Örneğin, şunları kaldırın:

    using Microsoft.SemanticKernel.Agents.Chat;
    
  • Yeni orkestrasyon ad alanına bir başvuru ekleyin.

    using Microsoft.SemanticKernel.Agents.Orchestration.GroupChat;
    

2. Adım: Güncelleştirme Başlatma

Öncesi:

AgentGroupChat chat = new(agentWriter, agentReviewer)
{
    ExecutionSettings = new()
    {
        SelectionStrategy = new CustomSelectionStrategy(),
        TerminationStrategy = new CustomTerminationStrategy(),
    }
};

Sonrası:

using Microsoft.SemanticKernel.Agents.Orchestration.GroupChat;

GroupChatOrchestration orchestration = new(
    new RoundRobinGroupChatManager(),
    agentWriter,
    agentReviewer);

3. Adım: Grup Sohbetini Başlatma

Öncesi:

chat.AddChatMessage(input);
await foreach (var response in chat.InvokeAsync())
{
    // handle response
}

Sonrası:

using Microsoft.SemanticKernel.Agents.Orchestration;
using Microsoft.SemanticKernel.Agents.Runtime.InProcess;

InProcessRuntime runtime = new();
await runtime.StartAsync();

OrchestrationResult<string> result = await orchestration.InvokeAsync(input, runtime);
string text = await result.GetValueAsync(TimeSpan.FromSeconds(timeout));

4. Adım: Düzenlemeyi Özelleştirme

Yeni düzenleme modeli, alt sınıflama GroupChatManager ve yöntemlerini geçersiz kılarak sonlandırma, aracı seçimi ve daha fazlası için özel stratejiler oluşturmanıza olanak tanır. Daha fazla ayrıntı için lütfen GroupChatOrchestration belgelerine bakın .

5. Adım: Kullanım Dışı API'leri kaldırma

Kodun artık korunmayan AgentGroupChat'e özgü özelliklerini veya yöntemlerini doğrudan işleyen bölümlerini kaldırın.

6. Adım: Gözden Geçirme ve Test

  • Eski sınıflara kalan referanslar için kodunuzu gözden geçirin.
  • Yeni düzenlemenin beklendiği gibi davrandığından emin olmak için grup sohbeti senaryolarınızı test edin.

Tam Örnek

Bu kılavuzda, onay tabanlı sonlandırma stratejisini uygulayan özel bir grup sohbet yöneticisi de dahil olmak üzere 'nin temel mantığını Step03_Chat.cs 'den AgentGroupChat yeni GroupChatOrchestration'ye geçirme gösterilmektedir.

1. Adım: Aracı Tanımı

Aracı tanımında değişiklik gerekmez. Daha önce olduğu gibi aynı AgentWriter ve AgentReviewer kullanmaya devam edebilirsiniz.

2. Adım: Özel Grup Sohbet Yöneticisi Uygulama

Son iletide "onayla" ifadesi bulunduğunda sohbeti sonlandıran bir özel GroupChatManager öğe oluşturun ve yalnızca gözden geçiren onaylayabilir:

private sealed class ApprovalGroupChatManager : RoundRobinGroupChatManager
{
    private readonly string _approverName;
    public ApprovalGroupChatManager(string approverName)
    {
        _approverName = approverName;
    }

    public override ValueTask<GroupChatManagerResult<bool>> ShouldTerminate(ChatHistory history, CancellationToken cancellationToken = default)
    {
        var last = history.LastOrDefault();
        bool shouldTerminate = last?.AuthorName == _approverName &&
            last.Content?.Contains("approve", StringComparison.OrdinalIgnoreCase) == true;
        return ValueTask.FromResult(new GroupChatManagerResult<bool>(shouldTerminate)
        {
            Reason = shouldTerminate ? "Approved by reviewer." : "Not yet approved."
        });
    }
}

3. Adım: Düzenlemeyi Başlatma

Başlatma ifadesini AgentGroupChat şununla değiştirin:

var orchestration = new GroupChatOrchestration(
    new ApprovalGroupChatManager(ReviewerName)
    {
        MaximumInvocationCount = 10
    },
    agentWriter,
    agentReviewer);

4. Adım: Orchestration'ı çalıştırma

İleti döngüsünü şununla değiştirin:

var runtime = new InProcessRuntime();
await runtime.StartAsync();

var result = await orchestration.InvokeAsync("concept: maps made out of egg cartons.", runtime);
string text = await result.GetValueAsync(TimeSpan.FromSeconds(60));
Console.WriteLine($"\n# RESULT: {text}");

await runtime.RunUntilIdleAsync();

Özet

  • Onay tabanlı sonlandırma için özel GroupChatManager kullanın.
  • Sohbet döngüsünü orkestrasyon çağrısıyla değiştirin.
  • Aracı kurulumunuzun ve ileti biçimlendirmenizin geri kalanı değişmeden kalabilir.

AgentGroupChat'dan GroupChatOrchestration'ye geçiş

Python'daki yeni GroupChatOrchestration API, eski AgentGroupChat düzenin yerini alır ve çok aracılı konuşmaları yönetmek için daha esnek ve genişletilebilir bir yol sağlar. Kodunuzu şu şekilde geçirelim:

1. Adım: İçeri Aktarmaları ve Sınıf Bağlantılarını Değiştirme

  • AgentGroupChat ve ilişkili stratejilere yapılan tüm içeri aktarmaları veya başvuruları kaldırın. Örneğin, şunları kaldırın:

    from semantic_kernel.agents import AgentGroupChat
    
  • Yeni düzenleme sınıflarını içeri aktarın:

    from semantic_kernel.agents import GroupChatOrchestration, RoundRobinGroupChatManager
    from semantic_kernel.agents.runtime import InProcessRuntime
    

2. Adım: Güncelleştirme Başlatma

Akışı kontrol etmek için AgentGroupChat öğesini GroupChatOrchestration ve bir GroupChatManager (örn. RoundRobinGroupChatManager veya özel bir tane) ile değiştirin.

Öncesi:

group_chat = AgentGroupChat(
    agents=[agent_writer, agent_reviewer],
    termination_strategy=CustomTerminationStrategy(),
    selection_strategy=CustomSelectionStrategy(),
)

Sonrası:

from semantic_kernel.agents import GroupChatOrchestration, RoundRobinGroupChatManager

orchestration = GroupChatOrchestration(
    members=[agent_writer, agent_reviewer],
    manager=RoundRobinGroupChatManager(),
)

3. Adım: Grup Sohbetini Başlatma

Öncesi:

await group_chat.add_chat_message(message=TASK)
async for content in group_chat.invoke():
    # handle response

Sonrası:

from semantic_kernel.agents.runtime import InProcessRuntime

runtime = InProcessRuntime()
runtime.start()

orchestration_result = await group_chat_orchestration.invoke(task=TASK, runtime=runtime)
value = await orchestration_result.get()

4. Adım: Düzenlemeyi Özelleştirme

Yeni orkestrasyon modeli, GroupChatManager alt sınıflandırarak ve yöntemlerini geçersiz kılmak suretiyle sonlandırma, aracı seçimi ve daha fazlası için özel stratejiler oluşturmanıza olanak tanır. Daha fazla ayrıntı için lütfen GroupChatOrchestration belgelerine bakın .

5. Adım: Kullanım Dışı API'leri kaldırma

AgentGroupChat ile ilgili belirli özellikleri veya yöntemleri doğrudan işleyen tüm kodları, artık korunmadıkları için kaldırın.

6. Adım: Gözden Geçirme ve Test

  • Eski sınıflara yapılan referanslar için kodunuzu gözden geçirin.
  • Yeni düzenlemenin beklendiği gibi davrandığından emin olmak için grup sohbeti senaryolarınızı test edin.

Tam Örnek

Bu kılavuzda, onay tabanlı sonlandırma stratejisini uygulayan özel bir grup sohbet yöneticisi de dahil olmak üzere 'nin temel mantığını step06_chat_completion_agent_group_chat.py 'den AgentGroupChat yeni GroupChatOrchestration'ye geçirme gösterilmektedir.

1. Adım: Temsilci Tanımlama

Aracı tanımında değişiklik gerekmez. Önceki gibi aynı AgentWriter ve AgentReviewer'i kullanmaya devam edebilirsiniz.

2. Adım: Özel Grup Sohbet Yöneticisi Uygulama

Son ileti "onaylandı" ifadesini içerdiğinde sohbeti sonlandıran ve yalnızca gözden geçirenin onayladığı bir özel GroupChatManager öğe oluşturun:

from semantic_kernel.agents import RoundRobinGroupChatManager, BooleanResult

class ApprovalGroupChatManager(RoundRobinGroupChatManager):
    def __init__(self, approver_name: str, max_rounds: int = 10):
        super().__init__(max_rounds=max_rounds)
        self._approver_name = approver_name

    async def should_terminate(self, chat_history):
        last = chat_history[-1] if chat_history else None
        should_terminate = (
            last is not None and
            getattr(last, 'name', None) == self._approver_name and
            'approved' in (last.content or '').lower()
        )
        return BooleanResult(result=should_terminate, reason="Approved by reviewer." if should_terminate else "Not yet approved.")

3. Adım: Düzenlemeyi Başlatma

Başlatma işlemini AgentGroupChat ile değiştirin.

from semantic_kernel.agents import GroupChatOrchestration
from semantic_kernel.agents.runtime import InProcessRuntime

orchestration = GroupChatOrchestration(
    members=[agent_writer, agent_reviewer],
    manager=ApprovalGroupChatManager(approver_name=REVIEWER_NAME, max_rounds=10),
)

4. Adım: Orchestration'ı çalıştırma

İleti döngüsünü şununla değiştirin:

runtime = InProcessRuntime()
runtime.start()

orchestration_result = await orchestration.invoke(
    task="a slogan for a new line of electric cars.",
    runtime=runtime,
)

value = await orchestration_result.get()
print(f"***** Result *****\n{value}")

await runtime.stop_when_idle()

Özet

  • Onay tabanlı sonlandırma için özel GroupChatManager kullanın.
  • Sohbet döngüsünü orkestrasyon çağrısıyla değiştirin.
  • Aracı kurulumunuzun ve ileti biçimlendirmenizin geri kalanı değişmeden kalabilir.

Uyarı

Ajan düzenlemesi henüz Java SDK'de mevcut değil.