国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

如何配置openai的返回Stream數(shù)據(jù)并轉(zhuǎn)發(fā)到h5頁面按markdown格式流式輸出

這篇具有很好參考價(jià)值的文章主要介紹了如何配置openai的返回Stream數(shù)據(jù)并轉(zhuǎn)發(fā)到h5頁面按markdown格式流式輸出。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

如何配置openai返回?cái)?shù)據(jù),保持流式輸出,可以分段加載

可以使用OpenAI API的stream參數(shù)來實(shí)現(xiàn)流式輸出,并且可以使用max_tokens參數(shù)控制每次返回?cái)?shù)據(jù)的長度。 以下是一個(gè)示例代碼,演示如何使用OpenAI API來實(shí)現(xiàn)流式輸出并分段加載:

python 
import openai
# 連接 OpenAI API openai.api_key = "YOUR_API_KEY" 
# 設(shè)置 OpenAI API 參數(shù) 
model_engine = "davinci" 
# 模型引擎 
prompt = "你好,我需要幫助進(jìn)行自然語言處理任務(wù)。" # 請求語句 
temperature = 0.5 # 溫度參數(shù) 
max_tokens = 100 # 每次最大輸出長度 # 獲取 OpenAI 返回?cái)?shù)據(jù) 
completions = openai.Completion.create( engine=model_engine, prompt=prompt, temperature=temperature, max_tokens=max_tokens, n=1, stream=True ) # 分段獲取數(shù)據(jù) 
for i, text in enumerate(iter(completions.choices), start=1): 
print(f"============== 第 {i} 段輸出 ==============") 
print(text.text)

在這個(gè)示例中,我們將stream參數(shù)設(shè)置為True,這樣OpenAI API將會(huì)實(shí)時(shí)地將數(shù)據(jù)傳輸回調(diào)用方,并且將返回一個(gè)生成器對(duì)象(iter(completions.choices)),使得我們可以逐段獲取數(shù)據(jù)并打印出來。 同時(shí),我們使用max_tokens參數(shù)來控制每次返回的數(shù)據(jù)長度,這樣也可以有效的避免返回?cái)?shù)據(jù)過長導(dǎo)致內(nèi)存不足的問題。 注意,這里的YOUR_API_KEY需要替換為您在OpenAI申請的API密鑰?!菊埱髸r(shí)間:14秒】

openai 返回stream流,是UDP還是TCP,接收stream數(shù)據(jù)代碼DEMO

OpenAI GPT-3 API 返回的是 HTTPS 流,使用的是 TCP 協(xié)議。
如果您需要處理從 OpenAI GPT-3 API 返回的數(shù)據(jù)流,您可以使用 Python 中的 requests 庫來處理它。
以下是一個(gè)可以接收并處理由 OpenAI GPT-3 API 返回的數(shù)據(jù)流的示例代碼:

python 
import requests 
def process_stream(stream): 
for line in stream.iter_lines(): 
	if line: # 處理返回的數(shù)據(jù) 
		print(line.decode('utf-8')) # 發(fā)起 API 請求并處理返回的數(shù)據(jù)流 
		response = requests.post(url, headers=headers, data=data, stream=True) 
		process_stream(response.iter_lines()) 

在上面的代碼中,我們使用 requests.post 方法發(fā)起了一個(gè)帶有 stream=True 參數(shù)的 POST 請求,并將響應(yīng)保存到 response 變量中。接著,我們調(diào)用 process_stream 函數(shù)來處理從 API 返回的數(shù)據(jù)流。在 process_stream 函數(shù)中,我們使用 iter_lines 迭代器來逐行處理數(shù)據(jù)流,并將每行轉(zhuǎn)換為 UTF-8 編碼字符串。在這個(gè)簡單的示例中,我們只是將數(shù)據(jù)打印到控制臺(tái)上,但您可以根據(jù)實(shí)際需求來編寫相應(yīng)的邏輯來處理數(shù)據(jù)。

接收stream數(shù)據(jù)的PHP代碼示例如下:

php 
<?php $ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'STREAM_URL'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($curl, $data) 
{ // 處理獲得的數(shù)據(jù)
 echo $data; 
 return strlen($data); }); 
 curl_exec($ch);
  curl_close($ch); ?> 

其中,STREAM_URL 代表 OpenAI 的 stream URL 地址。這段代碼會(huì)將數(shù)據(jù)逐步地寫到屏幕上。
相應(yīng)的,接收stream數(shù)據(jù)的Java代碼示例如下:

 java
