ChatGPT中文版源码

ChatGPT最近很火爆大家都知道吧,今天废话不多说 直接给大家带来一个ChatGPT中文版的源码

先对整体进行一个介绍,这套源码界面很有科技感,其次是功能方面有专门的指令输入框,让你可以舒舒服服的玩转你手中的prompts

其次有黑夜和白天两个模式以及回到顶部功能

下面废话不多说 直接上代码

由于代码太多 我直接放前端页面的代码

代码是基于nodejs写的

下面是header文件

---
import Logo from './Logo.astro'
import Themetoggle from './Themetoggle.astro'
---<header><div class="flex justify-between"><Logo /><Themetoggle /></div><div class="flex items-center mt-2">
<span class="text-2xl text-slate font-extrabold mr-1">CTGPT.</span>
<span class="text-2xl text-transparent font-extrabold bg-clip-text bg-gradient-to-r from-sky-400 to-emerald-600">CN</span>
</div>
<p mt-1 text-slate op-60>基于 OpenAI API (gpt-3.5-turbo)开发.</p> 
</header>

下面是footer文件

<footer><p mt-8 text-xs op-30><br><aborder-b border-slate border-none hover:border-dashedhref="https://wwji.lanzouf.com/iVoeB0o7wrxe" target="_blank">安卓端下载<span px-1>|</span></a><aborder-b border-slate border-none hover:border-dashedhref="https://wwji.lanzouf.com/iYlRb0o7wryf" target="_blank">苹果端下载(safari打开安装需要去设置描述文件安装)</a></p><script charset="UTF-8" id="LA_COLLECT" src="//sdk.51.la/js-sdk-pro.min.js"></script>
<script>LA.init({id:"Jzntbyt4gmLpmsXz",ck:"Jzntbyt4gmLpmsXz"})</script>
<script>
var _hmt = _hmt || [];
(function() {var hm = document.createElement("script");hm.src = "https://hm.baidu.com/hm.js?5aff25b20308b19618d1ea0a4797216b";var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s);
})();
</script></p>
</footer>

下面是问题框代码

import type { ChatMessage } from '@/types'
import { createSignal, Index, Show } from 'solid-js'
import IconClear from './icons/Clear'
import MessageItem from './MessageItem'
import SystemRoleSettings from './SystemRoleSettings'
import _ from 'lodash'
import { generateSignature } from '@/utils/auth'export default () => {let inputRef: HTMLTextAreaElementconst [currentSystemRoleSettings, setCurrentSystemRoleSettings] = createSignal('')const [systemRoleEditing, setSystemRoleEditing] = createSignal(false)const [messageList, setMessageList] = createSignal<ChatMessage[]>([])const [currentAssistantMessage, setCurrentAssistantMessage] = createSignal('')const [loading, setLoading] = createSignal(false)const [controller, setController] = createSignal<AbortController>(null)const handleButtonClick = async () => {const inputValue = inputRef.valueif (!inputValue) {return}// @ts-ignoreif (window?.umami) umami.trackEvent('chat_generate')inputRef.value = ''setMessageList([...messageList(),{role: 'user',content: inputValue,},])requestWithLatestMessage()}const throttle =_.throttle(function(){window.scrollTo({top: document.body.scrollHeight, behavior: 'smooth'})}, 300, {leading: true,trailing: false})const requestWithLatestMessage = async () => {setLoading(true)setCurrentAssistantMessage('')const storagePassword = localStorage.getItem('pass')try {const controller = new AbortController()setController(controller)const requestMessageList = [...messageList()]if (currentSystemRoleSettings()) {requestMessageList.unshift({role: 'system',content: currentSystemRoleSettings(),})}const timestamp = Date.now()const response = await fetch('/api/generate', {method: 'POST',body: JSON.stringify({messages: requestMessageList,time: timestamp,pass: storagePassword,sign: await generateSignature({t: timestamp,m: requestMessageList?.[requestMessageList.length - 1]?.content || '',}),}),signal: controller.signal,})if (!response.ok) {throw new Error(response.statusText)}const data = response.bodyif (!data) {throw new Error('No data')}const reader = data.getReader()const decoder = new TextDecoder('utf-8')let done = falsewhile (!done) {const { value, done: readerDone } = await reader.read()if (value) {let char = decoder.decode(value)if (char === '\n' && currentAssistantMessage().endsWith('\n')) {continue}if (char) {setCurrentAssistantMessage(currentAssistantMessage() + char)}throttle()}done = readerDone}} catch (e) {console.error(e)setLoading(false)setController(null)return}archiveCurrentMessage()}const archiveCurrentMessage = () => {if (currentAssistantMessage()) {setMessageList([...messageList(),{role: 'assistant',content: currentAssistantMessage(),},])setCurrentAssistantMessage('')setLoading(false)setController(null)inputRef.focus()}}const clear = () => {inputRef.value = ''inputRef.style.height = 'auto';setMessageList([])setCurrentAssistantMessage('')setCurrentSystemRoleSettings('')}const stopStreamFetch = () => {if (controller()) {controller().abort()archiveCurrentMessage()}}const retryLastFetch = () => {if (messageList().length > 0) {const lastMessage = messageList()[messageList().length - 1]console.log(lastMessage)if (lastMessage.role === 'assistant') {setMessageList(messageList().slice(0, -1))requestWithLatestMessage()}}}const handleKeydown = (e: KeyboardEvent) => {if (e.isComposing || e.shiftKey) {return}if (e.key === 'Enter') {handleButtonClick()}}return (<div my-6><SystemRoleSettingscanEdit={() => messageList().length === 0}systemRoleEditing={systemRoleEditing}setSystemRoleEditing={setSystemRoleEditing}currentSystemRoleSettings={currentSystemRoleSettings}setCurrentSystemRoleSettings={setCurrentSystemRoleSettings}/><Index each={messageList()}>{(message, index) => (<MessageItemrole={message().role}message={message().content}showRetry={() => (message().role === 'assistant' && index === messageList().length - 1)}onRetry={retryLastFetch}/>)}</Index>{currentAssistantMessage() && (<MessageItemrole="assistant"message={currentAssistantMessage}/>)}<Showwhen={!loading()}fallback={() => (<div class="h-12 my-4 flex gap-4 items-center justify-center bg-slate bg-op-15 rounded-sm"><span>AI正在思考中...</span><div class="px-2 py-0.5 border border-slate rounded-md text-sm op-70 cursor-pointer hover:bg-slate/10" onClick={stopStreamFetch}>停止</div></div>)}><div class="my-4 flex items-center gap-2 transition-opacity" class:op-50={systemRoleEditing()}><textarearef={inputRef!}disabled={systemRoleEditing()}onKeyDown={handleKeydown}placeholder="问些问题吧..."autocomplete="off"autofocusonInput={() => {inputRef.style.height = 'auto';inputRef.style.height = inputRef.scrollHeight + 'px';}}rows="1"w-fullpx-3 py-3min-h-12max-h-36rounded-smbg-slatebg-op-15resize-nonefocus:bg-op-20focus:ring-0focus:outline-noneplaceholder:op-50dark="placeholder:op-30"scroll-pa-8px/><button onClick={handleButtonClick} disabled={systemRoleEditing()} h-12 px-4 py-2 bg-slate bg-op-15 hover:bg-op-20 rounded-sm>Send</button><button title="Clear" onClick={clear} disabled={systemRoleEditing()} h-12 px-4 py-2 bg-slate bg-op-15 hover:bg-op-20 rounded-sm><IconClear /></button></div></Show></div>)
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/30.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何将文档上传到 ChatGPT

OpenAI 一直在为 ChatGPT 添加几个有趣的功能&#xff0c;包括对网页浏览和插件的支持。但是&#xff0c;仍然没有办法本地上传文档并根据其上下文提出问题。当然&#xff0c;有些用户可以在他们的数据上训练 AI 聊天机器人&#xff0c;但并不是每个人都了解如何设置工具和库。…

调用ChatGPT API

安装 pip install openai找到openai.api_key 首先登录到OpenAI API界面(https://platform.openai.com/)&#xff0c;点击右上角的账号弹出的列表中&#xff0c;点击view API keys。跳转到API key界面&#xff0c;点击Create new secret key(如果你已经生成过key并且记录下来就…

ChatGPT 简介

目录 1 背景与发展历程1.1 背景1.2 发展历程 2 技术原理2.1 第一阶段&#xff1a;训练监督策略模型2.2 第二阶段&#xff1a;训练奖励模型2.3 第三阶段&#xff1a;采用强化学习来增强模型的能力。 3 国内使用情况及应用的领域4 面临的数据安全挑战与建议4.1 ChatGPT获取数据产…

ChatGPT调研

ChatGPT调研 背景&#xff1a;ChatGPT简单介绍FINETUNED LANGUAGE MODELS ARE ZERO-SHOT LEARNERSFine-Tuning Language Models from Human PreferencesLearning to Summarize with Human FeedbackTraining language models to follow instructions with human feedbackChatGPT…

chatGPT

目录 前言一、chatGPT是什么&#xff1f;二、chatGPT存在对现社会各方面的影响1.学生2.公司3.名人 三、意义四、缺点五、态度六、总结 前言 近些天来&#xff0c;相信大家都被charGPT刷屏了&#xff0c;那么接下来我想就个人的观点讨论一下其影响与意义所在&#xff0c;并且对…

国内几款强大的语言模型

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

ChatGPT简单介绍:

目录 ChatGPT介绍:一、ChatGPT是什么?二、ChatGPT发展:三、ChatGPT 优点:五、结语: ChatGPT介绍: 一、ChatGPT是什么? ChatGPT 是一个基于语言模型 GPT-3.5 的聊天机器人&#xff0c;ChatGPT模型是Instruct GPT的姊妹模型&#xff08;siblingmodel&#xff09;&#xff0c;使…

一文读懂ChatGPT(全文由ChatGPT撰写)

最近ChatGPT爆火&#xff0c;相信大家或多或少都听说过ChatGPT。到底ChatGPT是什么&#xff1f;有什么优缺点呢&#xff1f; 今天就由ChatGPT自己来给大家答疑解惑~ 全文文案来自ChatGPT&#xff01; 01 ChatGPT是什么 ChatGPT是一种基于人工智能技术的自然语言处理系统&…

铲特-姬劈蹄的N种用法(持续更新中。。。)

目录 前言一、语法更正二、文本翻译三、语言转换3-1、Python-->JAVA 四、代码解释-1五、代码解释-2六、修复代码错误七、作为百科全书八、信息提取九、好友聊天十、创意生成器10-1、VR和密室结合10-2、再结合AR 十一、采访问题11-1、采访问题清单11-2、采访问题清单并给出相…

ChatGPT百科全书(全网最全面)

引言 ChatGPT是什么&#xff1f; ChatGPT是一款先进的自然语言处理&#xff08;NLP&#xff09;模型&#xff0c;由OpenAI开发和维护。它基于OpenAI的第四代生成预训练Transformer&#xff08;GPT-4&#xff09;架构&#xff0c;旨在通过深度学习技术理解和生成人类语言。Chat…

几款强大的工具

&#x1f4ac; 如果文章对你有帮助&#xff0c;欢迎关注、点赞、收藏和订阅专栏哦 为使用人工智能编程而构建的编辑器&#xff0c;一款人工智能编程软件、智能Ai代码生成工具。提高客户服务水平&#xff1a;它可以通过自然语言处理技术&#xff0c;快速、准确地回答客户的问题…

SpringCloud(五)Gateway 路由网关

一、路由网关 官网地址&#xff1a;https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/ 我们需要连接互联网&#xff0c;那么就需要将手机或是电脑连接到家里的路由器才可以&#xff0c;而路由器则连接光猫&#xff0c;光猫再通过光纤连接到互联网&a…

基于C语言设计的足球信息查询系统

完整资料进入【数字空间】查看——baidu搜索"writebug" 需求分析与概要设计 2.1 项目说明 我们小组的选题主要是面向足球爱好者&#xff0c;在普通社交软件的基础之上&#xff0c;围绕足球的主题展开设计&#xff0c;以便于他们能够更好的交流相关的话题&#xff…

python selenium.webdriver 爬取政策文件

文章目录 获取文章链接批量爬取政策文件应用selenium爬取文件信息数据处理导出为excel 获取文章链接 获取中央人民政府网站链接&#xff0c;进入国务院政策文件库&#xff0c;分为国务院文件和部门文件&#xff08;发改委、工信部、交通运输部、市场监督局、商务部等&#xff…

C语言-排序,初识指针

目录 【1】冒泡排序&#xff08;从小到大&#xff09; 【2】选择排序 【3】二维数组 【4】指针 【5】指针修饰 【6】大小端 【7】初见二级指针 练习&#xff1a; 【1】冒泡排序&#xff08;从小到大&#xff09; #include <stdio.h> //数组哪里的\0?自己和字符串…

异步任务——CompletabelFuture

本专栏学习内容又是来自尚硅谷周阳老师的视频 有兴趣的小伙伴可以点击视频地址观看 在学习CompletableFuture之前&#xff0c;必须要先了解一下Future Future 概念 Future接口&#xff08;FutureTask实现类&#xff09;定义了操作异步任务执行的一些方法&#xff0c;如获取异…

Android应用启动全流程分析(源码深度剖析)

作者&#xff1a;努比亚技术团队 源码来源&#xff1a;努比亚技术团队 1.前言 从用户手指点击桌面上的应用图标到屏幕上显示出应用主Activity界面而完成应用启动&#xff0c;快的话往往都不需要一秒钟&#xff0c;但是这整个过程却是十分复杂的&#xff0c;其中涉及了Android系…

【java】【基础2】程序流程控制

目录 一、最经典的三种执行顺序 二、分支结构 2.1 if 2.2 switch 2.3 if与switch区别 三、循环结构 3.1 for循环 3.2 while循环 3.3 do-while循环 3.4 三种循环区别 3.5 补充知识&#xff1a;死循环 3.6 补充知识&#xff1a;循环嵌套 四、跳转关键字&#xff1a;br…

自建DNSlog服务器

DNSlog简介 在某些情况下&#xff0c;无法利用漏洞获得回显。但是&#xff0c;如果目标可以发送DNS请求&#xff0c;则可以通过DNS log方式将想获得的数据外带出来。 DNS log常用于以下情况&#xff1a; SQL盲注无回显的命令执行无回显的SSRF 网上公开提供dnslog服务有很多…

MySQL 主从复制与读写分离

概念 主从复制与读写分离的意义 企业中的业务通常数据量都比较大&#xff0c;而单台数据库在数据存储、安全性和高并发方面都无法满足实际的需求&#xff0c;所以需要配置多台主从数据服务器&#xff0c;以实现主从复制&#xff0c;增加数据可靠性&#xff0c;读写分离&#x…