'在“Const YOUR_DEEPSEEK_API_KEY”配置自己的deepseek sk-开头的API KEY
'官网:https://platform.deepseek.com/usage
Const YOUR_DEEPSEEK_API_KEY As String = "<DeepSeek API Key>"
Function deepseek(userQuery As String, _
Optional base_str As String = "")
' 创建XMLHTTP对象
Dim xhr As Object
Set xhr = CreateObject("MSXML2.XMLHTTP.6.0")
If base_str <> "" Then
userQuery = userQuery & "你分析的内容:" & base_str
End If
userQuery = userQuery & ",请尽量直接返回处理结果,不需要过程!"
'转JSON辅助用
userQuery = EscapeJsonString(userQuery)
requestBody = "{""model"": ""deepseek-chat"", ""messages"":[{""role"": ""system"", ""content"": ""你是一个Excel办公助手!""},{""role"": ""user"", ""content"": """ & userQuery & """}],""max_tokens"": 2048,""stream"": false}"
With xhr
.Open "POST", "https://api.deepseek.com/chat/completions", True
' 设置请求头
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Authorization", "Bearer " & YOUR_DEEPSEEK_API_KEY
' 开始时间
st = Timer
' 发送请求
.send requestBody
n = 0
Do While .readyState <> 4
If Timer - st > 100 Then
.abort
st = Timer
.send requestBody
n = n + 1
End If
DoEvents
If n > 3 Then
deepseek = "请求失败" + .Status
Exit Function
End If
Loop
' 获取响应
If .Status = 200 Then
deepseek = Replace(Trim(Replace(Split(Split(.responseText, """content"":")(1), "}")(0), Chr(34), "")), "\n", Chr(10))
End If
End With
End Function
Function EscapeJsonString(inputStr As String) As String
Dim result As String
Dim i As Integer
Dim char As String
result = ""
For i = 1 To Len(inputStr)
char = Mid(inputStr, i, 1)
Select Case char
Case """"
result = result & "\"""
Case "\"
result = result & "\\"
Case "/"
result = result & "\/"
Case vbBack
result = result & "\b"
Case vbFormFeed
result = result & "\f"
Case vbCrLf
result = result & "\r\n"
Case vbLf
result = result & "\n"
Case vbCr
result = result & "\r"
Case vbTab
result = result & "\t"
Case Else
' 处理其他字符(包括Unicode字符)
If Asc(char) < 32 Or Asc(char) > 126 Then
result = result & "\u" & Right("0000" & Hex(AscW(char)), 4)
Else
result = result & char
End If
End Select
Next i
EscapeJsonString = result
End Function