Aracılığıyla paylaş


Microsoft Agent Framework İş Akışları Düzenlemeleri - İletim

İletim düzenlemesi, aracıların bağlama veya kullanıcı isteğine göre denetimi birbirine aktarmasına olanak tanır. Her bir temsilci, uygun uzmanlık alanına sahip başka bir uzmana konuşmayı "aktarabilir", böylece doğru temsilci görevin her bir bölümünü yönetebilir. Bu özellikle müşteri desteği, uzman sistemler veya dinamik temsilci gerektiren herhangi bir senaryoda kullanışlıdır.

İçsel olarak, geçiş düzenlemesi, aracıların orkestratör olmadan doğrudan bağlandığı bir örgü topolojisi kullanılarak uygulanır. Her bir temsilci, önceden tanımlanmış kurallara veya iletilerin içeriğine göre konuşmayı aktarmanın zamanını kararlaştırabilir.

İletim Düzenleme

Uyarı

Handoff düzenlemesi yalnızca ChatAgent'yu destekler ve aracılar yerel araçların yürütülmesini desteklemelidir.

Aktarım ve Araç Olarak Etmen Arasındaki Farklar

Araçlar olarak aracı yaygın olarak çok aracılı desen olarak kabul edilir ve ilk bakışta iletime benzer görünse de, ikisi arasında temel farklılıklar vardır:

  • Denetim Akışı: Aktarım düzenlemesinde kontrol, tanımlı kurallara göre aracılar arasında açıkça aktarılır. Her ajan, görevin tamamını başka bir ajana devretmeye karar verebilir. İş akışını yöneten merkezi bir yetkili yoktur. Buna karşılık, araçlar olarak aracı, alt görevleri diğer aracılara devreden bir birincil aracı içerir ve aracı alt görevi tamamladıktan sonra denetim birincil aracıya döner.
  • Görev Sahipliği: Devir sırasında, deviri alan temsilci görev üzerinde tam sahiplik alır. Araçlar olarak aracıda birincil aracı görevin genel sorumluluğunu korurken, diğer aracılar belirli alt görevlerde yardımcı olacak araçlar olarak değerlendirilir.
  • Bağlam Yönetimi: İletim düzenlemesinde konuşma tamamen başka bir aracıya devredilir. Alıcı temsilci, şimdiye kadar yapılanların tam bağlamına sahiptir. Aracıların araç olarak kullanıldığı senaryoda, birincil aracı genel bağlamı yönetir ve gerektiğinde araç aracılara yalnızca ilgili bilgiler sağlayabilir.

Öğrenecekler

  • Farklı etki alanları için özel aracılar oluşturma
  • Temsilciler arasında devretme kurallarını yapılandırma
  • Dinamik aracı yönlendirme ile etkileşimli iş akışları oluşturma
  • Aracı değiştirme ile çok aşamalı konuşmaları işleme
  • Hassas işlemler için araç onayı uygulama (HITL)
  • Dayanıklı devretme iş akışları için denetim noktalarını kullanma

El değiştirme orkestrasyonunda ajanlar, bağlama göre denetimi birbirine aktararak dinamik yönlendirme ve uzmanlık kullanımına olanak tanır.

Azure OpenAI İstemcisini Ayarlama

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Agents.AI.Workflows;
using Microsoft.Extensions.AI;
using Microsoft.Agents.AI;

// 1) Set up the Azure OpenAI client
var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT") ??
    throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME") ?? "gpt-4o-mini";
var client = new AzureOpenAIClient(new Uri(endpoint), new AzureCliCredential())
    .GetChatClient(deploymentName)
    .AsIChatClient();

Özel Aracılarınızı Tanımlayın

Yönlendirme için etki alanına özgü aracılar ve bir önceliklendirme aracısı oluşturun:

// 2) Create specialized agents
ChatClientAgent historyTutor = new(client,
    "You provide assistance with historical queries. Explain important events and context clearly. Only respond about history.",
    "history_tutor",
    "Specialist agent for historical questions");

