

'自定义函数Get_AICortex:第一参数,目标单元格对象;第二参数,问题描述!Function Get_AICortex(TargetCell As Range, Question As String) As Variant'▲▲▲程序创建-乔恩红-Codiaq▼▼▼ AI+Office办公应用'▲▲▲祝各位道友办公顺利▼▼▼deepseek深度应用'配置自己API KEY ★★★★ 可以去各个大模型平台去申请自己的APIOn Error GoTo ErrorHandlerConst API_KEY As String = "这里请输入你申请的API KEY" ' 需替换有效密钥,官网申请Const API_URL As String = "这里请输入模型地址" '去官网查看' 构建安全请求Dim safeInput As StringsafeInput = BuildSafeInput(TargetCell.Text, Question)' 发送API请求Dim response As Stringresponse = PostRequest(API_KEY, API_URL, safeInput)' 解析响应内容If Left(response, 5) = "Error" ThenGet_AICortex = responseElseGet_AICortex = ParseContent(response)End IfExit FunctionErrorHandler:Get_AICortex = "Runtime Error: " & Err.DescriptionEnd Function' 构建安全输入内容Private Function BuildSafeInput(Context As String, Question As String) As StringDim sysMsg As StringIf Len(Context) > 0 ThensysMsg = "{""role"":""system"",""content"":""上下文:" & EscapeJSON(Context) & """},"End If'模型名称需要和官网名称保持完全一致BuildSafeInput = "{""model"":""这里请输入模型ID,也就是模型名称"",""messages"":[" & _sysMsg & "{""role"":""user"",""content"":""" & EscapeJSON(Question) & """}]}"End Function' 发送POST请求Private Function PostRequest(apiKey As String, url As String, payload As String) As StringDim http As ObjectSet http = CreateObject("MSXML2.XMLHTTP")On Error Resume NextWith http.Open "POST", url, False.setRequestHeader "Content-Type", "application/json".setRequestHeader "Authorization", "Bearer " & apiKey.send payloadIf Err.Number <> 0 ThenPostRequest = "Error: HTTP Request Failed"Exit FunctionEnd If' 增加10秒超时控制Dim startTime As DoublestartTime = TimerDo While .readyState < 4 And Timer - startTime < 10DoEventsLoopEnd WithIf http.Status = 200 ThenPostRequest = http.responseTextElsePostRequest = "Error " & http.Status & ": " & http.statusTextEnd IfEnd Function' JSON特殊字符转义Private Function EscapeJSON(str As String) As Stringstr = Replace(str, "\", "\\")str = Replace(str, """", "\""")str = Replace(str, vbCr, "\r")str = Replace(str, vbLf, "\n")str = Replace(str, vbTab, "\t")EscapeJSON = strEnd Function' 智能解析响应内容Private Function ParseContent(json As String) As StringDim regex As Object, matches As ObjectSet regex = CreateObject("VBScript.RegExp")' 增强版正则表达式With regex.Pattern = """content"":\s*""((?:\\""|[\s\S])*?)""".Global = False.Multiline = True.IgnoreCase = TrueEnd WithSet matches = regex.Execute(json)If matches.Count > 0 ThenDim rawText As StringrawText = matches(0).SubMatches(0)' 反转义处理rawText = Replace(rawText, "\""", """")rawText = Replace(rawText, "\\", "\")rawText = Replace(rawText, "\n", vbCrLf)rawText = Replace(rawText, "\r", vbCr)rawText = Replace(rawText, "\t", vbTab)ParseContent = rawTextElse' 错误信息提取Dim errMatch As Objectregex.Pattern = """message"":\s*""(.*?)"""Set errMatch = regex.Execute(json)If errMatch.Count > 0 ThenParseContent = "API Error: " & errMatch(0).SubMatches(0)ElseParseContent = "Invalid Response"End IfEnd IfEnd Function
我们用的是Agnes AI的agnes-2.5-flash文本模型,然后使用Chat Completions,使用messages 传递输入(当然我们还可以使用OpenAI Responses API,使用 input 代替 messages 传递输入)
再看一个案例:

好啦,今天就到这了,下期再见~

夜雨聆风