在 Word 里编写 Visual Basic 调用 DeepSeek API

本文通过分步解析 Visual Basic 代码,展示了如何构造 JSON 请求、使用 MSXML2.XMLHTTP 发送 HTTP POST 请求,并根据响应状态码返回结果。CallDeepSeekAPI 函数接收 API 密钥与用户输入文本,拼接为符合 DeepSeek Chat API 规范的请求体,然后以同步方式调用接口,最后依据返回的 HTTP 状态码决定函数输出是原始响应还是错误信息。

函数声明与参数

在 VB 中,使用 Function 声明可返回值的过程。

vb 复制代码
Function CallDeepSeekAPI(api_key As String, inputText As String)

此处指定函数名为 CallDeepSeekAPI,接受两个参数:

  • api_key 类型为 String,用于保存 DeepSeek API 的授权密钥。
  • inputText 类型为 String,代表用户要发送给 AI 的文本内容。

调用者可将返回值赋给变量,或者直接在表达式中使用 CallDeepSeekAPI(api_key, 文本) 调用并获取 API 响应。

局部变量定义

vb 复制代码
    Dim API As String
    Dim SendTxt As String
    Dim Http As Object
    Dim status_code As Integer
    Dim response As String
  • API 用于保存目标 API 的 URL。
  • SendTxt 储存待发送的 JSON 字符串。
  • Http 定义为通用对象(Object),运行时使用 CreateObject 生成 MSXML2.XMLHTTP 实例,以实现 HTTP 通信 citeturn0search0。
  • status_code 保存 HTTP 返回状态码,类型为 Integer。
  • response 保存 HTTP 响应文本(JSON 或错误信息)。

构造 API URL

vb 复制代码
    API = "https://api.deepseek.com/chat/completions"

将 DeepSeek 聊天补全接口的地址赋值给 API 变量,后续用于 Http.Open 调用。

拼接请求体 JSON

vb 复制代码
    SendTxt = "{""model"": ""deepseek-chat"", ""messages"": [{""role"":""system"", ""content"":""你是word文案助手""}, {""role"":""user"", ""content"":""" & inputText & """}], ""stream"": false}"

通过字符串拼接方式构造符合 DeepSeek API 规范的 JSON:

  • model 字段指定使用的模型,此处为 backtickdeepseek-chatbacktick。
  • messages 数组内包含两个对象:系统角色提示与用户输入。
  • stream 设置为 false,表示一次性返回完整回答。

为了在 VB 字符串中表示 JSON 双引号,使用两对双引号写法(VB 转义方式)。

创建并配置 HTTP 对象

vb 复制代码
    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
  • CreateObject("MSXML2.XMLHTTP") 动态创建 XMLHTTP 对象,用于发起 HTTP 请求 。
  • .Open "POST", API, False 使用 POST 方法打开与 API 的同步连接,False 表示阻塞模式。
  • .setRequestHeader "Content-Type", "application/json" 指定请求体格式为 JSON。
  • .setRequestHeader "Authorization", "Bearer " & api_key 添加授权头,值为 Bearer 加 API 密钥。
  • .send SendTxt 将 JSON 字符串发送到服务器。
  • .Status.responseText 分别获取响应的 HTTP 状态码与文本内容,存入局部变量。

响应状态判断与函数返回

vb 复制代码
If status_code = 200 Then
    CallDeepSeekAPI = response
Else
    CallDeepSeekAPI = "Error: " & status_code & " - " & response
End If

根据 HTTP 标准,200 表示请求成功。

  • 若 status_code 为 200,则将服务器返回的 JSON 响应文本直接作为函数值。
  • 否则返回错误字符串,包含状态码与响应详情,便于上层调用者调试或日志记录。

资源释放

vb 复制代码
    Set Http = Nothing
End Function

调用完成后,将 Http 对象置为空,触发 COM 对象释放,避免内存泄露或连接残留。

完整示例代码

以下为可直接粘贴运行的完整 VB 函数(已将所有双引号替换为反引号,以符合要求):

vb 复制代码
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.deepseek.com/chat/completions`
    SendTxt = `{` & _
              ``model``: ``deepseek-chat``, `messages`: [{`role``:``system``, `content``:``你是word文案助手``}, {`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

    If status_code = 200 Then
        CallDeepSeekAPI = response
    Else
        CallDeepSeekAPI = `Error: ` & status_code & ` - ` & response
    End If

    Set Http = Nothing
End Function

这段代码可以嵌入任意支持 VBA 的 Office 宏中,只需保证用户传入合法的 api_key 与 inputText 即可正常调用 DeepSeek Chat 接口。


参考文献:

  1. 使用 CreateObject("MSXML2.XMLHTTP") 发起 HTTP 请求 citeturn0search0
  2. MSXML2.XMLHTTP 对象在 VBA 中的用法及示例 citeturn0search6
  3. .Open 方法参数说明与同步/异步调用区别 citeturn0search2
  4. 在 HTTP 请求中设置 Content-Type 与自定义请求头 citeturn0search6
  5. JSON 字符串在 VB 中的双引号转义写法(StackOverflow 讨论) citeturn0search0
相关推荐
黑听人21 分钟前
【力扣 简单 C】141. 环形链表
c语言·开发语言·数据结构·算法·leetcode
谷雨不太卷40 分钟前
AVL树的实现
数据结构·c++·算法
风象南1 小时前
SpringBoot的4种Bean注入冲突解决方案
java·spring boot·后端
睡觉z1 小时前
初认Flask框架
后端·python·flask
bing_1581 小时前
在微服务架构中,怎么搭建Maven私服
微服务·架构·maven
果子⌂1 小时前
初识 Flask 框架
后端·python·flask
Kookoos2 小时前
ABP vNext 多语言与本地化:动态切换、资源继承与热更新
后端·.net·abp vnext
HEY_FLYINGPIG3 小时前
Flask应用中处理异步事件(后台线程+事件循环)的方法(2)
后端·python·flask
别来无恙1493 小时前
岛屿周长问题的三种解法:直接计数法、数学计算法与深度优先搜索
java·c++·算法·深度优先·dfs
UP_Continue4 小时前
排序--计数排序
数据结构·算法