
ChatGPT 作为一个自然语言处理工具已经火了一段时间。对待ChatGPT不同人有着不同的看法新事物的出现必然如此。利益相关者形成抵制和狂热两极哗众取宠者蹭蹭热度问些花活博人眼球猎奇者尝尝鲜起哄者挑挑火实用派在思考新事物的价值和劳动力对于那些拿 ChatGPT 当百科全书来用的或询问哲学问题的朋友我只想说对于一个问题用错误的工具去处理得出错误的结果是一件很正常的事。1. ChatGPT 的特点和劣势ChatGPT 最大的特点是基础的语义分析让计算机对自然语言进行处理并输出。在一段会话中上下文是有效的所以可以类似于交流。问这个问题它会怎么回答这种猎奇的心理会让一部分人期望尝试有稀奇古怪或愚蠢的回答也可以满足人类对人工智障的优越感分享问答也让 ChatGPT 拥有一丝的社交属性。蹭热度、猎奇、起哄三者可以用它填充一块内心的空虚也仅止步于此。ChatGPT 目前的劣势也很明显由于数据是几年前的所以时效性不强对很多问题回答的精准度并不高对于盲目相信的人或判别力较差的朋友并不友好最后一点非常重要对于工具而言如果对其依赖性太高脱离工具时会让人的主观能动性降低。2. 代码的生成与规则诱导如下所示让它生成一个 Dart 的 User 类生成一个 dart 类 User 字段为 : 可空 int 型 age 、final 非空 String 型 username 默认值为 “unknown”虽然代码给出了但是可以看出这是空安全之前的代码。可能很多人到这里觉得数据陈旧没什么用途就拜拜了您嘞。但它是一个有会话上下文的自然语言处理工具你可以让它理解一些概念。就像一个新员工上班第一天出了一点小错误你是立刻开除他还是告诉他该怎么正确处理。如下所示给了它一个概念Dart 新版本中可空类型定义时其后需要加 ?如下所示你就可以在当前的会话环境中让它生成更多字段的类型用 Dart 新版本生成一个 dart 类 User字段为: final 非空 int 型 age final 非空 String 型 username 默认值为 “unknown” final 非空 int 型 height可空 String型info,final 非空 int 型 roleId如果存在问题可以继续进行指正。比如 用 Dart 新版本有默认值的字段不需要使用 required 关键字其他非空字段需要所以对于 ChatGPT 而言我们可以把它看成一个有一些基础知识的可为我们免费服务的员工简称奴隶。当它做错事时你骂它责备它抛弃它是毫无意义的因为它是机器。我们需要去诱导它理解在当前工作环境中正确的事。这样在当前会话中它就可以理解你诉说的规则当用它创建其他类时他就不会再犯错。并且不排除它会基于你的规则去完善自身的知识储备当众多的人用正确的规则去诱导它这就是一个善意的正反馈。3. 解决方案的概念这里从生成的代码不支持空安全到支持空安全其实只用了几句话。第一句是反馈测试看看它的默认知识储备生成一个 dart 类 User 字段为 : 可空 int 型 age 、final 非空 String 型 username 默认值为 “unknown”当它的输出不满足我们的需求时再进行诱导Dart 新版本中可空类型定义时其后需要加 ?用 Dart 新版本有默认值的字段不需要使用 required 关键字其他非空字段需要在诱导完成之后它就可以给出满足需求的输出。这种诱导后提供的会话环境输出是相对稳定的完成特定的任务。这就是为不确定的输出添加规则使其输出趋近幂等性。一旦一项可以处理任务的工具有这种性质就可以面向任何人使用。可以称这种诱导过程为解决某一问题的一种解决方案。比如上面的三句话就是根据类信息生成 Dart 数据类型并支持空安全。在当前环境下就可以基于这种方案去处理同类的任务用 Dart 新版本生成一个 dart 类 TaskResult字段为: final 非空 int 型 cost final 非空 String 型 taskName 默认值为 “unknown” final 非空 int 型 count可空 String型taskInfo,final 非空 String型 taskCode你拷贝代码后就是可用的4. Dart 数据类生成器完善上面生成 Dart 数据类比较简单下面继续拓展比如对于数据类型而言copyWith、toJson、fromJson的方法自己写起来比较麻烦。如果现在告诉它为上面的类提供 copyWith、toJson 、 fromJson 方法它会进行提供说明它具有这个默认知识储备但可以看到copyWith方法中的字段不符合空安全此时可以训练它的类型可空的意识让它主动处理类似的问题也可以直白的告诉它将上面的 copyWith 方法入参类型后加 ? 号这样生成的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, ); } MapString, dynamic toJson() { return { cost: cost, taskName: taskName, count: count, taskInfo: taskInfo, taskCode: taskCode, }; } static TaskResult fromJson(MapString, 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 生成字符串对于一些相对固定的代码可以使用代码逻辑拼接字符串来生成。如下所示通过对类结构的抽象化使用对象进行配置输出字符串。我们来思考一下这和 ChatGPT 生成代码的区别。首先使用代码生成代码是一种完全的幂等行为。也就是说任何人、在任何时间、任何空间下使用相同的输入都可以获取到相同的输出是绝对精准的。其产生代码的行为逻辑是完全可控的人的内心是期待确定性的。而 ChatGPT 对自然语言的理解你可以用语言去引导它输出一些你的需求比如 以json 格式生成 10 句连续的中文对话key 为 content包括。另外 time 字段为时间戳 type 字段1,2 随机其实没有什么孰强孰弱只是使用场景的不同而已。刀在不同人的手里有不同的用法人是生产生活的主体工具只有服务的属性。驾驭工具让它产生实用的价值才是工具存在的意义。好了本文到这里就扯完了感谢观看 ~作者张风捷特烈链接https://juejin.cn/post/7197584339213762619最后如果想要成为架构师或想突破20~30K薪资范畴那就不要局限在编码业务要会选型、扩展提升编程思维。此外良好的职业规划也很重要学习的习惯很重要但是最重要的还是要能持之以恒任何不能坚持落实的计划都是空谈。如果你没有方向这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》帮大家将杂乱、零散、碎片化的知识进行体系化的整理让大家系统而高效地掌握Android开发的各个知识点。相对于我们平时看的碎片化内容这份笔记的知识点更系统化更容易理解和记忆是严格按照知识体系编排的。八、微信小程序开发1、小程序概述及入门2、小程序UI开发3、API操作4、购物商场项目实战……全套视频资料一、面试合集二、源码解析合集三、开源框架合集欢迎大家一键三连支持若需要文中资料直接点击文末CSDN官方认证微信卡片免费领取↓↓↓