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.rhkb.cn/news/29853.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac上最好的Python开发环境之Anaconda+Pycharm

为了运行修改 label-studio项目源码,又不想在windows上运行,便在mac上开始安装,开始使用poetry安装,各种报错,不是zip包解压不了,就是numpy编译报错,pipy.org访问出错。最后使用anaconda成功启动…

增删改查 数据下载 一键编辑 删除

index 首页 <template><div class"box"><el-card :style"{ width: treeButton ? 19.5% : 35px, position: relative, transition: 1s }"><el-tree v-if"treeButton" :data"treeData" :props"defaultPro…

复合机器人为 CNC 毛坯件上下料注入 “智能强心针”

在竞争日益激烈的 CNC 加工行业&#xff0c;如何提升生产效率、保证产品质量、实现智能化生产成为众多企业亟待解决的问题。富唯智能凭借其先进的复合机器人技术&#xff0c;成功为多家 CNC 加工企业提供了毛坯件上下料的优质解决方案&#xff0c;有效提升了生产效能&#xff0…

C++ list(双向链表)

概念 std::list 是标准模板库&#xff08;STL&#xff09;提供的一个容器类&#xff0c;它实现了双向链表的数据结构。 实现原理 内部结构 双向链表由多个节点连接而成。其中每个节点包含三个部分&#xff1a; 内容/数据域&#xff1a;用于存储实际的数据元素。前驱&#x…

dify在腾讯云服务器上部署

Dify 是一个开源的 LLM 应用开发平台。提供从 Agent 构建到 AI workflow 编排、RAG 检索、模型管理等能力&#xff0c;轻松构建和运营生成式 AI 原生应用&#xff0c;比 LangChain 更易用。 首先到dify官方网站上有详细介绍 https://docs.dify.ai/zh-hans/getting-started/ins…

7V 至 30V 的超宽 VIN 输入范围,转换效率高达 96%的WD5030

WD5030 具备 7V 至 30V 的超宽 VIN 输入范围&#xff0c;这一特性使其能够适应多种不同电压等级的供电环境&#xff0c;无论是在工业设备中常见的较高电压输入&#xff0c;还是在一些便携式设备经过初步升压后的电压&#xff0c;WD5030 都能轻松应对&#xff0c;极大地拓展了应…

计算机毕业设计Python+DeepSeek-R1大模型医疗问答系统 知识图谱健康膳食推荐系统 食谱推荐系统 医疗大数据(源码+LW文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

npm ERR! code 128 npm ERR! An unknown git error occurred

【问题描述】 【问题解决】 管理员运行cmd&#xff08;右键window --> 选择终端管理员&#xff09; 执行命令 git config --global url.“https://”.insteadOf ssh://git cd 到项目目录 重新执行npm install 个人原因&#xff0c;这里执行npm install --registryhttps:…

Bitbucket SSH 访问设置指南

Bitbucket SSH 访问设置指南 要通过 SSH 访问 Bitbucket git 仓库&#xff0c;您需要设置 SSH 密钥。这个操作每台机器和用户账户只需设置一次。以下是详细的设置步骤和注意事项&#xff1a; 一、检查并创建 .ssh 目录 ‌检查 .ssh 目录‌&#xff1a; 在 Windows 上&#x…

23种设计模式简介

一、创建型&#xff08;5种&#xff09; 1.工厂方法 总店定义制作流程&#xff0c;分店各自实现特色披萨&#xff08;北京店-烤鸭披萨&#xff0c;上海店-蟹粉披萨&#xff09; 2.抽象工厂 套餐工厂&#xff08;家庭装含大披萨薯条&#xff0c;情侣装含双拼披萨红酒&#…

【Unity Shader编程】之光照模型

根据Unity Shader编程的光照模型实现&#xff0c;光线通常可分为以下核心组成部分&#xff1a; 一、基础光照分量 环境光&#xff08;Ambient&#xff09; 全局基础照明&#xff0c;不依赖具体光源 实现方式&#xff1a;UNITY_LIGHTMODEL_AMBIENT内置变量 漫反射光&#xff0…

dify + ollama + deepseek-r1+ stable-diffusion 构建绘画智能体

故事背景 stable-diffusion 集成进 dify 后&#xff0c;我们搭建一个小智能体&#xff0c;验证下文生图功能 业务流程 #mermaid-svg-6nSwwp69eMizP6bt {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-6nSwwp69eMiz…

无人机扩频技术对比!

一、技术原理与核心差异 FHSS&#xff08;跳频扩频&#xff09; 核心原理&#xff1a;通过伪随机序列控制载波频率在多个频点上快速跳变&#xff0c;收发双方需同步跳频序列。信号在某一时刻仅占用窄带频谱&#xff0c;但整体覆盖宽频带。 技术特点&#xff1a; 抗干扰…

【从零开始学习计算机科学】数字逻辑(九)有限状态机

【从零开始学习计算机科学】数字逻辑(九)有限状态机 有限状态机状态机的表示方法有限状态机的Verilog描述有限状态机 有限状态机(简称状态机)相当于一个控制器,它将一项功能的完成分解为若干步,每一步对应于二进制的一个状态,通过预先设计的顺序在各状态之间进行转换,状…

知识周汇 | Python操作Excel全攻略系列(四):单元格相关篇

目录 系列文章 1 重点 2 如何获取当前工作表的最大行数和最大列数 3 修改单元格的值&#xff08;包括数值和格式&#xff09; 4 查找特定字符的位置 5 对同一列中上下行值相同的单元格进行行合并 6 查找特定值并标记颜色 后续 系列文章 知识周汇 | Python操作Excel全攻…

KubeKey 与 KubeSphere:快速构建 Kubernetes 集群

深度解析 KubeKey 与 KubeSphere&#xff1a;快速构建现代化 Kubernetes 集群 一、技术栈概述 KubeKey&#xff08;KK&#xff09;是由 KubeSphere 团队开发的轻量级 Kubernetes 集群部署工具&#xff0c;其优势在于&#xff1a; 基于 Ansible 的安装程序具有大量软件依赖性…

C++编写Redis客户端

目录 安装redis-plus-plus库 ​编辑 编译Credis客户端 redis的通用命令使用 get/set exists del keys expire /ttl type string类型核心操作 set和get set带有超时时间 set带有NX string带有XX mset mget getrange和setrange incr和decr list类型核心操作…

从零开始实现大语言模型(十三):预训练大语言模型GPTModel

1. 前言 使用梯度下降算法通过下一个token预测任务预训练大语言模型GPTModel&#xff0c;前向传播流程每次会输入一个batch的长度均为context_len的训练样本&#xff0c;执行 batch_size context_len \text{batch\_size}\times\text{context\_len} batch_sizecontext_len次下…

JavaScript(最后一个元素的索引就是数组的长度减 1)array.length - 1

在不同的编程语言中&#xff0c;表示数组中最后一个元素的方法略有不同&#xff0c;但基本思路都是利用数组的长度或索引来实现。 以下是一些常见编程语言中获取数组最后一个元素的方法&#xff1a; 1. JavaScript: 使用 array.length - 1 索引: 这是最常见和传统的方法。Java…

RV1126+FFMPEG多路码流监控项目

一.项目介绍&#xff1a; 本项目采用的是易百纳RV1126开发板和CMOS摄像头&#xff0c;使用的推流框架是FFMPEG开源项目。这个项目的工作流程如下(如上图)&#xff1a;通过采集摄像头的VI模块&#xff0c;再通过硬件编码VENC模块进行H264/H265的编码压缩&#xff0c;并把压缩后的…