AI大模型-流式处理 (以百度接口为例)

news/2024/12/15 3:38:51/

No bb , show code

效果

后端代码

from flask import Flask, request, Response
import json
import requests
from flask_cors import CORSapp = Flask(__name__)
CORS(app)  # Enable CORS for all routesdef get_access_token(ak, sk):auth_url = "https://aip.baidubce.com/oauth/2.0/token"resp = requests.get(auth_url, params={"grant_type": "client_credentials", "client_id": ak, 'client_secret': sk})return resp.json().get("access_token")def get_stream_response(prompt):ak = "你的AK"sk = "你的SK"source = "&sourceVer=0.0.1&source=app_center&appName=streamDemo"# ERNIE-Bot-turbobase_url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant"# ERNIE-Bot 4.0# base_url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro"# base_url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/plugin/57wt8rb5b3kzhnrd"url = base_url + "?access_token=" + get_access_token(ak, sk) + sourcedata = {"messages": [{"role": "user", "content": prompt}],"stream": True}payload = json.dumps(data)headers = {'Content-Type': 'application/json'}return requests.post(url, headers=headers, data=payload, stream=True)def gen_stream(prompt):response = get_stream_response(prompt)for chunk in response.iter_lines():chunk = chunk.decode("utf8")if chunk[:5] == "data:":chunk = chunk[5:]yield chunk@app.route('/eb_stream', methods=['POST'])
def eb_stream():body = request.jsonprompt = body.get("prompt")return Response(gen_stream(prompt), mimetype='text/event-stream')if __name__ == '__main__':app.run(host='0.0.0.0', port=8000)

前端代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Sample</title>
</head>
<body><label for="textInput">Prompt:</label><input type="textarea" id="textInput" placeholder="您有什么问题"><button onclick="run_prompt()">执行prompt</button><p><textarea id="answer" rows="10" cols="50" readonly></textarea></p>
<script>current_text = document.getElementById('answer');text = "";char_index = 0function run_prompt() {var inputValue = document.getElementById('textInput').value;document.getElementById('answer').value = "";// 调用服务端的流式接口, 修改为自己的服务器地址和端口号fetch('http://127.0.0.1:8000/eb_stream', {method: 'post',headers: {'Content-Type': 'application/json'},body: JSON.stringify({'prompt': inputValue})}).then(response => {return response.body;}).then(body => {const reader = body.getReader();const decoder = new TextDecoder();function read() {return reader.read().then(({ done, value }) => {if (done) { // 读取完成return;}data = decoder.decode(value, { stream: true });text += JSON.parse(data).result;type();  // 打字机效果输出return read();});}return read();}).catch(error => {console.error('发生错误:', error);});}function type() {let enableCursor = true;  // 启用光标效果if (char_index < text.length) {let txt = document.getElementById('answer').value;let cursor = enableCursor ? "|" : "";if (enableCursor && txt.endsWith("|")) {txt = txt.slice(0, -1);}document.getElementById('answer').value = txt + text.charAt(char_index) + cursor;char_index++;setTimeout(type, 1000/5);  // 打字机速度控制, 每秒5个字}}
</script>
</body>
</html>


http://www.ppmy.cn/news/1364660.html

相关文章

Python文件和异常(一)

目录 一、从文件中读取数据 &#xff08;一&#xff09;读取整个文件 &#xff08;二&#xff09;文件路径 &#xff08;三&#xff09;逐行读取 &#xff08;四&#xff09;创建一个包含文件各行内容的列表 &#xff08;五&#xff09;使用文件的内容 &#xff08;六&a…

Eclipse是如何创建web project项目的?

前面几篇描述先后描述了tomcat的目录结构和访问机制&#xff0c;以及Eclipse的项目类型和怎么调用jar包&#xff0c;还有java的main函数等&#xff0c;这些是一些基础问题&#xff0c;基础高清出来才更容易搞清楚后面要说的东西&#xff0c;也就是需求带动学习&#xff0c;后面…

学习笔记-李沐动手学深度学习(七)(19-21,卷积层、填充padding、步幅stride、多输入多输出通道)

总结 19-卷积层 【补充】看评论区建议的卷积动画视频 数学中的卷积 【链接】https://www.bilibili.com/video/BV1VV411478E/?fromsearch&seid1725700777641154181&vd_sourcee81e116c4ffe5e79d4bc44738263eda4 【可判断是否为卷积的典型标志】两个函数中自变量相加…

python笔记_注释和代码规范

注释 是什么 注释是用于注解&#xff0c;说明程序的文字 为什么 1&#xff0c;提高可读性 2&#xff0c;注释后的文字不会被执行&#xff0c;所以编程时可以用来梳理思绪 分类 单行注释##print("吃了吗")多行注释三个单引号或"""三个双引号"…

学成在线_课程计划查询_前端页面无法跳转

问题描述 在进行课程计划查询的接口开发时通过了http-client测试但点开课程修改界面后点击保存并进行下一步时无法跳转到修改课程计划查询的页面。 问题原因 课程信息修改的Controller层没有实现 QAQ&#xff08;可能是老师在讲这一块的时候没有提这一点&#xff08;我也记…

mitmproxy 抓包神器-8.阿里云/腾讯云服务器无法访问mitmweb问题解决?

前言 在阿里云上搭建开启mitmweb代理,远程抓包会遇到2个问题 无法代理 8080 端口无法打开 8081 web网页界面无法代理 8080 端口 第一个问题,在前面一篇已经解决 https://www.cnblogs.com/yoyoketang/p/18036644 mitmproxy --set block_global=false 命令启动带上block_glo…

【蓝桥杯单片机入门记录】动态数码管

目录 一、数码管动态显示概述 二、动态数码管原理图 &#xff08;1&#xff09;原理图 &#xff08;2&#xff09;动态数码管如何与芯片相连 &#xff08;3&#xff09;“此器件” ——>锁存器74HC573 三、动态数码管显示例程 &#xff08;1&#xff09;例程1&#xf…

【云安全】网络安全领域安全协议

IPSEC协议 IPSec&#xff08;Internet Protocol Security&#xff09;是一种网络层安全协议&#xff0c;用于在IP通讯过程中确保完整性、认证性和机密性。它通过在标准的IP协议上加入安全机制来实现加密和认证。IPSec主要由两个协议组成&#xff1a;认证头&#xff08;AH&…