Go語言集成DeepSeek API和GoFly框架文本編輯器實現流式輸出和對話(GoFly快速開發框架)

說明

本文是GoFly快速開發框架集成Go語言調用 DeepSeek API 插件,實現流式輸出和對話功能。為了方便實現更多業務功能我們在Go服務端調用AI即DeepSeek接口,處理好業務后再用Gin框架實現流失流式輸出到前端,前端使用fetch請求+接收到流式的markdown數據展示到GoFly框架的富文本編輯(gfEditor)中。在編輯中可對生產文檔內容繼續編輯,編輯器的文檔可以導出word格式文檔(對WPS兼容很好)。

實現思路

1.方便后端實現更多業務邏輯,我們在Go后端實現與DeepSeek API接口對接。

2.使用GoFly框架的富文本編輯器來顯示markdown內容

3.DeepSeek API 支持流式輸出(Stream),通過設置?"stream": true,我們可以實現實時顯示 AI 回復的效果。這帶來了更好的用戶體驗:

  • 即時看到響應內容
  • 減少等待時間
  • 更自然的對話體驗

4.使用fetch請求+接收到流式的markdown數據+一邊打字機式輸出內容。

5.使用框架富文本編輯器的setMarkdown()方法實現實時顯示流式內容,代碼如下:

  engine.value.setMarkdown(resContent.value, () => {scrollToBottom()});

6.后端使用Gin框架的流式輸出返回數據給前端,使用Gin請求上線文,代碼如下:

// 創建 HTTP 請求req, err := http.NewRequest("POST", apiURL, bytes.NewBuffer(jsonData))if err != nil {gf.Failed().SetMsg("創建請求失敗").Regin(c)return}req.Header.Set("Content-Type", "application/json")req.Header.Set("Authorization", "Bearer "+authToken)// 設置 HTTP 客戶端client := &http.Client{Timeout: time.Second * 50}resp, err := client.Do(req)if err != nil {gf.Failed().SetMsg("請求API沒有得到回應").Regin(c)return}defer resp.Body.Close()// 設置響應頭,開啟流式輸出c.Writer.Header().Set("Content-Type", "text/event-stream; charset=utf-8")c.Writer.Header().Set("Cache-Control", "no-cache")c.Writer.Header().Set("Connection", "keep-alive")// 確保 ResponseWriter 支持 Flusherflusher, ok := c.Writer.(http.Flusher)if !ok {gf.Failed().SetMsg("不支持流式輸出").Regin(c)return}// 處理流式響應scanner := bufio.NewScanner(resp.Body)for scanner.Scan() {line := scanner.Text()// 處理以 "data: " 開頭的行if strings.HasPrefix(line, "data: ") {line = strings.TrimPrefix(line, "data: ")}if line == "[DONE]" {break}if line == "" {continue}// 解析響應內容var chunk ResponseBodyif err := json.Unmarshal([]byte(line), &chunk); err != nil {continue}// 將響應數據逐步發送給客戶端for _, choice := range chunk.Choices {content := choice.Delta.Content_, err := c.Writer.WriteString(content) //w.Write([]byte(content))if err != nil {gf.Failed().SetMsg("Failed to write response").Regin(c)return}flusher.Flush() // 刷新緩沖區}}

使用步驟

1.安裝

安裝方式為去busines后臺管理的“開發者工具->代碼倉”找到“??接入AI-DeepSeek的API實現流式輸出和對話??”插件點擊安裝,或者到社區代碼市場下載“開發者工具->代碼倉”點擊 安裝本地包 接口安裝插件。

2.安裝前端導word文檔插件

我們用到內容轉word文檔并下載word文檔,所以需要使用轉word文檔插件,這里我們使用html-docx-js-typescript,所以安裝完插件需要再前端框架引入html-docx-js-typescript。引入命令如下:

yarn add html-docx-js-typescript
# 或者  
npm install html-docx-js-typescript --save-dev

