Flutter & ChatGPT | 代碼生成器

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 瓮具、toJsonfromJson 的方法自己寫起來比較麻煩凡人。如果現(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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市浅缸,隨后出現(xiàn)的幾起案子轨帜,更是在濱河造成了極大的恐慌,老刑警劉巖衩椒,帶你破解...
    沈念sama閱讀 223,126評(píng)論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚌父,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡毛萌,警方通過查閱死者的電腦和手機(jī)苟弛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阁将,“玉大人膏秫,你說我怎么就攤上這事∽鲋眩” “怎么了缤削?”我有些...
    開封第一講書人閱讀 169,941評(píng)論 0 366
  • 文/不壞的土叔 我叫張陵窘哈,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我亭敢,道長(zhǎng)滚婉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,294評(píng)論 1 300
  • 正文 為了忘掉前任帅刀,我火速辦了婚禮让腹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘扣溺。我一直安慰自己骇窍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,295評(píng)論 6 398
  • 文/花漫 我一把揭開白布锥余。 她就那樣靜靜地躺著腹纳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哈恰。 梳的紋絲不亂的頭發(fā)上只估,一...
    開封第一講書人閱讀 52,874評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音着绷,去河邊找鬼蛔钙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛荠医,可吹牛的內(nèi)容都是我干的吁脱。 我是一名探鬼主播,決...
    沈念sama閱讀 41,285評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼彬向,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼兼贡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起娃胆,我...
    開封第一講書人閱讀 40,249評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤遍希,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后里烦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凿蒜,經(jīng)...
    沈念sama閱讀 46,760評(píng)論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,840評(píng)論 3 343
  • 正文 我和宋清朗相戀三年胁黑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了废封。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,973評(píng)論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡丧蘸,死狀恐怖漂洋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤刽漂,帶...
    沈念sama閱讀 36,631評(píng)論 5 351
  • 正文 年R本政府宣布演训,位于F島的核電站,受9級(jí)特大地震影響爽冕,放射性物質(zhì)發(fā)生泄漏仇祭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,315評(píng)論 3 336
  • 文/蒙蒙 一颈畸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧没讲,春花似錦眯娱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嘁信,卻和暖如春于样,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背潘靖。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評(píng)論 1 275
  • 我被黑心中介騙來泰國(guó)打工穿剖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人卦溢。 一個(gè)月前我還...
    沈念sama閱讀 49,431評(píng)論 3 379
  • 正文 我出身青樓糊余,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親单寂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贬芥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,982評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容