import java.net.*; 
import java.io.*; 
public class StreamReceiver { 
	public static void main(String[] args) throws Exception 
		{ URL streamURL = new URL("STREAM_URL"); 
		try (
			BufferedReader reader = new BufferedReader( new InputStreamReader(streamURL.openStream()))) 
				{ String line; 
					while ((line = reader.readLine()) != null) 
					{ // 處理獲得的數(shù)據(jù) System.out.println(line); 
					}
				} 
		 } 
 } 

同樣的,STREAM_URL 代表 OpenAI 的 stream URL 地址。這段代碼會(huì)將數(shù)據(jù)逐步地輸出到命令行界面上

PHP代碼示例:

<?php // 請求OpenAI接口獲取stream數(shù)據(jù),并轉(zhuǎn)發(fā)到H5頁面端 
$openAIUrl = 'https://api.openai.com/v1/engines/davinci-codex/completions'; $headers = array( 'Content-Type: application/json', 'Authorization: Bearer <YOUR_API_KEY>' ); 
$data = array( 'prompt' => 'Hello, world!', 'max_tokens' => 5, 'temperature' => 0.7 ); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $openAIUrl); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$output = fopen('php://output', 'w'); 
curl_setopt($ch, CURLOPT_WRITEFUNCTION, function ($ch, $chunk) use ($output) { fwrite($output, $chunk); 
return strlen($chunk); }); 
curl_exec($ch); 
fclose($output); // 將stream數(shù)據(jù)轉(zhuǎn)發(fā)給H5頁面端 
header('Content-Type: text/event-stream'); 
header('Cache-Control: no-cache'); 
header('Connection: keep-alive'); 
header('Access-Control-Allow-Origin: *'); 
fpassthru($output); 

Java代碼示例:

import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.util.concurrent.ExecutorService; 
import java.util.concurrent.Executors; 
import javax.servlet.AsyncContext; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
@WebServlet(asyncSupported = true, urlPatterns = {"/stream"}) 
public class StreamServlet extends HttpServlet 
{ 
private static final ExecutorService executor = Executors.newCachedThreadPool(); 
@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
// 創(chuàng)建異步上下文 
AsyncContext asyncContext = request.startAsync(); // 提交任務(wù)到線程池
 executor.submit(() -> { try { 
// 請求OpenAI接口獲取stream數(shù)據(jù) 
URL url = new URL("https://api.openai.com/v1/engines/davinci-codex/completions"); 
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
conn.setRequestMethod("POST"); 
conn.setRequestProperty("Content-Type", "application/json"); 
conn.setRequestProperty("Authorization", "Bearer <YOUR_API_KEY>"); conn.setDoOutput(true); 
OutputStream out = conn.getOutputStream(); 
out.write("{\"prompt\": \"Hello, world!\", \"max_tokens\": 5, \"temperature\": 0.7}".getBytes());
 out.flush(); 
out.close(); 
InputStream in = conn.getInputStream(); 
response.setContentType("text/event-stream"); 
response.setHeader("Cache-Control", "no-cache"); 
response.setHeader("Connection", "keep-alive"); 
response.setHeader("Access-Control-Allow-Origin", "*"); 
byte[] buffer = new byte[1024];
int count;
while ((count = in.read(buffer)) != -1) { 
// 將stream數(shù)據(jù)轉(zhuǎn)發(fā)給H5頁面端 
OutputStream outputStream = asyncContext.getResponse().getOutputStream(); 
String data = new String(buffer, 0, count); 
outputStream.write(("data: " + data + "\n\n").getBytes()); 
outputStream.flush(); } in.close(); } 
catch (IOException e) { e.printStackTrace(); } 
finally { asyncContext.complete(); } }); } } 

Python代碼示例:

import requests from flask 
import Flask, Response app = Flask(__name__) @app.route('/stream') 
def stream(): # 請求OpenAI接口獲取stream數(shù)據(jù) 
url = 'https://api.openai.com/v1/engines/davinci-codex/completions' 
headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer <YOUR_API_KEY>' } 
data = { 'prompt': 'Hello, world!', 'max_tokens': 5, 'temperature': 0.7 } res = requests.post(url, headers=headers, json=data, stream=True) 
# 將stream數(shù)據(jù)轉(zhuǎn)發(fā)給H5頁面端 
def generate(): 
for chunk in res.iter_content(chunk_size=1024): 
if chunk: yield 'data: ' + chunk.decode() + '\n\n' 
return Response(generate(), mimetype='text/event-stream', headers={ 'Cache-Control': 'no-cache', 'Connection': 'keep-alive', 'Access-Control-Allow-Origin': '*' }) 
if __name__ == '__main__': 
app.run() 

注意:以上代碼僅供參考,具體實(shí)現(xiàn)需要根據(jù)自己的業(yè)務(wù)需求進(jìn)行適當(dāng)修改。

如何讓前端Html能顯示mardown格式

