切换大模型

如果要切换为其他大模型,通常只需更改以下三个属性:

接下来我们试试另一个优秀的国产大模型智谱,同样你需要先注册账户,并创建自己的API Key(密钥),并充值少量金额。

该模型的地址为:

https://open.bigmodel.cn/

下面的代码改用了智谱的大模型,可直接在命令窗口执行:

Dim caller As New LLMCaller()
caller.BaseUrl =
"https://open.bigmodel.cn/api/paas/v4/chat/completions"  '使用智谱的接入地址
caller.ApiKey =
"66a327a013eb4ea1b22da6eb0c6972d4.Fa9LwswEqU7xz76e"  '请替换为自己的智谱密钥
caller.model =
"glm-5.3-flash"  '智谱的模型名称
caller.SystemPrompt =
"你是唐朝诗人李白,风格飘逸豪迈"
caller.UserMessage =
"请写一首睹月思人的七言唐诗"
caller.extra_body.thinking =
New JObject() From {{"type", "enabled"}}  '智谱5.3要强制开启思维模式
caller.extra_body.reasoning_effort =
"high"
If
caller.GetResult() Then
    MessageBoxA.Show(caller.Result)

Else

    MessageBoxA.Show(caller.Error)

End
If

方言参数

大部分模型默认开启思维模式,智谱5.3则强制要求显式开启思维模式(不合理的设计,估计未来会改回默认开启),代码为:

caller.extra_body.thinking = New JObject() From {{"type", "enabled"}}  '智谱5.3要强制开启思维模式
caller.extra_body.reasoning_effort =
"high"

这里使用了方言参数(extra_body)设置, 因为不同平台关于思维模式的设置,其参数名和取值可能存在差异,具体可查阅目标模型的官方文档。

OpenAI标准以外的模型专有参数统一通过"extra_body"属性设置,extra_body为ExpandoObject类型,可以随心扩展属性 ,例如:

Dim clr As New LLMCaller()
clr.extra_body.thinking = New JObject() From {{"type", "disabled"}} ' DeepSeek/GLM 专有,用于关闭思维模式
clr.extra_body.top_k = 50 '部分模型专有,如 DeepSeek、Anthropic 等
clr.extra_body.user_id = "foxtable" '部分国内平台(如 DeepSeek、智谱、Qwen)使用 user_id 作为终端用户标识


extra_body 中的属性在最终发送 HTTP 请求时,会平级合并到 JSON 请求体的顶层,而不是嵌套在 extra_body 字段下。例如上述代码生成的请求体为:

{
  "model": "...",
  "messages": [...],
  "thinking": { "type": "disabled" },
  "
top_k": 50,
  "user_id": "foxtable"
}

所有平台的特有属性都可以通过extra_body完成设置,确保了LLMCaller的兼容性。

其实标准属性也可以通过extra_body,例如下面两行代码:


caller.model =
"deepseek-flash"
caller.temperature =
1.0

完全等效于:

caller.extra_body.model =
"deepseek-flash"
caller.extra_body.temperature =
1.0

当然一般没有必要这么写,但这种特性
确保了LLMCaller能兼容未来,因为除了各大模型专有参数外,未来OpenAI如果新增标准参数,而LLMCaller未及同步更新,你可以直接通过extra_body设置新增参数。

关于ApiKey

当通过构造函数或 ApiKey 属性指定密钥时,类内部会自动判断 ApiKey 是否以 "Bearer " 为前缀,如果不是,会自动拼上 "Bearer "。

所以 LLMCaller 内部实际使用的授权格式是 "Bearer 你的ApiKey"。

这种方式适用于兼容标准 OpenAI 接口的大模型(大多数模型,如 DeepSeek、智谱等,均兼容)。

少数服务不采用标准的 "Bearer " 授权,而是用自定义请求头认证,这时改用 Headers 属性设置即可。

典型例子是微软 Azure OpenAI——它用 api-key 请求头而非 Bearer,但接口仍是标准 OpenAI 格式,所以只需改授权头,其余代码不变:

Dim clr As New LLMCaller("https://你的资源名.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=你的版本号", "gpt-4o", "")
clr.Headers(
"api-key") = "你的Azure密钥"
clr.UserMessage =
"请写一首睹月思人的唐诗"
If
clr.GetResult() Then
    Output.Show(clr.Result)

Else

    Output.Show(clr.Error)

End
If

综上,以下三行代码是等效的:

caller.ApiKey = "sk-a734b83536da45e9aedc3e42605bfb3a" '请替换为自己的DeepSeek密钥
caller.ApiKey = "Bearer sk-a734b83536da45e9aedc3e42605bfb3a" '请替换为自己的DeepSeek密钥
caller.Headers(
"Authorization") = "Bearer sk-a734b83536da45e9aedc3e42605bfb3a" '请替换为自己的DeepSeek密钥

可以看到,因为Headers 和 extra_body 两个属性的存在,使得 LLMCaller 能兼容几乎所有"提供 OpenAI 兼容接口"的主流大模型,包括未来的大模型。


本页地址:http://www.foxtable.com/webhelp/topics/7228.htm