ChatClientAgent mathTutor = new(client,
    "You provide help with math problems. Explain your reasoning at each step and include examples. Only respond about math.",
    "math_tutor",
    "Specialist agent for math questions");

ChatClientAgent triageAgent = new(client,
    "You determine which agent to use based on the user's homework question. ALWAYS handoff to another agent.",
    "triage_agent",
    "Routes messages to the appropriate specialist agent");

Devretme Kurallarını Yapılandırma

Hangi aracıların diğer aracılara aktarabileceğini tanımlayın.

// 3) Build handoff workflow with routing rules
var workflow = AgentWorkflowBuilder.StartHandoffWith(triageAgent)
    .WithHandoffs(triageAgent, [mathTutor, historyTutor]) // Triage can route to either specialist
    .WithHandoff(mathTutor, triageAgent)                  // Math tutor can return to triage
    .WithHandoff(historyTutor, triageAgent)               // History tutor can return to triage
    .Build();

Etkileşimli Devir İş Akışını Başlat

Dinamik aracı değiştirme ile çok aşamalı konuşmaları işleme:

// 4) Process multi-turn conversations
List<ChatMessage> messages = new();

while (true)
{
    Console.Write("Q: ");
    string userInput = Console.ReadLine()!;
    messages.Add(new(ChatRole.User, userInput));

    // Execute workflow and process events
    StreamingRun run = await InProcessExecution.StreamAsync(workflow, messages);
    await run.TrySendMessageAsync(new TurnToken(emitEvents: true));

    List<ChatMessage> newMessages = new();
    await foreach (WorkflowEvent evt in run.WatchStreamAsync().ConfigureAwait(false))
    {
        if (evt is AgentResponseUpdateEvent e)
        {
            Console.WriteLine($"{e.ExecutorId}: {e.Data}");
        }
        else if (evt is WorkflowOutputEvent outputEvt)
        {
            newMessages = (List<ChatMessage>)outputEvt.Data!;
            break;
        }
    }

    // Add new messages to conversation history
    messages.AddRange(newMessages.Skip(messages.Count));
}

Örnek Etkileşim

Q: What is the derivative of x^2?
triage_agent: This is a math question. I'll hand this off to the math tutor.
math_tutor: The derivative of x^2 is 2x. Using the power rule, we bring down the exponent (2) and multiply it by the coefficient (1), then reduce the exponent by 1: d/dx(x^2) = 2x^(2-1) = 2x.

Q: Tell me about World War 2
triage_agent: This is a history question. I'll hand this off to the history tutor.
history_tutor: World War 2 was a global conflict from 1939 to 1945. It began when Germany invaded Poland and involved most of the world's nations. Key events included the Holocaust, Pearl Harbor attack, D-Day invasion, and ended with atomic bombs on Japan.

Q: Can you help me with calculus integration?
triage_agent: This is another math question. I'll route this to the math tutor.
math_tutor: I'd be happy to help with calculus integration! Integration is the reverse of differentiation. The basic power rule for integration is: ∫x^n dx = x^(n+1)/(n+1) + C, where C is the constant of integration.

Tanıtım için birkaç araç tanımlama

@ai_function
def process_refund(order_number: Annotated[str, "Order number to process refund for"]) -> str:
    """Simulated function to process a refund for a given order number."""
    return f"Refund processed successfully for order {order_number}."

@ai_function
def check_order_status(order_number: Annotated[str, "Order number to check status for"]) -> str:
    """Simulated function to check the status of a given order number."""
    return f"Order {order_number} is currently being processed and will ship in 2 business days."

@ai_function
def process_return(order_number: Annotated[str, "Order number to process return for"]) -> str:
    """Simulated function to process a return for a given order number."""
    return f"Return initiated successfully for order {order_number}. You will receive return instructions via email."

Sohbet İstemcisini Ayarlama

