ChatGPT 作為一個(gè)自然語言處理工具请敦,已經(jīng)火了一段時(shí)間料祠。對(duì)待 ChatGPT
不同人有著不同的看法,新事物的出現(xiàn)必然如此权均。利益相關(guān)者形成 抵制
和 狂熱
兩極顿膨;嘩眾取寵者蹭蹭熱度,問些花活叽赊,博人眼球恋沃;獵奇者嘗嘗鮮,起哄者挑挑火必指;實(shí)用派在思考新事物的價(jià)值和勞動(dòng)力:
對(duì)于那些拿 ChatGPT 當(dāng)百科全書來用的囊咏,或詢問哲學(xué)問題的朋友,我只想說:
對(duì)于一個(gè)問題塔橡,用錯(cuò)誤的工具去處理得出錯(cuò)誤的結(jié)果梅割,是一件很正常的事。
1. ChatGPT 的特點(diǎn)和劣勢(shì)
ChatGPT 最大的特點(diǎn)是基礎(chǔ)的語義分析葛家,讓計(jì)算機(jī)對(duì)自然語言進(jìn)行處理并輸出户辞。在一段會(huì)話中,上下文是有效的癞谒,所以可以類似于交流底燎。
問這個(gè)問題刃榨,它會(huì)怎么回答?
這種獵奇的心理书蚪,會(huì)讓一部分人期望嘗試喇澡;有稀奇古怪或愚蠢的回答,也可以滿足人類對(duì)人工智障的優(yōu)越感殊校;分享問答晴玖,也讓 ChatGPT 擁有一絲的社交屬性。蹭熱度为流、獵奇呕屎、起哄三者可以用它填充一塊內(nèi)心的空虛,也僅止步于此敬察。
ChatGPT 目前的劣勢(shì)也很明顯秀睛,由于數(shù)據(jù)是幾年前的,所以時(shí)效性不強(qiáng)莲祸;對(duì)很多問題回答的精準(zhǔn)度并不高蹂安,對(duì)于盲目相信的人,或判別力較差的朋友并不友好锐帜;最后一點(diǎn)田盈,非常重要:對(duì)于工具而言,如果對(duì)其依賴性太高缴阎,脫離工具時(shí)允瞧,會(huì)讓人的主觀能動(dòng)性降低。
2. 代碼的生成與規(guī)則誘導(dǎo)
如下所示蛮拔,讓它生成一個(gè) Dart 的 User 類:
生成一個(gè) dart 類 User述暂, 字段為 : 可空 int 型 age 、final 非空 String 型 username 默認(rèn)值為 “unknown”
雖然代碼給出了建炫,但是可以看出畦韭,這是空安全之前的代碼「氐可能很多人到這里廊驼,覺得數(shù)據(jù)陳舊沒什么用途,就拜拜了您嘞惋砂。
但它是一個(gè)有會(huì)話上下文的自然語言處理工具,你可以讓它理解一些概念绳锅。就像一個(gè)新員工西饵,上班第一天出了一點(diǎn)小錯(cuò)誤,你是立刻開除他鳞芙,還是告訴他該怎么正確處理眷柔。如下所示期虾,給了它一個(gè)概念:
Dart 新版本中可空類型定義時(shí),其后需要加 ?
如下所示驯嘱,你就可以在當(dāng)前的會(huì)話環(huán)境中讓它生成更多字段的類型:
用 Dart 新版本生成一個(gè) dart 類 User镶苞,字段為: final 非空 int 型 age , final 非空 String 型 username 默認(rèn)值為 “unknown” 鞠评, final 非空 int 型 height茂蚓,可空 String型info,final 非空 int 型 roleId
如果存在問題,可以繼續(xù)進(jìn)行指正剃幌。比如 :
用 Dart 新版本聋涨,有默認(rèn)值的字段不需要使用 required 關(guān)鍵字,其他非空字段需要
所以對(duì)于 ChatGPT 而言负乡,我們可以把它看成一個(gè)有一些基礎(chǔ)知識(shí)的牍白,可為我們免費(fèi)服務(wù)的員工,簡(jiǎn)稱:奴隸抖棘。當(dāng)它做錯(cuò)事時(shí)茂腥,你罵它,責(zé)備它切省,拋棄它是毫無意義的最岗,因?yàn)樗菣C(jī)器。我們需要去 誘導(dǎo) 它理解数尿,在當(dāng)前工作環(huán)境中正確的事仑性。
這樣在當(dāng)前會(huì)話中,它就可以理解你訴說的規(guī)則右蹦,當(dāng)用它創(chuàng)建其他類時(shí)诊杆,他就不會(huì)再犯錯(cuò)。并且不排除它會(huì)基于你的規(guī)則何陆,去完善自身的 知識(shí)儲(chǔ)備 晨汹,當(dāng)眾多的人用正確的規(guī)則去 誘導(dǎo) 它,這就是一個(gè)善意的正反饋贷盲。
3. 解決方案的概念
這里從生成的代碼 不支持空安全
到 支持空安全
淘这,其實(shí)只用了幾句話。第一句是反饋測(cè)試巩剖,看看它的 默認(rèn)知識(shí)儲(chǔ)備
生成一個(gè) dart 類 User铝穷, 字段為 : 可空 int 型 age 、final 非空 String 型 username 默認(rèn)值為 “unknown”
當(dāng)它的輸出不滿足我們的需求時(shí)佳魔,再進(jìn)行 誘導(dǎo) :
Dart 新版本中可空類型定義時(shí)曙聂,其后需要加 ?
用 Dart 新版本,有默認(rèn)值的字段不需要使用 required 關(guān)鍵字鞠鲜,其他非空字段需要
在誘導(dǎo)完成之后宁脊,它就可以給出滿足需求的輸出断国。這種誘導(dǎo)后提供的會(huì)話環(huán)境,輸出是相對(duì)穩(wěn)定的榆苞,完成特定的任務(wù)稳衬。這就是為不確定的輸出,添加規(guī)則坐漏,使其輸出趨近 冪等性
薄疚。一旦一項(xiàng)可以處理任務(wù)的工具有這種性質(zhì),就可以面向任何人使用仙畦∈涮椋可以稱這種誘導(dǎo)過程為解決某一問題的一種 解決方案。
比如上面的三句話就是:根據(jù)類信息生成 Dart 數(shù)據(jù)類型慨畸,并支持空安全莱坎。在當(dāng)前環(huán)境下,就可以基于這種方案去處理同類的任務(wù):
用 Dart 新版本生成一個(gè) dart 類 TaskResult寸士,字段為: final 非空 int 型 cost 檐什, final 非空 String 型 taskName 默認(rèn)值為 “unknown” , final 非空 int 型 count弱卡,可空 String型taskInfo,final 非空 String型 taskCode
你拷貝代碼后乃正,就是可用的:
4. Dart 數(shù)據(jù)類生成器完善
上面生成 Dart 數(shù)據(jù)類比較簡(jiǎn)單,下面繼續(xù)拓展婶博,比如對(duì)于數(shù)據(jù)類型而言 copyWith
瓮具、toJson
、fromJson
的方法自己寫起來比較麻煩凡人。如果現(xiàn)在告訴它:
為上面的類提供 copyWith名党、toJson 、 fromJson 方法
它會(huì)進(jìn)行提供挠轴,說明它具有這個(gè) 默認(rèn)知識(shí)儲(chǔ)備
传睹,但可以看到 copyWith
方法中的字段不符合空安全:
此時(shí)可以訓(xùn)練它的 類型可空 的意識(shí),讓它主動(dòng)處理類似的問題岸晦,也可以直白的告訴它
將上面的 copyWith 方法入?yún)㈩愋秃蠹?? 號(hào)
這樣生成的 TaskResult
類就可以使用了:
class TaskResult {
final int cost;
final String taskName;
final int count;
final String? taskInfo;
final String taskCode;
TaskResult({
required this.cost,
this.taskName = 'unknown',
required this.count,
this.taskInfo,
required this.taskCode,
});
TaskResult copyWith({
int? cost,
String? taskName,
int? count,
String? taskInfo,
String? taskCode,
}) {
return TaskResult(
cost: cost ?? this.cost,
taskName: taskName ?? this.taskName,
count: count ?? this.count,
taskInfo: taskInfo ?? this.taskInfo,
taskCode: taskCode ?? this.taskCode,
);
}
Map<String, dynamic> toJson() {
return {
'cost': cost,
'taskName': taskName,
'count': count,
'taskInfo': taskInfo,
'taskCode': taskCode,
};
}
static TaskResult fromJson(Map<String, dynamic> json) {
return TaskResult(
cost: json['cost'] as int,
taskName: json['taskName'] as String,
count: json['count'] as int,
taskInfo: json['taskInfo'] as String,
taskCode: json['taskCode'] as String,
);
}
}
5. 代碼生成字符串 與 ChatGPT 生成字符串
對(duì)于一些相對(duì)固定的代碼欧啤,可以使用代碼邏輯,拼接字符串來生成启上。如下所示邢隧,通過對(duì)類結(jié)構(gòu)的抽象化,使用對(duì)象進(jìn)行配置冈在,輸出字符串府框。我們來思考一下,這和 ChatGPT 生成代碼的區(qū)別。
首先迫靖,使用代碼生成代碼是一種完全的 冪等行為 。也就是說任何人兴使、在任何時(shí)間系宜、任何空間下,使用相同的輸入发魄,都可以獲取到相同的輸出盹牧,是絕對(duì)精準(zhǔn)的。其產(chǎn)生代碼的行為邏輯是完全可控的励幼,人的內(nèi)心是期待確定性的汰寓。
而 ChatGPT 對(duì)自然語言的理解,你可以用語言去引導(dǎo)它輸出一些你的需求苹粟,比如 :
以json 格式生成 10 句連續(xù)的中文對(duì)話有滑,key 為 content包括。另外 time 字段為時(shí)間戳 嵌削,type 字段1,2 隨機(jī)
其實(shí)沒有什么孰強(qiáng)孰弱毛好,只是使用場(chǎng)景的不同而已。刀在不同人的手里有不同的用法苛秕,人是生產(chǎn)生活的主體肌访,工具只有服務(wù)的屬性。駕馭工具艇劫,讓它產(chǎn)生實(shí)用的價(jià)值吼驶,才是工具存在的意義。好了店煞,本文到這里就扯完了蟹演,感謝觀看 ~
作者:張風(fēng)捷特烈
鏈接:https://juejin.cn/post/7197584339213762619