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语言开发框架集成插件功能和使用说明
相关文章:
Go语言集成DeepSeek API和GoFly框架文本编辑器实现流式输出和对话(GoFly快速开发框架)
说明 本文是GoFly快速开发框架集成Go语言调用 DeepSeek API 插件,实现流式输出和对话功能。为了方便实现更多业务功能我们在Go服务端调用AI即DeepSeek接口,处理好业务后再用Gin框架实现流失流式输出到前端,前端使用fetch请求接收到流式的mar…...
ClickHouse 数据倾斜实战:案例分析与优化技巧
目录 ClickHouse 数据倾斜问题总结与优化措施 1. 分片键选得不好,埋下隐患 2. 数据本身就“偏心” 3. 查询习惯加剧失衡 4. 硬件差异“雪上加霜” 表现形式一览 优化措施:从根源到实践 优化分片键:让数据均匀“落户” 数据预处理:写入前先“理顺” 查询优化:别让…...
数据结构(蓝桥杯常考点)
数据结构 前言:这个是针对于蓝桥杯竞赛常考的数据结构内容,基础算法比如高精度这些会在下期给大家总结 数据结构 竞赛中,时间复杂度不能超过10的7次方(1秒)到10的8次方(2秒) 空间限制&#x…...
Flink之水印(watermark)的补充理解
水印(Watermark):用于事件时间处理,标记数据流的进度,解决乱序和延迟问题,触发窗口计算 一、Flink 水印的作用 处理乱序事件 水印(Watermark)是 Flink 用于处理事件时间&…...
革新音频技术,引领智能录音新时代—广州唯创电子WT2605芯片深度解析
在万物互联的智能时代,音频处理技术作为人机交互的核心载体,正不断推动消费电子、物联网设备及行业工具的升级迭代。广州唯创电子凭借多年深耕音频芯片领域的经验,推出了一款集多功能、高集成度与灵活扩展性于一体的音频处理芯片——WT2605。…...
jumpserver 网络安全 网络安全 authenticity
1.1 计算机安全的概念 1.1.1 计算机安全最核心的三个关键目标(CIA): 保密性(Confidentiality)--①数据保密性(确保隐私或秘密不向非授权者泄密或使用); ②隐私性(确保个人能够控制或确定其自身相关的信息)…...
文件上传漏洞(条件竞争)
[TCO]catalog 文件上传漏洞简介 文件上传漏洞是一种常见的 Web 安全漏洞,攻击者可以通过该漏洞上传恶意文件,如 WebShell、木马或其他恶意代码脚本,以实现远程控制服务器、窃取数据或发起进一步攻击。这类漏洞通常源于 Web 应用在文件上传功…...
向量数据库的选择与应用:AI工程实践
一、向量数据库:AI时代的核心基础设施 1.1 从关系型到向量型:数据库的技术演进 传统数据库与向量数据库的对比: 特性关系型数据库向量数据库数据模型结构化表格高维向量元数据核心操作CRUD相似性搜索典型场景交易系统推荐系统/图像检索性能…...
文件上传复现
1、什么是文件上传漏洞? 答:文件上传漏洞是指攻击者通过上传恶意文件到服务器、从而执行任意代码、获取系统权限或者破坏系统安全的漏洞、常见于允许用户上传文件的Web应用程序中。 2. 文件上传漏洞形成原因 未验证文件类型:未对上传文件的…...
数据结构全解析:从线性到非线性,优缺点与应用场景深度剖析
1. 线性数据结构 (1)数组(Array)(适合静态数据) 优点: 随机访问高效:通过索引可以直接访问元素,时间复杂度为 O(1)。 内存连续:数组在内存中是连续存储的&…...
JAVA面试_进阶部分_Ibatis与Hibernate的区别
一、 hibernate与ibatis之间的比较: hibernate 是当前最流行的o/r mapping框架,它出身于sf.NET,现在已经成为jboss的一部分了。 ibatis 是另外一种优秀的o/r mapping框架,目前属于apache的一个子项目了。 相对hibernate“o/r”而…...
页面刷新时 选择值或输入值不丢失
视图完整代码 <body><h1>查询员工信息</h1><form action"SearchForm" style"text-align: center;">所属部门:<select name"ddlDept" id"ddlDept"><option value"">--请选择…...
通用人工智能(AGI):定义、挑战与未来展望
文章目录 引言AGI的定义与特征实现AGI的挑战AGI与ASI的区别AGI的潜在影响结语 引言 通用人工智能(Artificial General Intelligence, AGI)是人工智能领域的终极目标,代表着一种能够执行人类所有智力任务的系统。与当前的任务导向型人工智能&…...
考研数学复习之定积分定义求解数列极限(超详细教程)
定积分求解数列极限是一种将数列极限问题转化为定积分问题进行求解的方法。这种方法通常适用于那些和式数列极限,其主要思路是将数列的项看作是某个函数在某一点或某一段区间上的取值或某种形式的和,然后利用定积分的性质和计算方法,来求解这类数列的极限。 定积分定义 设函数在…...
【redis】应用场景:共享会话和手机验证码
文章目录 共享会话实现思路 手机验证码实现思路伪代码实现生成验证码验证验证码 共享会话 实现思路 如果每个应用服务器,维护自己的会话数据,此时彼此之间胡共享,用户请求访问到不同的服务器上,就可能会出现一些不能正确处理的情…...
vscode带参数调试
转载:【深度学习环境】VSCode 调试python 带args参数的程序_vscode args-CSDN博客 ctrlshiftf全局搜索...
音视频软件工程师面试题
一、基础知识 编解码相关 H.264 和 H.265(HEVC)的主要区别是什么?视频编解码的基本流程是什么?关键技术有哪些?音频编解码(如 AAC、MP3、Opus)的区别和应用场景?什么是 B 帧、P 帧、I 帧?它们的作用是什么? 流媒体协议RTMP、HTTP-FLV、HLS、WebRTC 的区别和应用场景…...
mac用docker跑sql server
网上的各个文章跑下来都有一些问题,记录一下我成功跑起来的过程。 省略Docker安装 修改docker源: {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental"…...
【技海登峰】Kafka漫谈系列(八)Controller:Zookeeper模式与KRaft模式
【技海登峰】Kafka漫谈系列(八)Controller:Zookeeper模式与KRaft模式 在上述学习过程中,我们知道完整的Kafka集群架构中包含了Broker、Topic、Partition、Replica、Producer、Consumer等众多组件,它们之间的关系又非常复杂:比如Topic由多个Partition组成、Partition又包含…...
c# txt文档的实时显示,用来查看发送接收指令
通讯历史按钮 private void uiButton1_Click(object sender, EventArgs e){try{logf new logF();logf.Show();}catch (Exception){throw;} }主页面关闭函数(点击保存就为true true就不删除) private void page1_FormClosed(object sender, FormClos…...
LabVIEW变频器谐波分析系统
随着工业自动化的发展,变频器在电力、机械等领域的应用日益广泛,但谐波问题直接影响系统效率与稳定性。传统谐波检测设备(如Norma5000)精度虽高,但价格昂贵且操作复杂,难以适应现场快速检测需求。本项目基于…...
搜广推校招面经四十三
快手主站推荐算法 一、因果推荐和偏差消除在推荐系统中的应用 1.1. 因果推荐 因果推荐(Causal Recommendation)是指利用因果推断的方法来理解和优化推荐系统的行为。不同于传统的基于关联分析的推荐方法,因果推荐旨在揭示用户行为背后的真…...
Android打造易用的 WiFi 工具类:WifiUtils 封装实践
Android在全局范围内使用WifiUtils工具类,我们可以将其设计为一个单例,并通过Application类进行初始化。这样可以确保在整个应用程序中只有一个WifiUtils实例,并且可以在任何地方访问它。以下是实现全局使用的步骤和代码示例: 记…...
010-Catch2
Catch2 一、框架简介 Catch2 是一个基于 C 的现代化单元测试框架,支持 TDD(测试驱动开发)和 BDD(行为驱动开发)模式。其核心优势在于: 单头文件设计:v2.x 版本仅需包含 catch.hpp 即可使用自然…...
Kubernetes Pod的生命周期概述
概述 在Kubernetes的世界中,Pod作为最基本的应用进程单元, 其生命周期也代表着应用进程的整个生命周期。了解其生命周期是掌握云计算中一个计算单元如何在Kubernetes世界周转的基石。 本期文章主要针对于Pod的生命周期的不同阶段进行介绍,让读者能够对…...
Linux服务器使用docker离线安装MySQL
今天记录一下,Linux的docker安装MySQL镜像的步骤,以后安装任何镜像都可以仿照本篇文章。 因为我有一台云服务器是联网的,所有我的步骤就是把需要的镜像都在云服务器下载好,再保存下来,传到本地的不联网服务器。 其实我…...
软件安全分析与应用之Web安全(二)
2.3 第 3 题 Web 安全 2.3.1 撰写安装报告 要求录屏 (1)Vmware; 首先找到.iso镜像 点击下一步我接受 下一步 下一步 下一步 下一步 点击升级等待完成安装 (2)kali-linux 克隆kali 等待安装 克隆成功 然后开始启…...
CEH与OSCP:网络安全认证对比分析
在网络安全领域,渗透测试被视为至关重要的一环,帮助企业检测和修复系统漏洞。为提升行业标准,许多认证应运而生,其中CEH和OSCP作为行业认可度较高的认证,广泛被网络安全从业者选择。尽管这两者都涉及渗透测试领域&…...
如何通过强化学习RL激励大型语言模型(LLMs)的搜索能力?R1-Searcher来了
R1-Searcher,这是一种使用 RL 增强 LLM 的 RAG 能力的新框架,通过两阶段强化学习(RL)实现LLM在推理过程中自主调用外部检索系统,突破模型固有知识限制。 为了通过探索外部检索环境来激励大语言模型的搜索能力,设计了一种基于结果的两阶段强化学习方法,通过定制的奖励设计…...
AI重构电商内容体系:企业如何突破生产、管理、分发三重门?
在电商内容需求激增的2025年,AI技术已成为破解内容生产低效、管理混乱、分发粗放的核心工具。特赞科技服务案例显示,企业通过AIGC数字资产管理方案可实现效率300%提升。 内容科技驱动电商新范式 电商内容已从"商品说明书"演变为体验经济载体…...
版本控制器Git(1)
文章目录 前言一、初识Git问题引入解决方案注意事项 二、Git安装三、Git配置与基本操作Git创建Git配置用户名称和地址认识工作区、暂存区、版本库添加文件到仓库添加文件到暂存区提交暂存区内容到本地仓库 查看提交历史 四、Git 暂存区、HEAD、对象库及文件Git内部结构概览查看…...
VMware安装Windows server 2016
1、新建虚拟机,选择自定义模式 2、选择兼容性 4、命名虚拟机 5、固件类型 EFI 虚拟磁盘类型,不同电脑推荐的类型不同,用默认的就行 删除声卡和打印机 检查网络配置 选择本地的Windows server 2016的系统镜像,系统镜像可以去Window…...
【编程向导】-JavaScript-基础语法-类型检测
类型检测 类型检测的方法: typeofinstanceofObject.prototype.toStringconstructor typeof typeof 操作符返回一个字符串,表示未经计算的操作数的类型。 typeof undefined; // "undefined" typeof null; // "object" typeof 10…...
Python并发编程实战:突破GIL限制的工程化解决方案
一、GIL的本质与影响范围 **全局解释器锁(Global Interpreter Lock,GIL)**是CPython解释器的核心机制,其本质是一个互斥锁,保证同一时刻只有一个线程执行Python字节码。这一设计使得: ✅ 简化内存管理:避免多线程竞争对象引用计数 ❌ 限制多核性能:CPU密集型多线程程序…...
FPGA学习篇——Verilog学习之全加器的实现
跟着野火的视频学习了一下全加器的实现~ 1 半加器和全加器原理 首先,解释一下为什么全加器的 公式还可以写成以下形式: (1)首先我们要明白: 因为由真值表来看,他们是不相同的(当ab1时ÿ…...
嵌入式学习L6网络编程D4多进程并发
多线程 客户端 /*./client serv_ip serv_port */ #include "net.h"void usage (char *s) {printf ("\n%s serv_ip serv_port", s);printf ("\n\t serv_ip: server ip address");printf ("\n\t serv_port: server port(>5000)\n\n"…...
四层协议攻防手册:从SYN Flood到UDP反射的深度防御
一、四层协议攻击类型与特征 攻击类型协议层特征SYN FloodTCP大量半开连接,SYN_RECV状态堆积UDP反射放大UDP小请求包触发大响应(如NTP、DNS响应)TCP分片攻击TCP发送异常分片耗尽重组资源连接耗尽攻击TCP建立大量空闲连接占用端口资源 二、TC…...
hive开窗函数
进入hive [root@hadoop01 conf]# hive ... hive (default)> show databases; OK database_name default Time taken: 0.528 seconds, Fetched: 1 row(s)创建数据库 hive (default)> create database test; hive (default)> use test;创建表 字段名字段字段类型学号S…...
【技术白皮书】内功心法 | 第二部分 | Telnet远程登录的工作原理
远程登录的工作原理 背景介绍远程登录远程登录的服务模式远程登录服务的实现基础远程登录服务的运行模式Telnet服务为什么不被操作系统管理 Telnet协议的原理网络虚终端(NVT)结束标示NVT的原理NVT屏蔽差异 背景介绍 绝大多数计算机都是运行多用户操作系…...
AnyPlace助力Franka突破物体形状与配置多样性挑战
物体几何形状与放置配置多样性的挑战 在机器人操作领域,物体放置一直是一个复杂且富有挑战性的任务。由于物体的几何形状和放置配置的多样性,实现稳健且可推广的物体放置变得尤为困难。 传统的机器人放置方法往往依赖于大量的特定任务演示,…...
【工控】线扫相机小结 第五篇
背景介绍 线扫相机通过光栅尺的脉冲触发, 我在调试线扫过程中,发现图像被拉伸,预设调节分配器。图像正常后,我提高的相机的扫描速度(Y轴动的更快了)。 动的更快的发现,图像变短了(以…...
【Prometheus】层层解析prometheus如何监控k8s核心组件
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…...
泄露测试仪CTS的Sentinel I28使用
前言:本文档主要讨论CTS Sentinel I28的使用方法,设备图片如下: 具体文档可从下面链接下载: https://download.csdn.net/download/qq_34047402/90471262 泄露测试仪CTS的SentinelI28使用资源-CSDN文库 [注意] 调压方式,若选择机械式调压,那么测试的压力值只能有1个,…...
Python字典,集合
一.字典 在 Python 中,字典(dict)是一种非常重要且常用的数据结构,它用于存储键值对. 如下为字典的创建,打印键,打印值,和清空的操作 二.集合 在 Python 中,集合(set)是一种无序且唯一的数据…...
【数据分析大屏】基于Django+Vue汽车销售数据分析可视化大屏(完整系统源码+数据库+开发笔记+详细部署教程+虚拟机分布式启动教程)✅
目录 一、项目背景 二、项目创新点 三、项目功能 四、开发技术介绍 五、项目功能展示 六、权威视频链接 一、项目背景 汽车行业数字化转型加速,销售数据多维分析需求激增。本项目针对传统报表系统交互性弱、实时性差等痛点,基于DjangoVue架构构建…...
Ubuntu用户安装cpolar内网穿透
前言 Cpolar作为一款体积小巧却功能强大的内网穿透软件,不仅能够在多种环境和应用场景中发挥巨大作用,还能适应多种操作系统,应用最为广泛的Windows、Mac OS系统自不必多说,稍显小众的Linux、树莓派、群辉等也在起支持之列&#…...
关于sqlalchemy的ORM的使用
关于sqlalchemy的ORM的使用 二、创建表三、使用数据表、查询记录 二、创建表 使用Mapped来映射字段 from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker,Mapped,mapped_columnBase declarative_base() engine create_engin…...
C 语言分支与循环:构建程序逻辑的基石
在 C 语言的世界里,分支和循环结构是编程的核心内容,它们赋予了程序根据不同条件执行不同操作以及重复执行特定代码段的能力,让程序变得更加智能和高效。今天,我们就深入探讨 C 语言分支和循环的相关知识,助力大家夯实…...
J-LangChain - Agent - 编排一个 ReAct + Function Call 反应链
系列文章索引 J-LangChain 入门 介绍 j‑langchain 是一款基于 Java 的 AIGC 编排框架,致力于集成多种大模型(LLM)调用及 RAG 工具。自 1.0.8 版本起,我们引入了工具函数(Function Call)调用能力…...
Rust 之一 基本环境搭建、各组件工具的文档、源码、配置
概述 Rust 是一种强调性能、类型安全和并发性的通用编程语言。它强制执行内存安全,使用其特有的所有权机制,而无需传统的垃圾收集器。Rust 不强制执行编程范式,但受到函数式编程思想的影响。 最初是由 Mozilla 员工 Graydon Hoare 在 2006 年…...