from agent_framework.azure import AzureOpenAIChatClient
from azure.identity import AzureCliCredential

# Initialize the Azure OpenAI chat client
chat_client = AzureOpenAIChatClient(credential=AzureCliCredential())

Özel Aracılarınızı Tanımlayın

Yönlendirme için bir düzenleyici ile etki alanına özgü aracılar oluşturun:

# Create triage/coordinator agent
triage_agent = chat_client.create_agent(
    instructions=(
        "You are frontline support triage. Route customer issues to the appropriate specialist agents "
        "based on the problem described."
    ),
    description="Triage agent that handles general inquiries.",
    name="triage_agent",
)

# Refund specialist: Handles refund requests
refund_agent = chat_client.create_agent(
    instructions="You process refund requests.",
    description="Agent that handles refund requests.",
    name="refund_agent",
    # In a real application, an agent can have multiple tools; here we keep it simple
    tools=[process_refund],
)

# Order/shipping specialist: Resolves delivery issues
order_agent = chat_client.create_agent(
    instructions="You handle order and shipping inquiries.",
    description="Agent that handles order tracking and shipping issues.",
    name="order_agent",
    # In a real application, an agent can have multiple tools; here we keep it simple
    tools=[check_order_status],
)

# Return specialist: Handles return requests
return_agent = chat_client.create_agent(
    instructions="You manage product return requests.",
    description="Agent that handles return processing.",
    name="return_agent",
    # In a real application, an agent can have multiple tools; here we keep it simple
    tools=[process_return],
)

Devretme Kurallarını Yapılandırma

kullanarak HandoffBuilderiletim iş akışını oluşturun:

from agent_framework import HandoffBuilder

# Build the handoff workflow
workflow = (
    HandoffBuilder(
        name="customer_support_handoff",
        participants=[triage_agent, refund_agent, order_agent, return_agent],
    )
    .with_start_agent(triage_agent) # Triage receives initial user input
    .with_termination_condition(
        # Custom termination: Check if one of the agents has provided a closing message.
        # This looks for the last message containing "welcome", which indicates the
        # conversation has concluded naturally.
        lambda conversation: len(conversation) > 0 and "welcome" in conversation[-1].text.lower()
    )
    .build()
)

Varsayılan olarak, tüm aracılar birbirine iletişim yapabilir. Daha gelişmiş yönlendirme için, aktarımları yapılandırabilirsiniz.

workflow = (
    HandoffBuilder(
        name="customer_support_handoff",
        participants=[triage_agent, refund_agent, order_agent, return_agent],
    )
    .with_start_agent(triage_agent) # Triage receives initial user input
    .with_termination_condition(
        # Custom termination: Check if one of the agents has provided a closing message.
        # This looks for the last message containing "welcome", which indicates the
        # conversation has concluded naturally.
        lambda conversation: len(conversation) > 0 and "welcome" in conversation[-1].text.lower()
    )
    # Triage cannot route directly to refund agent
    .add_handoff(triage_agent, [order_agent, return_agent])
    # Only the return agent can handoff to refund agent - users wanting refunds after returns
    .add_handoff(return_agent, [refund_agent])
    # All specialists can handoff back to triage for further routing
    .add_handoff(order_agent, [triage_agent])
    .add_handoff(return_agent, [triage_agent])
    .add_handoff(refund_agent, [triage_agent])
    .build()
)

Uyarı

Özel iletim kurallarına rağmen, tüm ajanlar hala bir örgü topolojisine bağlanmıştır. Bunun nedeni, aracıların konuşma geçmişini korumak için bağlamı birbirleriyle paylaşması gerekir (daha fazla ayrıntı için bkz . Bağlam Eşitlemesi ). Devretme kuralları, yalnızca bir sonraki konuşmayı hangi aracıların devralabileceğini yönetir.

İletim Aracısı Etkileşimlerini Çalıştırma

