送走最后一车货,最后三个工人,老王吃力的关上大铁门。左手从口袋摸出一盒烟,轻轻一颠,滑落一根,右手娴熟的夹住。掏出打火机,点燃,一丝青烟腾起,萦绕在指头。
夕阳穿过玻璃,照射在伤痕累累的旧机器上,空旷而寂静。面对空无一人的厂房,老王想起父亲带他来厂房的那个清晨:阳光明媚,厂房异常热闹,忙忙碌碌的嘈杂声格外喜庆。
转眼几十年过去了,厂子从织布到纺丝,从生产手套到加工衣服,终究还是走到了关闭的地步。他听说这是低端制造,利润少、污染大。老王不懂这些,但是他心里清楚东西不好卖了,工人也不好招。自己也老了,不愿折腾了,索性关门养老去吧。
老王是不幸的,也是幸运的,时代抛弃了老王,但是留给他一个温暖的归宿。然而,大多数人被时代抛弃时连声招呼都没有。
初见ChatGpt
大清早,我的朋友小叨激动的告诉我,又一个划时代的技术出现了,一个新时代即将来临了。比尔·盖茨、马斯克看了都说牛,你快看看,接着就是一堆链接。浏览一会后,有点明白什么是ChatGpt,直觉这是一个深度神经网络性质的进步。
OpenAI官网对ChatGpt有个描述:”optimizing Language Models for Dialogue”,简单说这是一个持续优化的用于对话的语言模型。
说到语言模型,大家应该会想到NLP(自然语言处理),ChatGpt核心就是一个自然语言处理模型。特殊之处在于:
规模大,拥有1750亿个参数,语言理解能力强;
同时,附加了互联网资源(海量信息库),增加了新特性(文本生产能力),能够以顺滑自然的方式于人类互动聊天。
从当前的信息看,ChatGpt可以编写论文、撰写求职信、编写儿童读物、聊天、写代码等等。根据ChatGpt所展现的能力,给予其时间,加以优化和升级,可以预测ChatGpt未来10年将逐步替代很多职业。
2013年,牛津大学的一项研究表明,未来20年,美国47%的工作岗位可能会被人工智能取代,今年已经是2023年了,未来十年内还会有岗位被持续取代。
容易被ChatGpt代替的岗位
那么,什么样的工作容易被人工智能或ChatGpt替代?一般认为以下三类工作容易被替代。
第一类
运营小编、律师助理、媒体人、法律咨询师、市场分析师、家庭教师等这类注重信息收集、分析、加工的职业。
人工智能在海量信息存储、处理和分析上有着天然优势。
第二类
会计、财务顾问、交易员等这类处理大量数据的工作。
人工智能在数据处理上具有更高的效率。
第三类
公司客服、心里咨询师、电话推销员等这类语言交互工作。
人工智能没有感情,不会疲劳,更适合这类固定场景对话,事实上,当前智能客服已经在市场上被大量使用。
创造新机遇
面对如此严峻的现实,网友不禁要问了,我们的“饭碗”还保得住吗?答案显而易见:保的住,也保不住。
这不取决于你的工作岗位是什么,而取决于你的工作内容是什么。
尽管ChatGpt火爆全网,震惊世人,被誉为“划时代技术、人类科技又一个奇点”。谷歌、微软、苹果、百度、阿里、京东等互联网大厂也纷纷布局自己的AI项目,规划自己的“ChatGpt”蓝图,阵仗之大,气势恢宏。
但是,ChatGpt本质上仍然是一个工具,而不是一个类人智慧体。这种本质的区别决定工具本身不会自发创造价值,只有被人使用后才能创造价值,这点很重要。
举个例子:对于小麦收割而言,全自动大型收割机就是一个划时代的高级小麦收割工具。一套全自动大型收割机可以轻松完成几十人、上百人的收割工作,毫无疑问,它减少了人工收割的需求,但是它并没有消灭小麦收割这份工作。
第一,它创造了新的岗位。一套全自动收割机仍然需要很多人参与才能工作,如:驾驶员、维修人员、生产工人等。
第二,它无法满足所有场景的收割任务。受限于地形,丘陵、梯田等这类特殊地形的小麦收割任务,仍然需要人工收割。
ChatGpt的局限
ChatGpt就是一个人工智能领域的“全自动大型收割机”,它能替代一部人人的工作,也会创造出新的岗位。
ChatGpt展示出了较高的对话天赋,能根据人的对话不断学习、优化自己,具有不断“进化”能力,这点较于之前的对话模型有长足的进步。随着越来越多的人和它对话,帮助它学习进步,在肉眼可见的未来,人工智能客服会进一步普及。
但是,和当前所有的智能客服一样,它依旧无法处理更复杂的问题对话。我们还是需要人来处理一些特殊的、复杂的场景,比如贵宾客户、特殊事故等。
因为现阶段的人工智能于人类大脑相比,智慧程度依旧相距甚远。面对开放的、充满不确定性的现实世界,人工智能宛如“人工智障”。
就拿ChatGpt最擅长的聊天功能来说吧,对于语意的理解上仍然有巨大的缺陷。如:“老王的媳妇人不错,我该不该出手,是要出什么手?”“生死由命富贵在天,是要干还是要放弃?”“你应该替他着想,是尊重他,给他自由,还是关注他,及时劝阻他?”等等。这些话在不同的场景,由不同人说出来,所表达的意思会截然相反。
正如一千个读者就有一千个哈姆雷特一样。不同的经历、心境、价值观、身份和文化等,都影响着我们对同一个信息具体意思的理解,这是一个ChatGpt所不能够应对、处理和理解的。
在天然丢失掉语境、语气、语速、语调这类对语意表达至关重要的信息后,ChatGpt要想正确理解所有语意将毫无可能。get不到这些,ChatGpt就无法聊更有思想深度的话题,就宛如一个不谙世事的小孩,可以聊天,但是不会深入聊天,也注定ChatGpt这个现象级的事物会慢慢淡出大部分人的视野。
要解决这个问题,我们需要千千万万个“ChatGpt”,和我们共同生活、经历、学习、成长,形成和我们相似的价值体系。然而,这些以当前计算机算力是无法满足和实现的。只有量子计算这类带来算力飞跃提升的技术实现后,我们才具备人工智能小型化、大规模普及的前提,而这个前提乐观估计还需要二十年甚至更多。
把握工具
工具的使用门槛会阻碍工具的普及,越高级的工具驾驭门槛越高。这个门槛可以是学习成本、操作复杂度、自控能力、信息表达能力等。
比如:
Excle有很强大的功能,但是很多同事依旧只会使用基础的数据存储;
搜索引擎功能强大,但是很多人都不知道如何使用搜索引擎能理解的方式表达自己的问题,所以通常搜到的东西驴唇不对马嘴,在浏览一堆无效信息后,大骂一句:FUCK后关闭了网页。
网络课程方便高效,想学什么学什么,想听那段听那段。知识就是财富,面对互联网海量的财富,有些人勤奋、刻苦,修炼成技术大牛,有些人熬夜、刷剧,养成了200斤的大胖子。我们有多少人是抱着学习的目的打开电脑,然后游戏、可乐、爆米花。
这些就是高级工具的使用门槛,越高级的工具对人的要求越高。很多人喜欢用初级的工具,因为它们简单易上手、对人的要求少:
给你根木棍,3岁以上的小孩就能驾驭;
给你一本书,你只有看或者不看的选择,不会面临其他诱惑;
给你一台电脑,可做的事情几何倍数的增加。
面对这些诱惑,如何心静如水持之以恒,决定了你是否能够驾驭高级工具。现实是,大多数人都不具备这种能力或者这种能力较弱。所以,我们普通人读书时,要去图书馆、要营造良好的学习氛围,要关闭手机,远离电脑。
这其实并不可耻,面对诱惑能心如止水本就是对圣人才有的要求,有时我们能拿起木棒,就已经比很多人优秀了。
复杂信息的鉴真能力,使得大多数人无法有效使用ChatGpt这类高级工具。ChatGpt有着让人耳目一新的信息收集和内容生成功能确,如完成一个报表,解决一道数学题,搜集某厂商最近五年的收入数据等。这些功能确实很好用,很诱人。但是,如果这些信息不保证正确,对你还有多少价值?
之前听到一个笑话:一个应聘者说他的特长就是计算速度特别快,面试官问他:49乘以39等于多少?应聘者想都没想回答:89!面试官白了他一眼说:你这也差太多了。应聘者说:你就说快不快吧?面试官说:快,但是没用。
如果不能保证信息正确,再便捷、强大的信息收集和加工能力都是鸡肋。ChatGpt也是如此,现在很多人已经发现ChatGpt的回答有时违背基本的常识。比如:有人问它:“出淤泥而不染,濯清莲而不妖”出自哪里,它说《红楼梦》。这也是当今人工智能的一大弱点,无法保证信息的准确性。
而我们要在工作中使用它,势必要对它返回的信息进行鉴真。而信息鉴真能力所需要的的分析思维能力,以及所消耗的脑力是大部分人所不具备、不愿去做的。
如何使用ChatGpt
尽快如此,能够拥抱新工具,我们才能走的更高、更远。俗话说站在巨人的肩膀上才能看到更高,面对新工具,与其处于被替代的恐惧中,不如了解并使用它、借助它,完成你所做的基础工作、低级任务,节约时间和精力用于更需要分析、思考的工作和任务上。
就拿ChatGpt、搜索引擎来说,我们在使用这些工具解决问题前,应优先搞清楚我们的问题到底是什么,将问题拆解成若干小的具体的任务。将其中的信息收集、问题案例等信息收集和初步加工工作交给这些工具完成。通过正向反向信息收集、同类信息类别、多渠道信息比对、原始信息溯源等方式交叉对得到的信息进行鉴真。
然后基于这些信息,通过自己的方法论加工处理,生成更高级的内容、成果。
就拿ChatGpt是否能替代我们这个问题来说:
我们首先要找到ChatGpt的原始出处,了解发布者对ChatGpt的介绍以及发布ChatGpt的初衷等信息。
然后,搜索ChatGpt的正面信息和负面(反向)信息,了解正向评价都是什么,负面评价又有那些。对比找出矛盾点,根据矛盾点搜索相关解释。
这样,我们就会全面的了解到ChatGpt是什么以及它能完成那些事情,存在那些问题。
了解到这些,我们就能轻易发现,ChatGpt以及它的衍生品后续会慢慢替代低质量的工作内容,如简单的信息收集整理,处理规则简单明确的工作。相关工作的人如果不提高自己的工作技能和质量,势必会被替代。
总结
时代在进步,技术在发展,桑海沧田的故事时刻都在发生。忽视这种变化,享受当下的安逸,就要坦然接受潜在的危机。放不下心中不甘,那就立刻行动,迈出脚步。文末,借用一个历史名场面形容下我们当下的处境吧。
卢比孔河的对岸是权利的盛宴,还是致命的陷阱,对于凯撒而言已经不重要。骰子已经掷下,唯有前行,方能始终。于历史不同的是,他有的选择,而我们普通人只会被时代裹挟着跨过卢比孔河。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel
只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您
我有:When/^(?:|I)follow"([^"]*)"(?:within"([^"]*)")?$/do|link,selector|with_scope(selector)doclick_link(link)endend我打电话的地方:Background:GivenIamanexistingadminuserWhenIfollow"CLIENTS"我的HTML是这样的:CLIENTS我一直收到这个错误:.F-.F--U-----U(::)failedsteps(::)nolinkwithtitle,idortext'CLIENTS'found(Capybara::Element