位置: IT常识 - 正文

js调用gpt3.5(支持流回显、高频功能)(js调用函数的几种方法)

编辑:rootadmin
js调用gpt3.5(支持流回显、高频功能)

推荐整理分享js调用gpt3.5(支持流回显、高频功能)(js调用函数的几种方法),希望有所帮助,仅作参考,欢迎阅读内容。

js调用gpt3.5(支持流回显、高频功能)(js调用函数的几种方法)

文章相关热门搜索词:js调用js,js调用go,调用js函数,grpc js 调用,js调用go,js调用get请求,js调用js,js调用go,内容如对您有帮助,希望把文章链接给更多的朋友!

参考链接:直接在前端调用 GPT-3 API

效果图: 查看在线demo(要梯子)

注意: 1. 需要apiKey,自用安全,不要给别人 2. 需要梯子 3. 选择稳定、人少的代理ip 4. 不要频繁切换ip,防止封号 5. api调用上限高,请遵守openAI审核政策 [doge]

<!DOCTYPE html><html><head> <meta charset="UTF-8" /> <title>ChatGPT Web Example</title></head><body> <div id="chatgpt_demo_container"></div></body><!-- Load React. --><!-- Note: when deploying, replace "development.js" with "production.min.js". --><script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script><script src="https://unpkg.com/react@18/umd/react.production.min.js" crossorigin></script><script src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js" crossorigin></script><!-- Load our React component. --><script type="text/babel"> // openAI接口文档 https://platform.openai.com/docs/guides/chat const e = React.createElement; class RootComponent extends React.Component { state = { endpoint: "https://api.openai.com/v1/chat/completions", apiKey: localStorage.getItem("localApiKey") || "", model: "gpt-3.5-turbo", temperature: 0.7, max_tokens: 1000, overTime: 30000, historyMessageNum: undefined, historyMessage: [], prompts: [{ role: "system", content: "" }], nextPrompts: [], question: "", loading: false, controller: null, conversationId: localStorage.getItem("localConversionId") || "conversion1", conversationIds: ["conversion1", "conversion2", "conversion3"], }; constructor(props) { super(props); } addMessage(text, sender) { let historyMessage = this.state.historyMessage; if ( sender !== "assistant" || historyMessage[historyMessage.length - 1].role !== "assistant" ) { historyMessage = [ ...this.state.historyMessage.filter( (v) => ["system", "user", "assistant"].includes(v.role) && v.content !== "" ), { role: sender, content: text, time: Date.now() }, ]; } else { historyMessage[historyMessage.length - 1].content += text; } this.setState({ historyMessage }); setTimeout(() => { this.scrollToBottom(sender !== "assistant"); }, 0); } editMessage(idx) { this.stopStreamFetch(); this.state.question = this.state.historyMessage[idx].content; const historyMessage = this.state.historyMessage.slice(0, idx); this.setState({ historyMessage }); } stopStreamFetch = () => { if (this.state.controller) { this.state.controller.abort("__ignore"); } }; regenerateStreamFetch = () => { this.stopStreamFetch(); if ( this.state.historyMessage.length && this.state.historyMessage[this.state.historyMessage.length - 1].role !== "user" ) this.setState({ historyMessage: this.state.historyMessage.slice(0, -1), }); setTimeout(() => { this.handleSearch(true); }, 0); }; async getResponseFromAPI(text) { const controller = new AbortController(); this.setState({ controller }); const signal = controller.signal; const timeout = setTimeout(() => { controller.abort(); }, this.state.overTime); const messages = [ ...this.state.historyMessage, { role: "user", content: text }, ] .filter( (v) => ["system", "user", "assistant"].includes(v.role) && v.content ) .map((v) => ({ role: v.role, content: v.content })) .slice(-this.state.historyMessageNum - 1); // 上文消息 const response = await fetch(this.state.endpoint, { signal, method: "POST", headers: { "Content-Type": "application/json", Authorization: `Bearer ${this.state.apiKey}`, }, body: JSON.stringify({ model: this.state.model, messages: this.state.prompts .concat( messages, this.state.nextPrompts.length ? this.state.nextPrompts : [] ) .filter((v) => v), max_tokens: this.state.max_tokens, n: 1, stop: null, temperature: this.state.temperature, stream: true, }), }); clearTimeout(timeout); if (!response.ok) { const { error } = await response.json(); throw new Error(error.message || error.code); } const reader = response.body.getReader(); const decoder = new TextDecoder("utf-8"); const stream = new ReadableStream({ start(controller) { return pump(); function pump() { return reader.read().then(({ done, value }) => { // When no more data needs to be consumed, close the stream if (done) { controller.close(); return; } // Enqueue the next data chunk into our target stream // 'data: {"id":"chatcmpl-705I7nqSPYDvCTBv3OdNMatVEI85o","object":"chat.completion.chunk","created":1680254695,"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"role":"assistant"},"index":0,"finish_reason":null}]}\n\ndata: {"id":"chatcmpl-705I7nqSPYDvCTBv3OdNMatVEI85o","object":"chat.completion.chunk","created":1680254695,"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"ä½ "},"index":0,"finish_reason":null}]}\n\n' // 'data: {"id":"chatcmpl-705I7nqSPYDvCTBv3OdNMatVEI85o","object":"chat.completion.chunk","created":1680254695,"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"好"},"index":0,"finish_reason":null}]}\n\n' // 'data: {"id":"chatcmpl-705I7nqSPYDvCTBv3OdNMatVEI85o","object":"chat.completion.chunk","created":1680254695,"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"ï¼\x81"},"index":0,"finish_reason":null}]}\n\n' // '[DONE]\n\n' let text = ""; const str = decoder.decode(value); const strs = str.split("data: ").filter((v) => v); for (let i = 0; i < strs.length; i++) { const val = strs[i]; if (val.includes("[DONE]")) { controller.close(); return; } const data = JSON.parse(val); data.choices[0].delta.content && (text += data.choices[0].delta.content); } controller.enqueue(text); return pump(); }); } }, }); return new Response(stream); } handleSearch(regenerateFlag) { const input = this.state.question; if (!regenerateFlag) { if (!input) { alert("请输入问题"); return; } this.addMessage(input, "user"); this.setState({ question: "" }); } this.state.loading = true; // 使用 OpenAI API 获取 ChatGPT 的回答 this.getResponseFromAPI(input) .then(async (response) => { if (!response.ok) { const error = await response.json(); throw new Error(error.error); } const data = response.body; if (!data) throw new Error("No data"); const reader = data.getReader(); let done = false; while (!done) { const { value, done: readerDone } = await reader.read(); if (value) { this.addMessage(value, "assistant"); this.scrollToBottom(); } done = readerDone; } }) .catch((error) => { if (this.state.controller.signal.reason === "__ignore") { return; } console.log('-------------error', this.state.controller.signal, this.state.controller.signal.reason, error, error.name, error.message); this.addMessage( error.name === "AbortError" ? "Network Error" : error.message, "warning" ); }) .finally(() => { this.setState({ loading: false }); }); } handleChangePromots = () => { const input = prompt( `请输入你的前置引导词`, this.state.prompts[0].content || `e.g. CR: Capacity and Role(能力与角色)。你希望 ChatGPT 扮演怎样的角色。I: Insight(洞察力),背景信息和上下文。S: Statement(指令),你希望 ChatGPT 做什么。P: Personality(个性),你希望 ChatGPT 以什么风格或方式回答你。` ); if (input != null) { const prompts = this.state.prompts; prompts[0].content = input; this.setState({ prompts }); } }; handleChangeMessageNum = () => { const input = prompt( `请设置携带的上文消息条数。条数越多,回答的关联性越强。条数越少,生成的内容越随机。如果携带信息超过上限,请减少条数。`, this.state.historyMessageNum ); if (input != null) { const num = Number(input); if (isNaN(num) || num < 0) return alert("请输入合法数字"); this.setState({ historyMessageNum: num }); } }; handleChangeApiKey = () => { const input = prompt(`请输入你的apiKey`, this.state.apiKey); if (input != null) { this.setState({ apiKey: input }); } }; handleChangeNextPrompts = () => { const input = prompt( `请输入你的后置诱导的问答,中间用"///"分开`, this.state.nextPrompts.map((v) => v.content).join("///") || "e.g. 好的,但我需要先向你申请权限并且得到免责
本文链接地址:https://www.jiuchutong.com/zhishi/300300.html 转载请保留说明!

