0.7.9 • Published 5 years ago

aify v0.7.9

Weekly downloads
4
License
MIT
Repository
github
Last release
5 years ago

aify

NPM version License

-------------------------------------- 培养“人工智能学徒”,让它写代码去 --------------------------------------

一时无从谈起,即兴,查看成长履历

演示理想

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 - 参数 返回技能函数执行结果
0.7.9

5 years ago

0.7.8

5 years ago

0.7.7

5 years ago

0.7.6

5 years ago

0.7.5

5 years ago

0.7.4

5 years ago

0.7.3

5 years ago

0.7.2

5 years ago

0.7.1

5 years ago

0.6.10

5 years ago

0.6.9

5 years ago

0.6.8

5 years ago

0.6.7

5 years ago

0.6.6

5 years ago

0.6.5

5 years ago

0.6.4

5 years ago

0.6.3

5 years ago

0.6.2

5 years ago

0.6.1

5 years ago

0.5.5

5 years ago

0.5.4

5 years ago

0.5.3

5 years ago

0.5.2

5 years ago

0.5.1

5 years ago

0.4.7

5 years ago

0.4.6

5 years ago

0.4.5

5 years ago

0.4.4

5 years ago

0.4.3

5 years ago

0.4.2

5 years ago

0.4.1

5 years ago

0.3.12

5 years ago

0.3.11

5 years ago

0.3.10

5 years ago

0.3.9

5 years ago

0.3.8

5 years ago

0.3.7

5 years ago

0.3.6

5 years ago

0.3.5

5 years ago

0.3.4

5 years ago

0.3.3

5 years ago

0.3.2

5 years ago

0.3.1

5 years ago

0.2.10

5 years ago

0.2.9

5 years ago

0.2.8

5 years ago

0.2.7

5 years ago

0.2.6

5 years ago

0.2.5

5 years ago

0.2.4

5 years ago

0.2.3

5 years ago

0.2.2

5 years ago

0.2.1

5 years ago

0.1.3

5 years ago

0.1.2

5 years ago

0.1.1

5 years ago

0.0.3

5 years ago

0.0.2

5 years ago

0.0.1

5 years ago