Nginx反向代理服務流式輸出設置

Nginx反向代理服務流式輸出設置

1.問題場景

提問:為什么我部署的服務沒有流式響應

最近在重構原有的GPT項目時,遇到gpt回答速度很慢的現象。在使用流式輸出的接口時,接口響應速度居然還是達到了30s以上。

2.現象分析

分析現象我發現,雖然前端還是流式打印的結果,但是,好像是接口處理完了,再以流式返回到的前端。

3.解決過程記錄

起初

因為新的重構項目中用MASA 的minimalAPI代替了傳統的MVC。所以在接口實現上跟之前有所不同,在對Stream流的處理方式上也有不同。我以為是我處理的方式不對,為此,我的代碼做過多次改進。最終的接口如下:

/// <summary>
/// 聊天接口(gpt-4)返回流
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
[Authorize]
[Produces("application/octet-stream")]
public async Task ChatCompletionStream(ChatReq req, CancellationToken cancellationToken = default)
{if (_httpContextAccessor.HttpContext?.Items["key"] != null){req.Key = _httpContextAccessor.HttpContext?.Items["key"]?.ToString();}_logger.Information($"ChatStream1開始時間:{DateTime.Now},key【{req.Key}】");var userId = long.Parse(_httpContextAccessor.HttpContext.User.FindFirstValue(ClaimTypes.UserData));req.UserId = userId;req.IP = _httpContextAccessor.HttpContext?.Connection.RemoteIpAddress?.MapToIPv4().ToString();var response = _httpContextAccessor.HttpContext.Response;response.ContentType = "application/octet-stream";var enumerable = _chatService.ChatCompletionStream(req);await foreach (var item in enumerable){var bytes = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(item, new JsonSerializerOptions(){Encoder = JavaScriptEncoder.Create(UnicodeRanges.All)}) + "\n");await response.BodyWriter.WriteAsync(bytes);}_logger.Information($"ChatStream1結束時間:{DateTime.Now}");
}

后來

在優化代碼后,本地速度提升明顯。但是在服務器上速度任然不理想。讓我懷疑,是不是代碼問題?難道是別的問題。

與此同時,昨天,我的搭檔同樣向我拋出了這個問題:“聊天的接口好慢”

我說出了兩種可能:1.代碼,是minimalAPI的鍋。2.網絡,我們的服務部署在自己的服務器上,然后通過內網映射,又通過反向代理調用的OpenAI的接口,網絡復雜,造成了速度慢。

最后發現問題

今天,我想到問題所在,我們的反向代理服務,是通過nginx做了反向代理的,之前我們解決過后端服務的nginx反向代理設置流式傳輸的問題。問題就在這里。對應的yarn服務的nginx配置同樣需要設置流式傳輸。

2.解決問題的方法

如果你使用 ngnix 反向代理,需要在配置文件中增加下列代碼:

\# 不緩存,支持流式輸出proxy_cache off;  # 關閉緩存proxy_buffering off;  # 關閉代理緩沖chunked_transfer_encoding on;  # 開啟分塊傳輸編碼tcp_nopush on;  # 開啟TCP NOPUSH選項,禁止Nagle算法tcp_nodelay on;  # 開啟TCP NODELAY選項,禁止延遲ACK算法keepalive_timeout 300;  # 設定keep-alive超時時間為65秒

3 什么是代理,如何使用?

由于 OpenAI 的 IP 限制,中國和其他一些國家/地區無法直接連接 OpenAI API,需要通過代理。你可以使用代理服務器(正向代理),或者已經設置好的 OpenAI API 反向代理。

- 正向代理例子:科學上網梯子。docker 部署的情況下,設置環境變量 HTTP_PROXY 為你的代理地址(例如:10.10.10.10:8002)。

- 反向代理例子:可以用別人搭建的代理地址,或者通過 Cloudflare 免費設置。設置項目環境變量 BASE_URL 為你的代理地址。

4.搭建反向代理服務

yarn 服務反向代理GPT部署方案:yarn 反向代理

閱讀如遇樣式問題,請前往個人博客瀏覽: https://www.raokun.top

擁抱ChatGPT:https://chat111.terramours.site

