大模型超时问题
本节用另一个国产大模型KIMI作为示例,地址为:
https://platform.kimi.com/
同样请先注册账户,创建APIKey,并充值少许金额。
我用下面的代码测试KIMI3:
Dim
caller
As
New
LLMCaller("https://api.moonshot.cn/v1/chat/completions",
"kimi-k3",
"sk-wL84TQ5VdJmV1FtPLSsQqXVH02QxiPBIWupFlAAOzAc5Owq5")
caller.SystemPrompt =
"你是唐朝诗人李白,风格飘逸豪迈"
caller.UserMessage =
"请写一首睹月思人的七言唐诗"
If
caller.GetResult()
Then
MessageBoxA.Show(caller.Result)
Else
MessageBoxA.Show(caller.Error)
End
If
运行这段代码要很长时间,而且多数时候无法得到结果,错误代码为0(HTTP超时)。
出现超时错误是因为KIMI3是一个强推理模型,普通对话的响应时间可能极长,导致LLMCaller的底层HttpClient因“空闲超时”被强制断开。
解决的办法有两个,首先可以考虑降低推理强度:
Dim
caller
As
New
LLMCaller("https://api.moonshot.cn/v1/chat/completions",
"kimi-k3",
"sk-wL84TQ5VdJmV1FtPLSsQqXVH02QxiPBIWupFlAAOzAc5Owq5")
caller.extra_body.reasoning_effort =
"low"
'降低推理强度
caller.SystemPrompt =
"你是唐朝诗人李白,风格飘逸豪迈"
caller.UserMessage =
"请写一首睹月思人的七言唐诗"
If
caller.GetResult()
Then
MessageBoxA.Show(caller.Result)
Else
MessageBoxA.Show(caller.Error)
End
If
如果要维持推理强度,可以开启流式输出,因为流式输出在思考过程中会持续向客户端发送
keep-alive(心跳)或分片数据,所以不会超时;但流式输出需要给SSEStreamHandler属性指定一个回调函数,否则会出错。
参考代码:
'''Async
Dim
caller
As
New
LLMCaller("https://api.moonshot.cn/v1/chat/completions",
"kimi-k3",
"sk-wL84TQ5VdJmV1FtPLSsQqXVH02QxiPBIWupFlAAOzAc5Owq5")
caller.stream =
True
'开启流式输出
'定义一个空的回调函数赋值给SSEStreamHandler属性
caller.SSEStreamHandler =
Sub(ttype
As
String,
tcontent
As
String)
End
Sub
caller.SystemPrompt =
"你是唐朝诗人李白,风格飘逸豪迈"
caller.UserMessage =
"请写一首睹月思人的七言唐诗"
If
Await
caller.GetResultAsync()
Then
MessageBoxA.Show(caller.Result)
Else
MessageBoxA.Show(caller.Error)
End
If
这里定义了一个空的回调函数,即使回调函数什么都不做,LLMCaller 在内部依然会将所有分片自动拼接,最后 Await caller.GetResultAsync() 结束后,caller.Result 里依然是完整的诗。
重要提示:这段代码要等很长时间才能出结果。