mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-10-15 12:15:16 +00:00
feat(llm): 声明真实上下文窗口 + 工作区间与窗口分离
问题:core.llm.model=AUTO,而 ModelContextWindow("auto") 匹配不到任何分支、
掉进 default 32768 —— 该源真实窗口是 1M(实测 990,034 token 的 prompt 通过),
内核却按小 30 倍的窗口算全部预算。
三处改动:
1. ModelContextWindow 补 deepseek-v4/v3 → 1M;推断不出时打日志(静默降级是
这次问题的成因,不能再默默退回一个小值)。
2. sourceFieldDefs 补 context_window 声明:它早已被 readInt 读进 LLMSource
并透传到 provider,但没进这张表 ⇒ WebUI 里看不见也改不了。
3. ComputeTokenBudget 新增 maxTargetTokens=600000:窗口 1M 不等于按 838K
(80%)干活。标称窗口≠有效窗口,600K 是该源最优工作区间,所以把
「窗口上限」(会不会被上游拒)与「工作区间」(预算分配)分开。
配套 core.llm.max_tokens 4096→32768(实测长输出样本达 18,272 token,
16384 仍会截断;上限是 cap 不是目标,短问答零成本)。
测试:tokenbudget_test.go 钉死封顶生效且小窗口不受影响;
context_window_test.go 钉死推断值与显式声明优先级。
This commit is contained in:
@ -186,6 +186,15 @@ var sourceFieldDefs = []struct {
|
||||
{"adapter", "string", "适配器"},
|
||||
{"adapter_path", "string", "适配器路径"},
|
||||
{"max_concurrent", "int", "并发上限"},
|
||||
// context_window 必须显式声明:它已被 readInt 读进 LLMSource 并透传到 provider,
|
||||
// 但早先没进这张表 ⇒ WebUI 里看不见、也改不了,内核就一直在用
|
||||
// ModelContextWindow(model) 的推断值。模型名是 AUTO 时那个函数匹配不到任何
|
||||
// 分支、掉进 default 32768,而真实窗口是 1M(实测 990,034 token 的 prompt 通过)
|
||||
// ⇒ 整个预算比真实小 30 倍。声明后它才是个可配的挡位。
|
||||
//
|
||||
// 注:per-source 的 max_tokens 不在这里—— LLMSource 没有该字段(输出上限
|
||||
// 是全局 core.llm.max_tokens)。别加一个读不到的旋钮。
|
||||
{"context_window", "int", "上下文窗口(token;留空按模型名推断)"},
|
||||
{"priority", "int", "AUTO 优先级(大者优先)"},
|
||||
{"vision", "bool", "支持图片"},
|
||||
{"audio", "bool", "支持音频"},
|
||||
|
||||
Reference in New Issue
Block a user