Semantic Kernel + Natasha:一小时快速生成100个API的奇迹
大家好,我今天带来了一个让人瞠目结舌的实验:在一小时内快速生成了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 Kernel的Semantic 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本地助手
如果这些文章帮助到了你,欢迎订阅我的公众号:

相关文章:
Semantic Kernel + Natasha:一小时快速生成100个API的奇迹
大家好,我今天带来了一个让人瞠目结舌的实验:在一小时内快速生成了100个API! 其实如果手速高,可以更多。要知道,这得益于之前介绍过的Natasha —— 一个可以动态编译并加载代码的神奇工具。 动态编程神器! 探秘.Net…...
rancher upgrade 【rancher 升级】
文章目录 1. 背景2. 下载3. 安装4. 检查5. 测试5.1 创建项目5.2 创建应用5.3 删除集群5.4 注册集群 1. 背景 rancher v2.8.2 升级 v2.9.1 2. 下载 下载charts helm repo add rancher-latest https://releases.rancher.com/server-charts/latest helm repo update helm fetc…...
【Linux】多线程:线程互斥、互斥锁、线程安全
目录 一、多线程访问公共资源时所产生的问题 二、互斥相关背景概念 互斥量mutex(锁)的引入 三、互斥量 1、初始化互斥量(mutex) 2、互斥量加锁 3、互斥量解锁 4、 销毁互斥量 四、互斥量的使用 1、使用静态互斥量 2、…...
进程之间的通信方式
前言 每个进程的用户地址空间都是独立的,一般而言是不能互相访问的,但内核空间是每个进程都共享的,所以进程之间要通信必须通过内核。 Linux提供了以下进程通信方式: 一、管道 所谓的管道,就是内核里面的一串缓存。…...
动手学深度学习(pytorch)学习记录26-卷积神经网路(LeNet)[学习记录]
目录 LeNet模型训练 LeNet 总体来看,LeNet(LeNet-5)由两个部分组成: 卷积编码器:由两个卷积层组成; 全连接层密集块:由三个全连接层组成。 每个卷积块中的基本单元是一个卷积层、一个sigmoid激活函数和平均…...
log4j 和 java.lang.OutOfMemoryError PermGen space
还是OneCoder在项目中沙箱的问题,用classloader隔离做的沙箱,反复运行用户的任务,出现永生区内存溢出: java.lang.OutOfMemoryError: PermGen space 这个问题在tomcat重复热部署的时候其实比较常见。其道理也和我们沙箱的道理基本…...
2024.9.9营养小题【2】
营养: 1、什么数是丑数? 2、数学数学,丑数的数学意义,哎,数学思维我是忘干净了。 3、可以把while循环换成for循环。由此又想到了一点,三个循环结构各有使用场景。 for(;n%factors[i]0;n/factors[i]){}...
uniapp的barcode组件去掉自动放大功能
autoZoom“false” <barcode id1 class"barcode" autoZoom"false" autostart"false" ref"barcode" background"rgb(0,0,0)" frameColor"#1C86EE"scanbarColor"#1C86EE" :filters"fil" ma…...
H5接入Steam 获取用户数据案例
官方文档地址 1.注册 Steam API Key: 你需要一个 Steam Web API Key,可以在 Steam API Key 页面 获取。https://steamcommunity.com/dev/apikey 2.使用 OpenID 登录: 实现 Steam OpenID 登录,以便用户通过 Steam 账户登录你的…...
《A Few Useful Things to Know about Machine Learning》论文导读
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl机器学习作为人工智能领域的重要分支,近年来得到了广泛的关注和应用。Pedro Domingos的经典论文《A Few Useful Things to Know about Machine Learning》为我们提供了对机器学习深入且全面的理解…...
隔壁老樊2024全国巡回演唱会重磅来袭,首站广州正式官宣!
汹涌人潮将城市填满,斑驳心绪漂浮在时间之隙,当生活的喜悲逐渐演化成歌,天空将自己负载的缄默倾泻,那些或酸涩、或热烈的点滴滑落心海,那层悬挂在「我」与世界分野的无形壁垒,渐也被曙光渗透消融。 提炼生…...
【C++】list(下)
个人主页~ list(上)~ list 四、模拟实现1、list.h(1)关于整个list的搭建①节点②迭代器③接口 (2)自定义类型实例化 2、test.cpp(1)test1(2)test2 五、额外小…...
千云物流 -低代码平台MySQL备份数据
windows备份 全量备份 创建备份目录 需要在安装数据库的服务器上创建备份目录,所有如果要做备份至少需要两倍的硬盘空间, mkdir D:\mysql_backup\full_backup准备备份脚本 创建一个windows批处理文件(例如 full_backup.bat),用来执行全量…...
MySQL:进阶巩固-视图
目录 一、视图的概述二、视图的基本使用2.1 创建视图2.2 查询视图2.3 修改视图2.4 删除视图 一、视图的概述 视图是一种虚拟存在的表,视图中的数据并不在数据库中实际的存在,行列数据来自于视图中查询的表,并且是在使用视图时动态生成的。 通…...
分布式事务Seata原理及其项目使用
0.Seata官方文档 1.Seata概念及原理 Seata是什么 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 Seata主要由三个重要组…...
JS_分支结构
if结构 这里的if结构几乎和JAVA中的一样,需要注意的是 if()中的非空字符串会被认为是trueif()中的非零数字会被认为是trueif()中的非空对象会被认为是true <script> if(false){// 非空字符串 if判断为true console.log(true) }else{ console.log(false) } if(){// 长度…...
决策树(Decison Tree)—有监督学习方法、概率模型、生成模型、非线性模型、非参数化模型、批量学习
定义 ID3算法 输入:训练数据集(T= { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x N , y N ) } \left\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\right\} {(x1,y1),(x2,y2),⋯,(xN,yN)}),特征集A阀值 ε \varepsilon ε 输出:决策树T (1)若D中所有实例属于同一…...
java 自定义注解校验实体类属性
直接上代码 1.是否启用参数校验注解 Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented public interface EnableArgumentsCheck {/*** 是否启用*/boolean enable() default true;} 2.参数校验自定义注解 /*** 参数校验自定义注解* 属性定义&#…...
光伏并网发电系统中电能质量监测与优化技术探讨
0引言 随着清洁能源技术的持续进步与广泛应用,光伏并网发电系统亦逐步崭露头角。作为一种关键的电力供应方式,其受到了广泛的关注。然而,由于天气等外部条件的影响,光伏发电系统面临若干挑战。电能质量问题,诸如电压波…...
网页解析的那些事
Vue 方面 模板语法理解 熟悉 Vue 的模板语法,包括插值表达式(如{{ message }})、指令(如v-if、v-for、v-bind等)。理解这些语法元素如何将数据与 DOM 元素进行绑定和交互。例如,v-for指令用于循环渲染列表数…...
工业AI落地:从数据冷启动到高质数据工程实战
1. 为什么“数据为中心”不是口号,而是工程现场的真实压力去年冬天,我帮一家做工业缺陷检测的初创公司做模型交付。他们拿来的数据集只有237张标注图,全是产线停机时人工拍的——光照不均、角度单一、连螺丝孔都只拍正面。当时团队信心满满&a…...
揭秘当下匹克球鞋销售厂家,背后隐藏着怎样的行业秘密?
在运动市场中,匹克球运动正逐渐兴起,匹克球鞋销售厂家也受到了更多关注。下面,让我们深入探究其中的行业秘密。市场现状与痛点行业报告显示,随着匹克球运动的普及,匹克球鞋市场规模不断扩大,但也存在诸多痛…...
感知机为什么必须加偏置?从数学本质到工程落地全解析
1. 为什么感知机神经元必须带偏置输入?——从数学本质到工程实践的全链路拆解“Why Perceptron Neurons Need Bias Input?” 这个标题看似简单,实则直击人工神经网络最基础却最容易被忽略的底层设计逻辑。我在带高校AI实验课、指导工业界图像分类项目落…...
非结构化数据处理有没有更高效的办法?2026智能体端到端方案彻底终结数据孤岛
在2026年的数字化深水区,企业面对的不再是单纯的数据库增删改查,而是由海量PDF合同、非标图片、多模态音视频、复杂的系统日志以及社交媒体碎片信息构成的“非结构化数据冰山”。 据行业数据显示,企业内部超过80%的数据以非结构化形式存在。过…...
基于Multisim的四路带计分系统抢答器设计与仿真
摘要:本项目设计了一个四路带计分系统的智能抢答器,具有声光显示、计时和计分功能。使用Multisim 14.3进行电路设计 与仿真验证。项目简介本项目设计了一个基于Multisim的四路带计分系统智能抢答器,采用74系列数字逻辑芯片实现纯硬件电路设计…...
《男人来自火星,女人来自金星4:生活篇》第1-3章深度解读:大脑化学物质如何决定两性关系
前言 《男人来自火星,女人来自金星》系列自问世以来,全球销量已超过5000万册,被翻译成40多种语言,成为近几十年来最畅销的两性关系书籍之一。作为系列的第四部,《生活篇》(也被称为《健康篇》)从…...
22. 与 React 集成
22. 与 React 集成 1. 概述 TypeScript 与 React 的集成是现代前端开发的标准实践。TypeScript 为 React 组件提供了类型安全,帮助在编译时发现错误,提升开发体验和代码质量。 ┌───────────────────────────────────…...
AI-HF_Patch终极指南:3步解锁AI-Shoujo完整游戏体验的秘诀
AI-HF_Patch终极指南:3步解锁AI-Shoujo完整游戏体验的秘诀 【免费下载链接】AI-HF_Patch Automatically translate, uncensor and update AI-Shoujo! 项目地址: https://gitcode.com/gh_mirrors/ai/AI-HF_Patch 还在为AI-Shoujo游戏的语言障碍、模组冲突和功…...
Android 指纹浏览器开发教程三:WebView、Chromium 和壳层方案怎么选
导语 Android 指纹浏览器项目走到第三步,往往要面对第一个“分叉路口”:到底用系统 WebView、自编译 Chromium,还是在现有内核外面再套一层壳? 以 EasyBR 指纹浏览器为例,更关键的不是单点参数,而是整条配置…...
终极FileBrowser上手指南:10分钟掌握Web文件管理神器
终极FileBrowser上手指南:10分钟掌握Web文件管理神器 【免费下载链接】filebrowser 📂 Web File Browser 项目地址: https://gitcode.com/gh_mirrors/fi/filebrowser FileBrowser是一个功能强大的Web文件管理器,让你能够通过浏览器界面…...
