fix: 修复 agent-engine 中 abortController 在自动压缩前未定义导致 ReferenceError 的严重 bug
compressWithLLM() 调用时引用的 abortController 变量在 while 循环内才定义, 但自动压缩逻辑在 while 循环之前执行,导致运行时 ReferenceError。 修复方式:使用 state 中已有的 AbortController 或创建新的实例。
This commit is contained in:
@@ -500,8 +500,9 @@ export async function runAgentLoop(
|
||||
// 自动压缩:当上下文 token 超过 context window 的 50% 时,调用 LLM 摘要压缩
|
||||
if (shouldAutoCompress(messages, numCtx)) {
|
||||
logInfo(`自动上下文压缩触发: tokens≈${estimateTokens(messages.map(m => m.content || '').join(''))} > ${Math.floor(numCtx * AUTO_COMPRESS_THRESHOLD)} (50% of ${numCtx})`);
|
||||
const compressAC = state.get<AbortController | null>(KEYS.ABORT_CONTROLLER) || new AbortController();
|
||||
try {
|
||||
const compressed = await compressWithLLM(messages, api, model, { abortController });
|
||||
const compressed = await compressWithLLM(messages, api, model, { abortController: compressAC });
|
||||
if (compressed.length < messages.length || estimateTokens(compressed.map(m => m.content || '').join('')) < estimateTokens(messages.map(m => m.content || '').join(''))) {
|
||||
messages.length = 0;
|
||||
messages.push(...compressed);
|
||||
|
||||
Reference in New Issue
Block a user