mirror of https://github.com/microsoft/autogen.git
[.Net] Enable step-by-step execution for two-agent conversation SendAsync API (#3360)
* return iasync iterator in sendasync function * fix build error
This commit is contained in:
parent
77ae3c09a5
commit
00aed2e3ca
|
@ -122,13 +122,12 @@ public class Anthropic_Agent_With_Prompt_Caching
|
|||
new ChatMessage("user", [TextContent.CreateTextWithCacheControl(LongStory)]),
|
||||
from: "user");
|
||||
|
||||
var history =
|
||||
await userProxyAgent.SendMessageToGroupAsync
|
||||
(groupChat,
|
||||
"translate this text for me",
|
||||
new List<IMessage>()
|
||||
var chatHistory = new List<IMessage>()
|
||||
{
|
||||
messageEnvelope
|
||||
});
|
||||
new TextMessage(Role.User, "translate this text for me", from: userProxyAgent.Name),
|
||||
messageEnvelope,
|
||||
};
|
||||
|
||||
var history = await groupChat.SendAsync(chatHistory).ToArrayAsync();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -130,7 +130,8 @@ You have access to the following functions. Use them if required:
|
|||
|
||||
await userProxyAgent.SendAsync(
|
||||
receiver: lmAgent,
|
||||
"Search the names of the five largest stocks in the US by market cap ");
|
||||
"Search the names of the five largest stocks in the US by market cap ")
|
||||
.ToArrayAsync();
|
||||
#endregion lmstudio_function_call_example
|
||||
}
|
||||
}
|
||||
|
|
|
@ -120,22 +120,7 @@ public partial class TwoAgent_Fill_Application
|
|||
modelName: gpt3Config.DeploymentName,
|
||||
systemMessage: """You create polite prompt to ask user provide missing information""")
|
||||
.RegisterMessageConnector()
|
||||
.RegisterPrintMessage()
|
||||
.RegisterMiddleware(async (msgs, option, agent, ct) =>
|
||||
{
|
||||
var lastReply = msgs.Last() ?? throw new Exception("No reply found.");
|
||||
var reply = await agent.GenerateReplyAsync(msgs, option, ct);
|
||||
|
||||
// if application is complete, exit conversation by sending termination message
|
||||
if (lastReply.GetContent().Contains("Application information is saved to database."))
|
||||
{
|
||||
return new TextMessage(Role.Assistant, GroupChatExtension.TERMINATE, from: agent.Name);
|
||||
}
|
||||
else
|
||||
{
|
||||
return reply;
|
||||
}
|
||||
});
|
||||
.RegisterPrintMessage();
|
||||
|
||||
return chatAgent;
|
||||
}
|
||||
|
@ -191,9 +176,13 @@ public partial class TwoAgent_Fill_Application
|
|||
var groupChatManager = new GroupChatManager(groupChat);
|
||||
var initialMessage = await assistantAgent.SendAsync("Generate a greeting meesage for user and start the conversation by asking what's their name.");
|
||||
|
||||
var chatHistory = await userAgent.SendAsync(groupChatManager, [initialMessage], maxRound: 30);
|
||||
|
||||
var lastMessage = chatHistory.Last();
|
||||
Console.WriteLine(lastMessage.GetContent());
|
||||
var chatHistory = new List<IMessage> { initialMessage };
|
||||
await foreach (var msg in userAgent.SendAsync(groupChatManager, chatHistory, maxRound: 30))
|
||||
{
|
||||
if (msg.GetContent().ToLower().Contains("application information is saved to database.") is true)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -120,22 +120,7 @@ public class FSM_Group_Chat
|
|||
modelName: model,
|
||||
systemMessage: """You create polite prompt to ask user provide missing information""")
|
||||
.RegisterMessageConnector()
|
||||
.RegisterPrintMessage()
|
||||
.RegisterMiddleware(async (msgs, option, agent, ct) =>
|
||||
{
|
||||
var lastReply = msgs.Last() ?? throw new Exception("No reply found.");
|
||||
var reply = await agent.GenerateReplyAsync(msgs, option, ct);
|
||||
|
||||
// if application is complete, exit conversation by sending termination message
|
||||
if (lastReply.GetContent()?.Contains("Application information is saved to database.") is true)
|
||||
{
|
||||
return new TextMessage(Role.Assistant, GroupChatExtension.TERMINATE, from: agent.Name);
|
||||
}
|
||||
else
|
||||
{
|
||||
return reply;
|
||||
}
|
||||
});
|
||||
.RegisterPrintMessage();
|
||||
#endregion Create_Assistant_Agent
|
||||
return chatAgent;
|
||||
}
|
||||
|
@ -193,9 +178,13 @@ public class FSM_Group_Chat
|
|||
|
||||
var initialMessage = await assistantAgent.SendAsync("Generate a greeting meesage for user and start the conversation by asking what's their name.");
|
||||
|
||||
var chatHistory = await userAgent.SendMessageToGroupAsync(groupChat, [initialMessage], maxRound: 30);
|
||||
|
||||
var lastMessage = chatHistory.Last();
|
||||
Console.WriteLine(lastMessage.GetContent());
|
||||
var chatHistory = new List<IMessage> { initialMessage };
|
||||
await foreach (var msg in groupChat.SendAsync(chatHistory, maxRound: 30))
|
||||
{
|
||||
if (msg.GetContent().ToLower().Contains("application information is saved to database.") is true)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// AgentExtension.cs
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
|
@ -60,14 +61,14 @@ public static class AgentExtension
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Send message to another agent.
|
||||
/// Send message to another agent and iterate over the responses.
|
||||
/// </summary>
|
||||
/// <param name="agent">sender agent.</param>
|
||||
/// <param name="receiver">receiver agent.</param>
|
||||
/// <param name="chatHistory">chat history.</param>
|
||||
/// <param name="maxRound">max conversation round.</param>
|
||||
/// <returns>conversation history</returns>
|
||||
public static async Task<IEnumerable<IMessage>> SendAsync(
|
||||
public static IAsyncEnumerable<IMessage> SendAsync(
|
||||
this IAgent agent,
|
||||
IAgent receiver,
|
||||
IEnumerable<IMessage> chatHistory,
|
||||
|
@ -78,21 +79,21 @@ public static class AgentExtension
|
|||
{
|
||||
var gc = manager.GroupChat;
|
||||
|
||||
return await agent.SendMessageToGroupAsync(gc, chatHistory, maxRound, ct);
|
||||
return gc.SendAsync(chatHistory, maxRound, ct);
|
||||
}
|
||||
|
||||
var groupChat = new RoundRobinGroupChat(
|
||||
agents: new[]
|
||||
{
|
||||
agents:
|
||||
[
|
||||
agent,
|
||||
receiver,
|
||||
});
|
||||
]);
|
||||
|
||||
return await groupChat.CallAsync(chatHistory, maxRound, ct: ct);
|
||||
return groupChat.SendAsync(chatHistory, maxRound, cancellationToken: ct);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Send message to another agent.
|
||||
/// Send message to another agent and iterate over the responses.
|
||||
/// </summary>
|
||||
/// <param name="agent">sender agent.</param>
|
||||
/// <param name="message">message to send. will be added to the end of <paramref name="chatHistory"/> if provided </param>
|
||||
|
@ -100,7 +101,7 @@ public static class AgentExtension
|
|||
/// <param name="chatHistory">chat history.</param>
|
||||
/// <param name="maxRound">max conversation round.</param>
|
||||
/// <returns>conversation history</returns>
|
||||
public static async Task<IEnumerable<IMessage>> SendAsync(
|
||||
public static IAsyncEnumerable<IMessage> SendAsync(
|
||||
this IAgent agent,
|
||||
IAgent receiver,
|
||||
string message,
|
||||
|
@ -116,11 +117,12 @@ public static class AgentExtension
|
|||
chatHistory = chatHistory ?? new List<IMessage>();
|
||||
chatHistory = chatHistory.Append(msg);
|
||||
|
||||
return await agent.SendAsync(receiver, chatHistory, maxRound, ct);
|
||||
return agent.SendAsync(receiver, chatHistory, maxRound, ct);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Shortcut API to send message to another agent.
|
||||
/// Shortcut API to send message to another agent and get all responses.
|
||||
/// To iterate over the responses, use <see cref="SendAsync(IAgent, IAgent, string, IEnumerable{IMessage}?, int, CancellationToken)"/> or <see cref="SendAsync(IAgent, IAgent, IEnumerable{IMessage}, int, CancellationToken)"/>
|
||||
/// </summary>
|
||||
/// <param name="agent">sender agent</param>
|
||||
/// <param name="receiver">receiver agent</param>
|
||||
|
@ -144,10 +146,16 @@ public static class AgentExtension
|
|||
chatHistory.Add(msg);
|
||||
}
|
||||
|
||||
return await agent.SendAsync(receiver, chatHistory, maxRound, ct);
|
||||
await foreach (var msg in agent.SendAsync(receiver, chatHistory, maxRound, ct))
|
||||
{
|
||||
chatHistory.Add(msg);
|
||||
}
|
||||
|
||||
public static async Task<IEnumerable<IMessage>> SendMessageToGroupAsync(
|
||||
return chatHistory;
|
||||
}
|
||||
|
||||
[Obsolete("use GroupChatExtension.SendAsync")]
|
||||
public static IAsyncEnumerable<IMessage> SendMessageToGroupAsync(
|
||||
this IAgent agent,
|
||||
IGroupChat groupChat,
|
||||
string msg,
|
||||
|
@ -159,16 +167,18 @@ public static class AgentExtension
|
|||
chatHistory = chatHistory ?? Enumerable.Empty<IMessage>();
|
||||
chatHistory = chatHistory.Append(chatMessage);
|
||||
|
||||
return await agent.SendMessageToGroupAsync(groupChat, chatHistory, maxRound, ct);
|
||||
return agent.SendMessageToGroupAsync(groupChat, chatHistory, maxRound, ct);
|
||||
}
|
||||
|
||||
public static async Task<IEnumerable<IMessage>> SendMessageToGroupAsync(
|
||||
[Obsolete("use GroupChatExtension.SendAsync")]
|
||||
public static IAsyncEnumerable<IMessage> SendMessageToGroupAsync(
|
||||
this IAgent _,
|
||||
IGroupChat groupChat,
|
||||
IEnumerable<IMessage>? chatHistory = null,
|
||||
int maxRound = 10,
|
||||
CancellationToken ct = default)
|
||||
{
|
||||
return await groupChat.CallAsync(chatHistory, maxRound, ct);
|
||||
chatHistory = chatHistory ?? Enumerable.Empty<IMessage>();
|
||||
return groupChat.SendAsync(chatHistory, maxRound, ct);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue