基于Sanic(Python)和ChatGPT的超级简易聊天应用

文章目录

  • 一、项目简介:
  • 二、代码结构:
  • 三、具体代码:
    • main.py
    • templates/index.html
    • static/css/custom.css
    • static/js/custom.js
  • 四、使用方法:
    • 1. 安装依赖:
    • 2. 在main.py中替换自己的openai_key
    • 3. 运行项目:
    • 4. 打开浏览器,访问 http://localhost:8000 以查看聊天界面。
  • 五、完善建议:
  • 六、[代码在这里](https://download.csdn.net/download/fengtaokelly/87755940)


一、项目简介:

本项目是一个简易的聊天应用,基于Sanic Web框架搭建后端,使用Bootstrap 3和JavaScript搭建前端,通过调用ChatGPT API实现智能对话。项目包含一个简单的Token认证,以及一些页面的简单美化处理。

非常之简易,只有150行左右的代码(还包括很多空行)。前提是你得有openai的api_key,而且不建议在墙内搭建。

界面

二、代码结构:

├── main.py
├── templates
│   └── index.html
└── static├── css│   └── custom.css└── js└── custom.js

三、具体代码:

main.py

from sanic import Sanic
from sanic.response import json, text, html
from sanic.log import logger
from sanic.exceptions import Unauthorized
import openaiapp = Sanic(__name__)
app.static('/static', './static')openai.api_key = 'your_openai_key'
VALID_TOKEN = '2RTjaZSfgzLHW3in'@app.middleware('request')
async def check_token(request):if request.path == '/api/chat':token = request.headers.get('Authorization', '').split(' ')[-1]if token != VALID_TOKEN:raise Unauthorized('Invalid token')@app.get("/")
async def index(request):with open('templates/index.html', 'r', encoding='utf-8') as file:return html(file.read())@app.post('/api/chat')
async def api_chat_handler(request):chat_history = request.json.get('message', [])if not chat_history:return json({'error': 'Message cannot be empty'}, status=400)response = openai.ChatCompletion.create(model="gpt-3.5-turbo",temperature=0.7,messages=chat_history)logger.info(response)reply = response['choices'][0]['message']['content'].strip()return json({'reply': reply})if __name__ == '__main__':app.run(host='0.0.0.0', port=8000, dev=True)

templates/index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>ChatGPT</title><!-- 引入Bootstrap3 --><link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"><script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script><script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script><!-- 引入markdown-it库 --><script src="https://cdn.jsdelivr.net/npm/markdown-it/dist/markdown-it.min.js"></script><!-- 引入自定义的CSS和JS文件 --><link rel="stylesheet" href="/static/css/custom.css"><script src="/static/js/custom.js"></script>
</head>
<body><div class="container"><div class="row"><div class="col-md-8 col-md-offset-2"><h1 class="text-center">EasyChatGPT</h1><div id="chat-container" class="well"><!-- 聊天消息将显示在这里 --></div><form id="chat-form"><div class="form-group"><label for="token-input">Token:</label><input type="text" id="token-input" class="form-control" placeholder="Enter your token here..." value="2RTjaZSfgzLHW3in"></div><div class="input-group"><input type="text" id="user-input" class="form-control" placeholder="Type your message here..."><span class="input-group-btn"><button id="send-btn" class="btn btn-primary" type="submit">Send</button></span></div></form></div></div></div>
</body>
</html>

static/css/custom.css

body {font-family: Arial, sans-serif;margin-top: 50px;
}#chat-container {height: 400px;overflow-y: auto;border: 1px solid #ccc;border-radius: 4px;padding: 10px;background-color: #f8f8f8;
}.alert {padding: 10px;margin-bottom: 10px;border-radius: 4px;
}.alert-info {background-color: #d9edf7;border-color: #bce8f1;color: #31708f;
}.alert-warning {background-color: #fcf8e3;border-color: #faebcc;color: #8a6d3b;
}.input-group {margin-top: 20px;
}

static/js/custom.js

