当前位置:   article > 正文

12.30更新5$key!2023最新Python搭建个人ChatGPT流式输出网站(包含源码、免费gpt3.5/4网址、以及免费测试apikey)快来体验吧!!!_gpt-4, gpt-3.5-turbo, gpt-3.5-turbo-0301 源码pythion

gpt-4, gpt-3.5-turbo, gpt-3.5-turbo-0301 源码pythion csdn
ps:在这里提前祝各位小伙伴们新年快乐哦!!!

本期文章为纯免费资源分享,欢迎交流分享你的学习经验!2023年12月30日最新python实现流式输出gpt网站搭建的源码:

目录

1.python源码

2.网站效果演示

3.html源码


1.python后端源码

如下为python后端源码:

  1. from flask import Flask, render_template, request, Response, jsonify
  2. import openai #openai使用0.28.0版本,urllib3使用1.26.2版本
  3. import random
  4. # 设置代理网址
  5. openai.api_base = "https://api.openai-proxy.com/v1"
  6. # 替换为您自己的OpenAI API密钥列表,如下key供各位测试,12.30已更新,新年快乐!用完提醒我,哈哈~~~
  7. api_keys = [
  8. "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",
  9. ]
  10. # 创建Flask应用程序
  11. app = Flask(__name__)
  12. # 定义可供选择的模型,已经更新gpt所有14个模型
  13. available_models = {
  14. "gpt-3.5-turbo-1106": "GPT-3.5-Turbo-1106(4096tokens)",
  15. "gpt-3.5-turbo": "GPT-3.5-Turbo(4096tokens)",
  16. "gpt-3.5-turbo-16k": "GPT-3.5-Turbo-16k(16385tokens)",
  17. "gpt-3.5-turbo-0613": "GPT-3.5-Turbo-0613(4096tokens)",
  18. "gpt-3.5-turbo-16k-0613": "GPT-3.5-Turbo-16k-0613(16385tokens)",
  19. "gpt-3.5-turbo-0301": "GPT-3.5-Turbo-0301(4096tokens)",
  20. "gpt-4-1106-preview": "GPT-4-1106-preview(4096tokens,max:128000tokens)",
  21. "gpt-4-vision-preview": "GPT-4-vision-preview(4096tokens,max:128000tokens)",
  22. "gpt-4": "GPT-4(8192tokens)",
  23. "gpt-4-0613": "GPT-4-0613(8192tokens)",
  24. "gpt-4-32k": "GPT-4-32k(32768tokens)",
  25. "gpt-4-32k-0613": "GPT-4-32k-0613(32768tokens)",
  26. "gpt-4-0314": "GPT-4-0314(8192tokens)",
  27. "gpt-4-32k-0314": "GPT-4-32k-0314(32768tokens)",
  28. }
  29. messages = []
  30. @app.route('/')
  31. def index():
  32. return render_template('8.html', models=available_models)
  33. @app.route('/clear_history', methods=['POST'])
  34. def clear_history():
  35. messages.clear() # 清除所有对话历史
  36. return jsonify({"message": "对话历史已清除"})
  37. @app.route('/get_response', methods=['POST'])
  38. def get_response():
  39. user_input = request.json.get('user_input')
  40. selected_model = request.json.get('selected_model')
  41. system_message = request.json.get('system_message')
  42. temperature = float(request.json.get('temperature'))
  43. max_tokens = int(request.json.get('max_tokens'))
  44. continuous_chat = request.json.get('continuous_chat')
  45. print("用户输入内容:", user_input)
  46. if continuous_chat == "false":
  47. messages.clear() # 只有在禁用连续对话时清空消息列表
  48. messages.append({"role": "system", "content": system_message})
  49. messages.append({"role": "user", "content": user_input})
  50. else:
  51. messages.append({"role": "system", "content": system_message})
  52. messages.append({"role": "user", "content": user_input})
  53. selected_api_key = random.choice(api_keys)
  54. openai.api_key = selected_api_key.strip()
  55. print(openai.api_key)
  56. if len(messages) > 2:
  57. messages.pop(0)
  58. response = openai.ChatCompletion.create(
  59. model=selected_model,
  60. messages=messages,
  61. temperature=temperature,
  62. max_tokens=max_tokens,
  63. stream=True
  64. )
  65. def get_stream(tar_get_response):
  66. for chunk in tar_get_response:
  67. chunk_message = chunk['choices'][0]['delta']
  68. print(chunk_message)
  69. if chunk_message != "":
  70. try:
  71. content = chunk_message["content"]
  72. for line in content.split("\n"):
  73. messages.append({"role": "assistant", "content": line})
  74. yield line
  75. print("GPT回复内容:", line)
  76. except:
  77. yield "\n"
  78. response = Response(get_stream(response),content_type='text/html')
  79. return response
  80. if __name__ == '__main__':
  81. app.run('0.0.0.0', 80)

