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对话中使用了。

相关推荐
10ms指针15 小时前
【高性能Go实践02】深水区重构:规避 sync.Pool 大对象缺陷与 Cgo 边界内存安全实践
go
武子康18 小时前
Ollama 2026最新实践:从本地大模型到本地+云端+Agent工具链
人工智能·ai·chatgpt·ollama·deepseek
视觉&物联智能20 小时前
【杂谈】-筑牢AI安全防线:解锁运行时保护新密钥
人工智能·安全·chatgpt·aigc·agi·deepseek
Molesidy20 小时前
【VSCode】VSCode+Claude Code插件+DeepSeek API Key的环境搭建
ide·vscode·编辑器·deepseek·claude code
大模型真好玩1 天前
大模型训练全流程实战指南工具篇(十三)—— 大模型评测实战(数据集评测+自动化评测)
人工智能·agent·deepseek
鹏北海1 天前
Go 语言基础笔记 — 面向 JS/TS 前端开发者
go
鹏北海1 天前
Go 语言进阶笔记 — 面向 JS/TS 前端开发者
go
鹏北海1 天前
Go 包管理笔记 — 面向 JS/TS 前端开发者
go
码哥字节2 天前
Claude Code 实战 400 万 Tokens:接入 DeepSeek V4,从$26降到$2
deepseek·claude code·ai编程工具