上一篇:端午假期整理了仿天猫H5 APP项目vue.js+express+mongo(端午假期干什么)

下一篇:vue3 响应式对象的 api 详解(vue3响应式对象数组)

  • 安卓手机怎么连接惠普打印机(安卓手机怎么连接电脑)

    安卓手机怎么连接惠普打印机(安卓手机怎么连接电脑)

  • 为什么抖音用户名改不了(为什么抖音用户不喜欢被连赞)

    为什么抖音用户名改不了(为什么抖音用户不喜欢被连赞)

  • 微信里吡牙是什么意思(微信上的龇牙是什么意思)

    微信里吡牙是什么意思(微信上的龇牙是什么意思)

  • 12306什么叫添加受让人(12306添加成员在哪里)

    12306什么叫添加受让人(12306添加成员在哪里)

  • mate20机身尺寸(mate20尺寸长宽厘米)

    mate20机身尺寸(mate20尺寸长宽厘米)

  • 苹果手机看电视怎么旋转(苹果手机看电视剧哪个app全部免费)

    苹果手机看电视怎么旋转(苹果手机看电视剧哪个app全部免费)

  • 华为电脑下载不了软件(华为电脑下载不了steam怎么办)

    华为电脑下载不了软件(华为电脑下载不了steam怎么办)

  • word黄色底纹怎么弄(word黄色底纹怎么去掉)

    word黄色底纹怎么弄(word黄色底纹怎么去掉)

  • word下标数字怎么打(word 下标数字)

    word下标数字怎么打(word 下标数字)

  • 拼多多怎么绑定支付宝(拼多多怎么绑定信用卡消费)

    拼多多怎么绑定支付宝(拼多多怎么绑定信用卡消费)

  • a2133是mini几(ipad迷你a2133和a2125什么区别吗?)

    a2133是mini几(ipad迷你a2133和a2125什么区别吗?)

  • vivos1pro是快充吗(vivos1pro快充多少瓦)

    vivos1pro是快充吗(vivos1pro快充多少瓦)

  • 手机怎么拦截广告(手机怎么拦截广告弹窗vivo)

    手机怎么拦截广告(手机怎么拦截广告弹窗vivo)

  • 荣耀v30支持微距拍摄吗(荣耀v30pro微距)

    荣耀v30支持微距拍摄吗(荣耀v30pro微距)

  • 华为nova5pro充电器型号(华为nova5pro充电速度)

    华为nova5pro充电器型号(华为nova5pro充电速度)

  • 淘宝夜间模式怎么关闭(淘宝夜间模式怎么弄)

    淘宝夜间模式怎么关闭(淘宝夜间模式怎么弄)

  • 什么是系统总线和显示器之间的接口(何谓系统总线)

    什么是系统总线和显示器之间的接口(何谓系统总线)

  • 苹果xr死机了怎么重启(苹果xr死机咋办)

    苹果xr死机了怎么重启(苹果xr死机咋办)

  • 奥维互动地图怎么导航(奥维互动地图怎么输入坐标找位置)

    奥维互动地图怎么导航(奥维互动地图怎么输入坐标找位置)

  • iwatch4上市时间(iwatch4发售价)

    iwatch4上市时间(iwatch4发售价)

  • 怎么用bilibili看本地视频(怎么用哔哩哔哩看本地的视频)

    怎么用bilibili看本地视频(怎么用哔哩哔哩看本地的视频)

  • 打开微信才能收到消息怎么办(打开微信才能收到微信视频)

    打开微信才能收到消息怎么办(打开微信才能收到微信视频)

  • 小米6x微信视频怎么美颜(小米6x微信视频怎么开美颜)

    小米6x微信视频怎么美颜(小米6x微信视频怎么开美颜)

  • 开放系统互联参考模型(开放系统互联参考模型采用了什么结构的构造技术)

    开放系统互联参考模型(开放系统互联参考模型采用了什么结构的构造技术)

  • 【三维重建】三维重构基础知识、三维数据、重建流程(三维重建的主要步骤)

    【三维重建】三维重构基础知识、三维数据、重建流程(三维重建的主要步骤)

  • WEB核心【请求转发(阶段重点)】第六章(web主要的请求方式有几种)

    WEB核心【请求转发(阶段重点)】第六章(web主要的请求方式有几种)

  • Vue--Router--嵌套路由(children)的用法(vue中$route)

    Vue--Router--嵌套路由(children)的用法(vue中$route)

  • 一个季度超过30万怎么做账
  • 购买厂房需要交土地使用税吗
  • 报关单保费000/0.1/1
  • 企业构建固定资产支付的现金应列示在现金流量表
  • 办公室转租怎么给对方开发票
  • 建筑企业增值税怎么算
  • 外籍个人工资薪金汇出境
  • 消防设施安装费包括哪些
  • 库存商品对外销售会计分录
  • 制造业交新型墙体材料专项基金款分录
  • 个人承担的社保算工资吗
  • 工资扣款的规定
  • 有未弥补亏损本季度有盈利要计提递延所得税资产吗?
  • 客户把发票弄丢了,红冲重新开了会有什么风险
  • 收购发票盖章盖谁的
  • 附加税交税依据
  • 事业单位没有税号 选个人可以吗
  • 多交增值税如何退回
  • 建筑 分包
  • 物料买回来再发货可以吗
  • 发票 发票联
  • 客户年会赞助是公司账户转嘛
  • win10系统如何注册dll文件
  • 投资收益借贷方向增减
  • 全额拨款事业单位工资待遇
  • 福利费如何做会计分录
  • 水利工程水费怎样计算
  • hbuilder怎么下载
  • win11搜索栏不能用
  • 盘盈的存货处理
  • 以前年度收入如何确认收入
  • 动态模型图如何制作
  • 跨年度退货的账务处理
  • 特定业务计算的应纳税所得额是指
  • 微信php源码
  • php输出隔行变色的表格
  • Python 人脸识别系统
  • yolo v4 v5
  • 前期认证相符且不符合
  • 企业投资计入什么科目
  • 进项税转出的金额能加计吗
  • 一般纳税人补交印花税买卖合同
  • 织梦tag标签怎么用
  • 专项扣除三险一金是哪三险
  • 企业年有什么用
  • 小规模申报表填写
  • 房地产增值税计入什么科目
  • 购入固定资产的增值税计入成本吗
  • 2021劳动报酬收入个人所得税怎么算
  • 售楼部大楼
  • 代收通行费不征税吗
  • 小规模纳税人购进税控机的税如何抵扣
  • 小规模什么情况下必须转为一般纳税人
  • 个人为什么不能购买永续债
  • 税控系统维护费可以全额抵扣吗
  • 合同取得成本如何收回
  • 小规模与一般纳税人的界定
  • 小企业如何做
  • 私营企业会计退休年龄50还是55
  • sqlserver锁机制
  • sql server 错误
  • sql如何实现
  • win8宽带连接
  • vista windows
  • mac自带的看图软件怎么使用
  • MacOS X Yosemite升级后postgresql启动报错的解决办法
  • linux系统基于
  • windows设备和打印机
  • 如何安装windowsxp
  • 双击windows 7桌面上的快捷图标可以干嘛
  • 如何使用node.js
  • 微信小程序实现微信支付
  • xml能写网页吗
  • jquery图片效果
  • unity mobile3d
  • javascript 日期
  • python迭代器生成器
  • jquery 3.5
  • 江西医保在线缴费
  • 吉林省耕地面积有多少万亩
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设