【大模型应用】Word里调用DeepSeek 基本流程

目录

一、目的

二、实现方式

2.1 在microsoft office Word中接入DeepSeek

2.1.1示例背景

2.1.2 实现思路

2.1.3 第一步,获取DeepSeek的Api地址

2.1.4 打开Word文档,打开VB编辑器

2.1.5设置调用代码

三、文章总结


一、目的

        在日常文档编写中,接入deepseek服务,尝试使用DeepSeek服务文档编写,提升效率。

二、实现方式

2.1 在microsoft office Word中接入DeepSeek

2.1.1示例背景

        示例为在Word2007、Word2016都可使用(亲测)

2.1.2 实现思路

        1、从  Word 中提取文本:使用  VBA(Visual Basic for Applications)或  Python 脚本从  Word 文档中读取文本。

        2、调用  DeepSeek API:将提取的文本发送到  DeepSeek 服务,获取处理结果。

        3、将结果写回  Word:将  DeepSeek 返回的结果插入到  Word 文档中。

2.1.3 第一步,获取DeepSeek的Api地址

        确保本地部署deepseek成功,获得本地deepseek api域名。(也可使用官网Api,或硅基流动)

2.1.4 打开Word文档,打开VB编辑器

  • alt+F11键,打开VB编辑器

ps: 如果看不到左边的资源管理器,点击视图->工程资源管理器

2.1.5设置调用代码

Sub SubmitWordContentToDeepSeekAndWriteResponse()
  ' 定义变量
  Dim http As Object
  Dim url As String
  Dim docContent As String
  Dim response As String
  Dim responseText As String

  ' 定义 deepseek 服务的 URL
  url = "http://localhost:11434/api/generate" ' 假设 deepseek 服务在本地运行,端口为 11434

  ' 获取当前活动文档的内容
  docContent = ActiveDocument.Content.text

  ' 处理文档内容:移除换行符和转义 JSON 特殊字符
  docContent = Replace(docContent, vbCr, "") ' 移除回车符 (\r)
  docContent = Replace(docContent, vbLf, "") ' 移除换行符 (\n)
  docContent = Replace(docContent, """", "\""") ' 转义双引号
  docContent = Replace(docContent, "\", "\\") ' 转义反斜杠

  ' 创建 WinHttpRequest 对象
  Set http = CreateObject("WinHttp.WinHttpRequest.5.1")

  ' 打开连接,设置 POST 请求
  http.Open "POST", url, False

  ' 设置请求头
  http.SetRequestHeader "Content-Type", "application/json"

  ' 构造请求体
  Dim requestBody As String
  requestBody = "{""model"": ""deepseek-r1:8b"", ""prompt"": """ & docContent & """, ""stream"": false}"

  ' 发送请求
  http.Send requestBody

  ' 获取响应
  response = http.responseText

  ' 从响应中提取 response 属性值(通过字符串处理)
  Dim startPos As Long
  Dim endPos As Long
  startPos = InStr(response, """response"":""") + 12
  endPos = InStr(startPos, response, """")
  responseText = Mid(response, startPos, endPos - startPos)

  ' 替换所有的 \n\n 为换行符,但保留 \n\u003c/think\u003e\n\n 中的 \n\n
  Dim tempResponse As String
  tempResponse = Replace(responseText, "\n\n", vbCrLf)
  responseText = Replace(tempResponse, "\n\u003c/think\u003e", "\n\u003c/think\u003e\n\n")

  ' 替换特定字符串
  responseText = Replace(responseText, "\u003cthink\u003e\n", "<think>" & vbCrLf)
  responseText = Replace(responseText, "\n\u003c/think\u003e\n\n", "</think>" & vbCrLf)

  '------------------
  responseText = ReplaceNewlinesAfterLastThink(responseText)
  '------------------

  ' 将 response 属性值写入 Word 页面
  WriteResponseToWord responseText
End Sub
  '-------------------
  Sub WriteResponseToWord(responseText As String)
     ' 将 response 属性值插入到 Word 文档的末尾 
     With ActiveDocument.Content
          .InsertAfter vbCrLf & responseText 
     End With 
  End Sub
 '------------------

 Function ReplaceNewlinesAfterLastThink(text As String) As String 
    ' 查找最后一个 </think> 的位置
    Dim lastThinkPos As Long
    lastThinkPos = InStrRev(text, "</think>")
   
    ' 如果找到 </think>
    If lastThinkPos > 0 Then
       ' 截取最后一个 </think> 之后的部分
       Dim afterThinkText As String
       afterThinkText = Mid(text, lastThinkPos + Len("</think>"))

      ' 将 \n 替换为空格
      afterThinkText = Replace(afterThinkText, "\n", vbCrLf)

      ' 将处理后的部分与原文剩余部分拼接
      ReplaceNewlinesAfterLastThink = Left(text, lastThinkPos + Len("</think>") - 1) & afterThinkText
    Else
       ' 如果未找到 </think>,直接返回原文
       ReplaceNewlinesAfterLastThink = text
    End If
 End Function

  

2.1.6 运行代码

  • 点击vb编辑器工具栏的绿色三角按钮,它是运行按钮

ps:

1、需要在文档中输入内容,然后在点击vb中的代码运行。(过程可能会有点卡顿)

2、本地ollama需要提前运行。

三、文章总结

        目前一些应用都在慢慢支持对于Deepseek的接入。目前大多word文档使用deepseek都需要收费。这种本地化的AI应用尝试也是一种不错的探索。

        大多数的调用AI,其实都是对于API接口的使用,对代码有一定了解的小伙伴都可以快速上手。

把之所学,以文载之~ 欢迎小伙伴多多交流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勿芮介

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值