const chatHistory = [{role: 'system', content: '您现在是一位乐于助人的助手。'}
];
// 初始化markdown-it库
const md = window.markdownit();
$(document).ready(function () {document.getElementById('chat-form').addEventListener('submit', async (event) => {event.preventDefault();const userInput = document.getElementById('user-input');const tokenInput = document.getElementById('token-input');const message = userInput.value.trim();if (!message) return;// 显示用户发送的消息displayMessage('user', message);// 清空输入框userInput.value = '';// 调用后端API获取ChatGPT的回复const response = await fetch('/api/chat', {method: 'POST',headers: {'Content-Type': 'application/json', 'Authorization': `Bearer ${tokenInput.value}`},body: JSON.stringify({message: chatHistory})});if (response.ok) {const data = await response.json();displayMessage('assistant', data.reply);} else {displayMessage('error', JSON.stringify(await response.json()));}});});function displayMessage(type, message) {// 将新的消息添加到聊天记录chatHistory.push({role: type, content: message});console.log(chatHistory)const chatContainer = document.getElementById('chat-container');const messageDiv = document.createElement('div');messageDiv.className = type === 'user' ? 'alert alert-info' : 'alert alert-warning';// 如果消息来自助手,将Markdown转换为HTMLif (type === 'assistant') {message = md.render(message);}// 将消息内容设置为messageDiv的innerHTMLmessageDiv.innerHTML = message;chatContainer.appendChild(messageDiv);chatContainer.scrollTop = chatContainer.scrollHeight;
}

四、使用方法:

1. 安装依赖:

pip install -r requirements.txt

2. 在main.py中替换自己的openai_key

3. 运行项目:

python main.py

4. 打开浏览器,访问 http://localhost:8000 以查看聊天界面。

五、完善建议:

接口很慢,所以下一步准备先实现流式响应。之后可以考虑以下的建议来完善和提高聊天应用的功能和用户体验:

  1. 用户鉴权和注册:为了提高安全性,可以添加用户注册和登录功能。

  2. 持久化聊天历史记录:将用户的聊天历史记录保存在数据库中,如 SQLite、PostgreSQL 或 MongoDB。这样用户在不同设备上登录时,可以查看之前的聊天记录。

六、代码在这里

https://download.csdn.net/download/fengtaokelly/87755940

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

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

相关文章

如何评价OpenAI的超级对话模型ChatGPT?

Trinkle回答&#xff1a; 有幸参与ChatGPT训练的全过程。直接上想法&#xff1a; RLHF会改变现在的research现状&#xff0c;个人认为一些很promising的方向&#xff1a;在LM上重新走一遍RL的路&#xff1b;如何更高效去训练RM和RL policy&#xff1b;写一个highly optimized R…

2019美研计算机录取,2019美研录取更新 | 春节OFFER大集锦,没有比OFFER更好的新年礼物了!...

原标题&#xff1a;2019美研录取更新 | 春节OFFER大集锦&#xff0c;没有比OFFER更好的新年礼物了! 嗨&#xff0c;春节有比收到红包更让人激动的事儿吗&#xff1f; 有&#xff01;比如收到OFFER&#xff01; 继二月初惊喜地收获两枚斯坦福大学的硕士录取后&#xff0c; 过去的…

美研计算机案例,[04.23]公开课丨美研计算机专业分享,让你进军米国IT届

【4.23公开课】美研计算机专业分享&#xff0c;让你进军米国IT届 活动类型:线上活动 开始时间:2015-4-23 20:00 活动地点:天道公开课交流群274304450 性别要求:不限 如今申请赴美读研的人越来越多&#xff0c;一方面美国著名大学的研究生院占据了世界高校专业排名前列的半壁江山…

2019美研计算机录取,2019美研录取更新 | 哥伦比亚大学、芝加哥大学OFFER携手来袭...

原标题&#xff1a;2019美研录取更新 | 哥伦比亚大学、芝加哥大学OFFER携手来袭 福 临近春节 集五福活动又双叒叕来了 福气满满的日子里 连OFFER雨都密了起来!!!!!!!! 今天第一个要恭喜的是来自上海交通大学的L同学 跨学科申请收获哥伦比亚大学公共卫生专业及芝加哥大学生物医学…

2019美研计算机录取,2019美研录取更新 | 又到周五,是时候晒OFFER了!

原标题&#xff1a;2019美研录取更新 | 又到周五&#xff0c;是时候晒OFFER了&#xff01; 又到周五&#xff01; 捂了几天的OFFER们 是时候挑一些拿出来晒晒了。 【今日OFFER雨重点预告】 宾夕法尼亚大学博士全奖录取一枚 佐治亚理工学院博士全奖录取一枚 约翰霍普金斯大学硕士…

商汤版ChatGPT「商量」来了,开放API!

国产ChatGPT之战&#xff0c;已然是大步迈进白热化阶段。 就在刚刚&#xff0c;商汤正式发布自研类ChatGPT产品&#xff0c;名曰商量&#xff08;SenseChat&#xff09;。 单单是这个名字&#xff0c;便值得说道一番。 商量的“商”&#xff0c;不仅体现了它是商汤自家“商字辈…

一加(oneplus)7 pro刷nethunter与Linux 下刷新版Android 9(P)手机(root)

在三年前我买了op3就为了刷nh&#xff0c;三年后我又买了一加&#xff0c;然而以为nh不怎么更新了就没想着要去刷。昨天看私信就突然去看了一眼&#xff0c;发现居然有op7/7p的刷机包&#xff0c;结果果断刷了&#xff08;不能白瞎这12GB的内存啊&#xff09;。 总体上来说nh的…

ChatGPT露馅了,它明明就是人

让人工智能理解句子成分和语义&#xff0c;这看起来是件不可能的事&#xff0c;看过流浪地球的都知道&#xff0c;那里面的人工智能哪怕发展到2057年&#xff0c;也听不懂比喻和反问。 那最近大火的chatGPT能不能听懂冷笑话呢&#xff1f;它不仅能写代码、论文&#xff0c;居然…

ChatGPT是有点中文在身上的:鲁迅、脱口秀甚至世界杯…都被玩宕机了

各大社交平台&#xff0c;最近突然掀起了一股晒聊天记录的热潮。 对方是个有求必应的角色&#xff0c;让它扮演虚拟女友、写论文、编请假理由&#xff0c;通通满足要求。 这中文能力、沟通技巧、知识水平……直接引得网友一水儿“牛X、无敌”。甚至有人说&#xff0c;强得令人…

短视频文案怎么写?优质短视频文案写作技巧

抖音短视频的质量仔细推敲起来确实会涉及到非常多的因素&#xff0c;但真正决定你视频曝光的关键就是视频文案&#xff0c;从剧情的铺垫、冲突、反转&#xff0c;这在一定程度上能够吸引不少的观众。 又或者小说开篇要么叙述宏达的故事背景&#xff0c;要么制造悬念。否则很难让…

快速提取视频中的文案字幕,短视频创作者必看

你会写短视频文案吗&#xff1f; 有没有被那几十个字绞尽脑汁&#xff1f; 当今众多短视频爱好者进行作品制作时&#xff0c;会大量借鉴同类型短视频文案&#xff0c;需要用到视频中的字幕&#xff0c;那么怎么把视频里的字幕提取出来呢&#xff1f; 你可能说&#xff0c;这不…

五大爆款单视频开头,学会做短视频很轻松

就短视频目前的现状而言&#xff0c;内容同质化高&#xff0c;内卷严重&#xff0c;好的开头是成功的一半。可以说&#xff0c;5秒完播率决定流量大小 。 这珍贵的5秒开头&#xff0c;就叫钩子开头&#xff0c;直接把走过路过的观众钩住。 当然&#xff0c;想要视频起量&…

短视频如何创作出吸引人的爆款文案

今天要给大家分享的就是如何对视频介绍中的文案进行创作。视频的介绍文案&#xff1a;问句互动&#xff0c;调动情绪文案主要有几个大类&#xff1a;互动、叙述、悬念、段子、恐吓、共谋……而这些方法都是为了调动情绪&#xff08;包括积极情绪和消极情绪&#xff09;。 一、文…

演讲类或观点类的爆款短视频脚本是怎样写出来的?模板分享

演讲类或观点类的爆款短视频脚本是怎样写出来的&#xff1f;模板分享 今天刷到一个讲全职妈妈价值的短视频&#xff0c;点赞量近千万&#xff0c;拆解分析了一下。 加上最近在我赢助手小禾呈序学到的观点类短视频脚本文案的模板&#xff0c;分析给大家看看&#xff1a; 第一部…

从趋势、风格和文案三方面,分析短视频封面这样设计更吸引人。

大家好&#xff0c;我是我赢助手&#xff0c;专注于新媒体短视频去水印、去重和文案提取运营的自媒体&#xff01;今天给大家聊一下短视频封面设计的内容。 什么是短视频封面&#xff1f;短视频的封面是短视频里最能体现视频风格及特性的部分&#xff0c;同时也是最能吸引用户…

爆款短视频速成技巧之视频发布篇,短视频介绍文案怎么写(下)

前面几篇我们讨论了短视频定位&#xff0c;怎么写文案脚本&#xff0c;怎么拍摄以及后期剪辑&#xff0c;至此我们一个优质的短视频已经制作完成&#xff0c;今天我们就聊一下下一个环节&#xff1a;短视频的发布 剪辑好的优质短视频怎么发布才能成为爆款视频&#xff1f;短视…

全网超火的情感文案号视频是怎么制作的?

我们平时刷视频的视频&#xff0c;经常可以看到很多文案类视频&#xff0c;精美的图片、伤感的BGM迅速抓住我们的目光&#xff0c;成功的让用户点赞关注了。这一类账号在网上很火&#xff0c;通常我们所能见到的就是一段文案视频/图片旁白配音&#xff0c;其实这类账号很适合刚…

Cocos Creator 3.x 热更新,使用chatgpt快速定位解决问题

为什么要使用app热更 使用 app 热更的主要原因是可以快速地向用户推送应用程序的更新版本&#xff0c;同时也可以减少应用程序更新时需要用户手动下载和安装的次数&#xff0c;从而提高用户体验和应用程序的可维护性。以下是一些使用 app 热更的好处&#xff1a; 快速发布更新…

ChatGPT会取代你的岗位吗?

最近火热的ChatGPT使得相关的大数据和人工智能人才成了香饽饽&#xff0c;科技巨头、头部猎企纷纷下场抢人&#xff0c;人才供不应求。不同规模公司纷纷展开大数据和人工智能相关技术和业务的研究&#xff0c;大数据和人工智能人才已经成为科技进步核心驱动力。同时&#xff0c…

【极客技术】ColossalChat用完整RLHF技术克隆ChatGPT的开源解决方案

原文&#xff1a;ColossalChat: An Open-Source Solution for Cloning ChatGPT With a Complete RLHF Pipeline​​​​​​​ 作者&#xff1a;Yang You&#xff0c;新加坡国立大学青年教授。他在加州大学伯克利分校获得计算机科学博士学位。 ColossalChat:一个用完整RLHF管道…