Semantic Kernel:Agent代理

文摘   2024-08-21 07:30   日本  

在生成式AI中,代理通常指的是能够自主生成或操作数据的系统或模型。这些代理可以在多种场景中发挥作用,包括文本生成、图像和视频制作、音乐创作,以及数据分析和模拟。以下是一些代理在生成式AI中的具体作用和好处:

增强创造性:

代理可以生成新颖的创意,如艺术作品、音乐或文学文本,帮助艺术家和创作者超越传统思维限制。

自动化内容生产:

在媒体和娱乐行业,代理能够自动生成新闻报道、社交媒体帖子或其他类型的内容,大大提高效率并降低成本。

个性化体验:

生成式AI代理可以根据用户的喜好和历史行为来个性化内容,如推荐系统中的个性化播放列表或新闻摘要。

辅助决策与模拟:

在商业和科研领域,代理可以生成模拟数据或预测模型,帮助企业和研究人员分析市场趋势、进行风险评估或开发新产品。

教育和培训:

教育领域的代理可以创建定制的学习材料和模拟考试,为学习者提供个性化的学习经验,同时减轻教师的负担。

语言处理与翻译:

代理能够自动处理和翻译语言,使跨语言交流变得更加便捷,也能提供语言学习的辅助工具。


下面是一个翻译者的代理和一个审核者的代理,让他们互动起来:

using Microsoft.SemanticKernel.Experimental.Agents;using System.Text;
#pragma warning disable SKEXP0101namespace Demo08_Agent{ internal class Program { static string key; static string chatModelId; static List<IAgent> agents; static async Task Main(string[] args) { key = File.ReadAllText(@"C:\GPT\key.txt"); chatModelId = "gpt-4-turbo"; agents = new List<IAgent>(); Console.WriteLine("======== 开始协作 ========"); IAgentThread? agentThread = null; try {                // 创建翻译者 var translator = await CreateTranslatorAsync(); // 创建审核者                var auditor = await CreateAuditorAsync(); // 创建协作线程,两个代理都向其中添加消息。                agentThread = await translator.NewThreadAsync(); var prompt = new StringBuilder(); prompt.AppendLine("把下面中文翻译成日文:"); prompt.AppendLine("-----------------"); prompt.AppendLine(File.ReadAllText("content.txt"));                 // 添加用户留言 var messageUser = await agentThread.AddUserMessageAsync(prompt.ToString()); DisplayMessages(null, ConsoleColor.White, messageUser); var times = 1; bool isComplete = false; do { times++; // 启动翻译者工作 var agentMessages = await agentThread.InvokeAsync(translator).ToArrayAsync(); DisplayMessages(translator, ConsoleColor.Green, agentMessages);
// 启动审核工作 agentMessages = await agentThread.InvokeAsync(auditor).ToArrayAsync(); DisplayMessages(auditor, ConsoleColor.Yellow, agentMessages);
// 评估是否达到目标。 if (agentMessages.First().Content.Contains("采用它", StringComparison.OrdinalIgnoreCase)) { isComplete = true; } if (times > 3) { isComplete = true; } } while (!isComplete); } finally { // 清理 await Task.WhenAll(agents.Select(a => a.DeleteAsync()));            } } static async Task<IAgent> CreateTranslatorAsync() { var agent = await new AgentBuilder() .WithOpenAIChatCompletion(chatModelId, key) .WithInstructions("您是一位中文日文的翻译家,以严谨闻名。你全神贯注于手头的目标。翻译成准确,高质量的译文。完善翻译内容时,请考虑翻译审核员的建议。") .WithName("翻译家") .WithDescription("翻译家") .BuildAsync(); return agent;
}
static async Task<IAgent> CreateAuditorAsync() { var agent = await new AgentBuilder() .WithOpenAIChatCompletion(chatModelId, key) .WithInstructions("你是一位中日文翻译的翻译审核员,你有丰富的翻译和审核经验,对翻译质量有较高的要求,总是严格要求,反复琢磨,以求得到更为准确的翻译。目标是确定给定翻译否符合要求,是否采用。如果不符合要求,提出你的建议给翻译家,但不要把翻译内容给对方。如果翻译内容可以接受并且符合您的标准,请说:采用它。") .WithName("翻译审核员") .WithDescription("翻译审核员") .BuildAsync(); return agent; }
static void DisplayMessages(IAgent? agent = null, ConsoleColor color = ConsoleColor.White, params IEnumerable<IChatMessage> messages) { foreach (var message in messages) { Console.ResetColor();                Console.ForegroundColor = color;              if (agent != null) { Console.WriteLine($"{agent.Name}{message.Role}): {message.Content}"); } else { Console.WriteLine($"({message.Role}): {message.Content}"); } Console.ResetColor(); } } }}

执行的结果如下:


桂迹
分享原创,记录痕迹!
 最新文章