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

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

时间2025-09-18 20:23:42分类IT科技浏览5309
导读:前言 本文的原文连接是: 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
chat gpt 4.0官网有手机版吗(ChatGPT进阶-提示词中文版) vue中axios的使用(Vue中axios的基本用法)