首页 > 其他分享 >智能升级:AntSK教你如何让聊天机器人实现智能联网操作

智能升级:AntSK教你如何让聊天机器人实现智能联网操作

时间:2024-03-04 14:11:59浏览次数:26  
标签:API 机器人 AntSK 智能 api var headerArray

        随着人工智能技术的飞速发展,智能体已经逐步融入到我们的日常生活中。不过,要想让智能体不仅能聊天,还能接入网络实时获取信息,为我们提供更多便利,所需技术的复杂性不得不让人瞩目。今天,我将和各位分享如何在基于.NET开发的AI知识库/智能体项目AntSK中,利用Semantic Kernel实现智能体的联网功能,加入查询天气、发送邮件、调用外部API等“神技能”。

AntSK是什么?

        AntSK是一个基于最新的.NET8技术栈以及AntBlazorSemantic Kernel开发的开源项目,为开发者提供了构建AI知识库和智能体的强大工具。项目源码开放在GitHub平台,让每位对AI和.NET感兴趣的开发者都能参与进来,探索智能体的无限可能。

https://github.com/xuzeyu91/AntSK

  

AntSK的联网功能

        在AntSK的智能体中嵌入网络操作,听起来是不是感觉非常“黑科技”?别急,这并没有我们想象的那么复杂。Semantic Kernel作为AntSK中的一大核心SDK,已经为我们提供了便捷的自动调用功能,让联网操作变得触手可及。

配置API通道

        首先,我们先来配置通向外界的API通道。这一步相较于编码来说简单得多,仅需要构造一个配置API的页面。在这个页面中,我们可以设定要调用的具体接口信息,比如请求头、请求方式、参数等。

         然后同时,我们也需要在应用中选择对应的API插件

 

  智能体如何自动调用API

        在AntSK中,应用的配置完成,你是否期待智能体能自如地调用API呢?正是如此,通过下面的代码配置,我们的智能体可以在聊天时动态地注入API插件,并且根据不同的场景去调用指定的API接口,比如天气查询:

OpenAIPromptExecutionSettings settings = new() { ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions };

动态注入API插件

        我们还需要编写一些代码来让智能体在实际聊天过程中注入我们预设的API插件。以下是示例代码,详细地展现了如何按照不同的方法类型(GET或POST),创建函数并将其注入到Semantic Kernel插件中:

public void ImportFunctionsByApp(Apps app, Kernel _kernel)
{
    //开启自动插件调用
    var apiIdList = app.ApiFunctionList.Split(",");
    var apiList = _apis_Repositories.GetList(p => apiIdList.Contains(p.Id));
    List<KernelFunction> functions = new List<KernelFunction>();
    var plugin = _kernel.Plugins.FirstOrDefault(p => p.Name == "ApiFunctions");
    {
        foreach (var api in apiList)
        {
            switch (api.Method)
            {
                case HttpMethodType.Get:
                    functions.Add(_kernel.CreateFunctionFromMethod((string msg) =>
                    {
                        try
                        {
                            Console.WriteLine(msg);
                            RestClient client = new RestClient();
                            RestRequest request = new RestRequest(api.Url, Method.Get);
                            foreach (var header in api.Header.Split("\n"))
                            {
                                var headerArray = header.Split(":");
                                if (headerArray.Length == 2)
                                {
                                    request.AddHeader(headerArray[0], headerArray[1]);
                                }
                            }
                            //这里应该还要处理一次参数提取,等后面再迭代
                            foreach (var query in api.Query.Split("\n"))
                            {
                                var queryArray = query.Split("=");
                                if (queryArray.Length == 2)
                                {
                                    request.AddQueryParameter(queryArray[0], queryArray[1]);
                                }
                            }
                            var result = client.Execute(request);
                            return result.Content;
                        }
                        catch (System.Exception ex)
                        {
                            return "调用失败:" + ex.Message;
                        }
                    }, api.Name, $"{api.Describe}"));
                    break;
                case HttpMethodType.Post:
                    functions.Add(_kernel.CreateFunctionFromMethod((string msg) =>
                    {
                        try
                        {
                            Console.WriteLine(msg);
                            RestClient client = new RestClient();
                            RestRequest request = new RestRequest(api.Url, Method.Post);
                            foreach (var header in api.Header.Split("\n"))
                            {
                                var headerArray = header.Split(":");
                                if (headerArray.Length == 2)
                                {
                                    request.AddHeader(headerArray[0], headerArray[1]);
                                }
                            }
                            //这里应该还要处理一次参数提取,等后面再迭代
                            request.AddJsonBody(api.JsonBody);
                            var result = client.Execute(request);
                            return result.Content;
                        }
                        catch (System.Exception ex)
                        {
                            return "调用失败:" + ex.Message;
                        }
                    }, api.Name, $"{api.Describe}"));
                    break;
            }
        }
        _kernel.ImportPluginFromFunctions("ApiFunctions", functions);
    }
}

  实战演示

 

        我们可以看到,已经可以在聊天过程中顺利的调用我们的天气查询API了,并返回给我们今天的天气如何,同理我们也可以通过配置联网搜索API让聊天机器人具备搜索实时信息的能力。