Diğer düzenlemelerden farklı olarak, bir aracı her dönüş sonrasında teslim etmeye karar veremediği için iletim etkileşimlidir. Bir aracı devretmezse, konuşmaya devam etmek için insan müdahalesi gerekir. Bu gereksinimi atlamak için bkz. Otonom Mod . Diğer orkestrasyonlarda, bir aracı yanıt verdikten sonra kontrol ya düzenleyiciye ya da sonraki aracıya gider.

Bir iletim iş akışındaki bir aracı, özel bir araç çağrısı ile tetiklenen iletimi gerçekleştirmemeye karar verdiğinde, iş akışı, aracının en son iletilerini içeren bir RequestInfoEvent yükü yayımlarHandoffAgentUserRequest. Kullanıcının iş akışına devam etmek için bu isteği yanıtlaması gerekir.

from agent_framework import RequestInfoEvent, HandoffAgentUserRequest, WorkflowOutputEvent

# Start workflow with initial user message
events = [event async for event in workflow.run_stream("I need help with my order")]

# Process events and collect pending input requests
pending_requests = []
for event in events:
    if isinstance(event, RequestInfoEvent) and isinstance(event.data, HandoffAgentUserRequest):
        pending_requests.append(event)
        request_data = event.data
        print(f"Agent {event.source_executor_id} is awaiting your input")
        # The request contains the most recent messages generated by the
        # agent requesting input
        for msg in request_data.agent_response.messages[-3:]:
            print(f"{msg.author_name}: {msg.text}")

# Interactive loop: respond to requests
while pending_requests:
    user_input = input("You: ")

    # Send responses to all pending requests
    responses = {req.request_id: HandoffAgentUserRequest.create_response(user_input) for req in pending_requests}
    # You can also send a `HandoffAgentUserRequest.terminate()` to end the workflow early
    events = [event async for event in workflow.send_responses_streaming(responses)]

    # Process new events
    pending_requests = []
    for event in events:
        # Check for new input requests

Otonom Modu

Handoff düzenlemesi, bir aracı iletim yapmamaya karar verdiğinde insan girişinin gerekli olduğu etkileşimli senaryolar için tasarlanmıştır. Ancak deneysel bir özellik olarak, iş akışının insan müdahalesi olmadan devam edebilmesi için "otonom modu" etkinleştirebilirsiniz. Bu modda, bir temsilci devretmemeye karar verdiğinde, iş akışı otomatik olarak aracıya bir varsayılan yanıt (örneğin User did not respond. Continue assisting autonomously.) gönderir ve bu, konuşmaya devam etmesini sağlar.

İpucu

Handoff düzenlemesi neden doğası gereği etkileşimlidir? Bir aracı yanıt verdikten sonra izlenmesi gereken tek bir yol olan diğer orkestrasyonlardan farklı olarak (ör. orkestratöre veya sonraki aracıya geri dön), bir Handoff orkestrasyonunda, aracı başka bir aracıya devretme veya kullanıcıya yardım etmeye devam etme seçeneğine sahiptir. Ve çünkü devretmeler araç çağrıları aracılığıyla gerçekleştirildiğinden, bir aracı bir devretme aracı çağırmaz da onun yerine bir yanıt oluşturursa, iş akışı bundan sonra ne yapacağını bilemez ve daha fazla giriş almak için kullanıcıya geri devretmekten başka bir seçenek göremez. Aracı, aksi takdirde anlamlı yanıtlar oluşturamayacağından, aracıyı her zaman iletim aracısını çağırmasını gerektirerek göndermeye zorlamak da mümkün değildir.

Otonom Modu, HandoffBuilder üzerinde with_autonomous_mode() çağrılarak etkinleştirilir. Bu, iş akışını varsayılan bir iletiyle giriş isteklerine otomatik olarak yanıt verecek şekilde yapılandırarak aracının insan girişi beklemeden devam etmesi sağlar.

