大模型超时问题

本节用另一个国产大模型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 里依然是完整的诗。

重要提示:这段代码要等很长时间才能出结果。


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