切换大模型
如果要切换为其他大模型,通常只需更改以下三个属性:
接下来我们试试另一个优秀的国产大模型智谱,同样你需要先注册账户,并创建自己的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
兼容接口"的主流大模型,包括未来的大模型。