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

相关推荐
道可云44 分钟前
道可云人工智能每日资讯|北京农业人工智能与机器人研究院揭牌
人工智能·机器人·ar·deepseek
在成都搬砖的鸭鸭2 小时前
【Golang】使用gin框架导出excel和csv文件
golang·excel·gin
webmote333 小时前
DeepSeek私域数据训练之封装Anything LLM的API 【net 9】
.net·api·deepseek
小虚竹5 小时前
1.6万字测评:deepseek-r1-0528横向对比 gemini-2.5-pro-0506和claude4
claude·gemini·deepseek
程序员海军7 小时前
从懵懂到落地:记录我们第一次成功将大模型“塞”进业务的曲折历程
前端·后端·deepseek
BIBI20498 小时前
VsCode 安装 Cline 插件并使用免费模型(例如 DeepSeek)
vscode·deepseek·cline
零道9 小时前
我用了一周时间,复刻了一个Bolt new
ai编程·全栈·deepseek
gfast10 小时前
GFast开发MCP服务器之mark3labs/mcp-go库接入(二)
go·ai编程
gfast10 小时前
GFast开发MCP服务器之集成AI对话插件
go·ai编程
陈明勇11 小时前
Go 官方宣布不再改进错误处理语法,背后原因是什么?
后端·go