thzxx
|
e140e735de
|
v0.16.18: 网络超时 30s→900s + 流式超时动态计算修复 + 预存编译错误修复
|
2026-08-01 14:13:04 +08:00 |
|
thzxx
|
794f94ab89
|
feat: v0.16.17 — 暗色模式 + diff工具 + 快捷键系统 + 审计日志 + 子代理分级权限 + Metrics仪表盘
|
2026-08-01 09:00:46 +08:00 |
|
thzxx
|
44094340a5
|
feat: v0.16.16 — 稳定性增强 + 性能优化 + 体验补全
|
2026-07-31 22:31:02 +08:00 |
|
thzxx
|
afe93d7fed
|
feat: v0.16.15 - 修复工具定义重复、集成自适应压缩策略、批量轨迹写入、语义匹配增强
|
2026-07-30 22:48:03 +08:00 |
|
thzxx
|
18f34c91fe
|
v0.16.14: TypeScript 编译错误修复 + 文档同步 + 代码健壮性增强
|
2026-07-30 21:47:52 +08:00 |
|
紫影233
|
94e0a36981
|
v0.16.12: 删除 8 个非必要工具 — get_file_info/diff_files/replace_in_files/random/uuid/json_format/hash/datetime
|
2026-07-16 17:47:02 +08:00 |
|
紫影233
|
45b50e4dc7
|
v0.16.11: Plan Mode 最小必要性清理 — 删除进度注入和死代码链
删除项:
- Plan Mode 每轮进度注入代码(formatPlanStatus() 主动注入到 user 消息)
AI 改为从 plan_track mark_done/status 工具返回值自行推断进度
- _lastPlanStatus 死代码链(agent-engine.ts 2 处保存 + input-area.ts 2 处清空)
保存后从未被读取使用,纯死代码
- formatPlanStatus import(已无调用点)
- _lastPlanStatus 和 _planLastInjectedDone StateKey 声明
简化项:
- "计划已批准"消息移除 (web_search、write_file 等) 工具名列举,让 AI 自行判断
修正项:
- L2431 注释从"AI 可通过 formatPlanStatus() 看到剩余步骤"
改为"AI 通过 plan_track mark_done/status 的工具返回值获知进度"
总计 8 文件变更
|
2026-07-16 16:56:32 +08:00 |
|
紫影233
|
80581deb37
|
v0.16.10: 最小必要性清理 — 删除非必要校验和注入提示
按"让 AI 自己判断"原则,删除所有"工程师判断"性质的校验代码和注入提示,
只保留安全防护(路径沙箱/命令安全/参数消毒)和必要的上下文管理(压缩/截断)。
删除项:
- completion-gate.ts 整个文件(notThinking/toolResultReview/contextEfficiency/planModeCompletion)
- verifyToolResult 工具结果核验函数 + TOOLS_NEED_VERIFY 常量
- 跨轮次死循环检测器(recordLoopSignature/detectLoopDeadlock/resetLoopDeadlockDetector)
- R77 checkRateLimit 速率限制 + R87 isToolCircuitBroken 熔断器 + R104 isDuplicateToolResult 去重
- R56 目标对齐验证 + R63 速率限制 + R87 熔断器 + R104 去重检测 + R119 优先级排序
- agent-metrics recordCompletionGate + completionGatePassed + avgCompletionScore 相关代码
- context-manager 低价值关键词黑名单 + 快速摘要改用 user role
- LoopContext 的 completionGateFailCount/verifyWarnings 字段
修复项:
- R76 路径沙箱 replace bug:用 startsWith 前缀锚定替代 replace,避免子串误判
- R28 命令注入检测:缩小匹配范围,仅拦截命令替换中包含危险命令的情况
总计 13 文件变更,+46/-1124 行
|
2026-07-16 16:44:04 +08:00 |
|
紫影233
|
a4b82b45bc
|
v0.16.9: 核心引擎深度分析修复 — 27 个问题(P0×8 + P1×19 + P2 死代码)
引擎层(agent-engine.ts):
- P0-R1: handleExecuting 中止改 throw AbortError,让主循环 catch 统一处理 UI 反馈
- P0-E1: executeToolWithTimeout 注释修正,明确 fire-and-forget 限制
- P0-P3: persistLoopContext 改名 snapshotLoopContext + 补全字段,明确语义为运行时快照
- P1-E1: handleInit 增加 isAborted 检查(loadCustomFiles 和 search 后)
- P1-E2: catch 块调用 snapshotLoopContext 确保终止状态写入
- P1-E3: onConfirmTool await 后检查中止信号
- P1-E4: flushAllTraces 改为 await
- P1-E5: 死锁检测 ephemeral 消息加入 PRESERVE_PATTERNS
- P1-E6: 记忆提取 setTimeout 存储到 _pendingMemoryTimers,finally 块清理
- P1-R5: handleExecuting 中止时设置 _abortToolRecords
上下文层(context-manager.ts + agent-engine.ts):
- P0-C1: 删除 nonSystemCompressed,旧摘要不再保留(已合并到新摘要)
- P0-C2: 部分删除 tool 消息时也 strip tool_calls,降级为纯文本 assistant
- P1-C1: handleCompressing 移除 shouldAutoCompress 二次判断,直接执行压缩
- P1-C2: COMPRESSING 状态增加中止检查
- P1-C3: R15 tail 边界保护 middle 无 assistant 时移除孤立 tool 消息
- P1-C4: 压缩接受条件改 AND(3 处:handleInit/R8/handleCompressing)
- P1-C6: head 中已压缩消息的 tool_calls 清除,避免累积膨胀
渲染层(chat-area.ts + input-area.ts + workspace-panel.ts):
- P0-R2: appendAssistantPlaceholder 重置 _streamLastRenderedLen/_streamLastRenderedHash/_streamRenderContent
- P1-R1: rAF 竞态通过重置 _streamRenderContent 解决
- P1-R2: clearMessages/clearMessagesDOM 重置 _sysPromptRendered
- P1-R3: onNewIteration 渲染顺序修正(remove → render → append)
- P1-R4: updateToolCardDOM 改用 querySelectorAll 取最后一个匹配
持久化层(chat-db.ts + sqlite.ts + ipc.ts + history-modal.ts):
- P0-P1: onNewIteration 调用 saveCurrentSession 持久化中间消息
- P0-P2: 非 AbortError 异常时保存 partial 消息(标记 interrupted: true)
- P1-P1: saveSession 增量保存(_savedMsgIds Set 追踪),resetSavedMsgTracking
- P1-P2: 新增 saveSettingsBatch 批量写盘接口 + IPC handler
- P1-P3: 删除死表 tool_calls 的 saveToolCall/getToolCallsBySession 函数和 IPC handler
死代码清理:
- chat-area.ts: 删除 appendToolCallCardToPlaceholder/updateToolCallCardInPlaceholder(从未调用)
- chat-area.ts: 删除 _streamRenderThink/_streamRenderModel 未使用变量
- input-area.ts: 删除 updateMessageToolRecord 空函数 + 对应 import
版本号 0.16.8 → 0.16.9
|
2026-07-16 15:53:28 +08:00 |
|
紫影233
|
2ac07208b5
|
v0.16.8: Agent Loop P0-P3 修复 + 死代码清理 + 版本号升级
- P0: executeToolWithTimeout 重写为 Promise.race,实现真正超时中断
- P1 #2: R8 紧急压缩限制最多 2 次,防止溢出→压缩→重试无限循环
- P1 #3: 新增 snapshotSafetyState/restoreSafetyState,Sub-Agent 在隔离环境中运行
- P1 #4: persistLoopContext 中止时持久化 TERMINATED 状态
- P1 #5: Completion Gate 失败时注入纠正提示并重试(最多 1 次)
- P2 #6: executeSingleTool 重试逻辑兜底返回完善
- P2 #7: 压缩阈值提高(0.3→0.5, 0.8→0.85)+ compressedThisCycle 防同轮重复压缩
- P2 #8: 路径依赖检查优先于 ALWAYS_PARALLEL,防止读写同路径被错误并行
- P2 #9: R105 消息年龄追踪改为内容哈希 key(后被确认为死代码并清理)
- P3 #11: ctx_tokens 统一语义为 prompt_eval_count
- P3 #12: 自动记忆提取捕获 signal 引用,避免竞态
- P3 #13: verifyToolResult 返回警告字符串供 Completion Gate 使用
- 注入消毒增强:零宽字符移除、全角→半角、新增覆盖模式
- 死代码清理:R105 上下文年龄追踪系列函数(无任何调用点)
- 版本号 0.16.7 → 0.16.8(package.json/lock, menu.ts, index.html, README.md)
|
2026-07-16 14:31:19 +08:00 |
|
紫影233
|
bd3a06bfaf
|
v0.16.7: 引擎修复 + 工具面板统一 + AGENT.md 改为仅工作空间加载
核心引擎修复:
- 状态转换表补全 THINKING/PARSING/EXECUTING -> COMPRESSING,修复紧急压缩成为死代码的 P1 问题
- 新增跨轮次死循环检测器(软性提示 + 硬性熔断),防止模型陷入重复工具调用死循环
- handleCompressing 空响应回到 THINKING 而非 REFLECTING,避免错误终止
- executeHooks 添加 .catch() 防止未处理的 Promise 拒绝
- ALWAYS_PARALLEL 移除 git 和 browser_evaluate(有副作用的工具不应并行)
- thinking fallback:content 为空但有 thinking 时,用 [推理过程] 作为 content 保留上下文
- 8个写类工具添加专用格式化器(含 success + message 字段)
- 清理死代码:3个未使用函数 + 3个未使用 import
工具面板统一:
- 10个工具独立下拉框统一为1个全局执行模式选择器
- FIFO 队列防止并行 showToolConfirm 导致静默取消
- delete_file 支持 paths 数组参数批量删除
工具定义与实现一致性修复:
- run_command 移除未使用的 timeout 参数,描述改为"超时可配置"
- list_directory 添加 2000 条截断逻辑 + filter_extension 参数
- calculator 正则移除 ^ 字符(parser 用 ** 替代)
- search_files/tree/web_search/fetch_top 描述与实现对齐
消息传递修复:
- trimByTokenLimit 改为原子组选择(assistant+tool_calls 与后续 tool 消息作为一组)
- 历史工具结果复用 formatToolResultForModel,与当前格式一致
AGENT.md 加载策略变更:
- 删除内置 AGENT.md 文件
- 仅从工作空间加载:有则注入,无则跳过
其他修复:
- 修复初始化失败 "Cannot convert undefined or null to object"(saveSetting null 导致 JSON.parse 陷阱)
- 修复工作空间命令行标签页 idle 状态残留导致样式错乱
版本号: 0.16.5 -> 0.16.7
|
2026-07-14 16:26:43 +08:00 |
|
thzxx
|
d479666182
|
v0.16.1: 优化Reflecting阶段说了做但没做检测逻辑,降低误判率
|
2026-07-11 23:46:55 +08:00 |
|
thzxx
|
64b7d307e7
|
v0.16.0: Agent ReAct Loop 深度优化 R51-R128 (上下文管理/安全治理/性能分析/会话持久化)
|
2026-07-11 23:31:27 +08:00 |
|
thzxx
|
cb2ce48eb7
|
v0.15.0: Agent ReAct Loop 核心引擎深度审计与生产级增强 (R1-R50)
核心引擎健壮性(R1-R10)、上下文管理优化(R11-R20)、工具安全与验证(R21-R30)、UI渲染性能(R31-R40)、基础设施与监控(R41-R50)、版本号升级
|
2026-07-11 20:56:48 +08:00 |
|
thzxx
|
e04320d454
|
fix: 修复system消息渲染到聊天界面+AI说了做但没调用工具直接停止的问题
|
2026-07-11 18:50:05 +08:00 |
|
thzxx
|
a406216e5e
|
fix: 移除非Plan模式下的待办追踪逻辑
非Plan模式下运行的关键词匹配待办追踪容易误报且干扰AI,信任AI自主判断进度。同时移除已变成死代码的detectPendingActions和detectAllMentionedActions函数。
|
2026-07-11 16:06:15 +08:00 |
|
thzxx
|
e2350a784d
|
fix: 修复所有超时设置0=禁用不生效的问题
1. 流式超时: baseTimeout=0时被忽略,仍走动态计算120s-600s 2. HTTP超时: ipc.ts中0>0=false导致setHTTPTimeout未调用 + Math.max(5000,ms)阻止0值 3. MCP超时: 同HTTP模式 + Math.max(10000,ms)阻止0值 4. fetchWithTimeout和web_fetch中直接setTimeout在HTTP_TIMEOUT=0时仍触发abort
|
2026-07-11 15:38:28 +08:00 |
|
thzxx
|
028cf33dee
|
fix: 修复Plan Mode嵌套bug、上下文计算错误和死代码
1. Plan Mode断点续传和系统提示词错误嵌套在if(workspaceDir)内,导致无工作空间时Plan Mode完全失效 2. handleObserving中ephemeral清理使用KEYS.NUM_CTX而非getEffectiveNumCtx(),导致模型上下文小于用户设置时计算错误 3. 移除_softConvergeInjected死代码 4. 修复handleThinking重试循环中的缩进混乱和tab/space混用
|
2026-07-11 15:26:11 +08:00 |
|
thzxx
|
1db01d106f
|
feat: 长程任务稳定性改造,支持50+轮次执行
P0: 取消80%上下文使用率硬性限制3轮,改为触发紧急压缩; P0: compressWithLLM预处理截断500→2000字符; P0: handleThinking API异常重试机制(2次指数退避); P1: 增量压缩改为按token使用率30%触发而非消息条数; P1: COMPRESS_KEEP_HEAD/TAIL从2/2调整为5/8; P1: 看门狗从30分钟延长到60分钟; P1: 流式超时改为动态计算(120s+0.5s/1K tokens,上限10分钟); P1: buildContext windowSize从20调整为40; P2: smartTruncate改为token感知,仅在压力>50%时触发; P2: 工具消息硬限制从40条改为token感知(80条/压力大40条); P2: 移除60%软收敛催促(避免误导模型提前结束); AUTO_COMPRESS_THRESHOLD从0.5调整为0.3
|
2026-07-11 15:09:06 +08:00 |
|
thzxx
|
9bcde7f78d
|
feat: memory工具新增remove_batch批量删除action,一次读+一次写高效删除多条记忆
|
2026-07-10 21:58:24 +08:00 |
|
thzxx
|
0145f0cfe1
|
fix: memory replace/remove 归一化匹配+最低长度回退至5,修复引号差异导致删除失败
|
2026-07-10 21:47:41 +08:00 |
|
thzxx
|
e5224e4a8d
|
chore: bump version to 0.14.14
|
2026-07-10 21:34:15 +08:00 |
|
紫影233
|
91a30193a7
|
v0.14.13: Token Dashboard 上下文计算修复 + 校准比例修正 + 已有TS错误修复
|
2026-07-10 16:14:38 +08:00 |
|
thzxx
|
e3b44a0357
|
feat: 移除所有工具结果截断,确保内容完整传给AI
删除TOOL_MAX_RESULT_SIZE配置表和formatDefaultToolResult截断; read_file移除2000行/100KB截断; read_multiple_files移除10000字符截断; list_directory移除2000条目上限; search_files移除10条匹配和50结果限制; run_command移除512KB输出截断; browser_extract移除15000字符截断; session_read移除50条消息限制; session_list移除20条限制; memory search移除8条限制; web_search移除10条结果限制; SearXNG HTML移除内容截断; 版本号升级至0.14.11; 实现工具三档执行模式(auto/confirm/disabled)
|
2026-07-09 22:31:04 +08:00 |
|
紫影233
|
b947744f08
|
v0.14.10: Agent Loop 引擎优化 - 修复误杀+去重+稳定性增强
|
2026-07-08 13:03:45 +08:00 |
|
紫影233
|
e9e64eb9c8
|
v0.14.9: fix prompt injection, context compression, auto memory, icon path
|
2026-07-07 14:05:17 +08:00 |
|
紫影233
|
7c78a65a9c
|
fix: 全面修复内置工具问题 + 架构缺陷修复 (v0.14.8)
P0: replace_in_files glob重写, search_files正则修复, list_directory递归分页修复, git stash/tag参数修复, buildSearchResponse query字段修复; P1: compress命令注入修复, run_command输出限制, download_file UA+重试; P2: web_fetch extract_mode/mobile_ua生效, read_multiple_files默认值对齐, CONFIRM_TOOLS扩展, 工具图标/名称映射补全; P3: random死代码清理, IPC类型补全; 架构: 系统提示词重复渲染修复, 版本号动态注入, 上下文余量字段修复, 工具记录丢失修复
|
2026-07-07 11:44:48 +08:00 |
|
thzxx
|
e67d638e06
|
chore: 版本号 0.14.6 → 0.14.7
fix: onNewIteration 只在 THINKING 状态调用,消除每状态切换的冗余触发
fix: renderMessages 全量清空重建,去掉增量 diff 的边界 bug
fix: 空消息跳过增加 think 判断,纯思考卡片不再被吞掉
fix: updateMessageToolRecord 改为空函数,工具卡片统一由 onDone 挂载
|
2026-06-28 23:16:05 +08:00 |
|
thzxx
|
2f37111074
|
chore: 版本号 0.14.4 → 0.14.5
refactor: Hook 系统精简 — 7个→2个(SecurityCheck + FileWriteDedup)
delete: verification.ts 删除(DiffAnalyzer/FileChangeAudit 仅打日志无实际作用)
remove: ResultValidation/IterationMetrics/PlanAutoTrack Hook
merge: write_file 路径记录内联到 agent-engine
|
2026-06-28 20:49:34 +08:00 |
|
thzxx
|
adff2f36eb
|
chore: 版本号 0.14.3 → 0.14.4
refactor: Plan Mode 进度仅变化时注入(避免每轮冗余)
refactor: Plan Mode 执行规则精简 20行→3行
refactor: 断点续传提示词合并
refactor: PlanAutoTrack Hook 去除模糊匹配,仅 AI 手动 plan_track 精确标记
refactor: buildHistoryMessages 取 user+assistant,不取 system
refactor: 附件传递改为 JSON 结构化(文件/视频 Base64,图片仅 images[])
refactor: 用户文字始终排在附件 JSON 之后
fix: onDone 双重渲染导致 AI 消息卡片重复(正常路径+重试路径)
|
2026-06-28 20:42:50 +08:00 |
|
thzxx
|
4c0405dc95
|
chore: 版本号 0.14.1 → 0.14.2
refactor: 移除抗幻觉全部功能(幻觉检测/反幻觉提示词/Completion Gate阻断)
perf: 精简提示词(去掉进度锚点/项目索引,简化任务感知/预算警告措辞)
fix: 模型能力徽章启动时不显示(await filterEmbedModels)
fix: 剩余上下文改用 estimateTokens 估算(Ollama KV Cache 导致虚高)
fix: 去掉流式空闲30s超时(大模型本地推理响应慢)
fix: 能力介绍类回复不再触发幻觉误判(已随抗幻觉移除一并解决)
|
2026-06-28 13:54:11 +08:00 |
|
thzxx
|
b5a8a793e2
|
chore: 版本号 0.14.0 → 0.14.1
fix: 去掉流式空闲30s超时(大模型本地推理响应慢易误中止)
fix: await filterEmbedModels 确保启动时模型能力徽章正常显示
fix: 剩余上下文改用 estimateTokens 估算而非 Ollama eval_count(KV Cache 导致虚高)
|
2026-06-28 13:25:59 +08:00 |
|
thzxx
|
2a9d8606ba
|
feat: v0.14.0 生产级引擎+渲染全面优化
Engine 核心优化 (P0-P3):
- 智能工具重试: 永久错误(ENOENT/EACCES)立即返回, 瞬态错误指数退避
- 路径依赖检测: write→read/create→write 自动串行化, 避免并行竞态
- AbortController 集中生命周期管理, 防泄漏+竞态
- 上下文压缩: 200条硬上限 + 120条增量压缩, 防止 Ollama OOM
- 流式分级超时: 空闲30s + 总300s, 区分思考/卡死
- 工具缓存: default TTL 60s, 各工具独立TTL, 不再永久缓存
- 结果截断: 2000字智能截断, 优先JSON/换行边界保护
- Plan Mode 断点续传: 中止后自动恢复未完成计划
- 幻觉检测: 中英双语规则, agent-engine+completion-gate 统一共享
- Trace 缓冲批量写入 + 3次重试
- Agent Metrics JSON/Prometheus 双格式导出
渲染优化 (P0-P2):
- 流式纯文本追加, 流结束才 Markdown, 消除 O(n²) 性能瓶颈
- 终端增量 DOM appendChild, 替代全量 innerHTML 重建
- 消息 diff: Set<number> 索引替代 DOM querySelectorAll 计数
- ANSI 解析: 正则批量替换替代逐字遍历
- 终端截断保留系统消息行
Qwen3 兼容:
- system 消息始终唯一且位于首位
- SOUL.md 合并到统一 system prompt
- 中途注入 system→user, 避免触发热模板 400
上下文长度控制:
- 设置面板下拉(128K/256K/512K/1M), 默认128K
- 模型栏显示配置值, 下拉框显示模型自身ctx
- 全局硬编码 24576→131072
版本号 v0.13.8 → v0.14.0
README.md + 帮助面板全面更新
|
2026-06-28 12:54:56 +08:00 |
|
thzxx
|
28105692ac
|
refactor: 硬提示通用化 — memory/session_read/session_list/spawn_task全部覆盖
|
2026-06-24 22:54:58 +08:00 |
|
thzxx
|
fe15b8d71c
|
fix: memory工具结果后注入硬提示 — 防止模型无视实际数据、把系统提示词当记忆编造
|
2026-06-24 22:52:56 +08:00 |
|
thzxx
|
77b56ed8af
|
fix: memory read_all/search结果用可读文本格式 — 防止模型对JSON'看漏'
|
2026-06-24 22:31:36 +08:00 |
|
thzxx
|
7b1505343d
|
fix: dedup拦截后工具卡片卡在准备中 — 补调onToolCallError清理卡片状态
|
2026-06-24 22:27:48 +08:00 |
|
thzxx
|
90f7572d77
|
fix: memory工具结果丢失 — formatToolResultForModel丢弃read_all的entries; 历史消息剔除用户消息
|
2026-06-24 22:16:53 +08:00 |
|
thzxx
|
95c23bd19f
|
refactor: 移除内置USER.md — 仅从工作空间读取,不存在则不注入
|
2026-06-24 22:01:59 +08:00 |
|
thzxx
|
811ae717bb
|
fix: 移除过早的"全部完成"确认信号 — 关键词匹配无法判断任务真实完成度
|
2026-06-24 21:49:16 +08:00 |
|
thzxx
|
47bfc5e629
|
fix: 跨Agent Loop工具上下文断裂修复 — 历史消息注入tool_calls+tool结果+Plan进度
|
2026-06-24 21:22:12 +08:00 |
|
紫影233
|
a049db066e
|
fix: 重复调用检测强化 — 工具结果含去重文字立即触发 + 阈值 3→2
之前: 仅检查同工具连续成功 ≥3 次,且只数 success 次数
现在:
1. 工具结果文本含「⚠️ 重复添加」「已跳过」「duplicate」→ 立即触发
2. 同工具连续成功 ≥2 次 → 也触发
3. 注入 ⛔ system 消息 + 缩减剩余轮次到当前+1
|
2026-06-24 16:20:01 +08:00 |
|
紫影233
|
5cbeecf6f2
|
fix: 去重移除 type 限制 — 内容相同就是重复,不管类型
问题: AI 第一轮传 type=rule,第三轮漏传 type 默认 fact,相同内容因类型
不同而被放行,导致 MEMORY.md 出现两条一模一样的内容。
修复: 去重不再检查 e.type,纯内容比对。跨类型的相同内容视为重复。
|
2026-06-24 16:17:24 +08:00 |
|
紫影233
|
7f8f1bf9ef
|
tune: 去重阈值收紧 — similarity 0.8→0.65 (新增) / 0.75→0.6 (提取)
原则:宁愿少记,不要重复多记。降低相似度阈值让更多近似内容被判为重复。
|
2026-06-24 15:58:21 +08:00 |
|
紫影233
|
5a6a689382
|
fix: 去重文本规范化 — 全角标点→半角后比较,消除 AI 输出的标点差异
问题: AI 多次调用 memory add 创建了 5 条语义相同的 Gitee 信息
根因: 全角标点(:,)与半角(:,)被去重逻辑视为不同文本
修复:
- 新增 normalizeForDedup(): 全角→半角标点、统一空白、小写
- addEntry 去重: 规范化后前缀匹配(30字) + 短文本子串包含 + 词相似度
- extractAndSaveMemories 去重: 同步使用相同的规范化逻辑
|
2026-06-24 15:53:33 +08:00 |
|
紫影233
|
5cba009745
|
refactor: 通用「同工具重复成功」检测取代硬编码 memory 去重
删除针对 memory 工具的去重检测补丁,改为通用的 Agent Loop 机制:
任何工具连续 ≥3 次调用且全部成功 → 注入 system 级别终止信号 + 缩减剩余轮次
此机制对 memory/web_search/write_file/read_file 等所有工具均生效,
不再需要为每个工具单独写补丁。
|
2026-06-24 15:48:17 +08:00 |
|
紫影233
|
04a0659813
|
fix: 记忆去重后强制终止循环 — 系统消息 + 缩减轮次 + 工具结果强调
问题: AI 看到 memory add 返回 duplicate 后仍继续循环调用
根因: 去重消息藏在 tool result JSON 里,AI 不读或不理解
修复 (三层防御):
1. handleObserving: 检测到 tool result 含 duplicate → 注入 system 级别终止消息
+ 缩减剩余轮次到当前+2,强制即将结束
2. formatToolResultForModel: memory 去重时返回纯文本警告而非 JSON
'⚠️ 重复添加...不要再调用 memory 工具,直接输出最终回答'
3. addEntry: 检测到重复 → 抛 DuplicateEntryError(之前已修)
|
2026-06-24 15:46:43 +08:00 |
|
紫影233
|
5f9acebad1
|
fix: 记忆去重时明确告知 AI「已存在,不要再重复添加」
之前 addEntry 检测到重复后静默返回已有条目(success),AI 误以为又成功保存了
新条目,于是继续循环调用。现在改为抛出 DuplicateEntryError,tool handler
捕获后返回 {success:true, duplicate:true, message:'已跳过...不要再重复添加'},
明确告诉 AI 任务已完成。
也处理了内存面板的手动添加场景,友好提示用户。
|
2026-06-24 15:31:58 +08:00 |
|
紫影233
|
e39820d19e
|
fix: memory add 不传 type 时默认 fact — 代码兜底替代 schema 约束
Gemma 4 等模型的 function calling 对复杂 schema 不稳定,即使 type 在 required
数组中也会偶发遗漏。改为代码层面兜底:type 缺失时默认 'fact',确保 add 操作
始终成功。同时将 type 从 required 中移除,减少 schema 复杂度。
|
2026-06-24 15:28:55 +08:00 |
|
紫影233
|
d3a28822b3
|
fix: memory 工具 required 数组添加 type — 解决模型持续不传 type 参数问题
Ollama function calling 依赖 JSON Schema 的 required 数组判断参数必要性,
type 不在 required 中导致模型认为它是可选的,即使 error 提示了也不传。
将其加入 required 数组后,模型将被强制要求每次调用都提供 type 参数。
|
2026-06-24 15:10:58 +08:00 |
|