分享

回答网友提问:Word 里如何调用 DeepSeek API?

 汪子熙 2025-04-20 发布于上海

笔者运营的知识星球里有朋友提问,大意是公司不能访问外网,想在 Microsoft Word 里访问公司本地部署的 DeepSeek API,问具体应该如何操作?

笔者蛇年春节时曾经尝试过自己部署 DeepSeek. 笔者使用的笔记本配置:Intel(R) Core(TM) i7 2.4G + 64G 内存 + 2TB SSD

所以笔者没打算在本地部署哪怕是参数最小的 DeepSeek 版本,而是死皮赖脸的找腾讯云社区的运营小姐姐,要了 100 元代金券,然后在腾讯 HAI 上创建了一台 Windows Server 实例,在上面部署了 DeepSeek:

后来这 100 元被我霍霍完之后,我也不好意思再去要代金券了,如今我又转战 DeepSeek 官方的 API 了。

不过在 Word 里调用 DeepSeek 官方 API 还是本地 API,步骤都基本一致,无非是 API url 修改一下就行了。本文给出的示例代码里,调用的是官网 API endpoint. 

实现思路就是在 Word 里创建一个宏,把调用 DeepSeek API 的 Visual Basic 代码,写在这个宏里。

我们首先需要把 Word 里创建宏的入口放出来,让它显示在 Word 的工具栏里。

在 Word 的 File->Options 选项里,选择 Customize Ribbon,将 Developer 标签从左侧移到右侧,然后在 Developer 标签下新建一个 Group,随便起个名称。

一会儿我们要把创建好的宏,放到这个 Group 里去。

接下来我们就能在工具栏里看到 Developer 了,点击 Visual Basic,新建一个 Module:

下一步是给这个 Module 填充 Visual Basic 代码。

代码从哪来?肯定不用自己写。再次祭出 Trae(笔者现在是越来越懒了):

发出指令:

我要在 Word 里使用 Visual Basic, 调用 DeepSeek V3 API. API 输入,是用户在 Word 里选中的一段文本。

Trae 很快给我返回了下面的 Visual Basic 代码,除了将代码里的 API key place holder 去掉之外,其他的原封不动。

把 Trae 写好的 Visual Basic,粘贴到新建的 Module 中。

Function CallDeepSeekAPI(api_key As String, inputText As String)    Dim API As String    Dim SendTxt As String    Dim Http As Object    Dim status_code As Integer    Dim response As String    API = "https://api./chat/completions"    SendTxt = "{""model"": ""deepseek-chat"", ""messages"": [{""role"":""system"", ""content"":""You are word writting assistant""}, {""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 WithIf status_code = 200 Then    CallDeepSeekAPI = response    Else      CallDeepSeekAPI = "Error: " & status_code & " - " & response End If    Set Http = NothingEnd FunctionSub 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 = "<此处粘贴你自己的 DeepSeek API Key>"    If api_key = "" Then       MsgBox "Please enter the API key."      Exit Sub    ElseIf Selection.Type <> wdSelectionNormal Then       MsgBox "请在 Word 里选中一段文字"     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")       With regex           .Global = True           .MultiLine = True            .IgnoreCase = False             .Pattern = """content"":""(.*?)"""       End With       Set matches = regex.Execute(response)     If matches.Count > 0 Then      response = matches(0).SubMatches(0)      response = Replace(Replace(response, """", Chr(34)), """", Chr(34))        response = Replace(response, "\n", vbCrLf)               response = Replace(response, "\n", vbCrLf)        response = Replace(response, "*", "")        response = 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 IfEnd Sub

把上面的代码保存到 Module 之后,在 Word Customize Ribbon 里,把宏配置到自定义组里,随便维护一个图标即可。

上面的 Visual Basic 定义了名叫 DeepSeekV3 的 subroutine,同理我们可以让 Trae 再写一个调用开启了 DeepThink(R1) 模式的 DeepSeek API,步骤类似,这里不再赘述。 

最后测试一下,在 Word 里随便写一句话,选中之后,点击 Developer 的 DeepSeekV3, 这样我们刚才给这个选项分配的 Visual Basic 实现的同名 subroutine 就会执行:

API 调用的 response,自动填充到了 Word 里。

笔者对于 Visual Basic 的语法是一窍不通,但这并不会妨碍我使用它编写代码来调用 DeepSeek API,这就是 AI 的力量。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多