2.网站效果演示

源码如上(12.09已更新测试apikey),包括连续对话等功能,功能展示如下图,如下网站分别为gpt3.5和gpt4(余额有限,速来体验!),均为本人自己搭建网站,可免费使用。

GPT-3.5-Turbo

GPT-4-Turbo:

ps:免费福利放送中,欢迎体验:

supergpt shopicon-default.png?t=N7T8https://6.ccfgpt.cn

下面也是本人搭建的几个gpt网站,分别是GPT3.5(余额总共400$,12.26更新:nextweb添加gemini模型,12.30更新另一种风格的gpt3.5网页)和GPT4、Gemini Pro,比较实用,目前完全免费,可以使用所有gpt模型,无须翻墙和填写密钥,目前GPT4的余额有限(12.26充值!!!余额10$,解锁dalle3以及各种插件体验),先到先体验哦!!设置好gpt模型(推荐1106模型,速度快)等参数直接就可以使用gpt进行对话,欢迎各位朋友们前来体验,可以加q群学习交流(226848325):

ChatGPT-3.5icon-default.png?t=N7T8https://ccf666.cn

ChatGPT-boticon-default.png?t=N7T8https://supergpt.shop 

 

ChatGPT-4icon-default.png?t=N7T8https://chatpro.icu

无限制使用gemini模型:

Gemini Proicon-default.png?t=N7T8http://ccfgpt.cn

3.html前端源码

