SimpleAIAgent:使用免费的glm-4-flash即可开始构建简单的AI Agent应用
SimpleAIAgent是基于C# Semantic Kernel 与 WPF构建的一款AI Agent探索应用。主要用于使用国产大语言模型或开源大语言模型构建AI Agent应用的探索学习,希望能够帮助到感兴趣的朋友。
接下来我想分享一下我的AI Agent应用实践。
翻译文本并将文本存入文件
第一个例子是翻译文本,并将文本存入指定的文件。
输入如下内容:

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

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

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

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

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

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

查看结果

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

以上AI Agent应用使用glm-4-flash即可实现,当然也可以尝试其他模型,模型越强,成功概率越高。
实现文件到文件的翻译
输入:

文件1.txt的内容如下:

是一段关于WPF的中文描述,现在我想让LLM帮我翻译成英文之后再保存到另一个文件。
同样还是使用免费的glm-4-flash
执行过程
第一步,LLM判断应该调用的函数与参数如下:

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

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

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

查看结果


实现要点
大家可能会注意到实现的要点其实就是要让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
SimpleAIAgent:使用免费的glm-4-flash即可开始构建简单的AI Agent应用的更多相关文章
- AWTK(Toolkit AnyWhere): 为嵌入式、手机和桌面开发的通用GUI【转】
转自:https://blog.csdn.net/absurd/article/details/80958279 AWTK = Toolkit AnyWhere AWTK是吸取了FTK和CanTK的精 ...
- AWTK 全称为 Toolkit AnyWhere,是 ZLG 倾心打造的一套基于 C 语言开发的 GUI 框架(三平台+2个手机平台+嵌入式)
最终目标: 支持开发嵌入式软件. 支持开发Linux应用程序. 支持开发MacOS应用程序. 支持开发Windows应用程序. 支持开发Android应用程序. 支持开发iOS应用程序. 支持开发2D ...
- Gradio入门到进阶全网最详细教程[一]:快速搭建AI算法可视化部署演示(侧重项目搭建和案例分享)
Gradio入门到进阶全网最详细教程[一]:快速搭建AI算法可视化部署演示(侧重项目搭建和案例分享) 常用的两款AI可视化交互应用比较: Gradio Gradio的优势在于易用性,代码结构相比Str ...
- 使用Python创建AI比你想象的轻松
使用 Python 创建 AI 比你想象的轻松 可能对AI领域,主要开发阶段,成就,结果和产品使用感兴趣.有数百个免费源和教程描述使用Python的AI.但是,没有必要浪费你的时间看他们.这里是一个详 ...
- Centos下 为Firefox安装Flash插件
方法一: 直接到官网去下载RPM格式的安装包,下载好后直接 用 rpm -ivh XXXX.rpm 来安装即可. 方法二: 到官网下载tar.gz格式的,自己配置安装: #wget http://fp ...
- STM32学习笔记(八) SPI总线(操作外部flash)
1. SPI总线简介 SPI全称串行外设接口,是一种高速,全双工,同步的外设总线:它工作在主从方式,常规需要至少4根线才能够正常工作.SPI作为基本的外设接口,在FLASH,EPPROM和一些数字通讯 ...
- STM32 flash 内存分布介绍
摘要: 本文以STM32F103RBT6为例介绍了片上Flash(Embedded Flash)若干问题,包括Flash大小(内存映射).块大小.页面大小.寄存器.这些知识,有利于写Flash驱动. ...
- Flex4/AS3.0自定义VideoPlayer组件皮肤,实现Flash视频播放器
要求 必备知识 本文要求基本了解 Adobe Flex编程知识. 开发环境 Flash Builder4/Flash Player11 演示地址 演示地址 资料下载 Adobe Flash Pla ...
- 使用Open Flash Chart(OFC)制作图表(Struts2处理)
Java开源项目中制作图表比较出色的就是JFreeChart了,相信大家都听说过,它不仅可以做出非常漂亮的柱状图,饼状图,折线图基本图形之外,还能制作甘特图,仪表盘等图表.在Web应用中可以为项目增色 ...
- 【Web】十步教你搭建完整免费的个人网站(花生壳+XAMPP+WordPress)
1.从花生壳官网(http://www.oray.com/peanuthull/download.php)下载最新版本的客户端. 下载完成后安装,注册护照(需手机验证码验证),注册完成后获取免费域名并 ...
随机推荐
- 测试思想-流程规范 用例优先级定义与使用规范 V1.0
用例优先级定义与使用规范 V1.0 By:授客 1. 规范说明 目的 对软件测试过程中的用例级别进行详细描述及标准化定义,明确不同测试阶段的测试范围,减少测试冗余投入,提高测试效率,建立 ...
- Windows下UI自动化工具Inspect
windows系统下的UI自动化工具Inspect是包含在WindowsSDK包里的,所以需要先下载SDK包,然后在SDK包路径下找到Inspect工具并打开使用就可以了. 官网下载链接:https: ...
- Pycharm+pytest+allure打造高逼格的测试报告
环境前置提示:allure是基于Java的一个程序,需要Java1.8的环境,没有安装需要去安装一下. 如果在cmd中能输入java,获取到命令信息则不管,否则需要配置系统变量: 路径:计算机> ...
- 吃透 JVM 诊断方法与工具使用
JVM(Java虚拟机)是Java程序运行的基础环境,它提供了内存管理.线程管理和性能监控等功能.吃透JVM诊断方法,可以帮助开发者更有效地解决Java应用在运行时遇到的问题.以下是一些常见的JVM诊 ...
- .NET 8 通用权限框架 前后端分离,开箱即用
前言 推荐一个基于.NET 8 实现的通用权限开发框架Admin.NET,前端使用Vue3/Element-plus开发. 基于.NET 8(Furion)/SqlSugar实现的通用管理平台.整合 ...
- 5、SpringMVC之域对象共享数据
5.1.域对象简介 请求域(request):一次请求范围内有效 会话域(session):一次会话范围内有效 应用域(application):整个应用范围内有效 5.2.环境搭建 5.2.1.右击 ...
- 【Vue2】Router 路由
1.什么是单页面应用程序 单页面应用程序(英文名: Single Page Application)简称SPA, 顾名思义,指的是一个Web网站中只有唯一-的一-个HTML页面, 所有的功能与交互都在 ...
- 【SpringBoot】11 Web开发 Part2 模板引擎
开发回顾: JavaWeb开发使用JSP技术,所有的页面文件必须是JSP,才能接受数据处理 JSP的好处是,数据交互方便,有JSTL补充 SpringBoot的区别: 我们最终的项目是一个jar包 内 ...
- 【Shiro】08 SpringBoot整合
需要的依赖的坐标: <!-- Shiro依赖 --> <dependency> <groupId>com.github.theborakompanioni</ ...
- FFmpeg开发笔记(四十三)使用SRS开启SRT协议的视频直播服务
<FFmpeg开发实战:从零基础到短视频上线>一书在第10章介绍了轻量级流媒体服务器MediaMTX,通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流.不过MediaMTX的功能 ...