NewBing简单使用感受

1,962 阅读7分钟

简介

以下是与newbing对话得到的资料 image.png image.png image.png image.png 以上是newbing的回答,回答重点是,chatGPT是对话式AI系统,newbing是搜索式AI系统,他们侧重点是不一样的。 ChatGPT利用大规模数据集进行预训练,能够对自然语言进行深入理解,提供高质量的自然语言交互服务。但它也存在一些局限性,例如仅能基于已有的知识库和经验生成回答,需要在使用时进行谨慎考虑和监督。据查到的资料来说,**学习的内容只到2021年9月(ChatGPT4.0应该更强大更新,还没有具体研究),**感觉是生成文本,对话聊天的能力比较强 newbing更侧重于搜索整合,是微软根据 Bing 的搜索加上ChatGPT的聊天,做出的成果

如何使用

参考以下文章juejin.cn/post/720026…

文章中的使用方法在上周之前是有用的,但从上周开始用于重定向的插件没作用了,进不去了

对于开发的帮助

技术调研

newbing是实时搜索的,而且他的整合能力很不错,因此会想到可以利用它做一些调研。比如我想在项目中引入一个图表库,我可以进行以下调研 image.png 如果信息列得不够,可以继续追加 image.png 以上过程就得到了比较常用的,适用于vue的图表库,我还想要得知它们的优缺点,那么可以继续询问 image.png 经过以上的一轮提问,已经可以大致筛选出合适的包,回答中包含很多有效链接,可以点开详细了解,他查询和整理都很快速,对于最后使用什么技术,肯定需要再鉴别,但是由他筛选过滤一遍以后,比直接在搜索引擎自己捞正确答案会快一些

快速生成方法,节省开发时间

生成正则表达式

正则表达式在校验中很常见,直接手写还是有困难的,大部分情况都是搜索+筛选+整合成我们需要的校验,使用newbing会更快速,生成的代码中,有注释,有建议,代码格式也很清晰 image.png 如果不满足要求还可以继续优化 image.png

生成一些简单功能、组件

比如生成一个简单的计时器功能,可以描述很多需求,他生成代码很快,看上去也是没有大问题的 image.png image.png 还有其他需求可以继续提 image.png image.png 觉得不够好的话,还可以让它给出别的实现方法 image.png 它回答的很快,代码对不对是需要再详细看(大部分是正确的),但是他可以快速提供思路和代码框架,会比自己检索、手写快

代码阅读

使用newbing可以快速分析一段代码,添加注释,比如: image.png 结果:

// 定义一个函数,用于处理常见的错误情况
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就很好地解决了这个问题。

一个很小的例子,假如我看到了一段我看不懂的方法,可以交给他先加注释 image.png 如果注释还不够直观,那么可以继续问 image.png 每个回答后面都有来源链接,所以可以再详细了解,对于读懂一些代码很有帮助

代码优化/code review

基于上面可以帮忙阅读代码的优点,感觉甚至可以进行跨语言的code review哈哈

一些简单的方法,也可以交给它提出修改建议 但是因为newbing输入框限制字符数2000,所以并不能review太长的方法,很容易就超过限制了 比如,我把上面一段处理异常的代码交给他优化,她会给出一些建议 image.png 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系统交流,如何提问很重要,提问不好,很可能就是无效沟通 可以感受到,当我们向它发送一些比较专业一些的指令的时候,得到的结果往往也是更专业的,同样,这种结果也是更有参考意义,也是我们更想要的结果。 一些建议:

  • 内容清晰:省去不必要的文字,每个字尽可能都有用
  • 任务明确:帮我制作表格,我要你提供事物的重量和数量
  • 迭代思维:一句话可能问不出来你想要的结果,你可以持续性的和它聊,基于一个或者几个点深入一下)