mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
.NET: Add AgentWorkflowBuilder group chat (#861)
* Add AgentWorkflowBuilder group chat
And fix a variety of issues along the way:
- Use DateTime{Offset}.UtcNow rather than Now
- AIAgentHostExecutor shouldn't be publishing empty messages
- Sequential workflows should be flowing all history and not just the output from the previous agent as the input into the next agent
- Renamed some of the new agent workflow methods... still not super happy with the shape, though
- Simplified handoffs builder, e.g. using a hashset with a custom comparer instead of a dictionary
- Improved multi-service use by trying to change assistant->user role for messages created by other agents
- Changed MessageMerger to rely on M.E.AI's coalescing more and to avoid empty contents / text
- Ensured that messages from ChatClientAgent include MessageId and CreatedAt timestamps
- Avoided including instructions for agents in a handoff workflow that don't have any handoffs
- Removed the unnecessary end function in handoffs
- Improved naming of executors to include agent name for debuggability
- Use "N" formatting with Guid.ToString everywhere, to avoid the unnecessary extra dash character which is also not valid in various places (like function tool names)
- Replace `params T[]` with `params IEnumerable<T>` to make public APIs more flexible in what they consume
* Address feedback
- Fix unintentional provider change in sample
This commit is contained in:
committed by
GitHub
Unverified
parent
7c70c33157
commit
03ef7f054f
+7
-6
@@ -31,6 +31,8 @@ namespace SampleApp
|
||||
// Custom agent that parrot's the user input back in upper case.
|
||||
internal sealed class UpperCaseParrotAgent : AIAgent
|
||||
{
|
||||
public override string? Name => "UpperCaseParrotAgent";
|
||||
|
||||
public override AgentThread GetNewThread()
|
||||
=> new CustomAgentThread();
|
||||
|
||||
@@ -51,7 +53,7 @@ namespace SampleApp
|
||||
return new AgentRunResponse
|
||||
{
|
||||
AgentId = this.Id,
|
||||
ResponseId = Guid.NewGuid().ToString(),
|
||||
ResponseId = Guid.NewGuid().ToString("N"),
|
||||
Messages = responseMessages
|
||||
};
|
||||
}
|
||||
@@ -75,8 +77,8 @@ namespace SampleApp
|
||||
AuthorName = this.DisplayName,
|
||||
Role = ChatRole.Assistant,
|
||||
Contents = message.Contents,
|
||||
ResponseId = Guid.NewGuid().ToString(),
|
||||
MessageId = Guid.NewGuid().ToString()
|
||||
ResponseId = Guid.NewGuid().ToString("N"),
|
||||
MessageId = Guid.NewGuid().ToString("N")
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -86,7 +88,7 @@ namespace SampleApp
|
||||
// Clone the message and update its author to be the agent.
|
||||
var messageClone = x.Clone();
|
||||
messageClone.Role = ChatRole.Assistant;
|
||||
messageClone.MessageId = Guid.NewGuid().ToString();
|
||||
messageClone.MessageId = Guid.NewGuid().ToString("N");
|
||||
messageClone.AuthorName = agentName;
|
||||
|
||||
// Clone and convert any text content to upper case.
|
||||
@@ -109,8 +111,7 @@ namespace SampleApp
|
||||
/// </summary>
|
||||
internal sealed class CustomAgentThread : InMemoryAgentThread
|
||||
{
|
||||
internal CustomAgentThread()
|
||||
: base() { }
|
||||
internal CustomAgentThread() { }
|
||||
|
||||
internal CustomAgentThread(JsonElement serializedThreadState, JsonSerializerOptions? jsonSerializerOptions = null)
|
||||
: base(serializedThreadState, jsonSerializerOptions) { }
|
||||
|
||||
Reference in New Issue
Block a user