開源項目地址:https://github.com/raokun/YarpProject

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/38582.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38582.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38582.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Leetcode鏈表篇 Day3

.24. 兩兩交換鏈表中的節點 - 力扣&#xff08;LeetCode&#xff09; 1.構建虛擬結點 2.兩兩一組&#xff0c;前繼結點一定在兩兩的前面 3.保存結點1和結點3 19. 刪除鏈表的倒數第 N 個結點 - 力扣&#xff08;LeetCode&#xff09; 1.雙指針&#xff1a;快慢指針 兩個指針的差…

新能源汽車需要檢測哪些項目

截至2022年底&#xff0c;中國新能源車保有量達1310萬輛&#xff0c;其中純電動汽車保有量1045萬輛。為把好新能源汽車安全關&#xff0c;我國新能源汽車除了完善的強制性產品認證型式實驗外&#xff0c;還建立了“車企-地方-國家”逐級上報的三級監管體系實行新能源汽車全生命…

2023.8.14論文閱讀

文章目錄 ESPNet: Efficient Spatial Pyramid of Dilated Convolutions for Semantic Segmentation摘要本文方法實驗結果 DeepFusion: Lidar-Camera Deep Fusion for Multi-Modal 3D Object Detection摘要本文方法實驗結果 ESPNet: Efficient Spatial Pyramid of Dilated Convo…

vue 路由地址把#去掉

在路由對象里邊添加history模式就不顯示# mode:history // 4.通過規則創建對象 const router new VueRouter({routes,// 默認模式為hash 帶# // history 不帶#mode:history })想把端口號8000換成其他的 比如我這樣的3000更換端口號教程

Android Framework 動態更新插拔設備節點執行權限

TF卡設備節點是插上之后動態添加&#xff0c;所以不能通過初始化設備節點權限來解決&#xff0c;需要監聽TF插入事件&#xff0c;在init.rc 監聽插入后動態更新設備節點執行權限 添加插拔TF卡監聽 frameworks/base/services/core/java/com/android/server/StorageManagerServic…

IL匯編ldc指令學習

ldc指令是把值送到棧上&#xff0c; 說明如下&#xff0c; ldc.i4 將所提供的int32類型的值作為int32推送到計算堆棧上&#xff1b; ldc.i4.0 將數值0作為int32推送到計算堆棧上&#xff1b; ... ldc.i4.8 將數值8作為int32推送到計算堆棧上&#xff1b; ldc.i4.m1 將數值-…

Stable Diffusion 告別復制關鍵詞,高質量提示詞自動生成插件

在使用SD時,我們經常會遇到心中無想法,或不知如何描述心中所想的圖像。有時由于提示詞的選擇不當,生成的圖片質量也不盡如人意。為此,我今天為大家推薦一個高質量的提示詞自動生成插件——One Button Prompt。 下面是他生成的一些樣圖。 文章目錄 插件安裝插件說明主菜單工…

用python繪制CDF圖

一、code import os.pathimport pandas as pd import numpy as np import matplotlib.pyplot as pltcsv_path r"XXX.csv" save_fig_path os.path.join(os.path.split(csv_path)[0], "metrics_cdf.png")# 從CSV讀取數據 data pd.read_csv(csv_path)[XXX…

Android 屏幕適配資源xml的配置方法

在 Android 中進行屏幕適配是確保應用在不同設備上正常顯示的重要步驟之一。資源文件夾的配置是實現屏幕適配的關鍵之一&#xff0c;以下是一些常見的資源文件夾配置方法&#xff0c;以適應不同屏幕尺寸和密度。 不同屏幕尺寸的適配&#xff1a; res/layout&#xff1a;通常存放…

使用vscode進行遠程調試

官方調試手冊&#xff1a;vscode官方調試手冊 1.安裝python擴展 如果是遠程連接的話&#xff0c;一定要在ssh上啟用擴展。不然創建基于python的配置文件時就會提示&#xff0c;無python擴展。 2.新建配置文件&#xff0c;并修改參數 點擊左側第四個按鈕&#xff0c;運行與調試…

【C# 基礎精講】異常的類型和處理方法