建議使用yarn,引入成功后重啟一下前端 yarn serve 或者npm serve

3.配置API keys

首先你去?? DeepSeek開放平臺?? 創建一個key,然后復制?API key 到golfy管理后臺的“數據中心->配置管理”找的AI-DeepSeek配置,然后設置authToken值為復制的DeepSeek平臺的key值,到此就可以去AI對話中使用了。?

功能介紹及使用教程視頻

DeepSeek API接入Go語言開發框架集成插件功能和使用說明

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

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

相關文章

SAP服務器進程預警通知

在財務月結,HR薪資核算等系統用戶集中使用高峰時期。通過判斷判斷當前系統可用的并行對話框進程數,用戶使用過多給出提示,服務器進程預警通知。 1. 根據配置的進程最大可使用率80%,根據進程數判斷:當進程可用數少于20%…

【Java代碼審計 | 第四篇】SQL 注入防范

文章目錄 Java SQL 注入防御方法類型轉換預編譯查詢(PreparedStatement)使用 ORM 框架(如 MyBatis、Hibernate)白名單限制ORDER BY 語句LIKE 語句 限制數據庫權限過濾和轉義特殊字符監控與日志審計使用 Web 應用防火墻&#xff08…

軟考中級-數據庫-3.3 數據結構-樹

定義:樹是n(n>=0)個結點的有限集合。當n=0時稱為空樹。在任一非空樹中,有且僅有一個稱為根的結點:其余結點可分為m(m>=0)個互不相交的有限集T1,T2,T3...,Tm…,其中每個集合又都是一棵樹,并且稱為根結點的子樹。 樹的相關概念 1、雙親、孩子和兄弟: 2、結點的度:一個結…

選擇排序算法的SIMD優化

一、優化原理 將查找數組最小值索引的SIMD優化的函數嵌入選擇排序主循環,優化最耗時的最小值查找環節,同時保留選擇排序的交換邏輯。 二、關鍵改造步驟 1)最小值查找模塊化 復用SIMD優化的 find_min_index_simd函數。 2)動態子數組處理 每次循環處理 arr[i..n-1] 子數…

考網絡安全工程師證要什么條件才能考?

在當今數字化時代,網絡安全問題日益凸顯,網絡安全工程師成為了一個備受矚目的職業。許多有志于投身這一行業的學子或職場人士,都希望通過考取網絡安全工程師證書來提升自己的專業素養和競爭力。那么,考網絡安全工程師證需要具備哪…

uniapp項目運行失敗Error: getaddrinfo *.bspapp.com 文件查找失敗uview-ui及推薦MarkDown軟件 Typora

一、uniapp項目運行失敗Error: getaddrinfo *.bspapp.com 文件查找失敗uview-ui 在運行一個uniapp項目時,出現報錯 文件查找失敗:uview-ui,Error: getaddrinfo ENOTFOUND 960c0a.bspapp.com。hostname異常,報錯的詳細信息如下&…

使用阿里云 API 進行聲音身份識別的方案

使用阿里云 API 進行聲音身份識別的方案 阿里云提供 智能語音交互(智能語音識別 ASR) 和 聲紋識別(說話人識別) 服務,你可以利用 阿里云智能語音 API 進行 說話人識別,實現客戶身份驗證。 方案概述 準備工…

【Pandas】pandas Series unstack

Pandas2.2 Series Computations descriptive stats 方法描述Series.argsort([axis, kind, order, stable])用于返回 Series 中元素排序后的索引位置的方法Series.argmin([axis, skipna])用于返回 Series 中最小值索引位置的方法Series.argmax([axis, skipna])用于返回 Series…

大模型發展歷程

大模型的發展歷程 大語言模型的發展歷程一、語言模型是個啥?二、語言模型的 “進化史”(一)統計語言模型(SLM)(二)神經語言模型(NLM)(三)預訓練語…

springboot項目使用中創InforSuiteAS替換tomcat

