无聊写个 chatgpt 玩玩!这不得试一试 openai 的聊天和绘画功能

news/2025/1/8 19:53:35/

chatgpt 最近很火。使用 chatgpt 问一些问题还是很有用的。比如面试题,面试题的答案。简直不要太爽。

不过闲来无事,也使用 openai 提供的api ,写了几个小页面,可以进行聊天,和绘画。

项目放在 github 上了:https://github.com/wtdsn/chat-draw-by-openai

先看看页面吧!

image.png image.png

ok ,话不多说,说说整个过程吧

API 文档

地址 :https://platform.openai.com/docs/api-reference

可以看到,openai 提供了许多的 api 。它甚至提供了 openai 的 npm 包 。并且给了一些使用例子。

当然可以直接使用 openai 提供的 node 模块。可以省去一堆麻烦事。

在node 中怎么使用,看文档就可以了

调用这些 api ,需要一个 apikey 。需要注册 openai 账号。
注册后在 : https://platform.openai.com/account/api-keys 生成 apikey ,并且把它记下来就可以了。

不过这些 api 接口并不是免费的。请求会消耗一些 token ,这些 token 是花钱的。当然新用户有 5美元。能用很久

项目搭建

此项目的搭建呢!我使用了 vite 。不得不说 , vite 确实方便。

项目结构

key.txt 我记录了 apikey 。 github 中没有,丢上去就失效!

image.png

我写了三个页面

entry.html : 入口页面。输入 apikey ,然后选择去聊天或者去生成图画。

index.html : 聊天页面

draw.html : 生成图画页面

具体的一些 css ,或者如何生成聊天内容。具体就看 js 文件就行了

使用服务端推送

我注意到,chatgpt 回复的内容,是一点一点生成的。但是它可不是故意的。而是这样子用户感知上会比较快。
如果等全部内容都回复完再显示,可能需要等上好几秒。

在 chat 的api中,提供了一个 stream 参数 。那么服务端在回复的时候,是使用服务端推送的,也就是数据是一点一点推送过来的。而不是一次性返回!这样子可以快速的渲染出一些回复的内容,而不需要等待全部生成完再渲染

具体可以了解一下 :EventSource

不过, fetch api 可以处理返回的流数据。倒也不用使用 EventSource 了。

使用例子

FetchH 类 , 对 fetch 进行封装。这里参考了 axios 的一些思路。在请求时,就可以避免重复的配置

