背景
在去年十二月到现如今,也已经过去了几个月,可我们的ChatGPT仍然热度不减,甚至带动了一批行业发展,有些人更是利用它赚得盆满钵满,但作者却一直对其不甚了解,注册账号要国外手机号码,有成本,一些人做的小程序也是很容易挂掉,都让我不是很想去使用它。
直到大数据也开始对作者本人下手,刷到的视频,看到的文章都是说用这个ChatGPT如何好,还已经降低门槛,国内也出现了许多这方面技术的公开,总之就是突出一个使用简单就是了,所以,本周末(3.11-3.12),作者利用空余时间进行探索,去看看到底是否降低了门槛?
探索结果
使用前提:你得有个神秘上网方法,让我们可以正常的访问google之类的(作者目前无法避免这一步骤)。
作者首先看了我们站内的油壶大佬文章(OpenAI 推出超神 ChatGPT 注册攻略来了 – 掘金 (juejin.cn))以及下面的评论,基本得出注册还是有一定门槛的,至少去年就如此了,首先要用国外手机号码接受短信验证,就得花money,虽然当时很少,但评论区很多都是失败了,而且注册成功也很容易ip原因访问被拒,反正结论就是比较麻烦,后面又看了另一篇人气较高的文章(ChatGPT保姆级教程,一分钟学会使用ChatGPT! – 掘金 (juejin.cn)),其实和油壶的文章差不多,不过更新一些,最终作者也忍不住去试着注册,作者试着用了一刀,然后绷不住了,网站上说是还有20分钟的那种,但实际最低要租4小时了,这就等于我的一刀很多国家都不够用的(3月16日更新:网站回到了20分钟的便宜模式):
于是作者狠心再下一刀,然后成功注册了openAI,这才开始正式使用ChatGPT,而且也可以去用它的API,好像之前看的文章说有18刀免费额度,可是现在我上面看是只有5刀的免费额度了:
而我们如果想使用它的api去接入我们开发中,根据openAI的官方报价,是每1000次token收0.002刀,据各大平台文章的说法,大概是750单词就1000token(官方提供了检查工具OpenAI API):
而我们的ChatGPT就是基于gpt系列的gpt-3.5实现的。
当然,如果是想体验更全更完整的chatGPT对话服务,就要每月花上20刀去享用它的plus服务(还是不了解有什么用,我感觉普通的也挺好的)。
使用体验
目前来说,普通服务已经能够用来满足我们尝鲜了,感觉可以回答但内容不是很全,至少我提问的东西它写了,但没完全写完:
我们可以再叫它接着写,它就能写完:
还给我们提供了相关的说明解释,非常贴心:
下面贴上它给的代码:
class FireworksAnimationView(context: Context?, attrs: AttributeSet?) : View(context, attrs) {
private val fireworksList = mutableListOf<Firework>()
private val paint = Paint(Paint.ANTI_ALIAS_FLAG)
private val random = Random()
private var animationDuration = 3000L
private var timer: CountDownTimer? = null
// Firework attributes
private var fireworkCount = 6
private var fireworkSize = 50f
private var fireworkColor = Color.WHITE
private var fireworkRadius = 10f
// Explosion attributes
private var explosionCount = 30
private var explosionSize = 5f
private var explosionColor = Color.YELLOW
init {
paint.color = fireworkColor
paint.style = Paint.Style.FILL
}
fun start() {
timer?.cancel()
timer = object : CountDownTimer(animationDuration, 1000 / 60) {
override fun onTick(millisUntilFinished: Long) {
fireworksList.forEach { firework ->
firework.update()
}
invalidate()
}
override fun onFinish() {
start()
}
}.start()
}
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
fireworksList.forEach { firework ->
paint.color = firework.color
canvas?.drawCircle(firework.x, firework.y, fireworkSize, paint)
firework.explosions.forEach { explosion ->
paint.color = explosion.color
canvas?.drawCircle(explosion.x, explosion.y, explosionSize, paint)
}
}
}
override fun onTouchEvent(event: MotionEvent?): Boolean {
if (event?.action == MotionEvent.ACTION_DOWN) {
createFirework(event.x, event.y)
}
return true
}
private fun createFirework(x: Float, y: Float) {
val firework = Firework(x, y, fireworkColor)
firework.explosions.addAll(createExplosions(firework))
fireworksList.add(firework)
}
private fun createExplosions(firework: Firework): List<Explosion> {
val explosions = mutableListOf<Explosion>()
for (i in 1..explosionCount) {
val explosionX = random.nextInt((fireworkSize * 2).toInt()) - fireworkSize + firework.x
val explosionY = random.nextInt((fireworkSize * 2).toInt()) - fireworkSize + firework.y
val explosion = Explosion(explosionX, explosionY, explosionColor)
explosions.add(explosion)
}
return explosions
}
inner class Firework(var x: Float, var y: Float, val color: Int) {
val explosions = mutableListOf<Explosion>()
private val speed = 10f
private var acceleration = 1.05f
fun update() {
y -= speed
speed *= acceleration
if (speed > 50f) {
explode()
fireworksList.remove(this)
}
}
private fun explode() {
for (explosion in explosions) {
explosion.start()
}
}
}
inner class Explosion(val startX: Float, val startY: Float, val color: Int) {
var x = startX
var y = startY
private var radius = fireworkRadius
private var alpha = 1f
private var duration
//接着写...
private var time = 0f
private var totalTime = 1.5f
fun start() {
ValueAnimator.ofFloat(0f, totalTime).apply {
duration = (totalTime * 1000).toLong()
addUpdateListener {
time = it.animatedValue as Float
// Update position
val fraction = time / totalTime
x = startX + (fireworkRadius * fraction * cos(fraction * 6.28f))
y = startY + (fireworkRadius * fraction * sin(fraction * 6.28f))
// Update alpha and radius
alpha = 1 - time / totalTime
radius = fireworkRadius * alpha
invalidate()
}
start()
}
}
fun isAlive(): Boolean {
return time < totalTime
}
}
给的解释:
这段代码创建了一个自定义的 View,名为 `FireworksAnimationView`,用于显示烟花动画效果。您可以在您的布局文件中添加该视图,并通过调用 `start()` 方法来开始动画。
该代码使用了面向对象的设计,定义了 `Firework` 和 `Explosion` 两个类来表示烟花和爆炸效果。在 `onTouchEvent` 方法中,当用户点击屏幕时,会创建一个新的 `Firework` 对象,并加入到 `fireworksList` 中。在 `onDraw` 方法中,会遍历 `fireworksList` 中的所有烟花,并依次绘制它们及其爆炸效果。
`Firework` 类表示一个烟花对象,它具有 `x`、`y` 坐标、颜色等属性,以及一个 `explosions` 列表,用于存储它的爆炸效果。它还定义了一个 `update` 方法,用于更新烟花的位置和速度,并在烟花的速度达到一定值时触发爆炸效果。爆炸效果由 `Explosion` 类来表示,它具有起始坐标、颜色、半径等属性,以及一个 `start` 方法,用于开始爆炸动画。
该代码使用了 `ValueAnimator` 类来实现爆炸动画效果。在 `Explosion` 类的 `start` 方法中,会创建一个 `ValueAnimator` 对象,并使用它来更新爆炸效果的位置、透明度和半径。在 `Explosion` 类的 `isAlive` 方法中,会检查当前爆炸效果是否还在播放中。
您可以根据自己的需要来调整烟花和爆炸效果的属性,例如烟花数量、大小、颜色、半径等等。同时,您也可以添加更多的属性和方法来扩展该代码,并实现更丰富的烟花动画效果。
当然,作者也没去验证这段代码是否可行,因为也是仅仅去体验一把,ai的能力。
GPT系列的发展
目前看到几个视频和文章的评论区,都说国内目前很多套壳ChatGPT其实都是使用免费的开源GPT-3的api服务的(未查证,但作者查到GPT-3并没有开源,可能国内有一些复现的比较好的),而我们现在说的很厉害的ChatGPT,其实是基于gpt-3.5的,更加强大,而且数据更全,虽然数据也就收录到2021,你如果问它2022的事情,它是不知道的,也有可能和你撒谎乱说。
而据资料显示,GPT-3指的是生成型预训练变换模型3(英语:Generative Pre-trained Transformer 3,简称GPT-3)是一个自回归语言模型,为有史以来参数最多的神经网路模型,已经在2020年就被微软获得研制它的openAI公司的独家授权,而我们的GPT3.5则是基于3微调出来的,而且因为训练方式不同,得出的模型不同,更为强大,最后是ChatGPT,则是基于GPT-3.5,但使用更完整的 人类反馈强化学习(RLHF) 去训练得到的,它能够准确理解我们问的问题,还能够将对话记住(比如作者之前的“接着说”)且按此调整内容,而其中的包括承认错误、纠正错处和拒绝不当要求等较为复杂的互动内容,更加符合人类道德要求的训练方式,以达到更接近真人的效果,这也是之前提到的模型GPT-3所没有的能力。
(资料来源:GPT-3是什么,GPT-3和GPT3.5、ChatGPT是什么关系? – 爱绿豆 (iludou.com))
而根据最新消息透露,3月9日德国微软CTO在一场AI活动中表示GPT-4将于下周发布,可以更好的服务人类,这也说明AI技术发展确实很猛。
人工智能领域的探知
人工智能发展已经很长时间了,它所涉及的领域很多很复杂,有的已经在我们身边,比如我自己就开发过关于智能识别模块的业务需求,不过我也仅仅是接入公司的智能识别库而已,也就是不知道内部的算法是什么。
除此以外,通过我的朋友我知道了他们人工智能在研究生阶段有着车辆重识别和行人重识别等等这些课题,查询资料后我发现都是利用各种算法(神经网络,深度学习,人在回路之类的)让AI更加强大,让它对相应的行业领域更为适应,也更为专精,而我们大多数开发或应用层面仍然只是去调用这个算法库去迭代数据,让操作更变得为简单,而更多的普通人只是去享受这些AI能力带来的服务升级。
但人工智能全是好的吗?在作者眼中也不尽然,因为他们确确实实让很多重复性工作或者随着它的进步,让我们很多简单性的工作不需要人参与了,这就造成了短暂性的很多人失业,因为长久来说,AI也带来了很多就业机会,但目前来说,产业的升级会淘汰一部分岗位,就如之前的工业化一样,那如何去适应这一阶段也是很多决策者需要考虑的,我们只能去面对它,相信就如人在回路离不开人这一条件,AI的发展肯定也是需要大量的劳动力去改善它的。
思考结束,再回归我们的正文,人工智能现如今已经是一个庞然大物,甚至在学术界据我的朋友所说,发表的论文甚至有饱和现象了,所以各行各业的人工智能也是五花八门,再加上近年来量子计算的发展加持与数据量足量的迭代,感觉不久的未来AI应该还会有一次大升级,是否会出现如《流浪地球》第二部中的moss也不无可能。
尾声
其实本来想着以chatGPT的api接入安卓app例子来结束的,但作者目前还没做好,加上作者最近也在品读阿西莫夫的银河帝国系列书籍,所以就发了一些感触。其实AI技术的大发展和我们从手工到机器再到大机器时代的发展都是差不多的,重要的是我们是否能够去面对它,或者换个思路去利用好它们,是否在面对真正强大起来的AI时能让它们去遵循着“机器人三大定律”(其实还有第零定律:机器人必须保护人类的整体利益不受伤害),而且是否这样的定律也有着不足,需要适应当下,这些想法可能在不久就真的要考虑起来了。
本文正在参加「金石计划」