Semantic Kernel + Natasha:一小时快速生成100个API的奇迹

news2024/11/13 8:45:57

        大家好,我今天带来了一个让人瞠目结舌的实验:在一小时内快速生成了100个API!

        其实如果手速高,可以更多。要知道,这得益于之前介绍过的Natasha  ——  一个可以动态编译并加载代码的神奇工具。

动态编程神器! 探秘.Net中的AI时代秘密武器——Natasha框架全解析

        而当它与Semantic Kernel结合时,我们可以使用AI来动态生成代码,这可不是闹着玩的!

        首先,让我们先来观摩一下这个令人震惊的效果!

效果视频

        在这个视频中我们可以看见,我通过一句话就能生成出一个API接口。包含加法接口,爬取百度内容的接口,以及求质数,转大写的接口

        接下来,让我们深入了解一下背后的代码实现吧。

        首先,在开始之前,需要确保我们的项目中引入了Semantic Kernel。大家若还不够了解它,请回顾我之前的文章。

        下面是Natasha相关的NuGet包引用,别忘了添加到你的项目中:

<PackageReference Include="DotNetCore.Natasha.CSharp.Compiler" Version="8.0.0" /><PackageReference Include="DotNetCore.Natasha.CSharp.Compiler.Domain" Version="8.0.0" /><PackageReference Include="DotNetCore.Natasha.Domain" Version="8.0.0" />

        Natasha工作前需要做一些准备,我们需要将它注入依赖:

