在大语言模型驱动的代理系统中,循环迭代次数直接影响任务完成效率与 token 消耗。传统方案多聚焦于提示词模板层面的输入去重,但这种方式无法触及代理执行路径中的结构性冗余。Semantic 项目通过构建 AST(抽象语法树)逻辑图谱,实现了控制流层面的优化,在 2026 年 3 月的基准测试中将估计开发者步骤数削减 27.78%(从 72 步降至 52 步),为代理循环优化提供了新的工程化思路。

AST 逻辑图的核心构成

理解 AST 逻辑图如何削减代理循环,需要先明确其核心数据结构。该系统并非简单地解析代码为 AST 树状结构,而是进一步提取三类关键要素形成图谱:逻辑节点(Logic Nodes)、控制流边(Control-Flow Edges)和数据流边(Data-Flow Edges)。逻辑节点代表代码中的关键语义单元,如函数定义、条件分支、循环体等,每个节点携带语义标签以支持后续的图遍历和推理。控制流边记录程序执行顺序,标记从节点 A 到节点 B 的可能跳转路径;数据流边则追踪变量在不同节点间的传递关系,包含具体的变量名称。

这种设计的核心优势在于将代码结构从隐式转换为显式的可推理图谱。当代理需要理解一段代码的执行逻辑时,传统方式依赖完整的代码上下文填充,而基于 AST 逻辑图可以精确检索目标区域的结构化表示 —— 系统返回的不再是完整代码块,而是逻辑节点坐标、控制流路径和关键变量依赖链。这种精确的结构化信息使代理能够更快速地定位问题域,减少在不同代码区域间的反复跳转。

认知检索管线的工程实现

Semantic 的认知检索管线采用四阶段架构:API 接收请求后,首先经过 Planner 进行意图检测和检索规划,随后由 Retrieval Engine 执行图遍历和逻辑节点匹配,接着由 Budgeter 根据 token 预算进行上下文裁剪,最后由 Context Assembler 将结构化引用组装为最终上下文。这一管线设计的核心思想是将语义理解从运行时延迟转化为索引时预计算 —— 逻辑图在代码索引阶段已经构建完成,运行时只需执行预定义好的图遍历算法。

在具体实现中,检索引擎暴露了丰富的图操作接口。GetLogicNodes 返回指定范围内的所有逻辑节点及其语义标签;GetControlFlowSlice 执行控制流切片,返回从入口节点到目标节点的所有可能路径;GetDataFlowSlice 则追踪变量的完整定义 - 使用链路。混合检索模式(GetHybridRankedContext)将符号搜索、依赖图和逻辑图密度信号进行加权融合,生成排序后的上下文候选。这种设计使得不同类型的检索需求可以复用同一套图索引基础设施,只需组合不同的图遍历策略即可。

工程落地时需要关注几个关键配置参数。retrieval_policy.toml 中的 max_context_tokens 控制单次检索的 token 上限,adaptive_threshold 启用后系统会根据任务复杂度动态调整检索广度 —— 简单任务(如单文件编辑)启用 single_file_fast_path 绕过完整图遍历,复杂任务(如跨模块重构)则执行完整的依赖邻域搜索。对于小型仓库(文件数小于 50),系统提供 adaptive small-repo bypass 策略,直接返回模块级别的粗粒度上下文以降低延迟。

循环削减的量化评估体系

理解 27.78% 的循环削减效果,需要澄清该指标的测量方法。该项目使用的核心指标是 estimated_steps(估计开发者步骤数),而非传统的 token 消耗。Steps 的估算逻辑基于任务完成所需的检索 - 理解 - 执行迭代次数:每完成一次上下文获取加一次推理循环计为一步。在 2026-03-27 的基准测试中,未使用 Semantic 的基线需要 72 步完成任务,使用后降至 52 步,差值 20 步即对应 27.78% 的削减比例。

值得注意的是,token 消耗指标在该测试中呈现反向变化 —— 使用 Semantic 的版本消耗了更多 token(10,377 vs 9,723,增幅 6.73%)。这恰恰说明该优化策略的价值不在于降低单次调用成本,而在于通过更精准的上下文检索减少总体迭代轮次。当任务复杂度较高时,减少一轮迭代节省的 token 往往超过因结构化上下文带来的单次增量。

质量门控指标同样重要。retrieval_quality.avg_retrieval_ms 报告平均检索延迟为 13 毫秒,这是图遍历操作的纯运行时开销;misdirection_risk_pct 为 0% 表示语义检索未出现返回空上下文的情况 —— 这种错误是代理循环增加的主要诱因之一,因为错误的上下文会导致代理做出无效决策进而触发额外迭代。target_match_pct 达 81.8%,意味着 11 个任务中有 9 个目标符号被正确识别,这一精度直接决定了后续推理的有效性。

实践建议与监控要点

将 AST 逻辑图方案落地到实际代理系统时,建议从以下维度展开工程化实施。首先是索引构建阶段的配置:Tree-sitter 解析器需要针对项目主要语言进行适配,默认支持的语言包括 Rust、JavaScript、TypeScript 等,项目源码中的 parser 模块提供了扩展接口。索引存储采用 SQLite(结构化元数据)+ Tantivy(全文检索)的混合架构,首次索引耗时与代码规模线性相关,但增量更新由 watcher 模块处理,变更文件的索引延迟通常控制在秒级。

运行时监控应关注三类核心指标:图检索延迟(p95/p99)反映索引效率和查询复杂度是否匹配,建议阈值设为 p95 不超过 50 毫秒;缓存命中率反映检索策略的稳定性,高命中率意味着相同任务的上下文需求可以被复用,Phase-5 实现的 SQLite-backed planned-context cache 应使缓存命中率达到 70% 以上;misdirection 风险指标追踪无效上下文的比例,任何非零值都应触发检索策略审查。

与模板级去重方案相比,AST 逻辑图方法的技术层次更为底层 —— 前者作用于提示词输入层面,通过识别重复的用户指令或上下文片段进行合并;后者作用于代码理解层面,通过解析程序结构消除执行路径中的冗余。两者并非替代关系,而是可叠加的优化层:模板去重减少无效的重复请求,逻辑图优化减少每个请求内部的迭代轮次。

资料来源

本文技术细节与性能数据主要基于 Semantic 项目公开的 A/B 测试结果文档,该文档记录了 2026 年 3 月 27 日的基准测试配置、原始数据和质量门控指标。