class FetchH {constructor(url, config = {}) {if (typeof url === 'string') {config.url = url} else if (typeof url === 'object') {config = url}this.config = config}request(body) {// 合并请求参数let d = {...this.config.body,...body}return fetch(this.config.url, {method: this.config.method,headers: this.config.headers,body: JSON.stringify(d)})}
}// 返回函数,可直接调用
function createFetchH(url, config) {let fh = new FetchH(url, config)return (fh.request).bind(fh)
}// 创建 fetch
fetchH = createFetchH('https://api.openai.com/v1/chat/completions', {method: "POST",headers: {'Content-Type': 'application/json','Authorization': 'Bearer ' + apiKey,},body: {model: "gpt-3.5-turbo",temperature: 0.3,stream: true,max_tokens: 1000}
})

sendMsg 发送请求 (有删减)

async function sendMsg() {fetchH({ messages: chatStack }).then(res => {// 获取 readerreturn res.body.getReader()}).then(reader => {// 读取内容return getStream(reader)})
}

getStream 读取数据

function getStream(reader, textEl) {let ans = '', _role = ''// 文本转码const utf8Decoder = new TextDecoder("utf-8");return _getStream()// 读取流数据function _getStream() {return reader.read().then(function (result) {// 如果数据已经读取完毕,直接返回if (result.done) {return {role: _role,content: ans}}let { role, content } = parseText(utf8Decoder.decode(result.value))if (role) {_role = role}if (content) {ans += content}// 逐步添加文字requestAnimationFrame(() => {textEl.innerHTML = parse(ans)scroll()})// 还有数据,继续读取return _getStream();})}
}

parseText 解析文本 , 获取后的数据是字符串。可能有多个 data , 进行进行分割

function parseText(text) {let info = {content: ''}// 默认以 \ndata 进行分割 (可能有问题)text.split(/\n(?=data:)/).forEach(v => {if (v === 'data: [DONE]\n\n') {return ''}let { role, content } = JSON.parse(v.slice(6)).choices[0].deltaif (role) {info.role = role}if (content) {info.content += content}})return info
}

依赖包

文本的显示,使用了 marked 库。它可以把 markdown 的字符串内容转换成 html 格式的字符串。

还使用了节流 。节流使用了 utils-h 。当然这个包还提供了许多的工具函数。有兴趣可以去了解了解


http://www.ppmy.cn/news/951216.html

相关文章

精心设计的ChatGPT网页版源码最聪明的镜像ChatGPT

demo软件园每日更新资源,请看到最后就能获取你想要的: 1.精心设计的 ChatGPT网页版源码 最聪明的镜像ChatGPT ChatGPT网页版源码 最聪明的镜像ChatGPT 支持GPT3.5turbo以及GPT4.0turbo的各种版本模型 精心设计的 UI,响应式设计,支持深色模式 极快的首…

2023全新UI商业版ChatGPT网页版源码V4.7.7+支持Ai绘画

正文: 安装教程: 搭建宝塔 解析域名 上传程序至根目录 配置数据库信息:lib/config.php 导入数据库 PHP选择:7.3 访问网页即可! 配置APIKEY,登录网站后台自定义配置,不然网站无法使用! 网站后台地址/admin 默认账号:admi…

【ChatGPT案例】ChatGPT帮你画漫画

【ChatGPT案例】ChatGPT帮你画漫画 这几天,心中一直有个想法:采用漫画的形式科普ChatGPT的发展过程。 但是漫画创作明显是个专业活,首先你需要好的构图想法,然后把心中的想法画出来。 怎么办?又该ChatGPT展现真正的…

ChatGPT与AI绘画,该上车了!

前几天的GPT-4发布会,大家都看了吗? ChatGPT有多么火爆多么强大?相信不需要再做解释,网上的各界精英早就讨论过无数次了。 自然语言处理工具这一新赛道,国内的同行也在积极参与,百度刚刚开了发布会&#xf…

详解CPU的态

目录 1.CPU的工作过程 2.寄存器 3.CPU的上下文 4.系统调用 5.CPU的态 1.CPU的工作过程 CPU要执行的指令的地址存在寄存器中,指令存放在内存中,而CPU本质上就是一个去内存中根据地址取指令,然后执行指令的硬件。 举一个例子&#xff1a…

最新ChatGPT网站源码运营版+支持ai绘画(Midjourney)+GPT4.0+GPT官方3.5key绘画+实时语音识别输入+后台一键版本更新!

最新ChatGPT网站源码运营版支持ai绘画GPT4.0GPT官方3.5key绘画实时语音识别输入后台一键版本更新! 1.网站系统源码介绍: 程序已支持ChatGPT4.0、Midjourney绘画、GPT3.5 API绘画、语音识别输入、用户会员套餐用户每日签到功能后台管理一键更新版本。支…

如何利用ChatGPT画图,无需插件,原生ChatGPT,实测有效

ChatGPT 很智能,很聪明。但是它被困在了互联网里,只能通过网页上的文字,和我们交流。 就像历史上的一个个有趣的灵魂,我们只能通过书中的文字和故事,才能领会到他们的千古风流。 纯文字的方式,还是太单…

最新ChatGPT商业运营版网站源码+支持AI绘画+支持用户会员套餐+友邀请分佣功能+后台一键更新+网站后台管理+永久更新!

最新ChatGPT商业运营版网站源码支持AI绘画支持用户会员套餐友邀请分佣功能后台一键更新网站后台管理永久更新! 程序已支持ChatGPT4.0、Midjourney绘画、GPT3.5 API绘画、语音识别输入、用户会员套餐用户每日签到功能后台管理一键更新版本。支持手机电脑不同布局页面…