首页IT科技chatopenaicom打不开(【chatgpt】学习开源项目chatgpt-web,搭建自己的chatgpt服务,功能非常丰富有打字效果)

chatopenaicom打不开(【chatgpt】学习开源项目chatgpt-web,搭建自己的chatgpt服务,功能非常丰富有打字效果)

时间2025-07-29 18:41:59分类IT科技浏览4703
导读:前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/130438873...

前言

本文的原文连接是:

https://blog.csdn.net/freewebsys/article/details/130438873

1               ,开源的chatgpt项目

项目地址:

https://github.com/Chanzhaoyu/chatgpt-web

也有gitee搬运的项目                     ,不知道是不是作者       ,最近也在更新:

https://gitee.com/boomer001/chanzhaoyu-chatgpt-web

项目从23年2月份开始               ,到目前项目已经有了很高的星星 20K 了               。

项目的前端使用的是vue进行开发的                     。

项目的后端使用的nodejs 进行开发的                      ,全栈项目了       。

而且也官方的docker 镜像       ,直接配置起来就可以了               。

2       ,项目可以直接使用docker-compose跑起来

从第二步骤讲起                      ,apikey 如何申请              ,不在这里讨论       ,大家可以自行解决                      。

官方也有简单的使用docker-compose 配置                      ,这个整理了下就配置下apikey 就行了:

docker-compose.yaml 配置文件:

services: app: restart: always image: chenzhaoyu94/chatgpt-web # 总是使用 latest ,更新时重新 pull 该 tag 镜像即可 ports: - 3002:3002 #volumes: #要是想自己修改页面              ,可以吧dist映射到/app/pulbic目录即可       。 # - ./chatgpt-web/dist:/app/public environment: # 二选一 OPENAI_API_KEY: sk-xxxxxxx # 二选一 # API接口地址,可选                      ,设置 OPENAI_API_KEY 时可用 OPENAI_API_BASE_URL: http://localhost:3002 # API模型                     ,可选,设置 OPENAI_API_KEY 时可用 OPENAI_API_MODEL: gpt-3.5-turbo # 访问权限密钥               ,可选 AUTH_SECRET_KEY: chat666 # 超时                     ,单位毫秒       ,可选 TIMEOUT_MS: 60000

要是想自己修改页面               ,可以吧dist映射到/app/pulbic目录即

./chatgpt-web/dist:/app/public

chatgpt-web 就是这个github 项目下载后的地址       。

当然也可以直接使用nodejs跑起来                      ,分前后端的       ,前端项目也需要进行编译                      。

启动成功:

有登陆授权提示       ,需要输入配置的 auth 密码 比如chat666               。

要是错登陆不进去                      ,当然这个是一个简单的授权       。

登陆成功之后就可以使用了

带打字模式回答问题              ,这个地方就需要注意了                      。

3       ,关于打字模式SSE                      , octet-stream (打字特效)

SSE 是指“Server-Sent Events              ”              ,它是一种基于 HTTP 的服务器推送技术              。使用 SSE 可以让服务器向客户端发送事件流,从而实现实时的数据更新和通知功能。SSE 协议基于 HTML5 标准                      ,支持跨域通信                     ,并且与 Web Sockets 不同,它是一种单向通信方式               ,即只能由服务器向客户端发送消息                      。在浏览器中                     ,可以通过 JavaScript 的 EventSource API 来实现对 SSE 事件流的监听和处理                     。

H5的一个新协议       ,这里需要注意下               ,如果是直接暴露端口不用管。

但是要是需要使用nginx进行转发的就需要修改nginx配置了               。

这里折腾了几天才弄明白                      ,官方也给了解决办法       ,配置nginx的 octet-stream (打字特效)配置:

参考这个:

https://github.com/Chanzhaoyu/chatgpt-web/issues/402

也就是需要在nginx 配置后端接口:

