评论

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自动做的事去写插件,然后导入这个插件罢了。

插件中函数最好不要太多,太多模型能力弱的就会乱调用。根据你的需求,实现不同人物导入不同的插件比较好。

插件可以这样写,以上面的翻译插件为例:

# pragmawarningdisable SKEXP0050

internalclassTranslationFunctions

{

privatereadonlyKernel _kernel;

publicTranslationFunctions( )

{

varhandler = newOpenAIHttpClientHandler;

varbuilder = Kernel.CreateBuilder

.AddOpenAIChatCompletion(

modelId: ChatAIOption.ChatModel,

apiKey: ChatAIOption.Key,

httpClient: newHttpClient(handler));

_kernel = builder.Build;

}

[ KernelFunction, Deion( "选择用户想要的语言翻译文本") ]

publicasyncTask< string> TranslateText(

[Deion( "要翻译的文本")] stringtext,

[ Deion( "要翻译成的语言,从'中文'、'英文'中选一个")] stringlanguage

)

{

stringskPrompt = """

{{$input}}

将上面的文本翻译成{{$language}},无需任何其他内容

" "";

varresult = await_kernel.InvokePromptAsync(skPrompt, new{ [ "input"] = text, [ "language"] = language });

varstr = result.ToString;

returnstr;

}

[ KernelFunction, Deion( "实现文件到文件的翻译") ]

publicasyncTask< string> TranslateTextFileToFile(

[Deion( "要翻译的文件路径")] stringpath1,

[ Deion( "保存翻译结果的文件路径")] stringpath2,

[ Deion( "要翻译成的语言,从'中文'、'英文'中选一个")] stringlanguage

)

{

stringfileContent = File.ReadAllText(path1);

varlines = TextChunker.SplitPlainTextLines(fileContent, 100);

varparagraphs = TextChunker.SplitPlainTextParagraphs(lines, 1000);

stringresult = "";

stringskPrompt = """

{{$input}}

将上面的文本翻译成{{$language}},无需任何其他内容

" "";

foreach( varparagraph inparagraphs)

{

varresult1 = await_kernel.InvokePromptAsync(skPrompt, new{ [ "input"] = paragraph, [ "language"] = language });

result += result1.ToString + "\r\n";

}

varstr = result.ToString;

// 使用 StreamWriter 将文本写入文件

using(StreamWriter writer = newStreamWriter(path2, true))

{

writer.WriteLine(str);

}

stringmessage = $"已成功实现文件 {path1}到文件 {path2}的翻译" ;

returnmessage;

}

[ KernelFunction, Deion( "将文本保存到文件") ]

publicstringSaveTextToFile(

[Deion( "要保存的文本")] stringtext,

[ Deion( "要保存到的文件路径")] stringfilePath

)

{

// 使用 StreamWriter 将文本写入文件

using(StreamWriter writer = newStreamWriter(filePath, true))

{

writer.WriteLine(text);

}

return"已成功写入文件";

}

[ KernelFunction, Deion( "从文件中读取文本") ]

publicstringGetTextFromFile(

[Deion( "要读取的文件路径")] stringfilePath

)

{

stringfileContent = File.ReadAllText(filePath);

returnfileContent;

}

}

就是加上了一些描述用于帮助LLM理解函数的用途罢了,相信对程序员朋友来说不是什么问题,现在就可以动手构建自己的AI Agent应用了。

希望这次的分享对使用LLM构建AI Agent应用感兴趣的朋友有所帮助。

对这个应用感兴趣的朋友,拉一下代码,将appsettings.example.json改为appsettings.json,填入你的API Key与模型名或者使用Ollma填入地址,填入模型名即可快速体验。

GitHub地址:https://github.com/Ming-jiayou/SimpleAIAgent返回搜狐,查看更多

责任编辑:

平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
阅读 ()