workflow = (
    HandoffBuilder(
        name="autonomous_customer_support",
        participants=[triage_agent, refund_agent, order_agent, return_agent],
    )
    .with_start_agent(triage_agent)
    .with_autonomous_mode()
    .build()
)

Aracı örneklerinin listesini with_autonomous_mode()'ye geçirerek yalnızca birden fazla aracı içeren bir alt kümede otonom modu etkinleştirebilirsiniz.

workflow = (
    HandoffBuilder(
        name="partially_autonomous_support",
        participants=[triage_agent, refund_agent, order_agent, return_agent],
    )
    .with_start_agent(triage_agent)
    .with_autonomous_mode(agents=[triage_agent])  # Only triage_agent runs autonomously
    .build()
)

Varsayılan yanıt iletisini özelleştirebilirsiniz.

workflow = (
    HandoffBuilder(
        name="custom_autonomous_support",
        participants=[triage_agent, refund_agent, order_agent, return_agent],
    )
    .with_start_agent(triage_agent)
    .with_autonomous_mode(
        agents=[triage_agent],
        prompts={triage_agent.name: "Continue with your best judgment as the user is unavailable."},
    )
    .build()
)

Bir ajanın insan müdahalesine ihtiyaç duymadan önce otonom olarak çalıştırabileceği tur sayısını özelleştirebilirsiniz. Bu, iş akışının kullanıcı katılımı olmadan süresiz çalışmasını engelleyebilir.

workflow = (
    HandoffBuilder(
        name="limited_autonomous_support",
        participants=[triage_agent, refund_agent, order_agent, return_agent],
    )
    .with_start_agent(triage_agent)
    .with_autonomous_mode(
        agents=[triage_agent],
        turn_limits={triage_agent.name: 3},  # Max 3 autonomous turns
    )
    .build()
)

Gelişmiş: Teslim İş Akışlarında Araç Onayı

Devir iş akışları, yürütmeden önce insan onayı gerektiren araçlara sahip etmenler içerebilir. Bu, para iadelerini işleme, satın alma yapma veya geri alınamaz eylemleri yürütme gibi hassas işlemler için kullanışlıdır.

Onay Gerekli Olan Araçları Tanımlama

from typing import Annotated
from agent_framework import ai_function

@ai_function(approval_mode="always_require")
def process_refund(order_number: Annotated[str, "Order number to process refund for"]) -> str:
    """Simulated function to process a refund for a given order number."""
    return f"Refund processed successfully for order {order_number}."

Onay Gerektiren Araçlarla Aracı Oluştur

from agent_framework import ChatAgent
from agent_framework.azure import AzureOpenAIChatClient
from azure.identity import AzureCliCredential

client = AzureOpenAIChatClient(credential=AzureCliCredential())

triage_agent = chat_client.create_agent(
    instructions=(
        "You are frontline support triage. Route customer issues to the appropriate specialist agents "
        "based on the problem described."
    ),
    description="Triage agent that handles general inquiries.",
    name="triage_agent",
)

refund_agent = chat_client.create_agent(
    instructions="You process refund requests.",
    description="Agent that handles refund requests.",
    name="refund_agent",
    tools=[process_refund],
)

order_agent = chat_client.create_agent(
    instructions="You handle order and shipping inquiries.",
    description="Agent that handles order tracking and shipping issues.",
    name="order_agent",
    tools=[check_order_status],
)

Hem Kullanıcı Girişi hem de Araç Onay İsteklerini İşleme

from agent_framework import (
    FunctionApprovalRequestContent,
    HandoffBuilder,
    HandoffAgentUserRequest,
    RequestInfoEvent,
    WorkflowOutputEvent,
)

workflow = (
    HandoffBuilder(
        name="support_with_approvals",
        participants=[triage_agent, refund_agent, order_agent],
    )
    .with_start_agent(triage_agent)
    .build()
)

pending_requests: list[RequestInfoEvent] = []

# Start workflow
async for event in workflow.run_stream("My order 12345 arrived damaged. I need a refund."):
    if isinstance(event, RequestInfoEvent):
        pending_requests.append(event)

