首页 > 其他分享 >SimpleAIAgent:使用免费的glm-4-flash即可开始构建简单的AI Agent应用FI

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

时间:2024-09-25 14:02:38浏览次数:1  
标签:glm AI 08 C# LLM FI WPF string

合集 - C#(80)1.使用C#将几个Excel文件合并去重分类2023-11-152.C#使用SqlSugar操作MySQL数据库实现简单的增删改查2023-11-163.C#中的类和继承2023-11-174.C#中的virtual和override关键字2023-11-175.C#中的属性2023-11-206.C#winform中使用SQLite数据库2023-11-237.C#简化工作之实现网页爬虫获取数据2023-11-278.C#中的委托(一)2023-11-299.C#中的ref关键字2023-11-2910.C#中out关键字2023-11-2911.C#中内置的泛型委托Func与Action2023-12-0412.在winform blazor hybrid中绘图2023-12-1313.使用C#如何监控选定文件夹中文件的变动情况?2023-12-2814.C#设计模式之策略模式01-0215.由浅入深理解C#中的事件01-0416.C#设计模式之观察者模式01-0417.C#设计模式之单例模式01-0818.C#基于ScottPlot进行可视化01-1319.C#使用MiniExcel导入导出数据到Excel/CSV文件02-1020.winform实现最小化至系统托盘02-1921.C#使用Bogus生成测试数据02-2722.SemanticKernel如何基于自有数据聊天03-0523.在winform中如何嵌入第三方软件窗体✨03-0724.在winform中如何实现双向数据绑定?03-1825.自己动手做一个批量doc转换为docx文件的小工具03-2026.WPF中动画教程(DoubleAnimation的基本使用)04-0127.WPF动画教程(PointAnimationUsingPath的使用)04-0328.C#使用PaddleOCR进行图片文字识别✨04-0929.WPF基础:在Canvas上绘制图形04-1630.WPF/C#:让绘制的图形可以被选中并将信息显示在ListBox中04-1931.使用归一化盒过滤器对图像进行平滑处理04-2032.WPF/C#:如何显示具有层级关系的数据04-2233.将彩色图转化为灰度图及其原理介绍04-2334.WPF/C#:ProgressBar的基本使用05-0835.在VB.NET项目中使用C#编写的代码05-2136.WPF/C#:理解与实现WPF中的MVVM模式05-2837.SemanticKernel:添加插件06-0638.Avalonia:一个.NET跨平台UI框架06-1039.WPF/C#:异常处理06-1240.WPF/C#:程序关闭的三种模式06-12:樱花宇宙官网41.wpfui:一个开源免费具有现代化设计趋势的WPF控件库06-1342.WPF/C#:如何将数据分组显示06-1743.WPF/C#:更改界面的样式06-1744.LiveCharts2:简单灵活交互式且功能强大的.NET图表库06-1845.WPF/C#:显示分组数据的两种方式06-1946.WPF/C#:在DataGrid中显示选择框06-2047.WPF/C#:数据绑定到方法06-2148.WPF/C#:BusinessLayerValidation06-2549.WPF/C#:如何实现拖拉元素06-2750.WPF在.NET9中的重大更新:Windows 11 主题07-0151.ONNX Runtime入门示例:在C#中使用ResNet50v2进行图像识别07-0252.动手学Avalonia:基于SemanticKernel与硅基流动构建AI聊天与翻译工具07-0353.Avalonia应用在基于Linux的国产操作deepin上运行07-0454.如何让其他模型也能在SemanticKernel中调用本地函数07-0555.大语言模型的应用探索—AI Agent初探!07-0856.动手学Avalonia:基于硅基流动构建一个文生图应用(一)07-1057.WPF/C#:在WPF中如何实现依赖注入07-1158.ScreenToGif:一款开源免费且好用的录屏转Gif软件07-1259.WPF/C#:实现导航功能07-1860.关于学习.NET的历程回顾与今后的探索实践方向07-2461.入门Vue+.NET 8 Web Api记录(一)07-2562.SemanticKernel/C#:检索增强生成(RAG)简易实践08-0163.SemanticKernel/C#:使用Ollama中的对话模型与嵌入模型用于本地离线场景08-0264.SemanticKernel/C#:实现接口,接入本地嵌入模型08-0665.EF Core连接PostgreSQL数据库08-0766.基于SiliconCloud快速体验GraphRag.Net08-0867.AvaloniaChat:一个基于大语言模型用于翻译的简单应用08-1668.最佳实践:在AvaloniaChat中接入SiliconCloud08-1669.AvaloniaChat—从源码构建指南08-1870.SimpleRAG:基于WPF与Semantic Kernel实现的一个简单的RAG应用08-1971.Semantic Kernel/C#:接入智谱AI的两种方式08-2172.AvaloniaChat-v0.0.2:兼容智谱AI 快速使用指南08-2173.使用SiliconCloud快速体验SimpleRAG(手把手教程)08-2274.使用Ollama本地离线体验SimpleRAG(手把手教程)08-2375.Semantic Kernel/C#:一种通用的Function Calling方法,文末附经测试可用的大模型08-2976.在SimpleRAG中使用SiliconCloud快速测试Function Calling08-2977.SimpleTranslationAIAgent:基于C#与LLM的翻译AI Agent08-3178.SimpleTranslationAIAgent借助SiliconCloud API 构建自己的专属翻译助手08-3179.SimpleAISearch:C# + DuckDuckGo 实现简单的AI搜索09-2080.SimpleAIAgent:使用免费的glm-4-flash即可开始构建简单的AI Agent应用09-25收起
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 SKEXP0050
    internal 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

