SimpleAIAgent:使用免费的glm-4-flash即可开始构建简单的AI Agent应用

devtools/2024/9/25 15:49:56/

SimpleAIAgent是基于C# Semantic Kernel 与 WPF构建的一款AI Agent探索应用。主要用于使用国产大语言模型或开源大语言模型构建AI Agent应用的探索学习,希望能够帮助到感兴趣的朋友。

接下来我想分享一下我的AI Agent应用实践。

翻译文本并将文本存入文件

第一个例子是翻译文本,并将文本存入指定的文件。

输入如下内容:

image-20240925113714519

执行过程

第一步,LLM判断应该调用的函数与参数如下:

image-20240925113837225

第二步,LLM帮我们调用这个函数,并返回结果:

image-20240925113939862

第三步,LLM再次判断需要调用的函数与参数:

image-20240925114202861

第四步,LLM调用这个函数,并返回函数返回值:

image-20240925114250823

第五步,LLM判断任务已经完成,调用结束函数:

image-20240925114350284

第六步,返回最终的回应:

image-20240925114503461

查看结果

image-20240925114554332

会发现桌面多了一个文件,打开如下所示:

image-20240925114623548

以上AI Agent应用使用glm-4-flash即可实现,当然也可以尝试其他模型,模型越强,成功概率越高。

实现文件到文件的翻译

输入:

image-20240925114853823

文件1.txt的内容如下:

image-20240925115006964

是一段关于WPF的中文描述,现在我想让LLM帮我翻译成英文之后再保存到另一个文件。

同样还是使用免费的glm-4-flash

执行过程

第一步,LLM判断应该调用的函数与参数如下:

image-20240925115631597

第二步,LLM帮我们调用这个函数,并返回结果:

image-20240925120033177

第三步,LLM判断任务已经完成,调用结束函数:

image-20240925115856804

第四步,返回最终的回应:

image-20240925115922792

查看结果

image-20240925120115600

image-20240925120135716

实现要点

大家可能会注意到实现的要点其实就是要让LLM自动调用函数,也就是实现自动函数调用的功能。

之后要做的就是根据你想让LLM自动做的事去写插件,然后导入这个插件罢了。

插件中函数最好不要太多,太多模型能力弱的就会乱调用。根据你的需求,实现不同人物导入不同的插件比较好。

插件可以这样写,以上面的翻译插件为例:

#pragma warning disable SKEXP0050internal class TranslationFunctions{private readonly Kernel _kernel;public TranslationFunctions(){var handler = new OpenAIHttpClientHandler();var builder = Kernel.CreateBuilder().AddOpenAIChatCompletion(modelId: ChatAIOption.ChatModel,apiKey: ChatAIOption.Key,httpClient: new HttpClient(handler));_kernel = builder.Build();}[KernelFunction, Description("选择用户想要的语言翻译文本")]public async Task<string> TranslateText([Description("要翻译的文本")] string text,[Description("要翻译成的语言,从'中文'、'英文'中选一个")] string language){string skPrompt = """{{$input}}将上面的文本翻译成{{$language}},无需任何其他内容""";var result = await _kernel.InvokePromptAsync(skPrompt, new() { ["input"] = text, ["language"] = language });var str = result.ToString();return str;}[KernelFunction, Description("实现文件到文件的翻译")]public async Task<string> TranslateTextFileToFile([Description("要翻译的文件路径")] string path1,[Description("保存翻译结果的文件路径")] string path2,[Description("要翻译成的语言,从'中文'、'英文'中选一个")] string language
){string fileContent = File.ReadAllText(path1);var lines = TextChunker.SplitPlainTextLines(fileContent,100);var paragraphs = TextChunker.SplitPlainTextParagraphs(lines, 1000);string result = "";string skPrompt = """{{$input}}将上面的文本翻译成{{$language}},无需任何其他内容""";foreach (var paragraph in paragraphs){var result1 = await _kernel.InvokePromptAsync(skPrompt, new() { ["input"] = paragraph, ["language"] = language });result += result1.ToString() + "\r\n";}        var str = result.ToString();// 使用 StreamWriter 将文本写入文件using (StreamWriter writer = new StreamWriter(path2, true)){writer.WriteLine(str);}string message = $"已成功实现文件{path1}到文件{path2}的翻译";return message;}[KernelFunction, Description("将文本保存到文件")]public string SaveTextToFile([Description("要保存的文本")] string text,[Description("要保存到的文件路径")] string filePath
){// 使用 StreamWriter 将文本写入文件using (StreamWriter writer = new StreamWriter(filePath, true)){writer.WriteLine(text);}return "已成功写入文件";}[KernelFunction, Description("从文件中读取文本")]public string GetTextFromFile([Description("要读取的文件路径")] string filePath
){string fileContent = File.ReadAllText(filePath);return fileContent;}}

