Flutter ChatGPT代碼生成器方案概念
ChatGPT
ChatGPT 作為一個(gè)自然語言處理工具,已經(jīng)火了一段時(shí)間。對待 ChatGPT
不同人有著不同的看法,新事物的出現(xiàn)必然如此。利益相關(guān)者形成 抗拒 和 狂熱 兩極;嘩眾取寵者蹭蹭熱度,問些花活,博人眼球;獵奇者嘗嘗鮮,起哄者挑挑火;實(shí)用派在思考新事物的價(jià)值和勞動力:
對于那些拿 ChatGPT 當(dāng)百科全書來用的,或詢問哲學(xué)問題的朋友,我只想說:
對于一個(gè)問題,用錯誤的工具去處理得出錯誤的結(jié)果,是一件很正常的事。
1. ChatGPT 的特點(diǎn)和劣勢
ChatGPT 最大的特點(diǎn)是基礎(chǔ)的語義分析,讓計(jì)算機(jī)對自然語言進(jìn)行處理并輸出。在一段會話中,上下文是有效的,所以可以類似于交流。
問這個(gè)問題,它會怎么回答?
這種獵奇的心理,會讓一部分人期望嘗試;有稀奇古怪或愚蠢的回答,也可以滿足人類對人工智障的優(yōu)越感;分享問答,也讓 ChatGPT 擁有一絲的社交屬性。蹭熱度、獵奇、起哄三者可以用它填充一塊內(nèi)心的空虛,也僅止步于此。
ChatGPT 目前的劣勢也很明顯,由于數(shù)據(jù)是幾年前的,所以時(shí)效性不強(qiáng);對很多問題回答的精準(zhǔn)度并不高,對于盲目相信的人,或判別力較差的朋友并不友好;最后一點(diǎn),非常重要:對于工具而言,如果對其依賴性太高,脫離工具時(shí),會讓人的主觀能動性降低。
h3>2. 代碼的生成與規(guī)則誘導(dǎo)
如下所示,讓它生成一個(gè) Dart 的 User 類:
生成一個(gè) dart 類 User, 字段為 : 可空 int 型 age 、final 非空 String 型 username 默認(rèn)值為 “unknown”
雖然代碼給出了,但是可以看出,這是空安全之前的代碼??赡芎芏嗳说竭@里,覺得數(shù)據(jù)陳舊沒什么用途,就拜拜了您嘞。
但它是一個(gè)有會話上下文的自然語言處理工具,你可以讓它理解一些概念。就像一個(gè)新員工,上班第一天出了一點(diǎn)小錯誤,你是立刻開除他,還是告訴他該怎么正確處理。如下所示,給了它一個(gè)概念:
Dart 新版本中可空類型定義時(shí),其后需要加 ?
如下所示,你就可以在當(dāng)前的會話環(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)鍵字,其他非空字段需要
所以對于 ChatGPT 而言,我們可以把它看成一個(gè)有一些基礎(chǔ)知識的,可為我們免費(fèi)服務(wù)的員工,簡稱:奴隸。當(dāng)它做錯事時(shí),你罵它,責(zé)備它,拋棄它是毫無意義的,因?yàn)樗菣C(jī)器。我們需要去 誘導(dǎo) 它理解,在當(dāng)前工作環(huán)境中正確的事。
這樣在當(dāng)前會話中,它就可以理解你訴說的規(guī)則,當(dāng)用它創(chuàng)建其他類時(shí),他就不會再犯錯。并且不排除它會基于你的規(guī)則,去完善自身的 知識儲備 ,當(dāng)眾多的人用正確的規(guī)則去 誘導(dǎo) 它,這就是一個(gè)善意的正反饋。
3. 解決方案的概念
這里從生成的代碼 不支持空安全
到 支持空安全
,其實(shí)只用了幾句話。第一句是反饋測試,看看它的 默認(rèn)知識儲備
生成一個(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án)境,輸出是相對穩(wěn)定的,完成特定的任務(wù)。這就是為不確定的輸出,添加規(guī)則,使其輸出趨近 冪等性
。一旦一項(xiàng)可以處理任務(wù)的工具有這種性質(zhì),就可以面向任何人使用??梢苑Q這種誘導(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ù)類比較簡單,下面繼續(xù)拓展,比如對于數(shù)據(jù)類型而言 copyWith
、toJson
、fromJson
的方法自己寫起來比較麻煩。如果現(xiàn)在告訴它:
為上面的類提供 copyWith、toJson 、 fromJson 方法
它會進(jìn)行提供,說明它具有這個(gè) 默認(rèn)知識儲備
,但可以看到 copyWith
方法中的字段不符合空安全:
此時(shí)可以訓(xùn)練它的 類型可空 的意識,讓它主動處理類似的問題,也可以直白的告訴它
將上面的 copyWith 方法入?yún)㈩愋秃蠹?? 號
這樣生成的 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 生成字符串
對于一些相對固定的代碼,可以使用代碼邏輯,拼接字符串來生成。如下所示,通過對類結(jié)構(gòu)的抽象化,使用對象進(jìn)行配置,輸出字符串。我們來思考一下,這和 ChatGPT 生成代碼的區(qū)別。
首先,使用代碼生成代碼是一種完全的 冪等行為 。也就是說任何人、在任何時(shí)間、任何空間下,使用相同的輸入,都可以獲取到相同的輸出,是絕對精準(zhǔn)的。其產(chǎn)生代碼的行為邏輯是完全可控的,人的內(nèi)心是期待確定性的。
而 ChatGPT 對自然語言的理解,你可以用語言去引導(dǎo)它輸出一些你的需求,比如 :
以json 格式生成 10 句連續(xù)的中文對話,key 為 content包括。另外 time 字段為時(shí)間戳 ,type 字段1,2 隨機(jī)
其實(shí)沒有什么孰強(qiáng)孰弱,只是使用場景的不同而已。刀在不同人的手里有不同的用法,人是生產(chǎn)生活的主體,工具只有服務(wù)的屬性。駕馭工具,讓它產(chǎn)生實(shí)用的價(jià)值,才是工具存在的意義。好了,本文到這里就扯完了,感謝觀看 ~
以上就是Flutter ChatGPT代碼生成器方案概念的詳細(xì)內(nèi)容,更多關(guān)于Flutter ChatGPT代碼生成器的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android SDK 百度地圖通過poi城市內(nèi)檢索簡介接口的使用
這篇文章主要介紹了Android SDK 百度地圖通過poi城市內(nèi)檢索簡介接口的使用的相關(guān)資料,需要的朋友可以參考下2016-02-02利用SpannableString和ImageSpan在textview中插入圖片的方法
這篇文章主要為大家詳細(xì)介紹了利用SpannableString和ImageSpan在textview中插入圖片的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11基于Android如何實(shí)現(xiàn)將數(shù)據(jù)庫保存到SD卡
有時(shí)候?yàn)榱诵枰?,會將?shù)據(jù)庫保存到外部存儲或者SD卡中(對于這種情況可以通過加密數(shù)據(jù)來避免數(shù)據(jù)被破解),本文給大家分享Android如何實(shí)現(xiàn)將數(shù)據(jù)庫保存到SD卡,對android數(shù)據(jù)庫sd卡相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧2015-12-12Andriod?Studio實(shí)現(xiàn)撥打電話和發(fā)送短信的示例代碼
這篇文章主要介紹了Andriod?Studio實(shí)現(xiàn)撥打電話和發(fā)送短信功能,Android?Studio中創(chuàng)建項(xiàng)目,然后在該項(xiàng)目中創(chuàng)建一個(gè)Module名稱為“IntentDial”,文章結(jié)合實(shí)例步驟給大家介紹的非常詳細(xì),需要的朋友參考下吧2022-03-03Android使用 Spinner控件實(shí)現(xiàn)下拉框功能
Spinner是android的一種控件,用它我們可以實(shí)現(xiàn)下拉框。下面通過實(shí)例代碼給大家介紹Android使用 Spinner控件實(shí)現(xiàn)下拉框功能,感興趣的朋友一起看看吧2018-08-08Android 判斷SIM卡屬于哪個(gè)移動運(yùn)營商的實(shí)現(xiàn)代碼
有時(shí)候我們需要在Android中獲取本機(jī)網(wǎng)絡(luò)提供商呢,這里簡單分享下,方便需要的朋友2013-05-05Android中EditText setText方法的踩坑實(shí)戰(zhàn)
這篇文章主要給大家分享了一些關(guān)于Android中EditText setText方法的踩坑記錄,文中通過示例代碼介紹的非常詳細(xì),對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07android開發(fā)教程之實(shí)現(xiàn)listview下拉刷新和上拉刷新效果
這篇文章主要介紹了android實(shí)現(xiàn)listview下拉刷新和上拉刷新效果,Android的ListView上拉下拉刷新,原理都一樣,在Touch事件中操作header/footer的paddingTop屬性,需要的朋友可以參考下2014-02-02Android開發(fā)筆記之:消息循環(huán)與Looper的詳解
本篇文章是對Android中消息循環(huán)與Looper的應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05