# Process pending requests - could be user input OR tool approval
while pending_requests:
    responses: dict[str, object] = {}

    for request in pending_requests:
        if isinstance(request.data, HandoffAgentUserRequest):
            # Agent needs user input
            print(f"Agent {request.source_executor_id} asks:")
            for msg in request.data.agent_response.messages[-2:]:
                print(f"  {msg.author_name}: {msg.text}")

            user_input = input("You: ")
            responses[request.request_id] = HandoffAgentUserRequest.create_response(user_input)

        elif isinstance(request.data, FunctionApprovalRequestContent):
            # Agent wants to call a tool that requires approval
            func_call = request.data.function_call
            args = func_call.parse_arguments() or {}

            print(f"\nTool approval requested: {func_call.name}")
            print(f"Arguments: {args}")

            approval = input("Approve? (y/n): ").strip().lower() == "y"
            responses[request.request_id] = request.data.create_response(approved=approval)

    # Send all responses and collect new requests
    pending_requests = []
    async for event in workflow.send_responses_streaming(responses):
        if isinstance(event, RequestInfoEvent):
            pending_requests.append(event)
        elif isinstance(event, WorkflowOutputEvent):
            print("\nWorkflow completed!")

Dayanıklı İş Akışları için Denetim Noktası Oluşturma ile

Araç onaylarının saatler veya günler sonra gerçekleşebileceği uzun süre çalışan iş akışları için denetim noktası oluşturmayı kullanın:

from agent_framework import FileCheckpointStorage

storage = FileCheckpointStorage(storage_path="./checkpoints")

workflow = (
    HandoffBuilder(
        name="durable_support",
        participants=[triage_agent, refund_agent, order_agent],
    )
    .with_start_agent(triage_agent)
    .with_checkpointing(storage)
    .build()
)

# Initial run - workflow pauses when approval is needed
pending_requests = []
async for event in workflow.run_stream("I need a refund for order 12345"):
    if isinstance(event, RequestInfoEvent):
        pending_requests.append(event)

# Process can exit here - checkpoint is saved automatically

# Later: Resume from checkpoint and provide approval
checkpoints = await storage.list_checkpoints()
latest = sorted(checkpoints, key=lambda c: c.timestamp, reverse=True)[0]

# Step 1: Restore checkpoint to reload pending requests
restored_requests = []
async for event in workflow.run_stream(checkpoint_id=latest.checkpoint_id):
    if isinstance(event, RequestInfoEvent):
        restored_requests.append(event)

# Step 2: Send responses
responses = {}
for req in restored_requests:
    if isinstance(req.data, FunctionApprovalRequestContent):
        responses[req.request_id] = req.data.create_response(approved=True)
    elif isinstance(req.data, HandoffAgentUserRequest):
        responses[req.request_id] = HandoffAgentUserRequest.create_response("Yes, please process the refund.")

async for event in workflow.send_responses_streaming(responses):
    if isinstance(event, WorkflowOutputEvent):
        print("Refund workflow completed!")

Örnek Etkileşim

User: I need help with my order

triage_agent: I'd be happy to help you with your order. Could you please provide more details about the issue?

User: My order 1234 arrived damaged

triage_agent: I'm sorry to hear that your order arrived damaged. I will connect you with a specialist.

support_agent: I'm sorry about the damaged order. To assist you better, could you please:
- Describe the damage
- Would you prefer a replacement or refund?

User: I'd like a refund

triage_agent: I'll connect you with the refund specialist.

refund_agent: I'll process your refund for order 1234. Here's what will happen next:
1. Verification of the damaged items
2. Refund request submission
3. Return instructions if needed
4. Refund processing within 5-10 business days

Could you provide photos of the damage to expedite the process?

Bağlam Senkronizasyonu