就是加上了一些描述用于帮助LLM理解函数的用途罢了,相信对程序员朋友来说不是什么问题,现在就可以动手构建自己的AI Agent应用了。

希望这次的分享对使用LLM构建AI Agent应用感兴趣的朋友有所帮助。

对这个应用感兴趣的朋友,拉一下代码,将appsettings.example.json改为appsettings.json,填入你的API Key与模型名或者使用Ollma填入地址,填入模型名即可快速体验。

GitHub地址:https://github.com/Ming-jiayou/SimpleAIAgent


http://www.ppmy.cn/devtools/117035.html

相关文章

虚拟机开启网络代理设置,利用主机代理访问国外资源

前言 有时候需要访问一些镜像网站拉取安装包或是学习资料&#xff0c;由于国内外网络环境差异和网络安全的问题&#xff0c;总会被阻拦。下文来说一下虚拟机centos7如何通过连接主机的代理软件。 一、代理软件设置 1、前提是主机要安装有代理软件&#xff0c;查看代理软件的…

C#进阶-基于雪花算法的订单号设计与实现

在现代电商系统和分布式系统中&#xff0c;高效地生成全局唯一的订单号是一个关键需求。订单号不仅需要唯一性&#xff0c;还需要具备一定的趋势递增性&#xff0c;以满足数据库索引和排序的需求。本文将介绍如何在C#中使用雪花算法&#xff08;Snowflake&#xff09;设计和实现…

nginx架构篇(三)

文章目录 一、Nginx实现服务器端集群搭建1.1 Nginx与Tomcat部署1. 环境准备(Tomcat)2. 环境准备(Nginx) 1.2. Nginx实现动静分离1.2.1. 需求分析1.2.2. 动静实现步骤 1.3. Nginx实现Tomcat集群搭建1.4. Nginx高可用解决方案1.4.1. Keepalived1.4.2. VRRP介绍1.4.3. 环境搭建环境…

vue3开发中易遗漏的常见知识点

文章目录 组件样式的特性Scoped CSS之局部样式的泄露Scoped CSS之深度选择器CSS Modules在CSS中使用v-bind 非props属性继承组件通信父子组件的相互通信props/$emit父组件传递数据给子组件子组件传递数据给父组件 非父子组件的相互通信Provide/inject全局事件总线 组件插槽作用…

PDF一键转播客!PDF2Audio让文档“开口说话“

在信息爆炸的时代&#xff0c;如何高效获取知识成为众多学习者和专业人士面临的挑战。近日&#xff0c;一款名为PDF2Audio的开源工具应运而生&#xff0c;它巧妙地将人工智能技术与传统阅读方式相结合&#xff0c;为用户提供了一种全新的信息获取方式。 PDF2Audio的核心功能是…

【信号与系统第三章】4、傅里叶变换

傅里叶级数和傅里叶变换意义和推导 推荐先读文章&#xff1a; 傅里叶级数&#xff0c;傅里叶变换_傅里叶级数展开公式-CSDN博客 典型信号的傅里叶变换 一、单边指数信号 &#xff0c; 1、证明 2、信号图像 3、频谱图 二、冲激函数 1、证明 2、图像 三、常数函数 1、证明…

各数据库连接池性能对比

测试结果 c3p0 Connection Times (ms)min mean[/-sd] median max Connect: 0 0 0.1 0 1 Processing: 17 63 29.7 54 178 Waiting: 17 63 29.7 54 177 Total: 18 63 29.7 54 178 dbcp Connect…

electron介绍

Electron中文文档 Electron是什么&#xff1f; Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 允许开发者使用前端技术栈来创建可以在 Windows、macOS 和 Linux 等多个操作系统上运行的桌面应用程序。 Electron 本质上是一个运行在桌面操作…