范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

通过ChatGPT做一个终端对话玩具(xx再也不怕我xx了)

  引导篇
  从去年12月初了解到  ChatGPT ,也注册了账号,但是一直没去使用(真是太懒了)。
  相信大家就算没使用过,也听闻过它的传说,简单来说就是一个解答性聊天机器人。
  最近呢,有几位朋友也一直在向我咨询一些  ChatGPT  的问题,想了想还是做个小应用,带各位来了解并使用上ChatGPT 。
  声明一下,此篇文章真不是用  ChatGPT  生成的。注册篇
  已经有很多大佬来介绍这个注册方式了,我简单的说一下步骤吧。 准备好科学上网的节点(香港、越南的不行); 在 https://sms-activate.org/ 验证码平台上充值个1$; 去 https://chat.openai.com/auth/login 通过邮箱注册(推荐谷歌直接注册); 在验证码平台上找一个  openai  的验证码服务(最便宜的是印尼的,有效期20分钟);输入验证码平台上的手机号进行验证; 等待验证码出现,粘贴之后即可完成注册; 可以直接在 https://platform.openai.com/account/api-keys 生成  apiKey ;实战篇
  本次做的小工具,是一个终端对话助手。通过用户的输入内容,让  ChatGPT  进行识别回答并输出。
  效果图
  准备工作
  初始化 yarn init -y
  安装插件 openai (对话功能)inquirer (处理命令行输入等操作)cli-spinner (Loading效果)
  准备  openai  的 apiKey 对接 OpenAI
  引入 openai,并且写一个调用入口函数。 const { Configuration, OpenAIApi } = require("openai");  async function main() {     // 创建 openai 配置     const configuration = new Configuration({         apiKey: "apiKey"     });     // 初始化 openai     const openai = new OpenAIApi(configuration);     const { data: { choices } } = await openai.createCompletion({         model: "text-davinci-003", // 对话机器人模型         prompt: "js 是什么?", // 问题         temperature: 0.5, // 准确性的概率,0是最精准的         max_tokens: 150, // 输出内容长度         top_p: 1.0, // 避免重复和不相关的内容         frequency_penalty: 0.0, // 控制语言模型中出现的词语频率,惩罚         presence_penalty: 0.0, // 控制语言模型中出现的词语频率,惩罚     })     console.log(choices[0].text); // 输出的内容 }  main()
  输出的结果如下图
  这一步已经将  openai  对接完了。
  让用户配置和提问
  我们需要让用户提问,不应该直接将问题写在文件里,缺少与用户之间的交互。
  这时候  inquirer  出现了,它是一个命令行交互工具,可以做很多事情,比如各种 cli  的一些问题及选择配置的方式,如 VueCli  的创建的这种多选、单选它都可以做到。
  使用方式也很简单 const { prompt } = await inquirer.prompt({     type: "input", // 可以是 password|list 等     name: "prompt", // 定义的字段名     message: "请输入问题", // 提示信息 });  console.log("输入的内容 =>>>", prompt)
  现在可以拿到用户的输入内容了,我们就可以做很多事情了。 获取用户输入的  apiKey ;获取用户选择的对话机器人模型; 获取用户提问内容; 引入&定义配置const inquirer = require("inquirer"); // 定义一个配置 config const config = Object.create(null); const fs = require("fs"); 写入 Key 到文件
  让用户输入密钥,为了持久化存储,我选择直接创建文件来进行存  key ,以免每次都需要重新输入。// 判断文件是否存在 const keysIsExist = fs.existsSync("openai_keys"); // 如果不存在 if (!keysIsExist) {     const { apiKey } = await inquirer.prompt({         type: "password",         name: "apiKey",         message: "请输入 Open AI 的 Key",     })      // 覆盖写入     fs.writeFile("openai_keys", apiKey.trim(), { flag: "w" }, (err) => {         if (err) console.error(err)         else main() // 重新执行     }) } else {    // 存在此文件直接读取赋值给 config.apiKey     fs.readFile("openai_keys", (err, data) => {         if (err) {             console.error(err)             return         }         config.apiKey = data.toString();     }) }
  WX20230301-005129@2x.png 让用户选择机器人const { model } = await inquirer.prompt({     type: "list",     name: "model",     message: "请选择对话机器人",     choices: [         { name: "text-ada-001", value: "text-ada-001" },         { name: "text-curie-001", value: "text-curie-001" },         { name: "text-babbage-001", value: "text-babbage-001" },         { name: "text-davinci-003", value: "text-davinci-003" },     ],     default: "text-davinci-003" }) config.model = model;
  WX20230301-005157@2x.png 让用户提问const { prompt } = await inquirer.prompt({     type: "input",     name: "prompt",     message: "请输入问题", });
  WX20230301-005214@2x.png 加个 Loading 效果
  因为  openai  响应有点慢,所以为了减少蕉绿,引入了 cli-spinner const Spinner = require("cli-spinner").Spinner; // %s 会被下面的 ▂ ▃ ▄ ▅ ▆ ▇ █ 替代,是个占位符 const spinner = new Spinner("Loading.. %s"); // 这里是loading字符,按照这个顺序去渲染 spinner.setSpinnerString("▂ ▃ ▄ ▅ ▆ ▇ █");
  在请求 openai 之前调用// 请求开始 spinner.start(); // 请求完成之后暂停 spinner.stop(true); // 参数 bool ,是否需要清除输出内容 全部代码
  终于完结撒花了,现在已经是凌晨一点半了。 const { Configuration, OpenAIApi } = require("openai"); const inquirer = require("inquirer"); const fs = require("fs"); const config = Object.create(null); const Spinner = require("cli-spinner").Spinner; const spinner = new Spinner("Loading.. %s"); spinner.setSpinnerString("▂ ▃ ▄ ▅ ▆ ▇ █");  async function main() {   // 判断文件是否存在   const keysIsExist = fs.existsSync("openai_keys");   if(!keysIsExist) {     const { apiKey } = await inquirer.prompt({       type: "password",       name: "apiKey",       message: "请输入 Open AI 的 Key",     })      // 覆盖写入     fs.writeFile("openai_keys", apiKey.trim(), { flag: "w" }, (err) => {       if (err) console.error(err)       else main()     })   } else {     fs.readFile("openai_keys", (err, data) => {       if (err) {         console.error(err)         return       }       config.apiKey = data.toString();     })   }   const { model } = await inquirer.prompt({   type: "list",   name: "model",   message: "请选择对话机器人",   choices: [    { name: "text-ada-001", value: "text-ada-001" },    { name: "text-curie-001", value: "text-curie-001" },    { name: "text-babbage-001", value: "text-babbage-001" },    { name: "text-davinci-003", value: "text-davinci-003" },   ],   default: "text-davinci-003"  })  config.model = model;    const { apiKey } = config;  console.log("33[42;30m LGOIN 33[40;32m 登录成功33[0m");  const configuration = new Configuration({   apiKey  });  config.openai = new OpenAIApi(configuration);  start() }  async function start() {  const { model } = config;  const { prompt } = await inquirer.prompt({   type: "input",   name: "prompt",   message: "请输入问题",  });  if(!prompt.trim()) {   start()   return false  }  try {   spinner.start();   const { data: { choices } } = await config.openai.createCompletion({    model,    prompt,    temperature: 0.5,    max_tokens: 150,    top_p: 1.0,    frequency_penalty: 0.0,    presence_penalty: 0.0,   })   const answer = choices[0]?.text?.replace(/ +/g, "");   spinner.stop(true);   console.log("33[32mOpen AI:" + answer?.trim() + "33[0m");   start()  } catch (error) {   spinner.stop(true);   console.log(error);  }  }  main();

意义重大!海水提锂,全球首个!来源央视财经3月8日,全球首个海水淡化浓盐水提锂合作项目签约仪式在青岛举行。据悉,该项目选址青岛水务集团百发海水淡化厂内,预计12月底正式投产运行。据了解,该项目是全球首个海水提锂足球报广州队也有外援欠薪纠纷是否递补回中超成两难选择直播吧3月6日讯据足球报报道,虽然广州队上赛季的运营资金创造了新低,但实际上俱乐部同样也存在外援的欠薪纠纷。3月5日是中国足协职业足球俱乐部准入资料上报截止日,上赛季刚刚降到中甲的足球报深足深陷十几笔外援官司,全部解决需两亿人民币左右直播吧3月6日讯据足球报报道,摆在当前深足面前最大的一道难关,就是总额两亿人民币左右的国际纠纷。备受外界关注的戴伟浚,尚未与深足就欠薪清理问题达成一致意见。所以在深足上报的工资确认广州大老虎落马,和下属共用情人,贪污数亿,被捕后痛哭这位大老虎万庆良原本是靠着自己的双手一步一步做到广东省的二把手,前提似锦,但是却因为自己的贪念走上贪污腐败的道路,被判处无期徒刑,当他听到判决结果的时候痛哭不止,嘴里不停地说着自己周一竞彩实单推荐冷门2串1克雷莫纳保级而战都灵主场拿分附比分视频加载中大家好我是你们的老朋友三丰沉淀了大半年的时间了期间研究了各种数据差以便更准确的分享赛果,最关键的是要有信心保持良好的心态才能久经沙场时间越长经验越丰富欢迎新老朋友给三丰多克里斯洛克嘲讽史密斯戴绿帽他老婆出轨儿子朋友,把气撒我身上去年三月,威尔史密斯因不满克里斯洛克公开调侃自己的妻子,上台给了一巴掌,断送了奥斯卡十年参赛资格。时隔一年,克里斯洛克终于展开报复,他在3月5日的一场脱口秀直播中公开羞辱史密斯,美两会之声丨欧阳宏伟委员培养更多的高水平国际化博士人才要获得高水平国际化博士人才,除了吸引更多的国外留学博士回国,还可以通过博士层级的中外合作办学补充。这是2月20日,全国政协委员浙江大学国际联合学院院长欧阳宏伟在个人微博里发的一句话姚明涉嫌利益输送?众辉体育承揽中国篮协相关业务引争议因李铁事件原本在陈戌源带走之后,整个的体坛反腐风暴就渐渐平息,突然之间杀出的新疆男篮退出事件,导致姚明治理下的中国篮协也开始出现问题,这让事态反而得到了升级。新疆男篮2月28日发文湖人追平西部第10!黑马9连胜搅局,绿军轰然倒下,火箭32分大胜北京时间3月6日,NBA常规赛继续进行。在早晨结束的几场比赛中,湖人113105击败勇士,库里复出的首场比赛砍下27分6助攻,不过相比于之前5连胜阶段,球队还需要重新磨合,库里自己哈登回归?火箭换报价麦迪接班人,完成重建剑指总冠军!常规赛还有不到场就将结束,想要摆烂的球队开始的争相表演,当然像西部休斯顿火箭队本来就实力不汲,尤其是近期连败场,目前为止胜负,全联盟倒数第一!在争夺文班亚马的道路上,那真的是一骑绝伊森205火箭队8人得分上双战胜马刺,终结球队11连败!3月5日NBA常规赛继续进行,火箭做客迎战马刺两队在西部排名倒数第一第二,最终,火箭以122110击败马刺终止球队11连败。第一节,开场贾巴里史密斯后撤步干拔跳,杰伦格林突破上篮为
改稿之乐好文章是改出来的。这是材料口一个公认的说法。所谓诗文不厌改,佳作出苦心,说的也是这个道理。文学巨匠曹雪芹写红楼梦时,是在悼红轩中对原稿披阅十载增删五次后才定稿的。托尔斯泰写战争与和广东入选内外贸一体化试点地区!将打造一批内外贸融合发展平台培育一批内外贸一体化经营企业,打造一批内外贸融合发展平台,形成一批具有国际竞争力融合发展的产业集群,建立健全促进内外贸一体化发展体制机制1月11日,商务部官网发布商务部等14部门关美国误食大麻甜品幼儿5年激增14倍!医生不吃惊那天,小奥利弗困得有点反常,于是我抱他上床睡觉。突然间他开始浑身发抖和大哭,紧盯着我,眼神中充满恐惧。妈妈伊丽莎白佩里回忆说。她们一家住在美国马里兰州。两岁的小奥利弗立刻被送到附近联盟MS22飞船冷却剂泄露,俄罗斯下月再发飞船接回3名宇航员(观察者网讯)据俄罗斯塔斯社1月11日报道,俄罗斯计划在下个月提前发射联盟MS23号飞船,将国际空间站内的3名宇航员接回地球。此前仪表设备舱外壳受损冷却系统发生泄漏的联盟MS22号苹果VR要卖3000美元,库克能成为下一个乔布斯?你好,我是王煜全,这里是王煜全要闻评论。今年的CES展上VRAR厂商有了明显增加,越来越多的新尝试新应用也正在出现,让我更加确信2023年VRAR产业爆发在即的预判。CES之外,我美国消费者浏览和购买习惯调查!35的人在亚马逊上发现新品牌!视频号关注AMZ123跨境导航AMZ123获悉,根据Emplicit的调查,几乎所有(86)的美国消费者都在亚马逊上购买过之前从未尝试过的产品。超过三分之一(35)的消费者表示亚马神秘美国公司狙击中国光伏,却折射美国制造的悲剧文观察者网李泽西周毅编辑张广凯美国又对中国光伏企业下手了。在发起针对东南亚光伏电池组件的反规避调查后,2022年12月,美国商务部发布声明,宣布包括比亚迪在内的4家中国企业,被初步机械九院将创业板IPO上会,被问询是否损害国有资产文观察者网邹煦晨编辑张广凯业绩仰仗关联方一汽集团的机械九院将于1月17日创业板IPO上会。值得一提的是,此次创业板IPO,机械九院拟募投项目的拟投入募集资金为13。49亿元,发行不苔丝探测到系外新热木星最近,一个国际天文学家团队利用美国国家航空航天局的凌日系外行星勘探卫星(TESS),探测到一颗新的热木星系外行星,其质量可能是木星的3倍左右,围绕一颗名为TOI778的恒星运行。相能源危机阴影减弱华尔街开始唱多欧元能源危机阴影减弱华尔街开始唱多欧元财联社1月12日电,华尔街正在为欧元反弹摇旗呐喊,能源危机的阴影减弱加上经济衰退前景趋向乐观,投资者正在押注低廉的欧洲资产。德意志银行和摩根士丹利2023年军队文职人员公开招考岗位计划来源军队人才网2023年军队文职人员公开招考岗位计划(不含先面试后笔试岗位)详情请登录军队人才网下载查看2023年军队文职人员公开招考岗位计划(先面试后笔试岗位)详情请登录军队人才