Xiaoyun Zhang 9ba14ee15b
Fix dotnet test and reformat dotnet code (#3603)
* fix test

* install aspire workload

* format

* fix build error

* fix format

* format
2024-10-02 14:42:27 -04:00

90 lines
3.3 KiB
C#

// Copyright (c) Microsoft Corporation. All rights reserved.
// Dynamic_Group_Chat.cs
using AutoGen.Core;
using AutoGen.OpenAI;
using AutoGen.OpenAI.Extension;
using AutoGen.SemanticKernel;
using AutoGen.SemanticKernel.Extension;
using Microsoft.SemanticKernel;
using OpenAI;
namespace AutoGen.BasicSample;
public class Dynamic_Group_Chat
{
public static async Task RunAsync()
{
var apiKey = Environment.GetEnvironmentVariable("OPENAI_API_KEY") ?? throw new Exception("Please set OPENAI_API_KEY environment variable.");
var model = "gpt-4o-mini";
#region Create_Coder
var openaiClient = new OpenAIClient(apiKey);
var coder = new OpenAIChatAgent(
chatClient: openaiClient.GetChatClient(model),
name: "coder",
systemMessage: "You are a C# coder, when writing csharp code, please put the code between ```csharp and ```")
.RegisterMessageConnector() // convert OpenAI message to AutoGen message
.RegisterPrintMessage(); // print the message content
#endregion Create_Coder
#region Create_Commenter
var kernel = Kernel
.CreateBuilder()
.AddOpenAIChatCompletion(modelId: model, apiKey: apiKey)
.Build();
var commenter = new SemanticKernelAgent(
kernel: kernel,
name: "commenter",
systemMessage: "You write inline comments for the code snippet and add unit tests if necessary")
.RegisterMessageConnector() // register message connector so it support AutoGen built-in message types like TextMessage.
.RegisterPrintMessage(); // pretty print the message to the console
#endregion Create_Commenter
#region Create_UserProxy
var userProxy = new DefaultReplyAgent("user", defaultReply: "END")
.RegisterPrintMessage(); // print the message content
#endregion Create_UserProxy
#region Create_Group
var admin = new OpenAIChatAgent(
chatClient: openaiClient.GetChatClient(model),
name: "admin")
.RegisterMessageConnector(); // convert OpenAI message to AutoGen message
var group = new GroupChat(
members: [coder, commenter, userProxy],
admin: admin);
#endregion Create_Group
#region Chat_With_Group
var workflowInstruction = new TextMessage(
Role.User,
"""
Here is the workflow of this group chat:
User{Ask a question} -> Coder{Write code}
Coder{Write code} -> Commenter{Add comments to the code}
Commenter{Add comments to the code} -> User{END}
""");
var question = new TextMessage(Role.User, "How to calculate the 100th Fibonacci number?");
var chatHistory = new List<IMessage> { workflowInstruction, question };
while (true)
{
var replies = await group.CallAsync(chatHistory, maxRound: 1);
var lastReply = replies.Last();
chatHistory.Add(lastReply);
if (lastReply.From == userProxy.Name)
{
break;
}
}
#endregion Chat_With_Group
#region Summarize_Chat_History
var summary = await coder.SendAsync("summarize the conversation", chatHistory: chatHistory);
#endregion Summarize_Chat_History
}
}