TaskLens
精确理解企业通知、制度文件和项目申报材料,
驱动可审计、可追溯的执行。消除文档与行动之间的差距。
1 分钟介绍
用 1 分钟左右介绍 TaskLens
TaskLens 是一个面向企业通知、制度文件和项目申报材料的理解与行动执行智能体。展开查看各要点。
User Question / 用户提问
消除大模型幻觉,区分原通知与补充通知
Technical Response / 技术解答
传统大模型处理企业通知时,容易生成没有原文依据的结论,也经常混淆原通知和补充通知,导致截止时间、材料要求等关键字段判断错误。TaskLens 通过基于原文证据的抽取机制解决了这一问题。
User Question / 用户提问
从解析到结构化输出,全程可追溯
Technical Response / 技术解答
系统首先解析文档并抽取带原文证据的 Requirement。当证据不足时才触发 RAG 检索。检索阶段通过 BM25 和 Dense 分别完成词法召回与语义召回,再使用 RRF 融合多个检索通道和多个 Query 的排名,并对补充通知进行版本冲突合并。最终系统生成 Requirement、Evidence、Change 和 ActionTask 结构化对象。
User Question / 用户提问
每个行动任务都可追溯到原文
Technical Response / 技术解答
TaskLens 与普通摘要系统最大的区别,是每个 ActionTask 都可以反向追溯到具体文件、Chunk 和原文依据,并在执行前进入人工审批。不是返回一段无法验证的摘要,而是给出可审计、可执行的结构化任务。
User Question / 用户提问
场景定义、数据模型设计与 Benchmark
Technical Response / 技术解答
我主要负责业务场景定义、工作流拆分、Requirement–Evidence–Action 数据模型设计以及严格 Benchmark 重构。
技术深潜 #2
为什么不能直接把整篇文档交给大模型?
文档切片策略与 Parent-Child 检索机制
直接将 100 页文档输入大模型会引发窗口溢出、Token 成本飙升和关键信息稀释等问题。TaskLens 通过分层切片与 Parent-Child 机制解决。展开查看详细分析。
User Question / 用户提问
超出窗口、成本激增、关键信息被稀释
Technical Response / 技术解答
不能直接把 100 页文档全部交给大模型。首先可能超过上下文窗口。即使没有超过,也会增加 Token 成本和响应延迟,并且大量无关内容会稀释关键要求,造成字段遗漏和证据定位困难。
User Question / 用户提问
结构感知切片加递归切分与 Overlap
Technical Response / 技术解答
TaskLens 先按照标题、条款、段落和表格进行结构感知切片。如果某个章节仍然过长,再按照句子和长度进行递归切分,并保留一定 Overlap 确保上下文不中断。
User Question / 用户提问
Child 精确检索,Parent 回填上下文
Technical Response / 技术解答
系统使用 Child Chunk 进行精确检索(BM25 词法匹配 + Dense 语义匹配),命中后再自动回填它所属的 Parent 章节,从而兼顾定位精度和上下文完整性。
User Question / 用户提问
需要在验证集上调整 Recall、准确率与成本
Technical Response / 技术解答
Chunk 太大会增加噪声、降低检索区分度。Chunk 太小则可能把标题、主语和要求拆开,造成语义不完整。因此 Chunk 大小和 Overlap 需要在验证集上结合 Recall、准确率和 Token 成本进行调整。
技术深潜 #3
这个项目为什么使用 LangGraph?
State、Node、Edge 和 Checkpoint 的作用,以及为什么普通 Python 函数不够用
LangGraph 是一个用于构建有状态工作流和 Agent 的图编排框架。TaskLens 用它来管理通知处理流程中的复杂状态和分支逻辑。展开查看各核心概念。
User Question / 用户提问
共享业务数据,贯穿工作流生命周期
Technical Response / 技术解答
State 保存一次任务执行过程中共享的业务数据,包括原文、Requirement、检索结果、ActionTask 和审批状态。每个 Node 都可以读取和更新 State,确保整个工作流的数据一致性。
User Question / 用户提问
单一职责的处理单元
Technical Response / 技术解答
Node 是执行单一职责的处理单元,例如文件解析、证据判断和检索。每个 Node 只返回自己负责更新的 Partial State,减少耦合、防止误覆盖,方便状态合并和单元测试。
User Question / 用户提问
固定流转与条件分支
Technical Response / 技术解答
Edge 定义节点之间的固定流转路径。Conditional Edge 则根据 State 选择不同分支,使检索循环、异常处理和人工审批等场景得以显式表达。
User Question / 用户提问
断点续执与人工审批中断恢复
Technical Response / 技术解答
Checkpoint 负责持久化各阶段的 State,使工作流能够在服务重启或人工审核后从中断位置继续执行。这是普通函数调用链难以实现的。
User Question / 用户提问
普通 Python 函数无法应对检索循环、分支和状态恢复
Technical Response / 技术解答
固定的线性流程可以用普通函数完成,但 TaskLens 存在证据不足时的检索循环、异常分支、人工中断、恢复执行和状态历史。LangGraph 让流程更显式、更容易测试和恢复。thread_id 用于标识并隔离不同工作流实例,即使状态保存在同一个 SQLite 数据库中也不会相互串线。
技术深潜 #4
结构化输出与 Pydantic 校验
为什么 JSON 格式正确不一定合法,以及 Pydantic、TypedDict 各自的作用
大模型输出的 JSON 语法正确不代表业务结果合法。展开查看各要点。
User Question / 用户提问
语法合法不代表业务结果合法
Technical Response / 技术解答
JSON 语法正确只是第一步。字段可能为空(evidence 为空字符串)、类型错误(confidence 传了字符串)、置信度越界(超过 100),或者缺少业务必需的证据来源。TaskLens 需要对这些情况做出明确判断。
User Question / 用户提问
运行时数据解析与校验
Technical Response / 技术解答
Pydantic 用于运行时数据解析和校验。可以检查必填字段、数据类型、枚举值、数值范围以及自定义业务规则。校验失败时抛出明确错误,由工作流决定重试、停止或转人工处理。
User Question / 用户提问
静态提示 vs. 运行时校验
Technical Response / 技术解答
TypedDict 主要用于描述普通字典的结构,提供静态类型提示,本身通常不进行运行时校验。Pydantic 则会在运行时真正验证数据,检查字段是否存在、类型是否正确、值是否在允许范围内。
User Question / 用户提问
结构正确不代表事实正确
Technical Response / 技术解答
Pydantic 不能消除大模型幻觉。结构校验只保证数据格式符合 Schema,不保证内容真实性。因此还必须通过 Evidence Gate、原文匹配和来源追踪来验证内容的准确性。
技术深潜 #5
证据门控与异常处理
为什么不能直接生成 ActionTask,以及证据不足时的工作流走向
LLM 抽取出的 Requirement 必须有原文证据支撑才能生成 ActionTask。展开查看证据门控的检查逻辑和异常处理流程。
User Question / 用户提问
证据与结论之间存在断层
Technical Response / 技术解答
现有 Evidence 只说明需要及时提交材料,并不能支持"风险评估表"和"8月20日"这两个关键字段。直接生成 ActionTask 等于让大模型凭空补全了原文不存在的细节,这是典型的幻觉。
User Question / 用户提问
逐字段验证原文依据
Technical Response / 技术解答
Evidence Gate 需要检查 Requirement 中的动作、对象、材料、时间和责任人等字段是否都有原文依据,同时验证证据来源是否可追溯、证据与结论是否一致,以及是否存在新旧版本冲突。
User Question / 用户提问
补充检索后重新验证,而非直接转人工
Technical Response / 技术解答
证据不足时,不应马上转人工。先生成或改写 Query,通过 BM25 和 Dense 补充检索,再经过 RRF 融合和 Parent 上下文回填后重新验证。只有达到最大检索次数、仍然缺少证据或存在无法自动处理的冲突时,才转人工。
User Question / 用户提问
防止无限循环浪费资源
Technical Response / 技术解答
设置最大次数是为了防止 Agent 在原文根本不存在相关信息的情况下无限循环,造成 Token、时间和计算资源浪费。达到上限仍未找到足够证据时,系统将任务标记为人工处理。
技术深潜 #6
Requirement、Evidence 和 ActionTask 为什么要分开设计?
数据模型分层的原因,以及变更场景下的追溯机制
将 Requirement、Evidence 和 ActionTask 分层设计是为了隔离关注点、实现可追溯,并优雅地处理版本变更。展开查看各要点。
User Question / 用户提问
业务要求 vs. 具体执行任务
Technical Response / 技术解答
Requirement 是从通知或制度文件中抽取出的业务要求,例如提交对象、材料、截止时间和约束条件。ActionTask 是根据已经验证的 Requirement 生成的具体执行任务,包括动作、负责人、截止时间和审批状态。Requirement 是静态的业务描述,ActionTask 是动态的执行单元。
User Question / 用户提问
原文经过验证、结构化和冲突处理后才能生成执行任务
Technical Response / 技术解答
不能直接从原文生成 ActionTask,因为原文可能包含描述性内容、旧版本要求或不完整字段,大模型也可能误判和幻觉。所以需要先经过 Evidence 验证、Requirement 结构化和版本冲突处理,确保每个字段都有原文支撑后才能生成 ActionTask。
User Question / 用户提问
ActionTask → Requirement → Evidence → 原文片段
Technical Response / 技术解答
ActionTask 通过 Requirement ID 关联 Requirement,Requirement 再通过 Evidence ID 追溯到具体文档、Chunk、章节和原文片段。每一层追溯都有明确的 ID 和字段映射,审计时可以逐层展开验证。
User Question / 用户提问
截止时间从 8 月 15 日调整为 8 月 20 日
Technical Response / 技术解答
应记录一条 updated 类型的 Change,保留旧值(8月15日)和新值(8月20日),将旧 Requirement 标记为失效或被替代,并让新 Requirement 成为当前生效版本。Change 对象完整记录了变更原因和版本关联,确保审计时能够回溯整个变更历史。
技术深潜 #7
补充通知与冲突处理
多份文件存在矛盾时,系统如何判断哪个截止时间有效
当知识库中存在多份相互矛盾的通知时,系统不能只看发布时间,而要综合来源权威性、变更类型和版本关系做出判断。展开查看详细分析。
User Question / 用户提问
综合来源权威性、文件类型、版本关系和变更措辞
Technical Response / 技术解答
系统不能只根据发布时间判断文件是否有效,而要综合来源权威性、文件类型、适用范围、版本关系、生效时间以及是否包含"延长、取消、以本通知为准"等明确变更措辞。
User Question / 用户提问
文件 B 是正式补充通知,文件 C 仅为网页转载
Technical Response / 技术解答
文件 B 属于正式补充通知,并明确将文件 A 的截止时间延长至 8 月 20 日,因此截止时间应采用文件 B。文件 C 只是网页转载,与正式文件冲突时不能覆盖官方通知。不能单纯选择发布时间最新的文件,因为来源权威性比发布时间更重要。
User Question / 用户提问
added、updated、removed、conflict
Technical Response / 技术解答
added 表示新增要求。updated 表示原有要求的字段被修改。removed 表示原有要求被明确取消。conflict 表示多个来源存在矛盾且无法确定覆盖关系,此时系统会将冲突标记出来,等待人工处理。
User Question / 用户提问
字段级增量合并,保留各自的证据来源
Technical Response / 技术解答
文件 B 中的"其他事项不变"表示进行字段级增量合并:只更新截止时间,其他字段继续继承文件 A,并分别保留各字段的证据来源。这样既保证了数据完整性,又保留了每个字段的独立可追溯性。
技术深潜 #8
人工审批与幂等执行
approve_id、content_hash 和 idempotency_key 各自解决什么问题
生成 ActionTask 后不能直接执行外部操作,需要人工审批、内容一致性校验以及幂等保护。展开查看各要点。
User Question / 用户提问
外部操作必须有副作用保护
Technical Response / 技术解答
不能生成 ActionTask 后直接执行,因为写入日历和发送提醒属于有副作用的外部操作,任务内容可能存在抽取错误,所以需要人工审批。审批通过后才能执行外部操作。
User Question / 用户提问
唯一标识审批请求,锁定批准时的内容
Technical Response / 技术解答
approve_id 用于唯一标识一次审批请求并绑定审批状态。content_hash 用于记录用户批准内容的数字指纹。执行前系统会重新计算当前任务的哈希,只有与审批时的哈希一致才允许继续执行。
User Question / 用户提问
原审批必须失效,需重新确认
Technical Response / 技术解答
任务内容在审批后被修改时,原审批必须失效并重新确认。content_hash 会在执行前重新校验,如果发现当前内容哈希与审批时的哈希不一致,系统会拒绝执行并要求重新提交审批。
User Question / 用户提问
防止网络重试导致重复执行
Technical Response / 技术解答
idempotency_key 用于防止网络重试导致重复执行。同一个键重复请求时,系统只执行第一次,后续直接返回第一次的执行结果。如果键相同但内容不同,则应拒绝该请求。
技术深潜 #9
Checkpoint 中断恢复
为什么前端保存不够、Checkpoint 保存什么、以及恢复时为什么不能从头执行
工作流中断后恢复不能依赖前端状态,需要服务端 Checkpoint 持久化完整的业务数据和执行上下文。展开查看各要点。
User Question / 用户提问
浏览器无法恢复完整业务 State
Technical Response / 技术解答
只在前端保存审批页面是不够的,因为浏览器刷新、关闭或服务重启后,前端无法恢复完整的业务 State,而且前端提交的审批状态不能作为可信的唯一来源。审批状态和业务数据必须在服务端持久化。
User Question / 用户提问
完整的业务 State 与执行上下文
Technical Response / 技术解答
Checkpoint 需要持久化文档解析结果、Requirement、Evidence、检索结果、ActionTask、当前执行阶段、重试次数、错误信息以及 approve_id、审批快照、content_hash 和幂等执行状态。这样才能在任意节点恢复执行。
User Question / 用户提问
唯一标识工作流实例,指向正确的暂停位置
Technical Response / 技术解答
thread_id 是一次工作流实例的唯一标识。恢复时使用原来的 thread_id,Checkpointer 才能找到对应的状态历史和暂停位置。如果换了 thread_id,系统无法关联到之前的审批状态和执行进度。
User Question / 用户提问
成本更高,且可能导致结果漂移和重复操作
Technical Response / 技术解答
虽然可以从头重新执行,但这会增加成本,还可能因为模型输出或知识库变化导致结果漂移、审批内容失效,甚至重复创建日历或发送消息。因此应该从 Checkpoint 继续,并通过幂等键保护外部操作。
技术深潜 #10
测试与验证 (RAG/冲突/恢复评估)
pytest 100% 通过是否足够,以及如何专项验证各核心能力
测试 100% 通过不能证明系统没有问题,还需要专项验证 RAG 检索、冲突处理、ActionTask 生成和中断恢复等核心能力。展开查看各要点。
User Question / 用户提问
测试用例全部符合预期,但不代表系统无误
Technical Response / 技术解答
pytest 显示 100% 通过,只能说明当前编写的测试用例全部符合预期,不能证明系统不存在问题,也不能把测试通过率当作模型准确率。
User Question / 用户提问
测试集覆盖不足、断言不严格、Mock 与真实环境存在差距
Technical Response / 技术解答
测试集可能覆盖不足,断言可能不严格,单元测试也可能使用 Mock。真实环境还存在 LLM 输出波动、复杂文档、知识库噪声和外部服务异常等不可控因素。
User Question / 用户提问
召回率、精确率、排序质量和证据覆盖率
Technical Response / 技术解答
RAG 需要评估 Recall@K、Precision@K、Hit@K、MRR(平均倒数排名)、证据覆盖率和检索延迟,全面衡量检索结果的质量和效率。
User Question / 用户提问
ActionTask、冲突处理、审批恢复的测试方法
Technical Response / 技术解答
ActionTask 需要检查动作、材料、截止时间等字段的准确率以及是否存在无证据任务。冲突处理要分别构造 added、updated、removed 和 conflict 案例。中断恢复要模拟服务重启,验证相同 thread_id 能从 Checkpoint 继续,同时测试审批哈希失效和幂等执行。
技术深潜 #11
证据校验与多轮检索
证据不足时如何判断、生成 Query 以及转人工的边界
Evidence Gate 会逐字段检查原文依据,缺失关键字段时会生成新的检索 Query,多轮仍找不到则转人工。展开查看各要点。
User Question / 用户提问
不支持盖章结论,不能通过
Technical Response / 技术解答
该证据不能通过 Evidence Gate,因为它只支持材料需要真实完整,不能支持申请书必须盖章这一结论。证据与结论之间缺少直接的语义关联。
User Question / 用户提问
盖章要求字段缺失
Technical Response / 技术解答
缺失的是盖章要求这一关键字段。现有证据只提到内容真实完整,完全没有涉及公章、签字或盖章等具体要求。
User Question / 用户提问
围绕项目名称、申请书、公章等实体和同义表达
Technical Response / 技术解答
下一轮会围绕项目名称、申请书、公章、签字盖章等实体和同义表达生成 Query,通过 BM25 和 Dense 进行补充检索,扩大覆盖范围。
User Question / 用户提问
标记为无证据支持,提交人工处理
Technical Response / 技术解答
如果达到最大检索次数仍找不到可靠证据,就将该字段标记为无证据支持,不生成确定性任务,并把检索记录和缺失信息提交人工处理。
技术深潜 #12
事实冲突与需求修正
当证据之间存在矛盾时,如何判断并修正 Requirement
当部分字段有证据支持、部分字段被另一份证据明确否定时,应判断为事实冲突并直接修正 Requirement。展开查看各要点。
User Question / 用户提问
责任主体、截止时间和电子版提交均有证据 A 支持
Technical Response / 技术解答
责任主体(各申报单位)、8 月 20 日截止时间和电子版上传要求均有证据 A 支撑。这些字段通过了 Evidence Gate 的原文匹配验证。
User Question / 用户提问
被证据 B 明确否定
Technical Response / 技术解答
同时提交纸质版的要求没有得到任何证据支持,反而被证据 B 中的"不再要求提交"明确否定。证据与结论之间存在直接矛盾。
User Question / 用户提问
unsupported / contradicted,而非 partial
Technical Response / 技术解答
当前 Requirement 整体包含事实冲突,应判断为 unsupported 或 contradicted,而不是 partial。因为部分字段不仅有证据缺失,还存在被另一份证据明确否定的情况。
User Question / 用户提问
直接修正 Requirement,记录 Change,不再检索
Technical Response / 技术解答
由于现有证据已经足以确定电子版需要提交、纸质版被取消,系统应直接修正 Requirement 并记录一条 removed 类型的 Change,而不是继续改写 Query 检索。
技术深潜 #14
冲突无法确定与人工干预
多份正式文件冲突且无法自动解决时的处理策略
当多份正式文件冲突且无法自动确定覆盖关系时,系统不能擅自选择,必须标记为 conflict 并等待人工裁决。展开查看各要点。
User Question / 用户提问
无法自动确定,需标记为 conflict
Technical Response / 技术解答
系统无法自动确定最终截止时间。B 和 C 都是正式来源,适用范围和发布时间相同,也没有明确的覆盖关系,因此应标记为 conflict。
User Question / 用户提问
conflict — 无法确定覆盖关系
Technical Response / 技术解答
这是 conflict 而不是 updated。B 和 C 都没有提到对方,也没有说明"以本通知为准",因此系统无法判断哪一份覆盖另一份,只能标记为无法自动解决的冲突。
User Question / 用户提问
两个候选值、来源、证据和冲突状态
Technical Response / 技术解答
系统需要保留两个候选截止时间、对应文件、原文证据、来源部门和冲突状态,并将 need_human 设为 true,等待人工介入。
User Question / 用户提问
不能擅自选择 — 必须先解决事实冲突
Technical Response / 技术解答
不能先生成 8 月 20 日的确定性 ActionTask 再让用户审批。这等于在证据不足时擅自选择 B。系统应先让人工解决事实冲突,确定有效截止时间后,再生成任务并进入执行审批。
Defensive Engineering / Execution Safety
动态 Payload 变更与审批快照失效
附件替换、approve_id 过期、content_hash 失配与零信任可见契约
即使 payload 看似是微小变更(替换附件),只要用户可见的契约项发生改变,原审批立即失效。展开查看完整处理逻辑。
User Question / 用户提问
不能 — 附件变更属于 payload 突变
Technical Response / 技术解答
用户批准的是包含申请书.pdf 在内的显式契约。替换为最终申请书.pdf 属于 payload 变更,原审批必须失效并重新确认。approve_id 状态保留并标记为 expired / invalidated 作为审计快照。
User Question / 用户提问
哈希不一致时系统直接拦截
Technical Response / 技术解答
当前内容重新计算的 content_hash 与审批快照中的哈希不一致,系统直接拦截执行,并保持原审批状态为 invalidated 供审计追溯。
User Question / 用户提问
拒绝自动发送,生成新审批请求
Technical Response / 技术解答
系统拒绝自动发送,保留旧审批日志,生成全新的 approve_id 及对应快照,重新请求用户二次确认。用户看到的即将批准的内容必须与最终执行的内容完全一致。
User Question / 用户提问
文件名变更同样破坏可见契约,必须重新验证
Technical Response / 技术解答
即使字节内容完全一致,文件名变更同样破坏了用户可见契约,必须重新验证。这防止了侧信道注入与契约漂移 — 用户批准的不是字节,而是他们看到的完整 payload 表示。
Defensive Engineering / Idempotency & State Recovery
中断恢复与幂等审批
thread_id 恢复入口、Check-on-Resume、Non-determinism 防御与双重幂等
服务重启后恢复执行需要 thread_id 精确锚定中断点,并在放行前完成多项一致性校验。展开查看完整处理逻辑。
User Question / 用户提问
thread_id 是恢复的唯一入口,Checkpointer 依赖它反序列化中断点
Technical Response / 技术解答
必须使用 notice-001。thread_id 是工作流实例的唯一隔离标识,Checkpointer 依赖它锁定中断点的 State 并完成快照反序列化。换了 thread_id 就无法关联到之前的审批状态和执行进度。
User Question / 用户提问
Check-on-Resume:一致性校验通过后才能放行
Technical Response / 技术解答
校验 approve_id、审批状态(pending)、审批快照及当前 content_hash 的一致性,并确认任务未被重复执行。任何不一致都拒绝放行,防止状态漂移。
User Question / 用户提问
Non-determinism 会破坏"所批即所执"原则
Technical Response / 技术解答
LLM 的非确定性(Non-determinism)会导致重新生成的 ActionTask 发生漂移。必须直接从快照载入 payload,不能重新调用 LLM,否则用户批准的内容与实际执行的内容可能不一致。
User Question / 用户提问
审批接口防并发,侧效应透传 idempotency_key
Technical Response / 技术解答
审批接口仅允许 pending -> approved 一次,并发或连续点击只生效一次。外部侧效应透传 idempotency_key 确保下游 API(日历、邮件、消息)也只触发一次。
Defensive Engineering / Idempotency & State Recovery
在途状态处理与外部对账
executing 悬空风险、主动反查对账与幂等安全收敛
超时后 status 为 executing 表示请求已发出但响应丢失,系统不能盲目重试,必须主动反查外部服务确认真实状态。展开查看完整处理逻辑。
User Question / 用户提问
无需重新审批,但绝不能盲目重试
Technical Response / 技术解答
无需重新发起审批,但绝不能直接盲目重试 API。原审批快照和 content_hash 仍然有效,问题出在执行侧而非审批侧。盲目重试可能生成重复日历事件。
User Question / 用户提问
executing 比"无记录"更具悬空风险
Technical Response / 技术解答
status 为 executing 表示请求已发出,可能已在第三方服务落盘,仅响应超时丢失。executing 比"完全无记录"更危险,因为系统无法区分"已创建但丢响应"和"尚未创建"。
User Question / 用户提问
通过 idempotency_key 反查日历平台,客观确认外部状态
Technical Response / 技术解答
系统应先通过任务元数据中的 idempotency_key 或关联属性反查日历平台 API,客观确认外部状态。不依赖本地假设,而是向第三方服务求证。
User Question / 用户提问
已创建补全记录,未创建安全重试
Technical Response / 技术解答
若确认已创建成功,将本地幂等记录补全 external_result_id 并更新 status 为 success。若确认未创建,透传原 idempotency_key 安全重试,确保下游 API 仍只触发一次。
Defensive Engineering / Audit & Observability
可追溯审计日志与不可变追加
结构化审计要素、敏感数据脱敏与 Append-Only 模式
仅记录任务执行成功远远不够,审计日志需要结构化、可追溯、脱敏且不可篡改。展开查看完整设计。
User Question / 用户提问
仅记录成功无法完成因果追溯
Technical Response / 技术解答
仅记录任务执行成功无法完成因果追溯,无法证明谁在何时批准了何种具体 Payload,也无法审计重试与契约漂移。泛化日志对审计来说基本无用。
User Question / 用户提问
每次写操作必须包含完整的溯源上下文
Technical Response / 技术解答
一次写操作(如发邮件)必须包含 thread_id、approve_id、content_hash、idempotency_key、收件人/主题/附件元数据、审批快照时间戳、外部 message_id 以及溯源的 Requirement ID 和 Evidence ID。
User Question / 用户提问
正文与附件不应明文落日志
Technical Response / 技术解答
邮件正文与附件不应明文直接打入日志,应存储 content_hash、摘要及受控存储的引用指针。兼顾隐私安全与不可篡改验证。
User Question / 用户提问
日志是历史事实,严禁覆盖或修改
Technical Response / 技术解答
执行失败后再成功,必须新增成功日志节点,保留全链路重试与纠错状态机轨迹。日志是历史事实,严禁覆盖或修改,必须采用 Append-Only 模式。
Defensive Engineering / End-to-End Resilience
复合异常收敛与全链路状态恢复
知识库变更、审批幂等、悬空状态反查与全链路审计图谱
多个异常同时发生时,系统需要分层收敛:隔离知识库漂移、保持审批幂等、反查悬空状态,并在审计日志中完整保留事件链。展开查看完整处理逻辑。
User Question / 用户提问
不能直接重新生成并替换已审批的 ActionTask
Technical Response / 技术解答
需比对文件内容哈希和版本。若变化影响当前 Requirement,将原任务标记为 expired / invalidated,原审批失效,生成新任务重新审批。已审批的任务不能被静默替换。
User Question / 用户提问
pending -> approved 只允许转换一次
Technical Response / 技术解答
审批接口必须保持幂等,只允许状态从 pending 转换为一次 approved。后续重复点击直接返回原审批结果,不触发重新执行。
User Question / 用户提问
executing 且无外部 ID 时不能直接重发
Technical Response / 技术解答
邮件状态为 executing 且无外部 ID 时不能直接重发,防止重复发送。必须先反查外部平台确认真实状态。
User Question / 用户提问
透传 idempotency_key 查询邮件平台,确认后补录
Technical Response / 技术解答
透传 idempotency_key、收件人、主题和 content_hash 查询邮件平台。确认已发送后补录 external_message_id,并将幂等状态修正为 success。
User Question / 用户提问
完整事件链不得覆盖历史
Technical Response / 技术解答
审计日志需追加保留完整事件链:任务生成 -> 审批 -> 执行发起 -> 网络中断 -> 重复审批拦截 -> 外部反查对账 -> 状态修正 -> 知识库版本变更。不得覆盖历史记录。
精确提取管道
TaskLens 解析文档并提取带有原文证据的结构化 Requirement 对象。RAG 仅在直接证据不足时作为后备方案使用 - 系统始终优先选择精确、可引用的原文材料。
文档解析
将企业通知、制度 PDF 和项目申报材料解析为保留章节边界的结构化中间表示。
证据抽取
提取关联到具体原文证据的 Requirement 对象 - 精确的句子、条款和数字,附带来源坐标信息。
后备检索
当直接证据不足时,通过定向 RAG 检索进行补充。后备路径会被标记,下游消费者可查看其来源。
多通道混合 RAG 引擎
TaskLens 通过多个通道结合词法与语义检索,使用融合排名层进行排序,并在结果呈现前解决版本冲突。
双路检索
- BM25 词法匹配,精确查找术语和条款
- Dense 向量检索,跨通知进行语义相似度匹配
- 每个通道独立运行,附带置信度评分
融合排名
- 对多通道输出执行 Reciprocal Rank Fusion (RRF)
- 多 Query 扩展,覆盖不同表述方式
- 最终排名列表附带每项结果的来源元数据
版本冲突解决
- 检测跨文档版本的交叉或矛盾条款
- 优先级逻辑:补充通知覆盖原通知,较晚日期默认优先
- 所有冲突决策记录在审计追踪中,供后续审查
TaskLens vs. 传统大模型摘要工具
大部分 LLM 工作流输出不可追溯的非结构化摘要。TaskLens 从底层设计上围绕可审计性和精确性构建。
| 对比维度 | TaskLens | 传统工具 |
|---|---|---|
| 输出格式 | 结构化对象:Requirement、Evidence、Change、ActionTask | 非结构化摘要文本 |
| 来源追溯 | 每个输出关联到具体文件、Chunk 和原文 | 无法直接引用 - 黑盒生成 |
| 冲突处理 | 版本感知解析,覆盖操作留痕可查 | 静默合并或忽略冲突 |
| 检索策略 | BM25 + Dense RRF 混合;直接证据优先,RAG 后备 | 仅单次语义检索 |
| 幻觉防御 | 基于证据的生成;证据不足时才使用 RAG | 缺少结构性防幻觉机制 |
| 人工审核 | 外部执行前必须通过审批门控 | 没有内置人工干预环节 |
| 审计追踪 | 从来源到已派发行动的完整溯源链 | 无可追溯性 - 行动不可寻迹 |
数据模型与输出
TaskLens 输出结构化对象而非通用摘要。每个字段都有明确的 Schema 定义,并附带回溯源材料的溯源链。
Requirement
从通知或制度文件中提取的单个义务项,附带精确来源坐标。
idUUIDsource_filestringclause_refstringtextstringeffective_dateISO-8601priority"mandatory" | "advisory"Evidence
Requirement 的精确原文支撑 - 一个句子、条款或图表,附带位置元数据。
idUUIDchunk_indexnumberraw_textstringchar_offsetRangeretrieval_method"direct" | "rag"Change
两个版本通知之间的差异记录 - 新增、删除或修改的内容。
idUUIDfrom_versionstringto_versionstringtype"added" | "removed" | "modified"clause_refstringresolutionstringActionTask
系统派发的具体执行任务,或等待人工审批后方可派发的任务。
idUUIDrequirement_idUUIDstatus"pending" | "approved" | "dispatched"deadlineISO-8601evidence_chainEvidence[]approved_bystring | null可审计引擎
全链路追溯
- 每个 ActionTask 可双向追溯到其来源文件
- 抽取时记录精确的 Chunk 和原文证据
- 溯源链穿越所有转换环节:检索、排名、冲突解决和派发
- 独立审计人员可从源头到行动重放任何决策
人工介入 (HITL)
- 任何外部派发前必须通过审批门控
- 审批人可查看完整证据链:来源文件、条款、提取文本、拟派发的 ActionTask
- 审批驳回和修改本身也作为审计事件记录
- 门控可按照通知类型、优先级或风险等级灵活配置
溯源流程
开发者与架构师视角
TaskLens 专为需要严格定义、度量和迭代通知处理流程的团队设计。
场景定义
将业务场景建模为可组合的 Agent 工作流。每个场景定义自己的通知来源、抽取规则、审批链和派发目标。
数据模型设计
为你的领域设计 Requirement-Evidence-Action 数据模型。可在保留溯源核心的基础上扩展自定义字段。
基准测试与验证
使用标注数据集进行严格的 Benchmark 重构。衡量抽取精度、检索召回率、冲突解决准确率和端到端审计完整性。
API 示例
TaskLens 提供结构化 API,用于通知入库、抽取执行、审批管理和审计追踪查询。
curl -X POST https://api.tasklens.dev/v1/extract \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"source_url": "s3://notices/federal-register-2024-1122.pdf",
"version": "2024-1122",
"options": {
"resolve_conflicts": true,
"require_evidence": true
}
}'curl https://api.tasklens.dev/v1/approvals/pending \
-H "Authorization: Bearer $API_KEY"
// 返回示例:
{
"actions": [
{
"id": "act_abc123",
"requirement": "于 2024-11-15 前提交 Form 10-Q",
"source": "SEC 通知 2024-89,条款 4.2",
"evidence": "季度申报截止日期在原通知第 4.2 节中明确..."
}
]
}curl -X POST https://api.tasklens.dev/v1/approvals/act_abc123/approve \
-H "Authorization: Bearer $API_KEY" \
-d '{
"approved_by": "user_auditor_01",
"notes": "截止日期已与原申报日历核实确认。"
}'curl https://api.tasklens.dev/v1/audit/act_abc123 \
-H "Authorization: Bearer $API_KEY"
// 返回完整溯源链:
// source → evidence → requirement → action → approval → dispatch