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应用的更多相关文章

  1. AWTK(Toolkit AnyWhere): 为嵌入式、手机和桌面开发的通用GUI【转】

    转自:https://blog.csdn.net/absurd/article/details/80958279 AWTK = Toolkit AnyWhere AWTK是吸取了FTK和CanTK的精 ...

  2. AWTK 全称为 Toolkit AnyWhere,是 ZLG 倾心打造的一套基于 C 语言开发的 GUI 框架(三平台+2个手机平台+嵌入式)

    最终目标: 支持开发嵌入式软件. 支持开发Linux应用程序. 支持开发MacOS应用程序. 支持开发Windows应用程序. 支持开发Android应用程序. 支持开发iOS应用程序. 支持开发2D ...

  3. Gradio入门到进阶全网最详细教程[一]:快速搭建AI算法可视化部署演示(侧重项目搭建和案例分享)

    Gradio入门到进阶全网最详细教程[一]:快速搭建AI算法可视化部署演示(侧重项目搭建和案例分享) 常用的两款AI可视化交互应用比较: Gradio Gradio的优势在于易用性,代码结构相比Str ...

  4. 使用Python创建AI比你想象的轻松

    使用 Python 创建 AI 比你想象的轻松 可能对AI领域,主要开发阶段,成就,结果和产品使用感兴趣.有数百个免费源和教程描述使用Python的AI.但是,没有必要浪费你的时间看他们.这里是一个详 ...

  5. Centos下 为Firefox安装Flash插件

    方法一: 直接到官网去下载RPM格式的安装包,下载好后直接 用 rpm -ivh XXXX.rpm 来安装即可. 方法二: 到官网下载tar.gz格式的,自己配置安装: #wget http://fp ...

  6. STM32学习笔记(八) SPI总线(操作外部flash)

    1. SPI总线简介 SPI全称串行外设接口,是一种高速,全双工,同步的外设总线:它工作在主从方式,常规需要至少4根线才能够正常工作.SPI作为基本的外设接口,在FLASH,EPPROM和一些数字通讯 ...

  7. STM32 flash 内存分布介绍

    摘要: 本文以STM32F103RBT6为例介绍了片上Flash(Embedded Flash)若干问题,包括Flash大小(内存映射).块大小.页面大小.寄存器.这些知识,有利于写Flash驱动. ...

  8. Flex4/AS3.0自定义VideoPlayer组件皮肤,实现Flash视频播放器

    要求 必备知识 本文要求基本了解 Adobe Flex编程知识. 开发环境 Flash Builder4/Flash Player11 演示地址 演示地址 资料下载   Adobe Flash Pla ...

  9. 使用Open Flash Chart(OFC)制作图表(Struts2处理)

    Java开源项目中制作图表比较出色的就是JFreeChart了,相信大家都听说过,它不仅可以做出非常漂亮的柱状图,饼状图,折线图基本图形之外,还能制作甘特图,仪表盘等图表.在Web应用中可以为项目增色 ...

  10. 【Web】十步教你搭建完整免费的个人网站(花生壳+XAMPP+WordPress)

    1.从花生壳官网(http://www.oray.com/peanuthull/download.php)下载最新版本的客户端. 下载完成后安装,注册护照(需手机验证码验证),注册完成后获取免费域名并 ...

随机推荐

  1. [rCore学习笔记 012]彩色化LOG

    实验要求 实现分支:ch1 完成实验指导书中的内容并在裸机上实现 hello world 输出. 实现彩色输出宏(只要求可以彩色输出,不要求 log 等级控制,不要求多种颜色) 隐形要求 可以关闭内核 ...

  2. C# EF Core 后端代码已定义的用户实体,如何扩展字段?

    注:"2020中国.NET开发者大会"上学习到的开发技巧, 记录下来 1.问题 后端代码已定义的用户实体,如下: public class UserEntity { public ...

  3. docker dockerfile基础指令

    dockerfile是用来构建docker镜像文件!命令参数脚本 构建步骤 1.编写一个dockerfile文件 2.dockerbuild构建成为一个镜像 3.docker run运行镜像 4.do ...

  4. Fidder响应数据SyntaxView乱码的处理方法

    当Fidder查看响应数据"SyntaxView"出现乱码时,可以点击上方菜单栏的"Decode"按钮,等"Decode"出现蓝色边框后再重 ...

  5. pytorch 第三方模块 GraphNAS 安装成功记录

    实验室的小师妹要安装pytorch的第三方模块,经过多方努力没有安装上,后来我接手后也是感觉头疼. 该模块地址:   https://github.com/GraphNAS/GraphNAS 该模块主 ...

  6. 工作站CPU超频,通过测试软件的压力测试就OK了吗?终极测试还是要看具体的应用场景

    最近想起超频试试自己年初入手的工作站,也是纯玩,超超频,看看是什么个体验,不过这个过程中还真有所学习. 由于电脑的主板,电源,散热等配的都比较高端,所以上来直接超频5.2G,电压选择为自动,不过再整个 ...

  7. 基于Unity开发的强化学习环境(游戏环境):ml-agents —— Unity ML-Agents

    介绍: https://medium.com/nerd-for-tech/an-introduction-to-machine-learning-with-unity-ml-agents-af7193 ...

  8. 从baselines库的common/vec_env/vec_normalize.py看reinforcement learning算法中的reward shape方法

    参考前文:https://www.cnblogs.com/devilmaycry812839668/p/15889282.html 2.  REINFORCE算法实际代码中为什么会对一个episode ...

  9. 文本相似度 HanPL汉语言处理

    @ 目录 前言 需求 简介 实操开始 1. 添加pom.xml依赖 2. 文本相似度工具类 3. 案例验证 4. 验证结果 总结 前言 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i. 提示 ...

  10. .NET 7 + Vue 权限管理系统 小白快速上手

    前言 今天给大家推荐一个超实用的开源项目<.NET 7 + Vue 权限管理系统 小白快速上手>,DncZeus的愿景就是做一个.NET 领域小白也能上手的简易.通用的后台权限管理模板系统 ...