Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 46 additions & 22 deletions Samples/Senaprc.AI.Samples.Agents/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
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;
using Microsoft.SemanticKernel;
Expand Down Expand Up @@ -52,7 +54,7 @@
var parameter = new PromptConfigParameter()
{
MaxTokens = 2000,
Temperature = 0.7,
Temperature = 0,
TopP = 0.5,
};

Expand All @@ -79,19 +81,31 @@

#endregion

var accessor = new SemanticKernelAgent(
kernel: kernel,
name: "Accessor",
systemMessage: """
你是整个对话的对接人,用于传递消息,并接收最终的返回结果。
""")
.RegisterTextMessageConnector();

// Create the Administrtor
var administrator = new SemanticKernelAgent(
var ceo = new SemanticKernelAgent(
kernel: kernel,
name: "行政主管",
name: "CEO",
systemMessage: """
你是行政主管,你拥有制定合同、确认项目在公司层面的风险等责任。你正在处理一个项目需求的梳理,并且需要答复客户可行性,以及最终可能的合同条款。
你是公司CEO,你拥有制定合同、确认项目在公司层面的风险等责任。你正在处理一个项目需求的梳理,并且需要答复客户可行性,以及最终可能的合同条款。
你可以向你的下属提问,以获得你想要的答案,并按照要求总结后进行回复。

请注意:每一项决策都必须至少通过产品经理、项目经理的反馈和确认,才能最终给出最终的回复。

这些是你的下属:
- 产品经理:产品经理负责产品的功能设计和产品的功能规划。
- 项目经理: 项目经理负责所有项目的开发任务的安排和功能可行性的评估。
这些是你的下属, 你可以通过@来向他们提问:
- 产品经理:负责产品的功能设计和产品的功能规划。
- 项目经理: 负责所有项目的开发任务的安排和功能可行性的评估。

e.g: @产品经理 xxxx。

你的客户是张三。
""")
.RegisterTextMessageConnector()
.RegisterCustomPrintMessage(new PrintWechatMessageMiddleware(AgentKeys.SendWechatMessage));
Expand All @@ -101,7 +115,7 @@
kernel: kernel,
name: "产品经理",
systemMessage: """
你是产品经理,你向行政主管负责,并且负责回答他的所有问题。
你是产品经理,你向 CEO 负责,并且负责回答他的所有问题。

为了确保你有最新的信息,你可以使用网络搜索插件在回答问题之前在网上搜索信息,也可以根据你的经验,按照要求回答问题,并作出相对应的规划和决策。
""")
Expand All @@ -113,7 +127,7 @@
kernel: kernel,
name: "项目经理",
systemMessage: """
你是项目经理,你向行政主管负责,并且负责回答他的所有问题。
你是项目经理,你向 CEO 负责,并且负责回答他的所有问题。
产品经理可能会告诉你项目的规划方案,此时你需要对其进行评估,并安排对应的开发任务。

为了确保你有最新的信息,你可以使用网络搜索插件在回答问题之前在网上搜索信息,也可以根据你的经验,按照要求回答问题,并作出相对应的规划和决策。
Expand All @@ -125,14 +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: "admin",
systemMessage: "你是群管理员.")
.RegisterTextMessageConnector();
name: "admin")
.RegisterMessageConnector()
.RegisterPrintMessage();

// Create the AI team
// define the transition among group members
Expand Down Expand Up @@ -169,9 +184,10 @@

#endregion

var graphConnector = GraphBuilder.Start()
.ConnectFrom(hearingMember).TwoWay(administrator)
.ConnectFrom(administrator).TwoWay(projectManager).AlsoTwoWay(productManager)
var graphConnector = GraphBuilder
.Start()
.ConnectFrom(user).TwoWay(ceo)//.AlsoTwoWay(accessor)
.ConnectFrom(ceo).TwoWay(projectManager).AlsoTwoWay(productManager)//.AlsoTwoWay(accessor)
.Finish();

var aiTeam = graphConnector.CreateAiTeam(admin);
Expand All @@ -188,21 +204,29 @@

// start the chat
// generate a greeting message to hearing member from Administrator
var greetingMessage = await administrator.SendAsync("你好,如果已经就绪,请告诉我们“已就位”,并和 BA 打个招呼");
var greetingMessage = await ceo.SendAsync("你好,如果已经就绪,请告诉我们“已就位”,并和张三打个招呼");

try
{
await administrator.SendMessageToGroupAsync(
groupChat: aiTeam,
chatHistory: [greetingMessage],
maxRound: 20);
await foreach (var message in aiTeam.SendAsync(chatHistory: [greetingMessage],
maxRound: 20))
{
// process exit
if (message.GetContent()?.Contains("exit") is true)
{
Console.WriteLine("您已推出对话");
return;
}
}
}
catch (Exception ex)
{
Console.WriteLine($"抱歉发生了异常: {ex.Message}. ");
}

Console.WriteLine("好,让我们重新开始!");


Console.WriteLine("本轮对话已结束,让我们重新开始!");
Console.WriteLine();

goto Start;
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,11 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="AutoGen" Version="0.0.17" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.0" />
<PackageReference Include="AutoGen" Version="0.2.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.1" />
<PackageReference Include="Microsoft.SemanticKernel.Plugins.Web" Version="1.16.2-alpha" />
<PackageReference Include="Senparc.Weixin.Work" Version="3.22.1" />
<PackageReference Include="Senparc.Weixin.Work.Middleware" Version="1.3.1" />
<PackageReference Include="Senparc.Weixin.Work" Version="3.23.3" />
<PackageReference Include="Senparc.Weixin.Work.Middleware" Version="1.3.5" />
</ItemGroup>

<ItemGroup>
Expand Down
10 changes: 9 additions & 1 deletion src/Senparc.AI.Agents/AgentExtensions/AgentExtension.cs
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,15 @@ public static GraphConnectorEnd AlsoTwoWay<TToAgent>(this GraphConnectorEnd from

#region AI Team 构造

public static GroupChat CreateAiTeam<TFromAgent>(this GraphConnector graphConnector, TFromAgent adminAgent) where TFromAgent : IAgent
/// <summary>
/// 创建 AITeam 对象(GroupChat)
/// </summary>
/// <typeparam name="TFromAgent"></typeparam>
/// <param name="graphConnector"></param>
/// <param name="adminAgent"></param>
/// <returns></returns>
public static GroupChat CreateAiTeam<TFromAgent>(this GraphConnector graphConnector, TFromAgent adminAgent)
where TFromAgent : IAgent
{
var aiTeam = new GroupChat(
members: graphConnector.Agents.Values,
Expand Down
4 changes: 2 additions & 2 deletions src/Senparc.AI.Agents/Senparc.AI.Agents.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
<Version>0.2.0</Version>
<Version>0.3.0-beta1</Version>
<Nullable>enable</Nullable>
<LangVersion>10.0</LangVersion>
<AssemblyName>Senparc.AI.Agents</AssemblyName>
Expand Down Expand Up @@ -40,7 +40,7 @@
<None Include="..\icon.jpg" Pack="true" Visible="false" PackagePath="" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="AutoGen" Version="0.0.17" />
<PackageReference Include="AutoGen" Version="0.2.1" />
<ProjectReference Include="..\Senparc.AI.Kernel\Senparc.AI.Kernel.csproj" />
</ItemGroup>
</Project>