本文通过分步解析 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 通信 citeturn0search0。
- 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 接口。
参考文献:
- 使用
CreateObject("MSXML2.XMLHTTP")
发起 HTTP 请求 citeturn0search0 - MSXML2.XMLHTTP 对象在 VBA 中的用法及示例 citeturn0search6
- .Open 方法参数说明与同步/异步调用区别 citeturn0search2
- 在 HTTP 请求中设置
Content-Type
与自定义请求头 citeturn0search6 - JSON 字符串在 VB 中的双引号转义写法(StackOverflow 讨论) citeturn0search0