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)下载最新版本的客户端. 下载完成后安装,注册护照(需手机验证码验证),注册完成后获取免费域名并 ...
随机推荐
- Oracle 死锁与慢查询总结
查看死锁 SELECT s.sid "会话ID", s.lockwait "等待锁", s.event "等待的资源/事件", -- 最近等 ...
- Odoo 菜单定义和修改学习总结
odoo菜单定义和修改学习总结 环境 odoo-14.0.post20221212.tar 定义菜单 方式1: <?xml version="1.0"?> <od ...
- Odoo 增加web后端的响应能力
实践环境 Odoo 14.0-20221212 (Community Edition) web_responsive-14.0.1.2.1.zip https://apps.odoo.com/apps ...
- Jenkins+docker 部署SpringCloud微服务
部署需要提前准备的环境:安装好Jenkins.docker.Maven.Jdk1.8.Git 说明:由于本例只说明如何部署,所以有关项目其他服务如nacos.mysql.redis.seata等默认已 ...
- ansible 001 ansible介绍 原理 主机清单 定义变量 提权与连接
ansible 自动化运维 ansible 部署应用程序 (在操作系统层面之上) 系统初始化过程 主机名,yun源,网络,服务,时间同步,内核参数 (可以在pxe这里完成) ansible可以方便10 ...
- python global变量作用域
python变量作用域 var1 = 123 def func(): var1 = 456 print(var1) func() #456 print(var1) #123 ============= ...
- 【Python】Django学习1
按黑马程序员的美多商场作方向: https://www.bilibili.com/video/BV1nf4y1k7G3 一.应用创建.注册处理.配置 Pycharm 创建Django项目: 自应用注册 ...
- 【Java】Generic 泛型
Generic 泛型 为什么需要泛型? 集合容器再设计阶段/声明阶段不能确定这个容器实际存储的是什么类型的对象 JDK5 以前只能把元素设计为Object基类 在JDK5之后用泛型来约束对象类型 除了 ...
- 创绘-AI一键小说转漫画视频
创绘-AI一键小说转漫画视频 创绘简介 一键智能AI推理提示词,自动关联上下文,画面匹配度更高 一键批量绘图,同时支持本地和云端模式(没有显卡也能畅享绘图) 一键导出剪映草稿,自动生成关键帧,快速图文 ...
- Jenkins API用户认证方式
1.概述 Jenkins的API可以通过用户名+密码或者用户名+Token的方式来进行认证,这篇文章以具体示例来说明具体的使用方式. 2.Jenkins环境 本文示例基于Jenkins 2.452.3 ...