结语

        将这样一种创新与强大的技术分享给大家,我感到无比自豪。我希望你能在GitHub上给AntSK点上一个star,相信项目的潜力会让你感到兴奋。如果你在使用过程中遇到任何问题,或者有新的构想想要贡献,都可以通过加入我们的【.Net/AI应用开发交流群】来参与讨论。目前由于群人数已满,你可以先通过添加我的微信xuzeyu91,我将会邀请你进入群聊。

        这个项目不仅仅是技术的集合,它更是一个开放的社区,一个共同成长的空间。如果你对人工智能、.Net开发有热情,那么AntSK无疑将是你展示才华、交流思想的绝佳平台。在未来的版本迭代中,我相信AntSK会变得更强大、更智能,能够解决越发复杂的问题,并在人类与计算机交互中发挥关键作用。

        正如新兴科技所展示的,未来并非遥远,而是触手可及。AntSK正是这一理念的体现,它不仅仅为技术爱好者和专业人士提供了交流的舞台,更为整个社会打开了智能互动的新程度。它证明了,无论是在知识管理、复杂决策支持还是日常生活辅助中,人工智能都能发挥其独有的力量。

        赶快参与进来吧,AI的未来等你来书写!

标签:API,机器人,AntSK,智能,api,var,headerArray
From: https://www.cnblogs.com/xuzeyu/p/18051707

相关文章

  • 关于AI智能生成(AIGC),整理一下你该知道这些
    ​ 什么是AIGC生成式人工智能(Artificial Intelligence Generated Content)定义百度百科生成式人工智能AIGC(Artificial Intelligence Generated Content)是人工智能1.0时代进入2.0时代的重要标志。GAN、CLIP、Transformer、Diffusion、预训练模型、多模态技术、生成算......
  • 高级别智能驾驶业务系列:自研CPS车辆精准对位系统
        在港口无人水平运输场景中,经纬恒润提供了车、路、网、云、图全栈式自研解决方案,包含了自动驾驶车辆、路侧车路协同、全场高可靠定位、5G远程驾驶、运营调度管理、数字孪生、仿真系统、高精地图等专业模块,组成了一套完整的智慧港口解决方案。    车辆精准对位系......
  • Amazon Q :企业级的对话智能导航
    前言目前市面上的许多AI智能助手主要局限于开发者和一般用户的使用,对于企业级开发的支持相对较少。然而,随着时代的发展,针对企业发展的定制化AI解决方案变得愈发重要。亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培......
  • 初中英语优秀范文100篇-096My views on robots entering the classroom-我对机器人进
    PDF格式公众号回复关键字:SHCZFW096记忆树1Withthedevelopmentoftechnology,ithasbecomepossibleforrobotstoentertheclassroom.翻译随着科技的发展,机器人进入课堂已成为可能。简化记忆课堂句子结构It"是形式主语,真正的主语是不定式短语forrobotsto......
  • 基于AntSK与LLamaSharp打造私人定制的离线AI知识库
          随着人工智能的不断发展,AI已经逐渐成为我们日常生活中不可分割的一部分。今天,我为大家带来的是一个我近期投入研究的开源项目——AntSK,它结合了LLamaSharp,不仅带来了高效便捷的本地离线AI知识库搭建方法,更是无需借助公司账户,个人开发者也能轻松搭建和使用。项......
  • AntSK:打造你的本地AI知识库——离线运行详细教程
        亲爱的读者朋友们,今天我要给大家介绍一个强大的开源工具——AntSK。这个工具能让您在没有Internet连接时依然能使用人工智能知识库对话和查询,想象一下,即使在无网络的环境中,您也能与AI进行愉快的交流!项目地址:https://github.com/xuzeyu91/AntSK    AntSK......
  • 读人工不智能:计算机如何误解世界笔记07_自动驾驶
    1.      认知能力1.1.        认知能力是人工智能从一开始就面临的核心挑战1.2.        卡雷尔机器人1.2.1.          解决卡雷尔问题的关键在于提前了解障碍物的位置,并让卡雷尔绕过它们1.2.2.          人类程序员可以看到......
  • 【专题】中国智能汽车产业发展与展望报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34111随着新一轮技术革命和产业变革的推动,以及国家政策的大力扶持,电动化、智能化、网联化已经成为汽车行业发展的新趋势。在这种背景下,各大企业纷纷争夺数字化人才,以推动产品的规模化落地和商业化创新应用。阅读原文,获取专题报告合集全文,解锁文末53......
  • 使用-solidity-开发第一个-以太坊智能合约
    目录目录使用solidity开发第一个以太坊智能合约前言项目源代码最终效果环境搭建智能合约内容Truffle创建项目Truffle编码Truffle打包Truffle部署修改编译器版本0.8.19Truffle测试创建测试文件运行测试命令Dapp命令总结遇到的问题注意Solidity......
  • TSINGSEE青犀AI智能分析网关V4工业园区/厂区/工厂智慧安监方案
    一、背景与需求分析随着科技的不断发展,传统的安全监管方式已经难以满足现代工业园区的安全需求。为了提高工业园区的安全监管水平,智慧安监方案成为了新的选择。针对工业园区化工企业多且安全及环保等方面存在风险高、隐患多、精细化管控复杂的情况,需要建立工业园区的智能化视频监......