Fork me on GitHub

Semantic Kernel:Agent代理

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

增强创造性:

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

自动化内容生产:

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

个性化体验:

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

辅助决策与模拟:

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

教育和培训:

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

语言处理与翻译:

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

 

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

复制代码
using Microsoft.SemanticKernel.Experimental.Agents;
using System.Text;

#pragma warning disable SKEXP0101
namespace 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();
            }
        }
    }
}
复制代码

执行的结果如下:

   文章来源微信公众号

  想要更快更方便的了解相关知识,可以关注微信公众号 

posted @   桂素伟  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示