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()方法实现实时显示流式内容,代码如下:

scss 复制代码
  engine.value.setMarkdown(resContent.value, () => {
      scrollToBottom()
   });

6.后端使用Gin框架的流式输出返回数据给前端,使用Gin请求上线文,代码如下:

go 复制代码
// 创建 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 支持 Flusher
	flusher, 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 ResponseBody
		if 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。引入命令如下:

css 复制代码
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对话中使用了。

相关推荐
不会写DN11 小时前
GORM 实战入门:从环境搭建到企业级常用特性全解析
sql·mysql·go·gin
F1FJJ17 小时前
Shield CLI 的 PostgreSQL 插件 v0.5.0 发布:数据库导出 + 协作增强,ER 图全新体验
网络·数据库·docker·postgresql·go
yuhulkjv3351 天前
deepseek怎么复制表格
人工智能·ai·chatgpt·豆包·deepseek·ai导出鸭
将冲破艾迪i2 天前
【AI】部署及调用deepseek和qwen等大模型
人工智能·python·ollama·deepseek
gujunge3 天前
Spring with AI (5): 搜索扩展——向量数据库与RAG(下)
ai·大模型·llm·openai·qwen·rag·spring ai·deepseek
liangbm33 天前
AI-ViewNote:把网课和会议视频自动卷成结构化笔记
ai·typescript·go·软件构建·开源软件·react·桌面软件
我叫黑大帅3 天前
Gin 实战入门:从环境搭建到企业级常用特性全解析
后端·面试·go
我叫黑大帅3 天前
Gin 日志体系详解
后端·面试·go
竹之却3 天前
【Ollama】解决 ollama 软件下载慢,模型下载慢的问题
代理·ollama·deepseek·openclaw·ollama 模型下载
F1FJJ3 天前
Shield CLI v0.3.3 新增 PostgreSQL 插件:浏览器里管理 PG 数据库
网络·网络协议·docker·postgresql·容器·go