Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önemli
Bu özellik deneysel aşamadadır. Bu aşamadaki özellikler geliştirme aşamasındadır ve önizleme veya sürüm adayı aşamasına geçmeden önce değiştirilebilir.
Bu tartışmayla ilgili ayrıntılı API belgelerine şu adreste ulaşabilirsiniz:
Özellik şu anda Java'da kullanılamıyor.
AgentChat
nedir?
AgentChat
, farklı türde olsalar bile birden çok aracı arasında etkileşime olanak tanıyan bir çerçeve sağlar. Bu, bir ChatCompletionAgent
ve bir OpenAIAssistantAgent
aynı konuşma içinde birlikte çalışmasını mümkün kılar.
AgentChat
, birden çok yanıt veya tek bir aracı yanıtı aracılığıyla aracılar arasında işbirliği başlatmaya yönelik giriş noktalarını da tanımlar.
Soyut bir sınıf olarak AgentChat
özel senaryoları desteklemek için alt sınıfa eklenebilir.
Bu tür alt sınıflardan biri olan AgentGroupChat
, konuşma dinamiklerini yönetmek için strateji tabanlı bir yaklaşım kullanarak AgentChat
somut bir uygulaması sunar.
Bir AgentGroupChat
oluşturma
AgentGroupChat
oluşturmak için, ya katılımcı ajanları belirtebilir ya da boş bir sohbet oluşturup ardından ajan katılımcıları ekleyebilirsiniz. Chat-Settings ve Stratejilerin yapılandırılması, AgentGroupChat
başlatılması sırasında da yapılır. Bu ayarlar, konuşma dinamiğinin grup içinde nasıl çalışacağını tanımlar.
Not: Varsayılan Chat-Settings tek bir yanıtla sınırlı bir konuşmayla sonuçlanır. Sohbet Ayarlarını yapılandırmayla ilgili ayrıntılar için bkz
AgentChat
. Davranış .
AgentGroupChat
ile bir Agent
oluşturma:
// Define agents
ChatCompletionAgent agent1 = ...;
OpenAIAssistantAgent agent2 = ...;
// Create chat with participating agents.
AgentGroupChat chat = new(agent1, agent2);
# Define agents
agent1 = ChatCompletionAgent(...)
agent2 = OpenAIAssistantAgent(...)
# Create chat with participating agents
chat = AgentGroupChat(agents=[agent1, agent2])
Özellik şu anda Java'da kullanılamıyor.
Agent
'ı AgentGroupChat
'e ekleme:
// Define agents
ChatCompletionAgent agent1 = ...;
OpenAIAssistantAgent agent2 = ...;
// Create an empty chat.
AgentGroupChat chat = new();
// Add agents to an existing chat.
chat.AddAgent(agent1);
chat.AddAgent(agent2);
# Define agents
agent1 = ChatCompletionAgent(...)
agent2 = OpenAIAssistantAgent(...)
# Create an empty chat
chat = AgentGroupChat()
# Add agents to an existing chat
chat.add_agent(agent=agent1)
chat.add_agent(agent=agent2)
Özellik şu anda Java'da kullanılamıyor.
AgentGroupChat
’ı kullanma
AgentChat
iki işlem modunu destekler: Single-Turn
ve Multi-Turn
.
single-turn
içinde, belirli bir temsilci yanıt sağlamak üzere atanır.
multi-turn
'de, sohbetteki tüm ajanlar bir sonlandırma ölçütü karşılanıncaya kadar sırayla yanıtlar. Her iki modda da aracılar, tanımlanmış bir hedefe ulaşmak için birbirlerine yanıt vererek işbirliği yapabilir.
Giriş Sağlama
Bir AgentChat
giriş iletisi eklemek, ChatHistory
nesnesiyle aynı deseni izler.
AgentGroupChat chat = new();
chat.AddChatMessage(new ChatMessageContent(AuthorRole.User, "<message content>"));
chat = AgentGroupChat()
await chat.add_chat_message(message="<message content>")
Özellik şu anda Java'da kullanılamıyor.
Tek Dönüşlü Aracı Çağırma
Birden çok dönüşlü çağrıda, sistem hangi aracının daha sonra yanıt vereceğine ve konuşmanın ne zaman biteceğine karar vermelidir. Buna karşılık, tek turluk bir çağrı, belirtilen ajandan bir yanıt alıp çağıranın, ajanın katılımını doğrudan yönetmesini sağlar.
Bir ajan AgentChat
'ye tek dönüşlü bir çağrı yoluyla katıldıktan sonra, çok aşamalı çağrıya uygun ajanlar kümesine eklenir.
// Define an agent
ChatCompletionAgent agent = ...;
// Create an empty chat.
AgentGroupChat chat = new();
// Invoke an agent for its response
ChatMessageContent[] messages = await chat.InvokeAsync(agent).ToArrayAsync();
# Define an agent
agent = ChatCompletionAgent(...)
# Create an empty chat
chat = AgentGroupChat()
# Invoke an agent for its response(s)
async for message in chat.invoke(agent)
# process message response(s)
Özellik şu anda Java'da kullanılamıyor.
Çok Aşamalı Aracı Çağırma
Ajan işbirliği, her dönüş sırasında hangi ajanın yanıt vermesi gerektiğini belirleyen ve aynı zamanda konuşmanın belirlenen hedefe ne zaman ulaştığını değerlendiren bir sistemin mevcut olmasını gerektirir, ancak çok aşamalı işbirliğini başlatmak yine de basittir.
Aracı yanıtları, oluşturuldukları sırada eşzamanlı olmayan bir şekilde döndürülür ve konuşmanın gerçek zamanlı olarak gelişmesine olanak tanır.
Not: Aşağıdaki bölümlerde Aracı Seçimi ve Sohbet Sonlandırma, Yürütme Ayarları'na ayrıntılı olarak göz atacaktır. Varsayılan Yürütme Ayarları sıralı veya dönüşümlü seçimi kullanır ve aracı katılımını bir kerelik katılımla sınırlar.
.NET Yürütme Ayarları API'si: AgentGroupChatSettings
// Define agents
ChatCompletionAgent agent1 = ...;
OpenAIAssistantAgent agent2 = ...;
// Create chat with participating agents.
AgentGroupChat chat =
new(agent1, agent2)
{
// Override default execution settings
ExecutionSettings =
{
TerminationStrategy = { MaximumIterations = 10 }
}
};
// Invoke agents
await foreach (ChatMessageContent response in chat.InvokeAsync())
{
// Process agent response(s)...
}
# Define agents
agent1 = ChatCompletionAgent(...)
agent2 = OpenAIAssistantAgent(...)
# Create chat with participating agents
chat = AgentGroupChat(
agents=[agent1, agent2],
termination_strategy=DefaultTerminationStrategy(maximum_iterations=10),
)
async for response in chat.invoke():
# process agent response(s)
Özellik şu anda Java'da kullanılamıyor.
Sohbet Geçmişine Erişme
AgentChat
konuşma geçmişi, iletiler çağrı düzeni aracılığıyla teslim edilmesine rağmen her zaman erişilebilir. Bu, geçmiş değişimlerin konuşma boyunca kullanılabilir kalmasını sağlar.
Not: En son ileti önce gösterilir (azalan düzen: yeniden eskiye).
// Define and use a chat
AgentGroupChat chat = ...;
// Access history for a previously utilized AgentGroupChat
ChatMessageContent[] history = await chat.GetChatMessagesAsync().ToArrayAsync();
# Define a group chat
chat = AgentGroupChat(...)
# Access history for a previously utilized AgentGroupChat
history = await chat.get_chat_messages()
Özellik şu anda Java'da kullanılamıyor.
Farklı aracı türleri veya yapılandırmaları, konuşma geçmişinin kendi versiyonlarını koruyabileceğinden, bir aracı belirterek aracıya özgü geçmişe de ulaşılabilir. (Örneğin: OpenAIAssistant
ile ChatCompletionAgent
karşılaştırması.)
// Agents to participate in chat
ChatCompletionAgent agent1 = ...;
OpenAIAssistantAgent agent2 = ...;
// Define a group chat
AgentGroupChat chat = ...;
// Access history for a previously utilized AgentGroupChat
ChatMessageContent[] history1 = await chat.GetChatMessagesAsync(agent1).ToArrayAsync();
ChatMessageContent[] history2 = await chat.GetChatMessagesAsync(agent2).ToArrayAsync();
# Agents to participate in a chat
agent1 = ChatCompletionAgent(...)
agent2 = OpenAIAssistantAgent(...)
# Define a group chat
chat = AgentGroupChat(...)
# Access history for a previously utilized AgentGroupChat
history1 = await chat.get_chat_messages(agent=agent1)
history2 = await chat.get_chat_messages(agent=agent2)
Özellik şu anda Java'da kullanılamıyor.
AgentGroupChat
Davranışını Tanımlama
Karmaşık görevleri çözmek için aracılar arasındaki işbirliği temel bir aracı düzenidir. Bu modeli etkili bir şekilde kullanmak için, her bir dönüşte hangi ajanın yanıt vermesi gerektiğini belirleyen ve konuşmanın hedeflenen amacına ne zaman ulaştığını değerlendiren bir sistemin mevcut olması gerekir. Bu, aracı seçimini yönetmeyi ve konuşma sonlandırma için net ölçütler belirlemeyi ve bir çözüme yönelik aracılar arasında sorunsuz işbirliği sağlamayı gerektirir. Bu özelliklerin her ikisi de Yürütme Ayarları özelliğine tabidir.
Aşağıdaki aracı seçimi ve sohbet sonlandırma bölümleri bu konuları ayrıntılı olarak ele alacaktır.
Temsilci Seçimi
Çok aşamalı çağrıda, aracı seçimi Seçim Stratejisi ile yönlendirilir. Bu strateji, belirli gereksinimlere göre uyarlanmış özel davranışları uygulamak için genişletilebilen bir temel sınıf tarafından tanımlanır. Kolaylık sağlamak için, konuşmalar sırasında aracı seçimini işlemeye yönelik kullanıma hazır yaklaşımlar sunan önceden tanımlanmış iki somut Seçim Stratejisi de mevcuttur.
Biliniyorsa, her zaman ilk sırayı alacak şekilde bir başlangıç ajanı belirtilebilir.
KernelFunction
temel alan bir strateji kullanılırken belirteç kullanımını sınırlamak için bir geçmiş azaltıcı da kullanılabilir.
.NET Seçim Stratejisi API'si:
// Define the agent names for use in the function template
const string WriterName = "Writer";
const string ReviewerName = "Reviewer";
// Initialize a Kernel with a chat-completion service
Kernel kernel = ...;
// Create the agents
ChatCompletionAgent writerAgent =
new()
{
Name = WriterName,
Instructions = "<writer instructions>",
Kernel = kernel
};
ChatCompletionAgent reviewerAgent =
new()
{
Name = ReviewerName,
Instructions = "<reviewer instructions>",
Kernel = kernel
};
// Define a kernel function for the selection strategy
KernelFunction selectionFunction =
AgentGroupChat.CreatePromptFunctionForStrategy(
$$$"""
Determine which participant takes the next turn in a conversation based on the the most recent participant.
State only the name of the participant to take the next turn.
No participant should take more than one turn in a row.
Choose only from these participants:
- {{{ReviewerName}}}
- {{{WriterName}}}
Always follow these rules when selecting the next participant:
- After {{{WriterName}}}, it is {{{ReviewerName}}}'s turn.
- After {{{ReviewerName}}}, it is {{{WriterName}}}'s turn.
History:
{{$history}}
""",
safeParameterNames: "history");
// Define the selection strategy
KernelFunctionSelectionStrategy selectionStrategy =
new(selectionFunction, kernel)
{
// Always start with the writer agent.
InitialAgent = writerAgent,
// Parse the function response.
ResultParser = (result) => result.GetValue<string>() ?? WriterName,
// The prompt variable name for the history argument.
HistoryVariableName = "history",
// Save tokens by not including the entire history in the prompt
HistoryReducer = new ChatHistoryTruncationReducer(3),
};
// Create a chat using the defined selection strategy.
AgentGroupChat chat =
new(writerAgent, reviewerAgent)
{
ExecutionSettings = new() { SelectionStrategy = selectionStrategy }
};
Python Seçim Stratejisi API'si:
REVIEWER_NAME = "Reviewer"
WRITER_NAME = "Writer"
agent_reviewer = ChatCompletionAgent(
kernel=kernel,
name=REVIEWER_NAME,
instructions="<instructions>",
)
agent_writer = ChatCompletionAgent(
kernel=kernel,
name=WRITER_NAME,
instructions="<instructions>",
)
selection_function = KernelFunctionFromPrompt(
function_name="selection",
prompt=f"""
Determine which participant takes the next turn in a conversation based on the the most recent participant.
State only the name of the participant to take the next turn.
No participant should take more than one turn in a row.
Choose only from these participants:
- {REVIEWER_NAME}
- {WRITER_NAME}
Always follow these rules when selecting the next participant:
- After user input, it is {WRITER_NAME}'s turn.
- After {WRITER_NAME} replies, it is {REVIEWER_NAME}'s turn.
- After {REVIEWER_NAME} provides feedback, it is {WRITER_NAME}'s turn.
History:
{{{{$history}}}}
""",
)
chat = AgentGroupChat(
agents=[agent_writer, agent_reviewer],
selection_strategy=KernelFunctionSelectionStrategy(
function=selection_function,
kernel=_create_kernel_with_chat_completion("selection"),
result_parser=lambda result: str(result.value[0]) if result.value is not None else COPYWRITER_NAME,
agent_variable_name="agents",
history_variable_name="history",
),
)
Özellik şu anda Java'da kullanılamıyor.
Sohbet Sonlandırma
Çoklu dönüş çağrısında Sonlandırma Stratejisi, son dönüşün ne zaman gerçekleşeceğini belirler. Bu strateji, konuşmanın uygun noktada bitmesini sağlar.
Bu strateji, belirli gereksinimlere göre uyarlanmış özel davranışları uygulamak için genişletilebilen bir temel sınıf tarafından tanımlanır. Kolaylık sağlamak için, konuşmalar için AgentChat
sonlandırma ölçütlerini tanımlamaya yönelik kullanıma hazır yaklaşımlar sunan, önceden tanımlanmış çeşitli somut Seçim Stratejileri de mevcuttur.
.NET Sonlandırma Stratejisi API'si:
TerminationStrategy
RegexTerminationStrategy
KernelFunctionSelectionStrategy
KernelFunctionTerminationStrategy
AggregatorTerminationStrategy
// Initialize a Kernel with a chat-completion service
Kernel kernel = ...;
// Create the agents
ChatCompletionAgent writerAgent =
new()
{
Name = "Writer",
Instructions = "<writer instructions>",
Kernel = kernel
};
ChatCompletionAgent reviewerAgent =
new()
{
Name = "Reviewer",
Instructions = "<reviewer instructions>",
Kernel = kernel
};
// Define a kernel function for the selection strategy
KernelFunction terminationFunction =
AgentGroupChat.CreatePromptFunctionForStrategy(
$$$"""
Determine if the reviewer has approved. If so, respond with a single word: yes
History:
{{$history}}
""",
safeParameterNames: "history");
// Define the termination strategy
KernelFunctionTerminationStrategy terminationStrategy =
new(terminationFunction, kernel)
{
// Only the reviewer may give approval.
Agents = [reviewerAgent],
// Parse the function response.
ResultParser = (result) =>
result.GetValue<string>()?.Contains("yes", StringComparison.OrdinalIgnoreCase) ?? false,
// The prompt variable name for the history argument.
HistoryVariableName = "history",
// Save tokens by not including the entire history in the prompt
HistoryReducer = new ChatHistoryTruncationReducer(1),
// Limit total number of turns no matter what
MaximumIterations = 10,
};
// Create a chat using the defined termination strategy.
AgentGroupChat chat =
new(writerAgent, reviewerAgent)
{
ExecutionSettings = new() { TerminationStrategy = terminationStrategy }
};
Python Sonlandırma Stratejisi API'si:
REVIEWER_NAME = "Reviewer"
WRITER_NAME = "Writer"
agent_reviewer = ChatCompletionAgent(
kernel=kernel,
name=REVIEWER_NAME,
instructions="<instructions>",
)
agent_writer = ChatCompletionAgent(
kernel=kernel,
name=WRITER_NAME,
instructions="<instructions>",
)
termination_function = KernelFunctionFromPrompt(
function_name="termination",
prompt="""
Determine if the copy has been approved. If so, respond with a single word: yes
History:
{{$history}}
""",
)
chat = AgentGroupChat(
agents=[agent_writer, agent_reviewer],
termination_strategy=KernelFunctionTerminationStrategy(
agents=[agent_reviewer],
function=termination_function,
kernel=_create_kernel_with_chat_completion("termination"),
result_parser=lambda result: str(result.value[0]).lower() == "yes",
history_variable_name="history",
maximum_iterations=10,
),
)
Özellik şu anda Java'da kullanılamıyor.
Sohbet Tamamlanma Durumunu Sıfırlama
Tek dönüşlü veya çok dönüşlü yaklaşım kullanılarak AgentGroupChat
çağrılsa da çağrılmasa da, sonlandırma ölçütleri karşılandıktan sonra tamamlandığını göstermek için AgentGroupChat
durumu güncellenir. Bu, sistemin bir konuşmanın tam olarak ne zaman sona erdiğini tanımasını sağlar.
AgentGroupChat
durumuna ulaştıktan sonra bir örneği kullanmaya devam etmek için bu durumun daha fazla etkileşime izin verecek şekilde sıfırlanması gerekir. Sıfırlama yapılmadan ek etkileşimler veya aracı yanıtları mümkün olmayacaktır.
Maksimum dönüş sınırına ulaşan çok dönüşlü çağrı durumunda sistem aracı çağrısını durduracak ancak örneği tamamlandı olarak işaretlemeyecektir. Bu, Tamamlanma durumunu sıfırlamaya gerek kalmadan konuşmanın genişletilmesine olanak tanır.
// Define an use chat
AgentGroupChat chat = ...;
// Evaluate if completion is met and reset.
if (chat.IsComplete)
{
// Opt to take action on the chat result...
// Reset completion state to continue use
chat.IsComplete = false;
}
# Define a group chat
chat = AgentGroupChat()
# Evaluate if completion is met and reset
if chat.is_complete:
# Reset completion state to continue use
chat.is_complete = False
Özellik şu anda Java'da kullanılamıyor.
Tüm Konuşma Durumunu Temizle
AgentChat
'in katıldığı bir OpenAIAssistant
kullanmayı bitirdiğinizde, yardımcıyla ilişkili uzak iş parçacığını silmek gerekebilir.
AgentChat
, tüm uzak iş parçacığı tanımlarını silmeyi de içeren konuşma durumunun tamamını sıfırlamayı veya temizlemeyi destekler. Bu, sohbet sona erdikten sonra artık konuşma verilerinin yardımcıyla bağlantılı kalmamasını sağlar.
Tam sıfırlama, AgentChat
öğesine katılan aracıları kaldırmaz ve AgentChat
öğesini yeniden kullanılabilecek bir durumda bırakır. Bu, gelecekteki konuşmaları daha verimli hale getirerek yeniden başlatmaya gerek kalmadan aynı aracılarla etkileşimlerin devam etmesini sağlar.
// Define an use chat
AgentGroupChat chat = ...;
// Clear the all conversation state
await chat.ResetAsync();
# Define a group chat
chat = AgentGroupChat()
# Clear the conversation state
await chat.reset()
Özellik şu anda Java'da kullanılamıyor.
Nasıl Yapılır
AgentGroupChat
kullanmaya yönelik, Agent
işbirliği için uçtan uca bir örnek için bkz:
-
AgentGroupChat
kullanarak Aracı İşbirliğini Koordine Etme