public void ConfigureServices(IServiceCollection services){    // ...省略其他依赖注入...    services.AddSingleton<DynamicChangeTokenProvider>()            .AddSingleton<IActionDescriptorChangeProvider>(provider => provider.GetRequiredService<DynamicChangeTokenProvider>());}

        然后,在Configure方法中,我们进行一些设置使得Natasha可以正常运作:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider){    NatashaController.Builder = (ApplicationBuilder)app;    // ...省略其他配置...    app.UseEndpoints(endpoints =>    {        endpoints.MapControllers();        NatashaController.Endpoints = endpoints.DataSources;    });}

        现在来到了最关键的部分:定义Semantic KernelSemantic Function。我们需要一个能够根据用户需求,动态生成需要的Controller层Action代码的代码生成器,示例如下:

你作为一个代码生成器,需要通过用户需求生成对应Controller层的Action代码,你需要完成以下功能:{{$input}}
---------------------------------------------参考如下代码示例进行生成,并且不要有其他多余文字:```csharp[HttpPost]public async Task<IActionResult> Test(){    //代码路径    var a=0;    return Ok(a.Success());}```

        在准备好上述步骤之后,我创建了一个通用的API:

/// <summary>/// Natasha示例控制器/// </summary>[Route("api/[controller]/[action]")][ApiController]public class NatashaController : ControllerBase{    // ...省略NatashaController部分成员变量和构造器...
    [HttpPost]    public async Task<IActionResult> AICode(CodeDTO model, [FromServices] ApplicationPartManager manager,                                            [FromServices] DynamicChangeTokenProvider tokenProvider)    {        // ...此处省略SK执行Semantic Function代码生成的详细实现...
        // 动态编译生成的代码并加入到项目中进行加载        AssemblyCSharpBuilder builder = new AssemblyCSharpBuilder();        var myAssembly = builder.UseRandomDomain().UseSmartMode().Add(classCode).GetAssembly();        var assembly = new AssemblyPart(myAssembly);        AssemblyCache.Enqueue(assembly);        manager.ApplicationParts.Add(assembly);        tokenProvider.NotifyChanges();                return Ok(code);    }}

        

        然后,每当我们调用这个API时,我们就可以生成一个新的API了!

        在本次测试里我们先按比较简单的方式,让AI来生成接口,并进行动态加载和刷新路由。

        这里由于我们是预编译的c#语言,也可以针对AI生成的代码进行预编译检测,如果有异常,把异常信息重新包装Prompt进行提交 让AI进行修改。这将是一个非常不错的主意,未来我会继续完善,让AI具备写Service以及仓储层的能力!

往期文章回顾:

揭秘AI与RPA结合的强大力量,轻松实现AI自动化网页操作!

语音革命:打造您的个人AI助手,悄悄分享我的开源语音识别全攻略!

Semantic Kernel与Everything相结合:实现本地文件搜索新境界!让你的文件“无所遁形”!

探索Avalonia与SemanticKernel打造全能AI本地助手

如果这些文章帮助到了你,欢迎订阅我的公众号:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2118580.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

liunx io模型多路复用

多路复用 应用程序中同时处理多路输入输出流&#xff0c;若采用阻塞模式&#xff0c;得不到预期的目的&#xff1b; 若采用非阻塞模式&#xff0c;对多个输入进行轮询&#xff0c;但又太浪费CPU时间&#xff1b; 若设置多个进程/线程&#xff0c;分别处理一条数据通路&#xff…

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点&#xff1a; 1.确保子表中的某个字段&#xff08;外键&#xff09;只能引用父表中的有效记录 2.主表中的列被删除时&#xff0c;子表中的关联列也会被删除 3.主表中的列更新时&#xff0c;子表中的关联…

KAN 学习 Day4 —— MultKAN 正向传播代码解读及测试

在KAN学习Day1——模型框架解析及HelloKAN中&#xff0c;我对KAN模型的基本原理进行了简单说明&#xff0c;并将作者团队给出的入门教程hellokan跑了一遍&#xff1b; 在KAN 学习 Day2 —— utils.py及spline.py 代码解读及测试中&#xff0c;我对项目的基本模块代码进行了解释…

Ubuntu上安装libdc1394-22-dev出现无法定位安装包的解决办法

一、libdc1394-22-dev介绍 libdc1394-22-dev 是一个开发库&#xff0c;用于与IEEE 1394 (FireWire)摄像头进行交互。具体来说&#xff0c;它是 libdc1394 的开发版本&#xff0c;提供了开发者头文件和链接库&#xff0c;方便在应用程序中集成对基于 IEEE 1394 标准的数码相机的…

【开源大模型生态5】解放大脑

AI能力的进化&#xff0c;如上图&#xff0c;分为4个阶段。 第一阶段&#xff1a;逻辑推理为主 在人工智能的早期发展阶段&#xff0c;研究者们将重心放在了构建能够进行逻辑推理的系统上。这些系统通常基于规则&#xff0c;通过定义一系列“如果...那么...”的规则来模拟人类…

此mac无法连接Applie媒体服务,因为“”出现问题。

出现问题&#xff1a; 这是因为mac登陆过别人的appId下载过软件&#xff0c;但是没有完全退出登陆 解决 打开偏好设置&#xff0c;点击头像&#xff0c;点击媒体与已购项目&#xff0c;能看到弹框内AppleID登陆的应用&#xff0c;打开对应的那个应用&#xff0c;我这里是音…

Linux文本内容管理命令

head与tail head----显示文件前10行 tail----显示文件后10行 查看前n行命令&#xff1a; head -n 文件路径 查看后n行命令&#xff1a; tail -n 文件路径 管道符&#xff1a; | ----将前一输出的结果作为后一命令的输入 查看第三行内容&#xff1a;head -3 文件路…

损坏SD数据恢复的8种有效方法

SD卡被用于许多不同的产品来存储重要数据&#xff0c;如图片和重要的商业文件。如果您的SD卡坏了&#xff0c;您需要SD数据恢复来获取您的信息。通过从损坏的SD卡中取回数据&#xff0c;您可以确保重要文件不会永远丢失&#xff0c;这对于工作或个人原因是非常重要的。 有许多…

如何在产品创新中实践TRIZ方法?

TRIZ&#xff08;发明问题解决理论&#xff09;作为一种强大的创新方法论&#xff0c;自其诞生以来&#xff0c;便以其系统性、科学性和实用性&#xff0c;在全球范围内被广泛应用于产品创新、技术升级及难题解决等领域。本文&#xff0c;深圳天行健企业管理咨询公司旨在分享如…

合作文章|基于FFPE样本研究腹水微生物群与HCC继发腹水、PVTT之间的相互作用

文章题目&#xff1a;Ascitic microbiota alteration is associated with portal vein tumor thrombosis occurrence and prognosis in hepatocellular carcinoma 发表期刊&#xff1a;mBio 影响因子&#xff1a;6.4 研究背景 肝细胞癌(HCC)是最常见的恶性肿瘤之一&#xf…

D45XT160-ASEMI新能源专用D45XT160

编辑&#xff1a;ll D45XT160-ASEMI新能源专用D45XT160 型号&#xff1a;D45XT160 品牌&#xff1a;ASEMI 封装&#xff1a;DXT-5 安装方式&#xff1a;直插 批号&#xff1a;2024 现货&#xff1a;50000 正向电流&#xff08;Id&#xff09;&#xff1a;45A 反向耐压…

环球团队迅速崛起,把握最新市场趋势引领未来

近日&#xff0c;一个名为“环球团队”的股票投资团队在业内迅速崭露头角&#xff0c;备受瞩目。该团队由多位在金融证券领域经验丰富、见解独到的专家组成&#xff0c;很快赢得了投资者的信任和支持。他们凭借精准的市场分析和高效的投资策略&#xff0c;多次成功抓住市场机遇…

ceph-radosgw 手动安装教程以及安装问题解决办法

一、环境 操作系统版本&#xff1a;Ubuntu20.04 x86_64 ceph版本&#xff1a;ceph version 15.2.17 (8a82819d84cf884bd39c17e3236e0632ac146dc4) octopus (stable) radosgw版本&#xff1a;15.2.17 二、ceph-radosgw 安装步骤 ceph官方英文版教程&#xff0c;写了个大概步骤…

echarts 饼图中间文字颜色小写设置

想要实现的效果如下&#xff1a; 只要在formatter里这样写就可以啦&#xff0c;rich里面写你需要的样式即可 var option {color: [#3d6dfe, #27b3ff, #2fffc1, #ff892f, #fcff2f],tooltip: {trigger: item},legend: {type: scroll,itemWidth: 12,itemHeight: 10,itemGap: 25,…

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动&#xff0c;这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高…

交换机的这些接口,网工真得清楚

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 下午好&#xff0c;我的网工朋友。 交换机作为网络的核心设备之一&#xff0c;在实现高效的数据传输和网络管理方面扮演着非常重要的角色。 然而&…

echarts 多个3D柱状图

图片样式&#xff1a; 代码实现&#xff1a; <template><div :class"className" :style"{height:height,width:width}" /> </template><script> require("echarts/theme/sakura"); // echarts themeexport default {pro…

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接&#xff1a; https://tecdat.cn/?p37628 6月16日&#xff0c;小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞&#xff0c;这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示&#xff0c;公司准备量产&#xff0c;并计划今年四季度开启预…

Leetcode122. 买卖股票 状态机dp C++实现

Leetcode 122. 买卖股票的最佳时机 问题&#xff1a;给你一个整数数组 prices &#xff0c;其中 prices [ i ] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买&#xff0c;然后在…

AOC商用显示器赋能绿色教育,助推教育信息化发展

摘要&#xff1a;助推教育发展&#xff0c;打造健康教学&#xff01; 作为提高国家创新能力及综合素养的基础&#xff0c;教育水平的高低往往决定着人才培养的数量和质量&#xff0c;决定着国家科技发展水平的高低&#xff0c;甚至于决定着民族国家的成败兴衰。从长远规划来看…