最后html前端的基本模板如下,可以添加自己需要的样式和风格:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>GPT-3.5</title>
  7. <style>
  8. </style>
  9. </head>
  10. <body>
  11. <div class="container">
  12. <h1>GPT-3.5</h1>
  13. <div>
  14. <label class="conversation-label">系统角色:</label><br>
  15. <input type="text" id="system-message" class="input-box" placeholder="输入gpt的预设角色">
  16. </div>
  17. <div>
  18. <label class="conversation-label">用户输入框:</label><br>
  19. <textarea id="user-input" class="input-box" placeholder="2023.11.08已更流式快速响应,快来体验吧!!! "></textarea>
  20. </div>
  21. <div>
  22. <label class="conversation-label">选择GPT模型(5种):</label><br>
  23. <select id="model-select" class="input-box">
  24. {% for key, value in models.items() %}
  25. <option value="{{ key }}">{{ value }}</option>
  26. {% endfor %}
  27. </select>
  28. </div>
  29. <div>
  30. <label class="conversation-label">温度(Temperature):</label><br>
  31. <input type="float" id="temperature" class="input-box" placeholder="范围>=0,接近0倾向连贯性,越大倾向多样性,建议0-1">
  32. </div>
  33. <div>
  34. <label class="conversation-label">最大令牌数(Max-Tokens):</label><br>
  35. <input type="int" id="max-tokens" class="input-box" placeholder="最大范围4000/16000,默认模型最大不超过4000,代表对话总字数">
  36. </div>
  37. <div>
  38. <div class="checkbox-container">
  39. <label for="continuous-chat" class="conversation-label">开启连续对话:</label>
  40. <input type="checkbox" id="continuous-chat">
  41. </div>
  42. </div>
  43. <div>
  44. <label class="response-label">对话消息记录框:</label><br>
  45. <!-- 修改逐个字显示的文本框 -->
  46. <div id="response-text" class="response-box"></div>
  47. </div>
  48. <br>
  49. <div class="button-container">
  50. <button id="send-button" class="button">发送</button>
  51. <button id="clear-button" class="button clear-button">清空</button>
  52. </div>
  53. <!-- 嵌入base64编码的音频数据 -->
  54. <audio id="notification-audio" preload="auto">
  55. <source src="data:audio/mp3;base64,base64编码" type="audio/mp3" />
  56. </audio>
  57. </div>
  58. <div class="author-info">BY-中北锋哥-2023.12.08</div>
  59. <script>
  60. document.addEventListener("DOMContentLoaded", function(event) {
  61. // 设置默认值
  62. document.getElementById("system-message").value = "You are a helpful assistant.";
  63. document.getElementById("temperature").value = "0.5";
  64. document.getElementById("max-tokens").value = "3600";
  65. });
  66. document.getElementById("send-button").addEventListener("click", function () {
  67. // 获取用户输入和选定的模型
  68. var user_input = document.getElementById("user-input").value;
  69. var selected_model = document.getElementById("model-select").value;
  70. var system_message = document.getElementById("system-message").value;
  71. var temperature = parseFloat(document.getElementById("temperature").value);
  72. var max_tokens = parseInt(document.getElementById("max-tokens").value);
  73. var continuous_chat = document.getElementById("continuous-chat").checked; // 获取连续对话复选框状态
  74. // 检查用户输入是否为空
  75. if (user_input === "") {
  76. alert("请输入有效的消息内容。");
  77. return; // 不发送请求
  78. }
  79. // 发送请求到服务器
  80. fetch("/get_response", {
  81. method: "POST",
  82. body: JSON.stringify({
  83. user_input: user_input,
  84. selected_model: selected_model,
  85. system_message: system_message,
  86. temperature: temperature,
  87. max_tokens: max_tokens,
  88. continuous_chat: continuous_chat
  89. }),
  90. headers: {
  91. "Content-Type": "application/json" // 更新 Content-Type
  92. }
  93. })
  94. .then(response => response.body.getReader()) // 获取可读流
  95. .then(reader => {
  96. // 获取要逐个字显示的文本框
  97. var responseTextElement = document.getElementById("response-text");
  98. // 创建一个包含用户消息的新对话条目
  99. var userMessage = document.createElement("div");
  100. userMessage.className = "user-message";
  101. userMessage.textContent = "用户:" + user_input;
  102. responseTextElement.appendChild(userMessage);
  103. // 创建一个包含GPT回复的新对话条目
  104. var gptResponse = document.createElement("div");
  105. gptResponse.className = "gpt-response";
  106. gptResponse.textContent = "GPT3.5: ";
  107. responseTextElement.appendChild(gptResponse);
  108. // 逐个字逐个字地将GPT回复添加到对话框中
  109. const decoder = new TextDecoder();
  110. reader.read().then(function processText({ done, value }) {
  111. if (done) {
  112. return;
  113. }
  114. gptResponse.textContent += decoder.decode(value);
  115. responseTextElement.scrollTop = responseTextElement.scrollHeight; // 滚动到底部
  116. reader.read().then(processText);
  117. });
  118. // 清空用户输入框
  119. document.getElementById("user-input").value = "";
  120. })
  121. .catch(error => {
  122. console.error(error);
  123. // 如果发生错误,弹出错误提示框
  124. alert("发生错误:" + error.message);
  125. });
  126. });
  127. //清除tokens
  128. document.addEventListener("DOMContentLoaded", function () {
  129. const clearButton = document.getElementById("clear-button");
  130. clearButton.addEventListener("click", function () {
  131. // 向服务器发送清除请求
  132. fetch("/clear_history", {
  133. method: "POST",
  134. })
  135. .then((response) => response.json())
  136. .then((data) => {
  137. // 清空用户输入和逐个字显示的文本框
  138. document.getElementById("user-input").value = "";
  139. document.getElementById("response-text").innerHTML = "";
  140. })
  141. .catch((error) => {
  142. console.error("清除请求失败: ", error);
  143. });
  144. });
  145. });
  146. </script>
  147. </body>
  148. </html>

感谢各位朋友阅读,下期再见!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/130050
推荐阅读
相关标签
  

闽ICP备14008679号