location ~ ^/api/chat-process { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; # 流式输出 chunked_transfer_encoding on; # 开启分块传输编码 tcp_nopush on; # 开启TCP NOPUSH选项       ,禁止Nagle算法 tcp_nodelay on; # 开启TCP NODELAY选项                      ,禁止延迟ACK算法 keepalive_timeout 300; # 设定keep-alive超时时间为65秒 proxy_pass http://app:3002; }

返回的数据格式是数组              ,照回车 \n 进行区分       ,然后才是数据                     。

返回一个或者几个字词然后                      ,界面上就有打字效果了:

项目中的处理函数:

const fetchChatAPIOnce = async () => { await fetchChatAPIProcess<Chat.ConversationResponse>({ prompt: message, options, signal: controller.signal, onDownloadProgress: ({ event }) => { const xhr = event.target const { responseText } = xhr // Always process the final line const lastIndex = responseText.lastIndexOf(\n, responseText.length - 2) let chunk = responseText if (lastIndex !== -1) chunk = responseText.substring(lastIndex) try { const data = JSON.parse(chunk) updateChat( +uuid, index, { dateTime: new Date().toLocaleString(), text: lastText + (data.text ?? ), inversion: false, error: false, loading: true, conversationOptions: { conversationId: data.conversationId, parentMessageId: data.id }, requestOptions: { prompt: message, options: { ...options } }, }, ) if (openLongReply && data.detail.choices[0].finish_reason === length) { options.parentMessageId = data.id lastText = data.text message = return fetchChatAPIOnce() } } catch (error) { // } }, })

项目中一共有4个接口:

/api/config 配置的接口              ,返回使用情况,配置信息       。

/api/session 返回模型信息               。这个成 功之后才可以进行聊天                      。

/api/verify 校验用户登陆状态       。

/api/chat-process 最重要的用户聊天对话消息处理                      ,使用了 SSE 模拟打字       。

同时这个项目中还可以开启多个对话                     ,记录上次对话内容                      。

比如先问上海的景点:

然后在问三个最好的,这时候chatgpt 就知道是上海的景点:

这个前端样式使用 naiveui

https://www.naiveui.com/zh-CN/os-theme

github 地址:

https://github.com/tusen-ai/naive-ui

只是手机端和pc端样式自适应              。

4               ,关于内容存储

这个项目采取的是将相关的聊天信息存储到本地文件中       。

在localstorage 中                     ,优点是效率高       ,速度快                      。

在 uitls/storage/local.ts 使用的是

window.localStorage.setItem(key, json)

window.localStorage.getItem(key)

window.localStorage.removeItem(key)

window.localStorage.clear()

存储相关的信息               ,都存储到了一个字段中了              。

分chat和 history 两个属性。

active 是激活的当前会话id

就是当前的时间戳:

chatStore.addHistory({ title: New Chat, uuid: Date.now(), isEdit: false })

这里鉴权是做的写死的设置:

service.interceptors.request.use( (config) => { const token = useAuthStore().token if (token) config.headers.Authorization = `Bearer ${token}` return config }, (error) => { return Promise.reject(error.response) }, )

直接在head里面写死的                      ,但是这样并不安全                      。

服务器授权如果使用 jwt 可以修改 verify 接口                     。

服务端返回 jwt 的授权       ,然后本地存储。

在拦截器里面都使用 jwt的鉴权       ,或者是直接存储到 cookie当中也行                      ,但是会有跨域的问题需要解决               。

5              ,总结

最近在使用chatgpt发现确实可以非常方便的提高效率的                     。

对于开发上面的各种问题的解决也是帮助非常大的       。

同时在使用大模型的服务上也会有很多的工程问题需要解决               。

一些登陆授权的还是常用的软件知识       ,都需要掌握进行学习                      。

这个开源项目非常的好!非常值得推荐!

本文的原文连接是:

https://blog.csdn.net/freewebsys/article/details/130438873
声明:本站所有文章                      ,如无特殊说明或标注              ,均为本站原创发布       。任何个人或组织,在未征得本站同意时                      ,禁止复制               、盗用                     、采集       、发布本站内容到任何网站               、书籍等各类媒体平台       。如若本站内容侵犯了原著者的合法权益                     ,可联系我们进行处理                      。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
seo前景和职业发展方向的区别(探索SEO职业的发展前景) 前端上传图片到后端如何拿到上传图片的路径(后台给前端传图片,Base64)