npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

aify

v0.7.9

Published

市井玩味的人工智能框架,培养“人工智能学徒”,让它写代码去,就是这么AI

Downloads

140

Readme

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'});

成长履历

  • [x] 暂且提供简陋WEB界面,方便管理查看技能、issues,更新技能的有效状态
  • [x] 打开或关闭技能时,顺便检查,自动打开或关闭相关issues
  • [x] 实现从指定git仓库自学

开启WEB服务

1、安装 (不保证前后兼容)

npm i aify

2、开启WEB服务

let aify = require('aify');
aify.ai('Start-Web-Server')
    .ok(8080); // 端口号缺省时等同8080

可以浏览器打开看了

API

同下

  • [x] 学习过程实现勤学好问,碰到容易混淆的新技能,必提issue 比如学了两个名称和关键词都一样,但函数不同的两个技能,这就很容易混淆 通常应该避免这样乱学,这时会提issue,等待人工介入调整
  • [x] 添加接口实现issues查看功能
  • [x] 所学新技能若和天赋有混淆,忽略,无issue,先天功能自动让贤,任你学 使用技能也是一样,后天所学优先使用,无技可施时才会求助先天天赋 这是仿意识行为的设计
  • [x] 技能运用实现严谨决策,对于容易引起误解的决策,输出警告提示 同名不同关键词的多个技能,筛选时会先评分,如果得分一样也会容易误解 这时默认会优先使用其中最早所学的技能,严谨起见,会输出警告提醒正确使用

演示勤学好问

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 - 参数
  • [x] 实现功力传授,复制就等同传授啦,调整控制本领变得更加灵活方便
  • [x] 优化实现,目前框架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

同下

  • [x] 为了看起来更加智能,改API接口,然后,老版本就淘汰了 .skill() -> .ai() .option() -> .tip() .apply() -> .ok()
  • [x] 实现选择性学习,skill文件可指定aify的目标版本 为了避免消化不良,会放弃学习比框架版本还大的skill技能 仅比较大中版本,及x.y.z中的x.y
  • [x] 实现自我介绍,有什么本事必须要能被主人理解 否则乱学现用不可信任反成添乱
  • [x] 给小程起了个小名pg,at('pg')就是at('小程'),固化 如同天使也叫angel,这是小程的使命
  • [x] 改进决策标准,评分更全面

让小程干点正事

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 - 参数
  • [x] 实现了女娲造人,不是为了男女搭配,而是多角色各司其职会更利于管理
  • [x] 内置实现一位天使,名叫angel,天使仅有天赋,天真无邪,不学人间术 天使会默默提供天赋服务大众,让大家认为好像是自己天生就会了那些技能一样 这是怕人乱教带坏,算是一种自我保护,总之,框架从此有了一位天使对象
  • [x] 实现了互相使唤,能at来at去呼唤别人干活了 但不会打太极的话,呼来唤去,小心跳进死胡同
  • [x] 实现了孟婆汤,所有记忆按版本号区分不同目录存放,安装新版本后需要重新学习 但以往的记忆文件不会自动删除,以备万一想较方便的找回

现在得像真的带他们一样,不然可能教错人

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 - 参数 返回技能函数执行结果
  • [x] 实现了很有天赋,添加skill文件,增加不少天赋了嘛,比如 airequire - 按需动态安装引用,不必事前npm install第三方包了 自学 - 按关键字检索已发布的npm包,自觉下载学习他人技能
  • [x] 实现一项学习技巧,懂得下载指定npm包并学习其中技能了
  • [x] 实现了自学,会去检索含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

同下

  • [x] 开始使用依赖,快速让小学徒拥有好装备
  • [x] 实现不保证向前兼容、不保证向后兼容,模仿人类,就像小孩吃奶玩耍而大人吃饭劳动一样,不保证兼容
  • [x] 实现爱学习本能,一安装好吃奶似的学起来
  • [x] 实现天赋,现在起,安装完就已经会helloworld了
  • [x] 实现天赋可塑性,就是框架实现了方便扩充天赋的能力,添加skill文件就行

现学可以这样子

1、安装

npm i aify

2、运用helloworld天赋

let aify = require('aify');
let rs = aify.skill('helloworld').apply('world');
console.log(rs); // -> hello world!

无师自通,很神奇的样子

API

同下

  • [x] 时间可以停止吗?可以的,看你怎么理解,所以,人工智能,你也可以...为达原理演示效果,特意仅以数百行代码,零依赖的实现...一个人工智能框架
  • [x] 实现技能定义,一个技能就是一个*.skill文件
  • [x] 实现我们擅长的填鸭式教学
  • [x] 实现技能筛选,不是...是实现技能决策,以及技能运用
  • [x] 实现教啥会啥,常言道学坏容易学好难,小心别教坏了.

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