目录
2.1 在microsoft office Word中接入DeepSeek
一、目的
在日常文档编写中,接入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接口的使用,对代码有一定了解的小伙伴都可以快速上手。
把之所学,以文载之~ 欢迎小伙伴多多交流