From 006cddcd39afb07e5818b3359288ad95dbcd1922 Mon Sep 17 00:00:00 2001 From: JeffreySu Date: Sun, 10 Nov 2024 18:54:54 +0800 Subject: [PATCH 1/3] AutoGen upgrade --- Samples/Senaprc.AI.Samples.Agents/Program.cs | 59 +++++++++++++------ .../Senaprc.AI.Samples.Agents.csproj | 8 +-- .../AgentExtensions/AgentExtension.cs | 10 +++- .../Senparc.AI.Agents.csproj | 4 +- 4 files changed, 57 insertions(+), 24 deletions(-) diff --git a/Samples/Senaprc.AI.Samples.Agents/Program.cs b/Samples/Senaprc.AI.Samples.Agents/Program.cs index 18feb05..47fac11 100644 --- a/Samples/Senaprc.AI.Samples.Agents/Program.cs +++ b/Samples/Senaprc.AI.Samples.Agents/Program.cs @@ -4,6 +4,7 @@ using AutoGen.Core; using AutoGen.Mistral; using AutoGen.SemanticKernel; +using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.SemanticKernel; @@ -79,19 +80,27 @@ #endregion +var accessor = new SemanticKernelAgent( + kernel: kernel, + name: "Accessor", + systemMessage: """ + 你是整个对话的对接人,用于传递消息,并接收最终的返回结果。 + """) + .RegisterTextMessageConnector(); + // Create the Administrtor var administrator = new SemanticKernelAgent( kernel: kernel, - name: "行政主管", + name: "CEO", systemMessage: """ - 你是行政主管,你拥有制定合同、确认项目在公司层面的风险等责任。你正在处理一个项目需求的梳理,并且需要答复客户可行性,以及最终可能的合同条款。 + 你是公司CEO,你拥有制定合同、确认项目在公司层面的风险等责任。你正在处理一个项目需求的梳理,并且需要答复客户可行性,以及最终可能的合同条款。 你可以向你的下属提问,以获得你想要的答案,并按照要求总结后进行回复。 请注意:每一项决策都必须至少通过产品经理、项目经理的反馈和确认,才能最终给出最终的回复。 这些是你的下属: - - 产品经理:产品经理负责产品的功能设计和产品的功能规划。 - - 项目经理: 项目经理负责所有项目的开发任务的安排和功能可行性的评估。 + - Product Manager:产品经理负责产品的功能设计和产品的功能规划。 + - Project Manager: 项目经理负责所有项目的开发任务的安排和功能可行性的评估。 """) .RegisterTextMessageConnector() .RegisterCustomPrintMessage(new PrintWechatMessageMiddleware(AgentKeys.SendWechatMessage)); @@ -99,9 +108,9 @@ // Create the Product Manager var productManager = new SemanticKernelAgent( kernel: kernel, - name: "产品经理", + name: "Product Manager", systemMessage: """ - 你是产品经理,你向行政主管负责,并且负责回答他的所有问题。 + 你是产品经理,你向 CEO 负责,并且负责回答他的所有问题。 为了确保你有最新的信息,你可以使用网络搜索插件在回答问题之前在网上搜索信息,也可以根据你的经验,按照要求回答问题,并作出相对应的规划和决策。 """) @@ -111,9 +120,9 @@ // Create the Project Manager var projectManager = new SemanticKernelAgent( kernel: kernel, - name: "项目经理", + name: "Project Manager", systemMessage: """ - 你是项目经理,你向行政主管负责,并且负责回答他的所有问题。 + 你是项目经理,你向 CEO 负责,并且负责回答他的所有问题。 产品经理可能会告诉你项目的规划方案,此时你需要对其进行评估,并安排对应的开发任务。 为了确保你有最新的信息,你可以使用网络搜索插件在回答问题之前在网上搜索信息,也可以根据你的经验,按照要求回答问题,并作出相对应的规划和决策。 @@ -130,9 +139,10 @@ // Create the group admin var admin = new SemanticKernelAgent( kernel: kernel, - name: "admin", - systemMessage: "你是群管理员.") - .RegisterTextMessageConnector(); + name: "群管理员", + systemMessage: "你是群管理员。") + .RegisterTextMessageConnector() + .RegisterMiddleware(new PrintMessageMiddleware()); // Create the AI team // define the transition among group members @@ -170,8 +180,8 @@ #endregion var graphConnector = GraphBuilder.Start() - .ConnectFrom(hearingMember).TwoWay(administrator) - .ConnectFrom(administrator).TwoWay(projectManager).AlsoTwoWay(productManager) + .ConnectFrom(hearingMember).TwoWay(administrator)//.AlsoTwoWay(accessor) + .ConnectFrom(administrator).TwoWay(projectManager).AlsoTwoWay(productManager)//.AlsoTwoWay(accessor) .Finish(); var aiTeam = graphConnector.CreateAiTeam(admin); @@ -192,10 +202,25 @@ try { - await administrator.SendMessageToGroupAsync( - groupChat: aiTeam, - chatHistory: [greetingMessage], - maxRound: 20); + IAsyncEnumerable? teamReasult = aiTeam.SendAsync(chatHistory: [greetingMessage], + maxRound: 20); + + await foreach (var message in teamReasult) + { + //Console.WriteLine("$$$$$$ " + message.GetContent()); + } + + //var sendResult = /*await*/ administrator.SendMessageToGroupAsync( + // groupChat: aiTeam, + // chatHistory: [greetingMessage], + // maxRound: 20); + + //await foreach (var message in sendResult) + //{ + // //Console.WriteLine("////" + message.GetContent() + "////"); + //} + + } catch (Exception ex) { diff --git a/Samples/Senaprc.AI.Samples.Agents/Senaprc.AI.Samples.Agents.csproj b/Samples/Senaprc.AI.Samples.Agents/Senaprc.AI.Samples.Agents.csproj index 2bb7d2a..8b06903 100644 --- a/Samples/Senaprc.AI.Samples.Agents/Senaprc.AI.Samples.Agents.csproj +++ b/Samples/Senaprc.AI.Samples.Agents/Senaprc.AI.Samples.Agents.csproj @@ -31,11 +31,11 @@ - - + + - - + + diff --git a/src/Senparc.AI.Agents/AgentExtensions/AgentExtension.cs b/src/Senparc.AI.Agents/AgentExtensions/AgentExtension.cs index a21be17..c6cc963 100644 --- a/src/Senparc.AI.Agents/AgentExtensions/AgentExtension.cs +++ b/src/Senparc.AI.Agents/AgentExtensions/AgentExtension.cs @@ -77,7 +77,15 @@ public static GraphConnectorEnd AlsoTwoWay(this GraphConnectorEnd from #region AI Team 构造 - public static GroupChat CreateAiTeam(this GraphConnector graphConnector, TFromAgent adminAgent) where TFromAgent : IAgent + /// + /// 创建 AITeam 对象(GroupChat) + /// + /// + /// + /// + /// + public static GroupChat CreateAiTeam(this GraphConnector graphConnector, TFromAgent adminAgent) + where TFromAgent : IAgent { var aiTeam = new GroupChat( members: graphConnector.Agents.Values, diff --git a/src/Senparc.AI.Agents/Senparc.AI.Agents.csproj b/src/Senparc.AI.Agents/Senparc.AI.Agents.csproj index d0fc817..4cc4e75 100644 --- a/src/Senparc.AI.Agents/Senparc.AI.Agents.csproj +++ b/src/Senparc.AI.Agents/Senparc.AI.Agents.csproj @@ -2,7 +2,7 @@ netstandard2.1 - 0.2.0 + 0.3.0-beta1 enable 10.0 Senparc.AI.Agents @@ -40,7 +40,7 @@ - + \ No newline at end of file From e23e64b3025793d40e190dcdc86bd19bb7f2c1e7 Mon Sep 17 00:00:00 2001 From: XiaoYun Zhang Date: Tue, 12 Nov 2024 23:36:50 -0800 Subject: [PATCH 2/3] update --- Samples/Senaprc.AI.Samples.Agents/Program.cs | 67 +++++++++----------- 1 file changed, 29 insertions(+), 38 deletions(-) diff --git a/Samples/Senaprc.AI.Samples.Agents/Program.cs b/Samples/Senaprc.AI.Samples.Agents/Program.cs index 47fac11..fd39bf0 100644 --- a/Samples/Senaprc.AI.Samples.Agents/Program.cs +++ b/Samples/Senaprc.AI.Samples.Agents/Program.cs @@ -4,6 +4,7 @@ using AutoGen.Core; using AutoGen.Mistral; using AutoGen.SemanticKernel; +using AutoGen.SemanticKernel.Extension; using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -53,7 +54,7 @@ var parameter = new PromptConfigParameter() { MaxTokens = 2000, - Temperature = 0.7, + Temperature = 0, TopP = 0.5, }; @@ -89,7 +90,7 @@ .RegisterTextMessageConnector(); // Create the Administrtor -var administrator = new SemanticKernelAgent( +var ceo = new SemanticKernelAgent( kernel: kernel, name: "CEO", systemMessage: """ @@ -98,9 +99,13 @@ 请注意:每一项决策都必须至少通过产品经理、项目经理的反馈和确认,才能最终给出最终的回复。 - 这些是你的下属: - - Product Manager:产品经理负责产品的功能设计和产品的功能规划。 - - Project Manager: 项目经理负责所有项目的开发任务的安排和功能可行性的评估。 + 这些是你的下属, 你可以通过@来向他们提问: + - 产品经理:负责产品的功能设计和产品的功能规划。 + - 项目经理: 负责所有项目的开发任务的安排和功能可行性的评估。 + + e.g: @产品经理 xxxx。 + + 你的客户是张三。 """) .RegisterTextMessageConnector() .RegisterCustomPrintMessage(new PrintWechatMessageMiddleware(AgentKeys.SendWechatMessage)); @@ -108,7 +113,7 @@ // Create the Product Manager var productManager = new SemanticKernelAgent( kernel: kernel, - name: "Product Manager", + name: "产品经理", systemMessage: """ 你是产品经理,你向 CEO 负责,并且负责回答他的所有问题。 @@ -120,7 +125,7 @@ // Create the Project Manager var projectManager = new SemanticKernelAgent( kernel: kernel, - name: "Project Manager", + name: "项目经理", systemMessage: """ 你是项目经理,你向 CEO 负责,并且负责回答他的所有问题。 产品经理可能会告诉你项目的规划方案,此时你需要对其进行评估,并安排对应的开发任务。 @@ -134,15 +139,15 @@ // Create the hearing member -var hearingMember = new UserProxyAgent(name: "BA"); +var user = new UserProxyAgent(name: "张三") + .RegisterPrintMessage(); // Create the group admin var admin = new SemanticKernelAgent( kernel: kernel, - name: "群管理员", - systemMessage: "你是群管理员。") - .RegisterTextMessageConnector() - .RegisterMiddleware(new PrintMessageMiddleware()); + name: "admin") + .RegisterMessageConnector() + .RegisterPrintMessage(); // Create the AI team // define the transition among group members @@ -179,9 +184,10 @@ #endregion -var graphConnector = GraphBuilder.Start() - .ConnectFrom(hearingMember).TwoWay(administrator)//.AlsoTwoWay(accessor) - .ConnectFrom(administrator).TwoWay(projectManager).AlsoTwoWay(productManager)//.AlsoTwoWay(accessor) +var graphConnector = GraphBuilder + .Start() + .ConnectFrom(user).TwoWay(ceo)//.AlsoTwoWay(accessor) + .ConnectFrom(ceo).TwoWay(projectManager).AlsoTwoWay(productManager)//.AlsoTwoWay(accessor) .Finish(); var aiTeam = graphConnector.CreateAiTeam(admin); @@ -198,36 +204,21 @@ // start the chat // generate a greeting message to hearing member from Administrator -var greetingMessage = await administrator.SendAsync("你好,如果已经就绪,请告诉我们“已就位”,并和 BA 打个招呼"); +var greetingMessage = await ceo.SendAsync("你好,如果已经就绪,请告诉我们“已就位”,并和张三打个招呼"); try { - IAsyncEnumerable? teamReasult = aiTeam.SendAsync(chatHistory: [greetingMessage], - maxRound: 20); - - await foreach (var message in teamReasult) + await foreach (var message in aiTeam.SendAsync(chatHistory: [greetingMessage], + maxRound: 20)) { - //Console.WriteLine("$$$$$$ " + message.GetContent()); + // process exit + if (message.GetContent()?.Contains("exit") is true) + { + return; + } } - - //var sendResult = /*await*/ administrator.SendMessageToGroupAsync( - // groupChat: aiTeam, - // chatHistory: [greetingMessage], - // maxRound: 20); - - //await foreach (var message in sendResult) - //{ - // //Console.WriteLine("////" + message.GetContent() + "////"); - //} - - } catch (Exception ex) { Console.WriteLine($"抱歉发生了异常: {ex.Message}. "); } - -Console.WriteLine("好,让我们重新开始!"); -Console.WriteLine(); - -goto Start; \ No newline at end of file From aff4d798e207c336117d32ec367862f3d6ce7c64 Mon Sep 17 00:00:00 2001 From: JeffreySu Date: Fri, 15 Nov 2024 00:42:00 +0800 Subject: [PATCH 3/3] =?UTF-8?q?Sample=20=E6=B7=BB=E5=8A=A0=20exit=20?= =?UTF-8?q?=E9=80=80=E5=87=BA=E5=90=8E=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Samples/Senaprc.AI.Samples.Agents/Program.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Samples/Senaprc.AI.Samples.Agents/Program.cs b/Samples/Senaprc.AI.Samples.Agents/Program.cs index fd39bf0..7e8bb78 100644 --- a/Samples/Senaprc.AI.Samples.Agents/Program.cs +++ b/Samples/Senaprc.AI.Samples.Agents/Program.cs @@ -214,6 +214,7 @@ // process exit if (message.GetContent()?.Contains("exit") is true) { + Console.WriteLine("您已推出对话"); return; } } @@ -222,3 +223,10 @@ { Console.WriteLine($"抱歉发生了异常: {ex.Message}. "); } + + + +Console.WriteLine("本轮对话已结束,让我们重新开始!"); +Console.WriteLine(); + +goto Start; \ No newline at end of file