乐于分享
好东西不私藏

LatticeMind技术解析:ExcelAgent如何处理Excel数据审核(2)?

LatticeMind技术解析:ExcelAgent如何处理Excel数据审核(2)?

     原本这期计划分享 Harness 相关内容,但最近在 Excel 审核工作中沉淀了一些新的实践心得,所以先拿出来和大家交流。同时,我也重新梳理了 Harness 系列的创作思路。相比市面上偏概念科普的文章,我更希望从工程化落地视角出发,拆解 Harness 的核心价值。因此后续会把 Harness 作为长期连载话题,围绕评测体系搭建、流程实例回放、用户视角链路追踪、Hook 能力建设、沙箱环境运用、上下文记忆分层治理等实战维度,持续分享它的落地价值与实践方法

    本节内容承接上回,想了解背景的小伙伴可以先阅读此前的文章:《LatticeMind 技术解析:ExcelAgent 如何处理 Excel 数据审核》

01
建设思路
先说问题。前文已介绍 agentLoop 在 Excel 处理上的实现,但实测发现,agentLoop 之外仍有三点需要优化:
1)对于包含大量超大 Sheet 的 Excel 文件,如果在审核前直接生成索引目录,耗时较高。通常情况下,回答问题所需 token 越多、Sheet 结构越复杂,索引生成时间越长。下图是基于 Langfuse 抽取的一组索引生成数据分析。
{     "sheetRef": "s1",    "sheetName": "Sheet1",    "rowCount": 29,     "columnCount": 4,     "titleRegions":  [   {"value": "承担公司","rowStart": 1, "rowEnd": 1, "colStart": 6,"colEnd": 6,"type": "main_title","level": 1 },           {"value": "成本中心","rowStart": 1, "rowEnd": 1, "colStart": 7,"colEnd": 7,"type": "main_title","level": 1},   {"value": "手机号码","rowStart": 1, "rowEnd": 1, "colStart": 8,"colEnd": 8, "type": "main_title","level": 1},    {"value": "充值金额","rowStart": 1, "rowEnd": 1,"colStart": 9,"colEnd": 9,"type": "main_title","level": 1}     ],     "headerAnalysis": {"headerRowNum": 1,"dataStartRow": 2,"isMultiRowHeader": false}, "columns":  [  {"colKey": "F","header": "承担公司","colIndex": 1},  {"colKey": "G", "header": "成本中心","colIndex": 2},  {"colKey": "H","header": "手机号码", "colIndex": 3},  {"colKey": "I","header": "充值金额","colIndex": 4} ]  }
   索引目录样例(实际数据会做压缩,这里只是方便阅读理解)
2)上文提到,生成索引后,通过 agentLoop 结合工具获取局部数据的方式,对结构稳定的 Sheet 效果很好;但面对非结构化 Sheet 时,容易陷入“循环地狱”:即使调用到最终轮次,也无法获得理想结果,且通常难以及时触发终止判断。下图是实际生成中遇到的非结构化 Sheet 文档。
3)对跨 Sheet 的金额计算支持不佳。由于此前的 agentLoop 以 Sheet 为维度进行分析,天然缺乏跨 Sheet 的上下文整合能力。
基于上述三点,笔者重新思考了下工程侧的实现路径,主要从如下几方面对excel审核流程做了改造:
1. 在审核预分析阶段,通过 prompt 生成一份 Sheet 解释说明书,而不是直接为所有 Sheet 生成索引。这样做有两个好处:一是生成速度更快;二是该说明书可在后续流程中复用,既作为结合策略筛选待审核 Sheet 的依据,也作为 agentLoop 阶段入选 Sheet 的增强上下文,提升模型推理效果。
2. 相比旧版本以单个 Excel 为审核对象,新版本会从“策略”视角出发,判断每个入选策略需要使用哪些 Sheet。因此,agentLoop 不再围绕单个 Sheet 推理,而是围绕“一个 Excel+ 一个策略”进行推理;对应地,工具选择也会与上一版本有所不同。
工具名称
工具描述

 queryByHeader 

在指定 sheetRef 中按列头条件查询,支持等于、不等于、大小比较、包含,多条件支持 AND/OR。

 queryRange 

按指定 sheetRef 的行/列范围读取数据,适合看前几行、指定行、表头行、局部区域。

queryFuzzy 

在指定 sheetRef 中按列头做正则模糊查询,适合不确定完整值的场景。

getRow 

获取指定 sheetRef 中某一行的完整数据。

searchHeader 

搜索指定 sheetRef 中包含关键词的列名。

aggregate 

 对单个 sheetRef 的数值列做聚合:sum、count、avg、min、max,可带过滤和分组。

aggregateAcrossSheets 

跨多个结构相近的 sheetRef 对同名数值列聚合。

reconcileAmountsAcrossSheets 

跨多个异构 sheet 做金额核对,可为每个 sheet 配不同金额列、过滤条件、汇总行排除策略。

reconcileAmountsAcrossAttachments 

跨多个 Excel 附件做金额核对,返回文档级总额、差异、附件/sheet 分项和诊断。

3. 关于 agentLoop 的轮次,新版本基于“策略 + 入选 Sheet”进行推理,相比此前索引分组后的暴力 agentLoop,语义指导更明确,所需轮次减少了约三分之二。此外,部分合并处理逻辑也与旧版本不同。下面通过两张流程图对比具体变化。
02
思考分享
    因为 vicecoding 的加持,这次优化从方案设计到落地上线一共耗时3小时。期间我基于数据集做了 A/B 测试,事实验证:处理耗时和策略处理能力都有明显提升。(关于评测集产品化的建设思路,我会在后续专题中单独展开)。
    这次改造的核心设计思路,是从 agentLoop 出发,自底向上梳理 loop 阶段所需的上下文信息。这与 harness 建设的考虑是一致的:在模型外部做好上下文控制,避免上下文腐烂,例如 loop 阶段只根据策略选择相关 sheet,而不是把整个 Excel 的所有 sheet 都塞进去;避免模型执行过程漂移,例如通过职责清晰的工具设计,减少一专多能或功能重叠的工具;同时沉淀真正有阅读价值的指导手册,例如 sheetDescription。
    这些思路不只适用于这次快速改造,也会延伸到后续通用能力的建设中。
03
章节预告
 聊一聊不一样的Vibe Coding。
 本文相关章节:LatticeMind技术解析:ExcelAgent如何处理Excel数据审核?

相关学习资料