Agent Framework'teki aracılar, bağlamı yönetmek için aracı iş parçacıklarına (AgentThread) dayanır. Bir Eldevri düzenlemesinde aracılar aynı iş parçacığı örneğini paylaşmaz ve katılımcılar bağlam tutarlılığını sağlamakla sorumludur. Bunu başarmak için katılımcılar, her yanıt oluşturduklarında yanıtlarını veya kullanıcı girişlerini iş akışındaki diğer tüm kişilere yayınlamak ve tüm katılımcıların bir sonraki dönüşleri için en son bağlama sahip olmalarını sağlamak üzere tasarlanmıştır.

İletim Bağlamı Eşitlemesi

Uyarı

Araç aktarma çağrıları da dahil olmak üzere araçla ilgili içerikler diğer aracılara direkt iletilmez. Tüm katılımcılar arasında yalnızca kullanıcı ve temsilci mesajları eşitlenir.

İpucu

Farklı aracı türlerinin soyutlamayı farklı şekilde uygulayabileceği için aracılar aynı iş parçacığı örneğini AgentThread paylaşmaz. Aynı iş parçacığı örneğinin paylaşılması, her bir aracının bağlamı işlemesi ve koruması konusunda tutarsızlıklara yol açabilir.

Katılımcı, yanıtı yayınladıktan sonra konuşmayı başka bir aracıya devretmesi gerekip gerekmediğini denetler. Bu durumda, seçilen aracıya konuşmayı devralması için bir istek gönderir. Aksi takdirde, kullanıcı girişi ister veya iş akışı yapılandırmasına göre otonom olarak devam eder.

Önemli Kavramlar

  • Dinamik Yönlendirme: Aracılar, bağlama göre bir sonraki etkileşimi hangi aracının işleyeceklerine karar verebilir
  • AgentWorkflowBuilder.StartHandoffWith(): İş akışını başlatan ilk aracıyı tanımlar
  • WithHandoff() ve WithHandoffs(): Belirli aracılar arasında iletim kurallarını yapılandırıyor
  • Bağlam Koruma: Tüm aktarımlarda tam konuşma geçmişi korunur
  • Çoklu Dönüş Desteği: Sorunsuz temsilci değiştirme ile devam eden konuşmaları destekler
  • Özelleştirilmiş Uzmanlık: Her temsilci, iletimler aracılığıyla işbirliği yaparken kendi etki alanına odaklanır
  • Dinamik Yönlendirme: Aracılar, bağlama göre bir sonraki etkileşimi hangi aracının işleyeceklerine karar verebilir
  • HandoffBuilder: Otomatik iletim aracı kaydıyla iş akışları oluşturur
  • with_start_agent(): Hangi aracının önce kullanıcı girişi alacağını tanımlar
  • add_handoff(): Aracılar arasında belirli iletim ilişkilerini yapılandırıyor
  • Bağlam Koruma: Tüm aktarımlarda tam konuşma geçmişi korunur
  • İstek/Yanıt Döngüsü: İş akışı kullanıcı girişi isteğinde bulunabilir, yanıtları işler ve sonlandırma koşulu karşılanıncaya kadar devam eder
  • Araç Onayı: İnsan onayı gerektiren hassas işlemler için kullanın @ai_function(approval_mode="always_require")
  • FunctionApprovalRequestContent: Bir temsilci onay gerektiren bir aracı çağırdığında yayımlanır; yanıt vermek için create_response(approved=...) kullanın
  • Denetim noktası oluşturma: İşlem yeniden başlatmaları arasında duraklatılabilen ve sürdürülebilen sağlam iş akışları için with_checkpointing() kullanın
  • Özelleştirilmiş Uzmanlık: Her temsilci, iletimler aracılığıyla işbirliği yaparken kendi etki alanına odaklanır

Sonraki Adımlar

Orkestrasyonlarda İnsanı Dâhil Etme - Gelişmiş denetim ve gözetim için orkestrasyonlarda insanı dâhil etme etkileşimlerini uygulamayı öğrenin.