目录
上一篇文章办公新利器:DeepSeek+Word,让你的工作更高效-CSDN博客https://blog.csdn.net/qq_63708623/article/details/145418457?spm=1001.2014.3001.5501https://blog.csdn.net/qq_63708623/article/details/145418457?spm=1001.2014.3001.5501我们通过API key的方式,实现了DeepSeek与Word的有机结合,帮助我们提高办公效率。而DeepSeek由于近期服务器压力较大,暂时停止了API key的注册服务,那么要想实现DeepSeek与Word的结合,我们也可以通过本地部署的方式进行。
本地部署的优势如下:
1.响应速度快
本地处理减少网络传输,响应速度更快。且本地部署的稳定性更强,不受网络波动影响,确保服务持续可用。
2.数据隐私与安全
文本数据无需上传至外部服务器,降低了泄露风险。
3.完全免费
虽然DeepSeek的API key费用极低,但在高强度的办公场景下仍需要消耗一笔费用。本地部署模型能够做到完全免费,不花一分钱。
接下来,本文将讲述如何本地部署DeepSeek-R1模型,并将其集成到Word中。
1.本地部署DeepSeek-R1模型
访问ollama官网,点击download。Ollama
根据电脑系统选择相应的版本。点击下载。若下载速度过慢,可关注公众号并回复"ollama"领取安装包。
打开下载的安装包,点击"Install"
等待安装完成后,按win+r键,输入cmd调出命令行窗口。
输入
ollama --version
按下回车后出现版本号,即为安装成功。
我们选择推理能力更强的deepseek-r1模型进行本地部署。小编的笔记本显存为6G,因此选择最小的1.5b模型进行部署,如果显存更大的话,可以选择更大的模型。
在命令行窗口中输入:
ollama run deepseek-r1:1.5b
按下回车,模型开始自动下载。
模型下载成功后,自动进入对话模式,我们可以在这里跟模型进行对话。
至此,恭喜你已经完成了deepseek-r1模型的本地部署。
2.接入Word
在进行接下来的操作之前,希望你已经阅读了这篇文章。
这篇文章讲的是如何利用API key来调用云端的大模型,而本文讲的是调用本地部署的模型,请按照这篇文章进行Word端所有的操作,但在复制代码时,替换为下面的代码:
vbscript
Function CallDeepSeekAPI(api_key As String, inputText As String) As String
Dim API As String
Dim SendTxt As String
Dim Http As Object
Dim status_code As Integer
Dim response As String
'本地部署的大模型API地址
API = "http://localhost:11434/api/chat"
' 修改请求体为与本地大模型相匹配的格式
SendTxt = "{""model"": ""deepseek-r1:1.5b"", ""messages"": [{""role"":""user"", ""content"":""" & inputText & """}], ""stream"": false}"
Set Http = CreateObject("MSXML2.XMLHTTP")
With Http
.Open "POST", API, False
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Authorization", "Bearer " & api_key
.send SendTxt
status_code = .Status
response = .responseText
End With
' 弹出窗口显示 API 响应(调试用)
'
MsgBox
"API Response: "
& response, vbInformation,
"Debug Info"
If status_code = 200 Then
CallDeepSeekAPI = response
Else
CallDeepSeekAPI = "Error: " & status_code & " - " & response
End If
Set Http = Nothing
End Function
Sub DeepSeekV3()
Dim api_key As String
Dim inputText As String
Dim response As String
Dim regex As Object
Dim matches As Object
Dim originalSelection As Object
api_key = "pass"
If api_key = "" Then
MsgBox "Please enter the API key."
Exit Sub
ElseIf Selection.Type <> wdSelectionNormal Then
MsgBox "Please select text."
Exit Sub
End If
' 保存原始选中的文本
Set originalSelection = Selection.Range.Duplicate
inputText = Replace(Replace(Replace(Replace(Replace(Selection.Text, "\", "\\"), vbCrLf, ""), vbCr, ""), vbLf, ""), Chr(34), "\""")
response = CallDeepSeekAPI(api_key, inputText)
If Left(response, 5) <> "Error" Then
Set regex = CreateObject("VBScript.RegExp")
'
步骤
1
:提取大模型回复内容
With regex
.Global = True
.MultiLine = True
.Pattern = """content"":\s*""([\s\S]*?)""" ' 更稳健的提取逻辑
End With
If regex.Test(response) Then
response = regex.Execute(response)(0).SubMatches(0)
'
步骤
2
:处理
Unicode
转义字符(如\u003c -> <)
response = Replace(response, "\u003c", "<")
response = Replace(response, "\u003e", ">")
' 步骤3:删除标签及其内容
With regex
.Global = True
.MultiLine = True
.IgnoreCase = True
.Pattern = "[\s\S]*?"
End With
response = regex.Replace(response, "")
'
步骤
4
:转换\n为实际换行符
response = Replace(response, "\n", vbCrLf)
' 步骤5:移除Markdown格式
With regex
.Global = True
.Pattern = "(#+\s*|\*\*|__|`|\*{1,2}|_{1,2}|~~|^>\s)"
response = .Replace(response, "")
End With
response = regex.Replace(response, "")
'
取消选中原始文本
Selection.Collapse Direction:=wdCollapseEnd
' 将内容插入到选中文字的下一行
Selection.TypeParagraph '
插入新行
Selection.TypeText Text:=response
' 将光标移回原来选中文本的末尾
originalSelection.Select
Else
MsgBox "Failed to parse API response.", vbExclamation
End If
Else
MsgBox response, vbCritical
End If
End Sub
此代码在上一次代码的基础上进行了优化,对大模型md格式的输出进行了优化,去掉了md格式的修饰,只保留纯文本;在上一个版本中,大模型输出的"\n"会被当做文本显示,而此版本的代码直接将"\n"当作回车处理,结果更加美观。
替换代码后,即可实现本地大模型的Word调用。
3.效果演示
选中文本后,点击生成,即可看到大模型的回复。
4.问题反馈
此外,还有读者反应,会出现"配置完之后重启word配置的宏消失的问题",这个问题的解决办法如下:
点击 开发工具 -> 宏。
选中我们配置的DeepSeekV3,点击管理器。
选中左侧的模块1,点击复制,右侧将会出现模块1,最后点击关闭。
问题顺利解决,再次重启word后,不会出现宏消失的问题。