简介
以下是与newbing对话得到的资料
以上是newbing的回答,回答重点是,chatGPT是对话式AI系统,newbing是搜索式AI系统,他们侧重点是不一样的。
ChatGPT利用大规模数据集进行预训练,能够对自然语言进行深入理解,提供高质量的自然语言交互服务。但它也存在一些局限性,例如仅能基于已有的知识库和经验生成回答,需要在使用时进行谨慎考虑和监督。据查到的资料来说,**学习的内容只到2021年9月(ChatGPT4.0应该更强大更新,还没有具体研究),**感觉是生成文本,对话聊天的能力比较强
newbing更侧重于搜索整合,是微软根据 Bing 的搜索加上ChatGPT的聊天,做出的成果
如何使用
参考以下文章juejin.cn/post/720026…
文章中的使用方法在上周之前是有用的,但从上周开始用于重定向的插件没作用了,进不去了
对于开发的帮助
技术调研
newbing是实时搜索的,而且他的整合能力很不错,因此会想到可以利用它做一些调研。比如我想在项目中引入一个图表库,我可以进行以下调研
如果信息列得不够,可以继续追加
以上过程就得到了比较常用的,适用于vue的图表库,我还想要得知它们的优缺点,那么可以继续询问
经过以上的一轮提问,已经可以大致筛选出合适的包,回答中包含很多有效链接,可以点开详细了解,他查询和整理都很快速,对于最后使用什么技术,肯定需要再鉴别,但是由他筛选过滤一遍以后,比直接在搜索引擎自己捞正确答案会快一些
快速生成方法,节省开发时间
生成正则表达式
正则表达式在校验中很常见,直接手写还是有困难的,大部分情况都是搜索+筛选+整合成我们需要的校验,使用newbing会更快速,生成的代码中,有注释,有建议,代码格式也很清晰
如果不满足要求还可以继续优化
生成一些简单功能、组件
比如生成一个简单的计时器功能,可以描述很多需求,他生成代码很快,看上去也是没有大问题的
还有其他需求可以继续提
觉得不够好的话,还可以让它给出别的实现方法
它回答的很快,代码对不对是需要再详细看(大部分是正确的),但是他可以快速提供思路和代码框架,会比自己检索、手写快
代码阅读
使用newbing可以快速分析一段代码,添加注释,比如:
结果:
// 定义一个函数,用于处理常见的错误情况
const commonErrorHandler = (err) => {
// 定义一个变量,用于存储错误信息,默认为"error.contact_support"
let message = "error.contact_support";
// 判断err是否是一个对象
if (_.isObject(err)) {
// 判断err的状态码是否是401,404,403或503之一
if (/401|404|403|503/.test(err.status)) {
// 如果是,则将错误信息设置为对应的状态码
message = `error.${err.status}`;
// 如果状态码是401,则调用doSSO函数进行单点登录处理
if (err.status == "401") {
doSSO(err);
}
} else if (err.code) {
// 判断err的代码是否是E001,E002,E003或E004之一
if (/E001|E002|E003|E004/.test(err.code)) {
// 如果是,则将错误信息设置为对应的代码
message = `error.${err.code}`;
} else {
// 否则,根据不同的代码进行分支处理
switch (err.code) {
case "E000":
// 如果代码是E000,并且有消息列表,则判断消息列表中的第一条是否包含"optimistic locking failed"
if (err.messageList.length) {
if (/optimistic locking failed/.test(err.messageList[0])) {
// 如果包含,则将错误信息设置为"error.optimistic_locking_failed"
message = `error.optimistic_locking_failed`;
} else {
// 否则,将错误信息设置为消息列表中的第一条
message = err.messageList[0];
}
// 其他特定情况,默认为"error.contact_support"
}
break;
default:
// 其他代码情况,并且有消息列表,则将错误信息设置为一个包含代码和消息列表的JSON字符串
if (err.messageList.length) {
message = JSON.stringify({
code: err.code,
refer: err.messageList.join(";")
});
}
break;
}
}
} else if (err.status === "WARNING" && err.code) {
// 如果状态是"WARNING"并且有代码,则将错误信息设置为"warning.default"
message = `warning.default`;
}
}
// 返回一个拒绝的Promise对象,并传入错误信息作为参数
return Promise.reject(message);
};
我觉得这点是很强大的,我们每个人会的语言是有限的,熟悉的也就几种,但是它全都会,所以可以帮助分析所有看不懂的代码。 这对于我们在解决一些组件底层的bug时候比较有用,在一些封装好的组件出现bug的时候,我们常需要去Git找组件源码,理解查找问题来源,才能知道这个问题能不能解决,该如何解决。但是很多源码用的语言和我们使用的可能有所不同,理解起来会有困难,newbing就很好地解决了这个问题。
一个很小的例子,假如我看到了一段我看不懂的方法,可以交给他先加注释
如果注释还不够直观,那么可以继续问
每个回答后面都有来源链接,所以可以再详细了解,对于读懂一些代码很有帮助
代码优化/code review
基于上面可以帮忙阅读代码的优点,感觉甚至可以进行跨语言的code review哈哈
一些简单的方法,也可以交给它提出修改建议
但是因为newbing输入框限制字符数2000,所以并不能review太长的方法,很容易就超过限制了
比如,我把上面一段处理异常的代码交给他优化,她会给出一些建议
newbing优化后
// 定义一个对象,用于存储不同状态码对应的错误信息
const statusMessages = {
"401": "error.401",
"404": "error.404",
"403": "error.403",
"503": "error.503"
};
// 定义一个对象,用于存储不同错误代码对应的错误信息
const errorMessages = {
"E001": "error.E001",
"E002": "error.E002",
"E003": "error.E003",
"E004": "error.E004"
};
// 定义一个函数,用于处理常见的错误情况
const commonErrorHandler = (err) => {
// 定义一个变量,用于存储错误信息,默认为"error.contact_support"
let message = "error.contact_support";
// 判断err是否是一个对象,并且有status属性
if (_.isObject(err) && err.status) {
// 判断err的状态码是否在statusMessages对象中存在
if (statusMessages.hasOwnProperty(err.status)) {
// 如果存在,则将错误信息设置为对应的值
message = statusMessages[err.status];
// 如果状态码是401,则调用doSSO函数进行单点登录处理
if (err.status == "401") {
doSSO(err);
}
} else if (err.code) {
// 判断err的代码是否在errorMessages对象中存在
if (errorMessages.hasOwnProperty(err.code)) {
// 如果存在,则将错误信息设置为对应的值
message = errorMessages[err.code];
} else {
// 否则,根据不同的代码进行分支处理
switch (err.code) {
case "E000":
// 如果代码是E000,并且有消息列表,并且消息列表中有第一条,则判断第一条是否包含"optimistic locking failed"
if (_.get(err, 'messageList[0]', '')) {
if (/optimistic locking failed/.test(err.messageList[0])) {
// 如果包含,则将错误信息设置为"error.optimistic_locking_failed"
message = `error.optimistic_locking_failed`;
} else {
// 否则,将错误信息设置为消息列表中的第一条
message = err.messageList[0];
}
// 其他特定情况,默认为"error.contact_support"
}
break;
default:
// 其他代码情况,并且有消息列表,则将错误信息设置为一个包含代码和消息列表的JSON字符串
if (_.get(err, 'messageList.length', 0)) {
message = JSON.stringify({
code: err.code,
refer: err.messageList.join(";")
});
}
break;
}
}
} else if (err.status === "WARNING" && err.code) {
// 如果状态是"WARNING"并且有代码,则将错误信息设置为"warning.default"
message = `warning.default`;
}
}
// 返回一个拒绝的Promise对象,并传入错误信息作为参数
return Promise.reject(message);
};
多次尝试下来,他的优化建议一部分是可取的,当然也存在一些无效优化,也可以帮助发现一些小问题,比如一些属性的有效性检查
其他的想法
指令的重要性
和这一类聊天AI系统交流,如何提问很重要,提问不好,很可能就是无效沟通 可以感受到,当我们向它发送一些比较专业一些的指令的时候,得到的结果往往也是更专业的,同样,这种结果也是更有参考意义,也是我们更想要的结果。 一些建议:
- 内容清晰:省去不必要的文字,每个字尽可能都有用
- 任务明确:帮我制作表格,我要你提供事物的重量和数量
- 迭代思维:一句话可能问不出来你想要的结果,你可以持续性的和它聊,基于一个或者几个点深入一下)