要在前端HTML中顯示Markdown格式,您可以使用一個(gè)叫做Markdown解析器的庫或工具。下面是一個(gè)簡單的例子:
1.首先,通過CDN或?qū)⑵湎螺d到本地文件夾中,引入一個(gè)Markdown解析器庫,比如marked.js。

 html <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script> 
  1. 在頁面上添加一個(gè)textarea標(biāo)簽用于輸入Markdown格式的文本,添加一個(gè)div標(biāo)簽用于顯示解析后的HTML內(nèi)容。
javascripthtml <textarea id="mdInput"></textarea> <div id="htmlOutput"></div> 
  1. 在JavaScript中獲取textarea的值,將其傳遞給Markdown解析器,并將輸出的HTML代碼插入到div中。
javascript 
var markdown = document.getElementById('mdInput').value; 
var html = marked(markdown); 
document.getElementById('htmlOutput').innerHTML = html; 

這樣就可以在瀏覽器中顯示Markdown格式的文本了。

類似于ChatGPT網(wǎng)站使用Node.js中的流(Stream)處理技術(shù)將輸出轉(zhuǎn)換成markdown格式。
流是一種在處理大量數(shù)據(jù)時(shí)很有用的技術(shù),它允許以逐塊的方式處理數(shù)據(jù)而不必等待加載整個(gè)數(shù)據(jù)集。 在ChatGPT網(wǎng)站中,可能使用了類似于以下代碼的方法來將輸出流轉(zhuǎn)換為markdown格式:

 javascript 
 const markdown = require('markdown').markdown; 
 const stream = require('stream'); 
 const outputStream = new stream.Writable({ 
 	write(chunk, encoding, callback) { 
		 const text = chunk.toString(); 
		 const markdownText = markdown.toHTML(text); 
		 process.stdout.write(markdownText); 
		 callback(); }, 
		 }); 
 // Stream output to markdown formatter 
 originalOutputStream.pipe(outputStream); 

在這個(gè)代碼示例中,markdown庫用于將輸入的純文本轉(zhuǎn)換為Markdown格式。一個(gè)Writable可寫流用于接收輸出,并將其轉(zhuǎn)換為Markdown格式并將其發(fā)送到標(biāo)準(zhǔn)輸出流(process.stdout.write())。最后將原始輸出流(originalOutputStream)連接到新的可寫流(outputStream),并通過該管道輸出到標(biāo)準(zhǔn)輸出流。 這只是一個(gè)簡單的示例,實(shí)際上,ChatGPT網(wǎng)站可能使用更復(fù)雜的技術(shù)來流式處理并轉(zhuǎn)換輸出到Markdown格式文章來源地址http://www.zghlxwxcb.cn/news/detail-428346.html