标签:glm,AI,08,C#,LLM,FI,WPF,string
From: https://www.cnblogs.com/westworldss/p/18431218

相关文章

  • 正点原子RK3588(一)——开机测试+AI初探
    一、adbadbshell,进入板子的根目录exit,退出到linuxadbpull板子linux(从板子到linux)adbpushlinux板子(从linux到板子)二、测试AI功能2.1resnet18importcv2importnumpyasnpimportplatformfromsynset_labelimportlabelsfromrknnlite.apiimportRKNNLite#decic......
  • 阿里云主力模型直降97%,AI行业起飞
    阿里云主力模型直降97%,AI行业起飞大模型降价潮对AI应用的爆发有哪些意义对AI行业的影响大模型降价潮关于大模型降价潮,阿里云对外宣布通义千问GPT-4级主力模型Qwen-Long,API输入价格从0.02元/千tokens降至0.0005元/千tokens,直降97%,那么为了证实这一点,特意查询了通义千问的......
  • AI产品经理必知的133个专业术语
     一、机器学习与数据科学1、监督学习(SupervisedLearning)监督学习是机器学习的一种形式,其中模型通过带标签的数据集进行训练。训练数据包括输入特征(X)和对应的输出标签(Y),模型从中学习输入与输出的关系。2、无监督学习(UnsupervisedLearning)无监督学习是另一种机器学习形式,......
  • SimpleAISearch:C# + DuckDuckGo 实现简单的AI搜索
    SimpleAISearch:C#+DuckDuckGo实现简单的AI搜索 合集-C#(79)  最近AI搜索很火爆,有Perplexity、秘塔AI、MindSearch、Perplexica、memfree、khoj等等。在使用大语言模型的过程中,或许你也遇到了这种局限,就是无法获取网上最新的信息,导致回答的内容不是基于最新的信......
  • 【论文阅读】ChainedDiffuser: Unifying Trajectory Diffusion and Keypose Predictio
    Abstract我们提出了chaineddiffuser,这是一种policy架构,它结合了动作键预测和轨迹扩散生成,用于从演示中学习机器人操作。我们的主要创新是使用全局基于转换器的动作预测器来预测关键帧的动作,这是一项需要多模态语义场景理解的任务,并使用局部轨迹扩散器来预测连接预测宏动作的轨......
  • 什么是启发式过滤(Heuristic Filtering)?
    定义启发式过滤是一种技术方法,利用解决问题的技术和算法来识别数据中的模式、趋势或特征。这种方法通常涉及使用预测分析和近似方法,以便快速做出决策或对信息进行分类。启发式过滤通常应用于反垃圾邮件软件、防病毒程序和人工智能等领域,以有效检测垃圾邮件、恶意软件或......
  • AI推介-大语言模型LLMs论文速览(arXiv方向):2024.08.25-2024.08.31
    文章目录~1.LongRecipe:RecipeforEfficientLongContextGeneralizationinLargeLanguageModels2.GenAI-poweredMulti-AgentParadigmforSmartUrbanMobility:OpportunitiesandChallengesforIntegratingLargeLanguageModels(LLMs)andRetrieval-Augm......
  • 初步学习async/await,Task.GetAwaiter,Task.Result
    初步学习async/await,Task.GetAwaiter,Task.Result   网上关于async/await的知识有很多,看了很多但不如自己实践一遍来得快,所以这里记录下我的理解和大家学习下。  首先以最简单的同步方法来开始如下privatestaticvoidTest(){Console.Wr......
  • SimpleAIAgent:使用免费的glm-4-flash即可开始构建简单的AI Agent应用
    SimpleAIAgent是基于C#SemanticKernel与WPF构建的一款AIAgent探索应用。主要用于使用国产大语言模型或开源大语言模型构建AIAgent应用的探索学习,希望能够帮助到感兴趣的朋友。接下来我想分享一下我的AIAgent应用实践。翻译文本并将文本存入文件第一个例子是翻译文本,并将......
  • AIGC赋能游戏美术新高度,2024年还不会用AI技术的原画师设计师真的out了!
    大家好,我是强哥随着AIGC技术的飞速发展与大模型的不断成熟迭代,使得其应用前景正在越来越宽阔地展现出来,**“AIGC+”也将逐渐成为各类行业发展的新模式,**也极大地提升了各内容行业的想象空间。而在众多应用领域中,游戏相比其他内容形态具备更强的科技属性,这意味着,游戏行业有......