springboot項目使用中創InforSuiteAS替換tomcat 學習地址一、部署InforSuiteAS1、部署2、運行 二、springboot項目打包成war包 特殊處理1、pom文件處理1、排除內嵌的tomcat包2、新增tomcat、javax.servlet-api3、打包格式設置為war4、打包后的項目名稱5、啟動類修改1、原來的不…

Seata

Seata是一款開源的分布式事務解決方案,由阿里巴巴發起并維護,旨在幫助應用程序管理和協調分布式事務。以下是對Seata的詳細介紹: 一、概述 Seata致力于提供高性能和簡單易用的分布式事務服務,它為用戶提供了AT、TCC、SAGA和XA等…

Pytest自動化框架

Pytest簡單介紹 下載pytest pip install pytest 第一章:Pytest console命令 默認需要test開頭的py模塊,test_開頭的方法 1.pytest 執行pytest命令會自動匹配到test開頭或者結尾的文件 將其作為測試用例文件執行,在測試用例文件中自動匹配到test開…

【spring】注解版

1.管理bean 之前我們要想管理bean都是在xml文件中將想要添加的bean手動添加進ioc容器中,這樣太過麻煩了,在 Java 開發里,針對一些較為繁瑣的操作,通常會有相應的簡化方式,這個也不例外,就是spring提供的注…

RV1126+FFMPEG多路碼流監控項目

一.項目介紹: 本項目采用的是易百納RV1126開發板和CMOS攝像頭,使用的推流框架是FFMPEG開源項目。這個項目的工作流程如下(如上圖):通過采集攝像頭的VI模塊,再通過硬件編碼VENC模塊進行H264/H265的編碼壓縮,并把壓縮后的…

13.IIC-EEPROM(AT24C02)

1.為什么需要EEPROM? 在單片機開發中,斷電數據保存是常見的需求。例如,智能家居設備的用戶設置、電子秤的校準參數等都需要在斷電后仍能保留。AT24C02作為一款IIC接口的EEPROM芯片,具備以下優勢: 非易失性存儲:斷電后…

ubuntu22.04安裝P104-100一些經驗(非教程)

一、版本: 系統:ubuntu-22.04.5-desktop-amd64.iso Nvidia 驅動:NVIDIA-Linux-x86_64-570.124.04.run。官網下載即可 二、經驗 1、通用教程? 直接關鍵詞搜“ubuntu p104”會有一些教程,比如禁用nouveau等 安裝參考&#xff1a…

TCP7680端口是什么服務

WAF上看到有好多tcp7680端口的訪問信息 于是上網搜索了一下,確認TCP7680端口是Windows系統更新“傳遞優化”功能的服務端口,個人理解應該是Windows利用這個TCP7680端口,直接從內網已經具備更新包的主機上共享下載該升級包,無需從微…

OSI七大模型 --- 發送郵件

我想通過電子郵件發送一張照片給我的朋友。從我開始寫郵件到發送成功,按照這個順序講一下我都經歷了OSI模型的哪一層,對應的層使用了什么樣的協議? 完整流程示例(補充物理層細節) 假設你通過Wi-Fi發送郵件&#xff1a…

LINUX網絡基礎 [一] - 初識網絡,理解網絡協議

目錄 前言 一. 計算機網絡背景 1.1 發展歷程 1.1.1 獨立模式 1.1.2 網絡互聯 1.1.3 局域網LAN 1.1.4 廣域網WAN 1.2 總結 二. "協議" 2.1 什么是協議 2.2 網絡協議的理解 2.3 網絡協議的分層結構 三. OSI七層模型(理論標準) …

【LLms】關鍵詞提取

1. 停用詞 在文本處理和信息檢索領域,停用詞(Stop Words)是指在文本中出現頻率較高,但通常不包含實際語義信息或對語義理解貢獻較小的詞匯。這些詞匯通常是一些常見的功能詞,如冠詞、介詞、連詞、代詞、感嘆詞、助動詞…