Semantic Kernel:新Agent代理

news/2025/3/4 3:31:02/文章来源:https://www.cnblogs.com/axzxs2001/p/18746165
  在之前的SemanticKernel中,有一篇关于Agent的文章,不过现在看来其中使用的包过时,所以这篇来更新一下。原文章如下:

Semantic Kernel:Agent代理

桂素伟,公众号:桂迹Semantic Kernel:Agent代理

  原来项目引有的Nuget包如下,版本停留在了1.18.2,2024年9月4日

   最新的Agent包已更还,如下:

  下面是用最新的包进行的更换,代码注释说明了每个类型和方法的功能,这里就不说了。目前有个问题,就是在创建各个代理的时间,Name不能是中文,否则报http 400的错误,相信之后会有所改善。

using Microsoft.SemanticKernel.Agents.Chat;
using Microsoft.SemanticKernel.Agents.OpenAI;
using Microsoft.SemanticKernel.Agents;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel;
using System.ClientModel;
using System.Collections.ObjectModel;
using System.Reflection.Emit;
using System;
#pragma warning disable
var modelID = "gpt-4o";
var openAIKey = File.ReadAllText("c://gpt/key.txt");
var kernel = Kernel.CreateBuilder().AddOpenAIChatCompletion(modelID, openAIKey).Build();
//创建翻译家代理
var agentTranslator = await CreateTranslatorAsync(kernel);
//创建审核员代理
var agentAuditor = await CreateAuditorAsync(kernel);
//创建一个代理聊天组,先让翻译家翻译,然后审核员审核
var chat = new AgentGroupChat(agentTranslator, agentAuditor)
{ExecutionSettings = new(){// 这里使用了一个 TerminationStrategy 子类,当代理消息包含术语 "采用它" 时将终止。TerminationStrategy = new AdoptTerminationStrategy("采用它"){Agents = [agentAuditor],MaximumIterations = 6,}}
};
//添加聊天消息
var chatMessage = new ChatMessageContent(AuthorRole.User, File.ReadAllText("content.txt"));
chat.AddChatMessage(chatMessage);
Console.WriteLine(chatMessage);
var lastAgent = string.Empty;
Console.WriteLine();
// 这里使用了异步流来处理代理的消息。
await foreach (var response in chat.InvokeStreamingAsync())
{if (string.IsNullOrEmpty(response.Content)){continue;}//输入角色和代理名称if (!lastAgent.Equals(response.AuthorName, StringComparison.Ordinal)){Console.WriteLine($"\n# {response.Role} - {response.AuthorName ?? "*"}:");lastAgent = response.AuthorName ?? string.Empty;}Console.Write(response.Content);
}
//ChatMessageContent[] history = await chat.GetChatMessagesAsync().Reverse().ToArrayAsync();
//全部的内容
//for (int index = 0; index < history.Length; index++)
//{
//    Console.WriteLine(history[index]);
//}
Console.WriteLine($"\n[已完成: {chat.IsComplete}]");
async Task<ChatCompletionAgent> CreateAuditorAsync(Kernel kernel)
{var agentTranslator = new ChatCompletionAgent(){Instructions = """
                你是一位中日文翻译的翻译审核员,你有丰富的翻译和审核经验,对翻译质量有较高的要求,总是严格要求,反复琢磨,以求得到更为准确的翻译。目标是确定给定翻译否符合要求,是否采用。如果翻译内容可以接受并且符合您的标准,请说:采用它。""",Name = "Auditor",Kernel = kernel,};return agentTranslator;
}
async Task<OpenAIAssistantAgent> CreateTranslatorAsync(Kernel kernel)
{var agentAuditor = await OpenAIAssistantAgent.CreateAsync(clientProvider: OpenAIClientProvider.ForOpenAI(new ApiKeyCredential(openAIKey)),definition: new OpenAIAssistantDefinition(modelID){Instructions = """
                您是一位把中文翻译成日文的翻译家。你会把用户的输入,全神贯注于手头的目标,翻译成准确,高质量的译文。完善翻译内容时,请考虑翻译 Auditor 的建议。""",Name = "JapaneseTranslator",},kernel: kernel);return agentAuditor;
}
class AdoptTerminationStrategy(string adoptCommand) : TerminationStrategy
{protected override Task<bool> ShouldAgentTerminateAsync(Agent agent, IReadOnlyList<ChatMessageContent> history, CancellationToken cancellationToken)=> Task.FromResult(history[history.Count - 1].Content?.Contains(adoptCommand, StringComparison.OrdinalIgnoreCase) ?? false);
}

运行结果:

   文章来源微信公众号

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/892226.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于uniCloud开发的管理端部署

参考链接: https://doc.dcloud.net.cn/uniCloud/publish.html https://doc.dcloud.net.cn/uniCloud/hosting.html#使用 上传云函数前端网页托管勾选将编译后的资源部署到前端网页托管选项 配置自定义域名配置域名,根据提示在域名管理处添加解析将得到的cname值在域名解析出添…

UnitsNet 库简介

UnitsNet 是一个功能强大的 .NET 库,专为简化物理单位的处理而设计。它提供了丰富的单位类型及其转换功能,使开发人员能够在代码中方便地进行物理单位间的转换、计算和显示。UnitsNet 支持多种领域的物理单位,例如长度、质量、体积、温度、速度、面积等,极大地提高了开发效…

DeepSeek避坑指南:巧用提示词

前言 DeepSeek是国内AI里面的佼佼者,它开源deepseek r1大模型,不仅把AI的使用成本降了下来,同时还撼动了open AI等国际玩家的市场地位。 由于DeepSeek R1是推理模型,在某些时候输出的内容答非所问、甚至会一本正经的胡说八道。今天我们主要聊聊如何能更好的让大模型回答问题…

.NET9里WinForm更新了什么

下面是几个在.NET9中WinForm的新功能!主题Windows Forms 已初步支持暗模式,目标是在 .NET 10 中实现完整支持。应用程序的颜色模式可以设置为以下几种值:SystemColorMode.Classic—(默认)浅色模式,与之前版本的 Windows Forms 相同。 SystemColorMode.System—遵循 Windo…

2019-PTA模拟赛-L1-3 后天(三目表达式-仅代码)

签到题,无解析Code: #include<iostream> using namespace std; int main(){int d;cin >> d;int res = (d + 2) % 7 == 0 ? 7 : (d + 2) % 7;cout << res;return 0; }

SemanticKernel系列,AI系列,SmartFill介绍视频系列

SemanticKernel系列 Semantic Kernel(SK)是微软开发的开源框架,旨在帮助开发者将大型语言模型(LLM)集成到应用程序中。它提供了丰富的工具和功能,支持多种编程语言,简化了LLM的调用和管理过程。通过SK,开发者可以更高效地构建智能应用,实现自然语言处理、对话生成等功…

Python|Windows 系统安装 triton 的方法

若未安装,则在运行调用了该仓库的 Python 脚本时,会报错如下:ModuleNotFoundError: No module named triton在 Windows 系统中,如果直接使用 pip 安装,会报错如下:pip install triton ERROR: Could not find a version that satisfies the requirement triton (from vers…

linux---常见命令

使用的是linux服务器,在这里整理一些linux常见的命令: 1、查看服务器端口命令sudo netstat -tuln打完收工!

国家 - 1

Mi propio escondite.今天说冰岛。 这是冰岛的轮廓:

Semantic Kernel:图片向量化

虽然本节与SK无关,但都是基于AI,所以暂且放在这个系统中Azure AI 视觉的多模式嵌入 API 可以将图像和文本转换为向量,也就是一种数字化的表示方式。这种技术可以让我们实现基于向量的图片搜索功能。通过结合这个 API 和 pgvector(PostgreSQL 中的向量库),我们可以让图片变…

miniconda创建虚拟环境后vscode使用conda时提示无法将“conda”项识别——附使用conda运行python项目简单教程

前提:miniconda已经加入到环境变量 vscode找到setting输入shell: windows改成cmd,重启vscode就好了 跑python项目需要对应的python版本和依赖包,使用anaconda管理python环境是个很好的选择,但是不需要跑深度学习大数据这种比较大的项目或者模型使用miniconda是个不错的选…

Semantic Kernel:SK中的Function

Semantic Kernel中的Functions被设计为可被动态调用的“插件”,用于处理某些特定的操作。例如,一个Function可以是用于获取天气信息的API请求,或者是用于计算复杂数学表达式的函数。在SK中,Functions通常分为以下两种类型:本地函数和语义函数。 Native Functions(本地函数…