異常&#xff08;Exception&#xff09;是在程序執行過程中發生的意外或異常情況&#xff0c;例如除零錯誤、空引用訪問、文件不存在等。在C#及其他編程語言中&#xff0c;異常處理是一種重要的機制&#xff0c;用于捕獲和處理程序運行時可能出現的錯誤&#xff0c;以保證程序的…

【碎碎念隨筆】1、回顧我的電腦和編程經歷

?? 閑著無事&#xff0c;講述一下我的計算機和代碼故事 一、初識計算機 &#x1f5a5;? 余家貧&#xff0c;耕植無錢買電腦。大約六年級暑假&#xff0c;我在姐姐哪兒第一次接觸到了計算機&#xff08;姐姐也是買的二手&#xff09;。 &#x1f5a5;? 計算機真有趣&#x…

多線程并發服務器

代碼&#xff1a; #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #define PORT 6666 //1024~49151 #define IP "192.168.122.130" //ifconfig查看本機IP #include <pthread.h> //…

深入解析:HTTP和HTTPS的三次握手與四次揮手

推薦閱讀 AI文本 OCR識別最佳實踐 AI Gamma一鍵生成PPT工具直達鏈接 玩轉cloud Studio 在線編碼神器 玩轉 GPU AI繪畫、AI講話、翻譯,GPU點亮AI想象空間 「java、python面試題」來自UC網盤app分享&#xff0c;打開手機app&#xff0c;額外獲得1T空間 https://drive.uc.cn/…

探索Python編程的技巧:多線程魔法、網絡舞臺、正則魔法陣與遞歸迷宮

一 多線程 1.1 進程和線程 進程&#xff1a; 就是一個程序&#xff0c;運行在系統之上&#xff0c;稱這個程序為一個運行進程&#xff0c;并分配進程ID方便系統管理。線程&#xff1a;線程是歸屬于進程的&#xff0c;一個進程可以開啟多個線程&#xff0c;執行不同的工作&…

【C++面向對象】--- 繼承 的奧秘(下篇)

個人主頁&#xff1a;平行線也會相交&#x1f4aa; 歡迎 點贊&#x1f44d; 收藏? 留言? 加關注&#x1f493;本文由 平行線也會相交 原創 收錄于專欄【C之路】&#x1f48c; 本專欄旨在記錄C的學習路線&#xff0c;望對大家有所幫助&#x1f647;? 希望我們一起努力、成長&…

Vim基本使用

Vim基本使用 概念模式類型常規模式編輯模式命令模式 概念 vim 是一款功能豐富、高度可定制和高效的文本編輯器&#xff0c;適用于處理各種文本文件和編程任務。熟練使用vim幫助提高編輯效率&#xff0c;并為用戶提供更多的操作選項。 模式類型 常規模式 使用vim打開一個文件…

Postman接口自動化測試實戰,從0到1一篇徹底打通...

目錄&#xff1a;導讀 前言一、Python編程入門到精通二、接口自動化項目實戰三、Web自動化項目實戰四、App自動化項目實戰五、一線大廠簡歷六、測試開發DevOps體系七、常用自動化測試工具八、JMeter性能測試九、總結&#xff08;尾部小驚喜&#xff09; 前言 postman中的測試 …

【網絡基礎】傳輸層

【網絡基礎】傳輸層 文章目錄 【網絡基礎】傳輸層1、端口號1.1 工具 2、UDP協議2.1 協議端格式2.2 UDP特點2.3 傳輸數據報2.4 緩沖區2.5 基于UDP應用層協議2.6 使用注意事項 3、TCP協議3.1 協議段格式3.2 ACK機制3.3 超時重傳機制3.4 連接管理機制3.5 滑動窗口3.6 流量控制3.7 …

207、仿真-51單片機脈搏心率與血氧報警Proteus仿真設計(程序+Proteus仿真+配套資料等)

畢設幫助、開題指導、技術解答(有償)見文未 目錄 一、硬件設計 二、設計功能 三、Proteus仿真圖 四、程序源碼 資料包括&#xff1a; 需要完整的資料可以點擊下面的名片加下我&#xff0c;找我要資源壓縮包的百度網盤下載地址及提取碼。 方案選擇 單片機的選擇 方案一&a…