aify v0.7.9
aify
-------------------------------------- 培养
“人工智能学徒”
,让它写代码去 --------------------------------------
一时无从谈起,即兴,查看成长履历
吧
演示理想
1、安装
npm i aify
2、教学
let aify = require('aify');
aify.at('小程')
.ai('自学')
.ok();
3、应用
let aify = require('aify');
aify.at('小程')
.ai('系统开发')
.tip('使用java语言')
.tip('百万日活量')
.ok({'设计书目录': './doc'});
成长履历
- 暂且提供简陋WEB界面,方便管理查看技能、issues,更新技能的有效状态
- 打开或关闭技能时,顺便检查,自动打开或关闭相关issues
- 实现从指定git仓库自学
开启WEB服务
1、安装 (不保证前后兼容)
npm i aify
2、开启WEB服务
let aify = require('aify');
aify.ai('Start-Web-Server')
.ok(8080); // 端口号缺省时等同8080
可以浏览器打开看了
API
同下
- 学习过程实现
勤学好问
,碰到容易混淆的新技能,必提issue 比如学了两个名称和关键词都一样,但函数不同的两个技能,这就很容易混淆 通常应该避免这样乱学,这时会提issue,等待人工介入调整 - 添加接口实现
issues查看
功能 - 所学新技能若和
天赋
有混淆,忽略,无issue,先天功能自动让贤,任你学 使用技能也是一样,后天所学优先使用,无技可施时才会求助先天天赋
这是仿意识行为的设计 - 技能运用实现
严谨决策
,对于容易引起误解的决策,输出警告提示 同名不同关键词的多个技能,筛选时会先评分,如果得分一样也会容易误解 这时默认会优先使用其中最早所学的技能,严谨起见,会输出警告提醒正确使用
演示勤学好问
1、安装 (不保证前后兼容)
npm i aify
2、教写js版helloworld
// demo-helloworld-1.skill
[name]
写helloworld
[keywords]
demo
[function]
module.exports = () => `
function hello(name){
return 'hello ' + name;
}
`;
let aify = require('aify');
aify.at('pg').learn('demo-helloworld-1.skill');
3、教写java版helloworld
// demo-helloworld-2.skill
[name]
写helloworld
[keywords]
demo
[function]
module.exports = () => `
public class HelloWorld {
public String hello(String name) {
return "hello " + name;
}
}
`;
let aify = require('aify');
aify.at('pg').learn('demo-helloworld-2.skill');
4、叫写代码
let aify = require('aify');
let rs = aify.at('pg')
.ai('写helloworld')
.tip('demo')
.ok();
console.log(rs); // => 写的是js版helloworld
控制台可以看到有WARNING,这时如果本意是想写java版代码,那就好像是无解了 所以,这种易混淆的技能应该避免,学到这种技能会主动提issue,这是它本分的事
5、查看issues
let aify = require('aify');
let rs = aify.at('pg').issues();
console.log(rs); // => [ { name: '写helloworld', keywords: [ 'demo' ] } ]
是时候人工干预了 考虑到可能重复学习,所以简单删除可能不是最好的方式,下次又学进来的话还得继续干预 最简单粗暴的方式就是,复制技能并改用不同名称,然后继续学习再使用新技能 目前版本无界面,只能手动
6、假如已人工介入调整了不同的基础分,就可以检查关闭issues了
let aify = require('aify');
aify.at('pg').ai('issues').ok('check'); // 检查并关闭已解决的相关issue
let rs = aify.at('pg').issues(); // 再查看下issues,应该是没了
console.log(rs); // => []
API
- aify.at(name) - 呼唤某学徒,如果没有会自动招一个,返回学徒对象 name - 学徒名
- aify.learn(...fileOrPaths) - 对学徒aify进行填鸭式教学 fileOrPaths - 技能文件或目录,未传递时自动查找学习当前目录及skills目录内的技能文件
- aify.ai(name, ...keywords) - 指定学徒aify的技能名和特征关键词 name - 技能名 keywords - 技能特征关键词 返回Skill对象
- aify.issues() - 取得指定学徒aify发的issues
- Skill.tip(...keywords) - 提示特征,可以多次调用,重复提示无影响 keywords - 技能特征关键词
- Skill.ok(...args) - 筛选出一个最匹配的技能,传入参数执行,返回执行结果 args - 参数
- 实现
功力传授
,复制就等同传授啦,调整控制本领变得更加灵活方便 - 优化实现,目前框架js代码总共不足500行,我的天啊,难以置信的样子 实际上,功能的增强是通过技能学习运用实现,所以确实不需要多少代码
演练倾囊相授
1、安装 (不保证前后兼容)
npm i aify
2、教学
let aify = require('aify');
aify.at('小程') // 呼叫小程
.ai('自学') // 到npm自学去
.ok(); // 干活吧
呼叫小程,令其自学
3、检查学习成绩
let aify = require('aify');
let rs = aify.at('小程').intro('倾囊相授');
console.log(rs);
可以看到小程已经学会了'倾囊相授'
4、让‘小程’倾囊相授给‘小白’
let aify = require('aify');
let rs = aify.at('小程') // 呼叫小程
.ai('倾囊相授') // 慷慨得很
.ok('小白'); // 开始把全部功力传给‘小白’
console.log(rs); // => true
通常‘小白’最好是不会武功的人才,不然可能会承受不住功力的灌输而无法自控
也就是可能引起ai行为异常,或是传授前后ai行为不一致
所以,安全起见,会检查接受者是否为零功力,必须是白纸一张,做到非其人勿传
5、验证下‘小白’的功力
let aify = require('aify');
aify.at('小白') // 呼叫‘小白’
.ai('编写微服务基础组件') // 很懂的样子
.tip('greenwich', 'eureka') // 必要时可以给些提示
.ok({
clean: true, // 清空重写
build: false, // 写完就行不必编译打包
});
很明显,瞬间‘小白’也会了 '倾囊相授',在想要控制学习本领的版本时会非常有用 比如可以传授给‘小程1.0’、‘小程2.0’等等,在需要时又可以随时at唤出
API
同下
- 为了看起来更加
智能
,改API接口,然后,老版本就淘汰了 .skill() -> .ai() .option() -> .tip() .apply() -> .ok() - 实现
选择性学习
,skill文件可指定aify的目标版本 为了避免消化不良,会放弃学习比框架版本还大的skill技能 仅比较大中版本,及x.y.z
中的x.y
- 实现
自我介绍
,有什么本事必须要能被主人理解 否则乱学现用不可信任反成添乱 - 给
小程
起了个小名pg
,at('pg')就是at('小程'),固化 如同天使
也叫angel
,这是小程的使命 - 改进
决策
标准,评分更全面
让小程干点正事
1、安装 (这回完全不兼容)
npm i aify
2、教学
let aify = require('aify');
aify.at('小程') // 呼叫小程
.ai('自学') // 到npm自学去
.ok(); // 干活吧
呼叫小程,令其智能的去npm自学,至少看起来是很AI
的,而不是以往的'skill'
3、叫小程自我介绍
let aify = require('aify');
let rs = aify.at('小程').intro(); // 罗列学到的全部本事
也可以传入名称进行查看,比如intro(name1, name2)
4、叫小程写个微服务组件
let aify = require('aify');
aify.at('小程') // 呼叫小程
.ai('编写微服务基础组件') // 很智能的样子
.tip('greenwich', 'eureka') // 必要时可以给小程点提示
.ok({
clean: true, // 清空重写
build: false, // 不编译打包
});
其中ok的参数有十多个,都是有缺省值可以省略的 上面是随意写了两个,表示每次都重写,写完不编译打包 瞬间,小程也就写好了
5、已准备java、gradle环境、叫小程写完后并打包试试
let aify = require('aify');
aify.at('小程') // 呼叫小程
.ai('编写微服务基础组件') // 很智能的样子
.tip('greenwich', 'eureka') // 必要时可以给学徒点提示
.ok({
clean: true, // 清空重写
build: true, // 写完还要编译打包
groupId: 'ai.xiaochen', // 小程喜欢的域名
});
恩,小程喜欢有自己的groupId,写好程序立马打包好greenwich-eureka-1.0.0.jar 这样简单的java -jar greenwich-eureka-1.0.0.jar就可以跑起来了
API
- aify.at(name) - 呼唤某学徒,如果没有会自动招一个,返回学徒对象 name - 学徒名
- aify.learn(...fileOrPaths) - 对学徒aify进行填鸭式教学 fileOrPaths - 技能文件或目录,未传递时自动查找学习当前目录及skills目录内的技能文件
- aify.ai(name, ...keywords) - 指定学徒aify的技能名和特征关键词 name - 技能名 keywords - 技能特征关键词 返回Skill对象
- Skill.tip(...keywords) - 提示特征,可以多次调用,重复提示无影响 keywords - 技能特征关键词
- Skill.ok(...args) - 筛选出一个最匹配的技能,传入参数执行,返回执行结果 args - 参数
- 实现了
女娲造人
,不是为了男女搭配,而是多角色各司其职会更利于管理 - 内置实现一位
天使
,名叫angel
,天使仅有天赋,天真无邪,不学人间术 天使会默默提供天赋服务大众,让大家认为好像是自己天生就会了那些技能一样 这是怕人乱教带坏,算是一种自我保护,总之,框架从此有了一位天使
对象 - 实现了
互相使唤
,能at来at去呼唤别人干活了 但不会打太极的话,呼来唤去,小心跳进死胡同 - 实现了
孟婆汤
,所有记忆
按版本号区分不同目录存放,安装新版本后需要重新学习
但以往的记忆
文件不会自动删除,以备万一想较方便的找回
现在得像真的带他们一样,不然可能教错人
1、安装 (不保证兼容嘛)
npm i aify
2、令其(aify)自学
let aify = require('aify');
let rs = aify.skill('自学').apply();
突然间,这位学徒就好像又懂了全部,这位同学是谁?
你喂的一声,叫来的学徒总会是aify
3、招个学徒令其自学
let aify = require('aify');
let xiaochen = aify.at('小程');
xiaochen.skill('自学').apply();
这就是女娲造就小程
了
估计以后小程就是专职写程序
4、叫小程写代码
let aify = require('aify');
let src = aify.at('小程')
.skill('写代码')
.option('用 js 写个 helloworld')
.apply();
console.log(src); // => console.log('hello world');
这也算代码?呵呵,自学的吧
5、让aify叫小程写代码
let aify = require('aify');
let src = aify.at('aify') // 这是aify
.at('小程') // aify呼唤小程写代码
.skill('写代码')
.option('用 js 写个 helloworld')
.apply();
console.log(src); // => console.log('hello world');
看来,这往后学徒们的职责得分清,不然可能一直相互推辞
API
- aify.at(name) - 呼唤某学徒,如果没有会自动招一个 name - 学徒名
- aify.learn(...fileOrPaths) - 对学徒aify进行填鸭式教学 fileOrPaths - 技能文件或目录,未传递时自动查找学习当前目录及skills目录内的技能文件
- aify.skill(name, ...keywords) - 指定学徒aify的技能名和特征关键词 name - 技能名 keywords - 技能特征关键词 返回Skill对象
- Skill.option(...keywords) - 指定特征关键词,可以多次调用,重复指定无影响 keywords - 技能特征关键词
- Skill.apply(...args) - 筛选出一个最匹配的技能,传入参数执行 args - 参数 返回技能函数执行结果
- 实现了
很有天赋
,添加skill文件,增加不少天赋
了嘛,比如airequire
- 按需动态安装引用,不必事前npm install第三方包了自学
- 按关键字检索已发布的npm包,自觉下载学习他人技能 - 实现一项
学习技巧
,懂得下载指定npm包并学习其中技能了 - 实现了
自学
,会去检索含aifyskill
关键字的npm包,挖掘学习他人技能
现在能这样子教学了
1、安装
npm i aify
2、令其自学
let aify = require('aify');
let rs = aify.skill('自学').apply();
突然间,这位学徒就好像懂了全部,潜质有点伟大的味道
3、试用自学本领
let aify = require('aify');
aify.skill('cmd').apply('npm search aifyskill');
成功,学霸啊这是
API
同下
- 开始使用依赖,快速让小学徒拥有好装备
- 实现
不保证向前兼容、不保证向后兼容
,模仿人类,就像小孩吃奶玩耍而大人吃饭劳动一样,不保证兼容 - 实现
爱学习本能
,一安装好吃奶似的学起来 - 实现
天赋
,现在起,安装完就已经会helloworld了 - 实现
天赋可塑性
,就是框架实现了方便扩充天赋的能力,添加skill文件就行
现学可以这样子
1、安装
npm i aify
2、运用helloworld天赋
let aify = require('aify');
let rs = aify.skill('helloworld').apply('world');
console.log(rs); // -> hello world!
无师自通,很神奇的样子
API
同下
- 时间可以停止吗?可以的,看你怎么理解,所以,人工智能,你也可以...为达原理演示效果,特意仅以数百行代码,零依赖的实现...一个
人工智能框架
- 实现技能定义,一个技能就是一个
*.skill
文件 - 实现我们擅长的
填鸭式教学
- 实现技能筛选,不是...是实现技能
决策
,以及技能运用 - 实现教啥会啥,常言道学坏容易学好难,小心别教坏了.
现学现用helloworld
1.1、定义helloworld技能
// helloworld.skill
[name] // 技能名称,忽略大小写
helloworld
[keywords] // 特征关键词,忽略大小写,用空格逗号分号顿号等分隔多个特征
sample
[function] // 一个技能就是一个函数
function hello(name){
return 'hello ' + name;
}
1.2、填鸭式教学
let aify = require('aify');
aify.learn('helloworld.skill');
1.3、技能运用
let aify = require('aify');
let rs = aify.skill('helloworld').apply('world');
console.log(rs); // -> hello world
就是这样的三部曲,小学徒就好像会了helloworld一样
继续教它换个姿势打招呼
2.1、技能
// hi.skill
[name]
helloworld
[keywords]
sample,hi
[function]
function hello(name){
return 'hi ' + name;
}
2.2、教学
let aify = require('aify');
aify.learn('hi.skill');
2.3、运用
let aify = require('aify');
let rs = aify.skill('helloworld')
.option('hi')
.apply('ai');
console.log(rs); // -> hi ai
嗯 ... 孺子可教也
API
- aify.learn(...fileOrPaths) - 对学徒aify进行填鸭式教学 fileOrPaths - 技能文件或目录,未传递时自动查找学习当前目录及skills目录内的技能文件
- aify.skill(name, ...keywords) - 指定学徒aify的技能名和特征关键词 name - 技能名 keywords - 技能特征关键词 返回Skill对象
- Skill.option(...keywords) - 指定特征关键词,可以多次调用,重复指定无影响 keywords - 技能特征关键词
- Skill.apply(...args) - 筛选出一个最匹配的技能,传入参数执行 args - 参数 返回技能函数执行结果
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago