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指令用于循环渲染列表数…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
