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

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

时间:2024-09-25 12:39:24浏览次数:8  
标签:文件 Description AI flash LLM var 文本 string glm

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

标签:文件,Description,AI,flash,LLM,var,文本,string,glm
From: https://www.cnblogs.com/mingupupu/p/18431071

相关文章

  • AIGC赋能游戏美术新高度,2024年还不会用AI技术的原画师设计师真的out了!
    大家好,我是强哥随着AIGC技术的飞速发展与大模型的不断成熟迭代,使得其应用前景正在越来越宽阔地展现出来,**“AIGC+”也将逐渐成为各类行业发展的新模式,**也极大地提升了各内容行业的想象空间。而在众多应用领域中,游戏相比其他内容形态具备更强的科技属性,这意味着,游戏行业有......
  • 流量新密码?AI宠物定制写真在网络爆火,有人搞了10W+,有手就行
    大家好,我是强哥不知道大家发现没?消费者对于情感价值的需求猛增,宠物服务行业衍生出越来越多的“拟人化”新业态。宠物摄影和写真成为宠物经济中的新兴行业,吸引了越来越多的摄影师和养宠人的关注。一些摄影师和摄影机构单独开辟了这个业务,通过给宠物穿上服装、拍摄“毛孩子......
  • 小北用AI做了一个合并Excel的工具,全程只动嘴,不动手
    前言友友们日常工作中经常有合并excel表格的需求,比如说小北要把下面三个开票申请表合并汇总成一个总的文件。如果需要合并的文件数量少,那还可以手工的复制粘贴。如果文件数量巨大,而且格式还不一样,那估计心里就阿巴阿巴了~跟着小北5分钟上手AI代码编辑器Cursor,零基础开发Chrome......
  • 【2024W38】肖恩技术周刊(第 16 期):白嫖AI的最佳时段
    周刊内容:对一周内阅读的资讯或技术内容精品(个人向)进行总结,分类大致包含“业界资讯”、“技术博客”、“开源项目”和“工具分享”等。为减少阅读负担提高记忆留存率,每类下内容数一般不超过3条。更新时间:星期天历史收录:shawn-weekly订阅方式:微信公众号“肖恩聊技......
  • 国美金融科技“破圈” 通通AI社交集团拥抱万亿蓝海市场
    8月28日,国美金融科技(00628.HK)发布两则重磅公告。公告显示,公司宣布展开若干新业务线的收购,并计划将上市公司名称更名为“通通AI社交集团”。 据了解,国美金融科技新称“通通”,寓意国美正在打造一个互联互通的多维互联网平台。当下,具备万亿级别市场空间的元宇宙、人工智能等......
  • ADD failed: file not found in build context or excluded by .dockerignore: stat i
    这个错误信息表明在构建Docker镜像时,Docker守护进程(daemon)在尝试将名为 irap_rule_center 的文件或目录添加到镜像中,但是没有在构建上下文(buildcontext)中找到这个文件或目录,或者这个文件或目录被 .dockerignore 文件忽略了。要解决这个问题,你可以按照以下步骤操作:检查文件......
  • 基于腾讯云 AI 代码助手的Web端宝可梦图鉴实践记录
    在编程的世界里,效率和质量是永恒的追求,每一位开发者不断追求的是如何以更快的速度、更高的质量完成代码的编写与调试。另一方面,大型语言模型,凭借其强大的神经网络架构和庞大数据训练,已具有模拟人类的语言理解与创造的能力,而这种能力的突破性进展让AI编程也成为现实。本篇文章,将介绍......
  • RAG、单元测试等一大波新功能,上线JetBrains IDEs的CodeGeeX插件!
    CodeGeeX第三代模型发布后,多项基于第三代模型能力的新功能今天也同步上线JetBrainsIDEs全家桶。用户可以在IDEA、PyCharm等JetBrains系的IDE中,搜索下载CodeGeeXv2.5.0版本,深度使用最新功能。 一、新模型加持的代码补全和智能问答 以IDEA为例,在v2.5.0版本的CodeGeeX插件中,用户可......
  • SpringBoot Email:搭建邮件发送服务指南?
    SpringBootEmail服务如何集成?怎么使用SpringBoot?SpringBootEmail提供了一个简单而强大的框架,使得在SpringBoot应用程序中集成邮件发送功能变得非常容易。AokSend将详细介绍如何使用SpringBootEmail搭建一个高效的邮件发送服务。SpringBootEmail:创建服务SpringBoo......
  • 年薪40W!转AI产品经理后,我明白了有人带的意义在哪!
    如果你正想转岗/入行产品经理,我的故事或许能给你一些启示......