到了這里,關(guān)于如何配置openai的返回Stream數(shù)據(jù)并轉(zhuǎn)發(fā)到h5頁面按markdown格式流式輸出的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • uni-app 實(shí)現(xiàn)navigateBack返回修改前一頁面數(shù)據(jù)(H5、APP、小程序)

    uni-app 實(shí)現(xiàn)navigateBack返回修改前一頁面數(shù)據(jù)(H5、APP、小程序)

    先自我介紹一下,小編浙江大學(xué)畢業(yè),去過華為、字節(jié)跳動(dòng)等大廠,目前阿里P7 深知大多數(shù)程序員,想要提升技能,往往是自己摸索成長,但自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前! 因此收集整理了一份《2024年最新Web前端全套學(xué)習(xí)資料》,

    2024年04月29日
    瀏覽(21)
  • 【漲粉秘籍】如何快速漲粉并轉(zhuǎn)化為鐵粉。

    【漲粉秘籍】如何快速漲粉并轉(zhuǎn)化為鐵粉。

    ??????個(gè)人簡介:以山河作禮。 ??????: Python領(lǐng)域新星創(chuàng)作者,CSDN實(shí)力新星認(rèn)證,阿里云社區(qū)專家博主,CSDN內(nèi)容合伙人。 ????:Web全棧開發(fā)專欄:《Web全棧開發(fā)》免費(fèi)專欄,歡迎閱讀! ????: 文章末尾掃描二維碼可以加入粉絲交流群,不定期免費(fèi)送書。 ??在這個(gè)

    2024年02月11日
    瀏覽(26)
  • ChatGPT流式傳輸(stream=True)的實(shí)現(xiàn)-OpenAI API 流式傳輸

    默認(rèn)情況下,當(dāng)請求OpenAI的API時(shí),整個(gè)響應(yīng)將在生成后一次性發(fā)送回來。如果需要的響應(yīng)比較復(fù)雜,就會(huì)需要很長時(shí)間來等待響應(yīng)。 為了更快地獲得響應(yīng),可以在請求API時(shí)選擇“流式傳輸”。 要使用流式傳輸,調(diào)用API時(shí)設(shè)置 stream=True 。這將返回一個(gè)對(duì)象,以 data-only server-

    2024年02月08日
    瀏覽(34)
  • 監(jiān)聽H5瀏覽器返回事件,解決監(jiān)聽webviewH5返回事件,觸發(fā)H5給小程序傳參(親測有效)

    監(jiān)聽H5瀏覽器返回事件,解決監(jiān)聽webviewH5返回事件,觸發(fā)H5給小程序傳參(親測有效)

    在瀏覽器中,會(huì)有點(diǎn)擊返回、后退、上一頁等按鈕實(shí)現(xiàn)自己的關(guān)閉頁面、調(diào)整到指定頁面、確認(rèn)離開頁面或執(zhí)行一些其它操作的需求??梢允褂?popstate 事件進(jìn)行監(jiān)聽返回、后退、上一頁操作。 1.window.history.back(),后退 2.window.history.forward(),前進(jìn) 3.window.history.go(num),前進(jìn)或后

    2024年02月16日
    瀏覽(16)
  • java 使用stream累加對(duì)象中某個(gè)屬性的值并返回總和

    假設(shè)有一個(gè)包含對(duì)象的List列表,每個(gè)對(duì)象都有一個(gè)屬性value,可以使用Java 8中的Stream流來累加對(duì)象中某個(gè)屬性的值并返回總和。以下是一些可能的實(shí)現(xiàn)方法: 1、使用reduce方法: 這里使用了mapToInt方法將每個(gè)對(duì)象轉(zhuǎn)換為其value屬性的值,然后使用reduce方法將這些值累加起來。

    2024年02月11日
    瀏覽(22)
  • OpenAI ChatGPT API + FaskAPI SSE Stream 流式周轉(zhuǎn)技術(shù) 以及前端Fetch 流式請求獲取案例

    OpenAI ChatGPT API + FaskAPI SSE Stream 流式周轉(zhuǎn)技術(shù) 以及前端Fetch 流式請求獲取案例

    這篇文章當(dāng)時(shí)寫得比較匆忙,這里進(jìn)行一下更深入的補(bǔ)充 SSE 技術(shù)不是什么新鮮東西,就是一個(gè) HTTP 請求和響應(yīng),關(guān)鍵就是響應(yīng)這個(gè)環(huán)節(jié),原始的響應(yīng)都是一次性的,普通的響應(yīng)是這樣的: Nginx 是一個(gè)靜態(tài)服務(wù)器,所謂靜態(tài)服務(wù)器,就是將一個(gè)靜態(tài)文件按照大小不同情況選擇

    2024年02月08日
    瀏覽(28)
  • uniapp H5 navigateBack無法返回上一層級(jí)

    項(xiàng)目場景: 提交表單后需要返回上一級(jí) 原因分析: H5在PC端打開,當(dāng)前頁面重新加載的情況下,出現(xiàn)navigateBack不能返回,由于H5端頁面刷新后返回頁面棧會(huì)消失

    2024年02月08日
    瀏覽(26)
  • 小程序內(nèi)嵌H5頁面監(jiān)聽小程序的返回事件

    因?yàn)闃I(yè)務(wù)上有需求,在開發(fā)小程序的時(shí)候有些頁面要使用web-view組件嵌套H5頁面 有個(gè)頁面內(nèi)有個(gè)表單,在表單內(nèi)容還為填寫完成的時(shí)候,監(jiān)聽用戶點(diǎn)擊左上角返回事件,彈出一個(gè)提示框,因?yàn)镠5頁面在小程序中的層級(jí)很高,所以彈出提示框只能在H5頁面內(nèi)完成,因此要在H5頁面

    2024年02月11日
    瀏覽(30)
  • form表單提交數(shù)據(jù)如何拿到返回值

    form表單提交數(shù)據(jù)如何拿到返回值

    使用form表單提交參數(shù)的時(shí)候,是依據(jù)input框里面的name值傳給后端的,只需在form節(jié)點(diǎn)添加action以及提交方式就可以調(diào)通前后端。但是這種直接的操作是不能夠判斷接口是否調(diào)通的,是拿不到返回值的。這就意味著不能夠做對(duì)應(yīng)的操作。 1:引入jquery.form.js的插件,這是一個(gè)jqu

    2024年02月06日
    瀏覽(28)
  • 【vue2】前端實(shí)現(xiàn)下載后端返回的application/octet-stream文件流

    1、下載csv/txt時(shí) 此時(shí)無須修改接口的響應(yīng)格式 2、下載Excel時(shí),需要修改一下接口的響應(yīng)格式為blob 另

    2024年02月11日
    瀏覽(108)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包