项目介绍
我在阅读一篇讨论Data Agent风险的文章时,对其中一个问题产生了共鸣:企业把AI直接接到数据库以后,仍然需要回答数据口径是否一致、结论依据在哪里、谁批准结果发布。早期方案曾经计划把爬取、数据工程、分析、审核和报告全部交给一条Agent流程。继续调研以后,我把产品范围收缩到分析就绪数据进入BI之前的检查与报告过程,让现有分析工具继续完成擅长的工作。
工作台流程
- 01
提交分析问题与分析输入合同
工作台以已经清洗整理、符合当前任务字段要求的表格为输入,可以在首次分析前使用,也可以在项目完成后重新读取基础数据进行复核。CitiBike输入Silver小时表,AdventureWorks输入按订单汇总的主题表。运行前填写分析问题,并通过分析输入合同(AnalysisInputContract)声明一行代表什么、唯一编号、时间字段、金额单位和已知限制。分析输入合同保存在任务配置(ProjectSpec)中,是任务配置的一部分。
查看处理方法与依据收起技术细节
- 02
根据用途和风险选择任务分档
运行前检查会查看数据规模、字段情况、任务风险与资源要求,给出建议的执行方式。探索、标准、治理三档分别面向初步了解、常规分析和更严格的审查要求,具体运行条件随任务一起保存。
查看处理方法与依据收起技术细节
- 03
检查数据是否满足本次分析要求
质量检查根据分析输入合同和程序已有规则,核对需要的字段是否齐全,并统计行数、关键字段空值、重复记录和规则规定的异常数值。例如合同声明站点与小时的组合唯一,程序就按这个组合统计重复。DuckDB 在本地执行查询,检查结果与对应依据另行保存,运行时不需要 AI 逐条查看数据。
查看处理方法与依据收起技术细节
- 04
按已确认的定义计算分析结果
普通经营任务使用已有的计算代码,生成整体指标、月度变化,以及按渠道、地区、品类等字段分组的结果。每一项数值结论都会关联相应数据与计算产物,后续审查可以继续查它的来源。
查看处理方法与依据收起技术细节
- 05
重新核对结论与计算依据
结果审查读取已经保存的输入、阶段产物和结论依据,检查文件校验值、任务版本和对应关系。预测案例还会重新核对特征与时间规则,检查评估是否遵守了批准的条件。
查看处理方法与依据收起技术细节
- 06
需要时调用 AI 解释已有结果
AI 解释在审查之后由用户单独触发。程序先整理任务说明、产物摘要及已经核对的结论,再依次交给规划、分析、复核和报告四个角色,让它们分别安排解释内容、展开含义、检查过度推断和形成建议稿。
查看处理方法与依据收起技术细节
- 07
把已有结果组织成可阅读的报告
报告阶段读取已经保存的质量、分析和审查产物,组织任务范围、结果、依据和适用条件。报告继续保留各项检查的状态,数值来自已存的计算结果,不在排版时重新计算。
查看处理方法与依据收起技术细节
- 08
确认发布条件,再导出分析材料
报告生成与最终批准分别处理。工作台按当前模式检查发布条件,记录人工确认或批准的决定;满足相应条件以后,再生成可以交给后续工具使用的材料。
查看处理方法与依据收起技术细节
滚轮缩放 · 拖动空白处移动 · 点击节点阅读 · 虚线表示审查后可选的 AI 解释,实线表示主要流程
提交分析问题与分析输入合同
工作台以已经清洗整理、符合当前任务字段要求的表格为输入,可以在首次分析前使用,也可以在项目完成后重新读取基础数据进行复核。CitiBike输入Silver小时表,AdventureWorks输入按订单汇总的主题表。运行前填写分析问题,并通过分析输入合同(AnalysisInputContract)声明一行代表什么、唯一编号、时间字段、金额单位和已知限制。分析输入合同保存在任务配置(ProjectSpec)中,是任务配置的一部分。
查看处理方法与依据收起技术细节
工作台接收整理好的表格,按约定规则检查数据、计算指标、审查结论,再生成报告。下面展示一次使用流程;AI 可以在审查之后按需解释已有结果。
质量检查、计算数据结果、结果审查和报告生成均可由程序独立执行。AI 解释有单独入口与记录。
1提交整理好的数据,说明要解决的问题
确认字段要求
任务与版本记录
先确认一行代表什么、哪些字段用来计算,再保存本次实际读取的数据,方便之后追查。
工具与方法:FastAPI 是接收网页请求的 Python 库;SQLite 是本地数据库,保存任务和状态;文件另行保存。
查看处理方法与依据收起处理方法与依据
- 用户提交符合案例字段要求的表格和分析问题
- 填写分析输入合同,说明记录单位、编号、时间和单位
- 选择已有计算案例,预测要求另存预测配置
- 检查输入结构,保存任务与文件版本
| 信息放在哪里 | 具体内容 | 程序怎样使用 |
|---|---|---|
| 分析输入合同 | 一行含义、唯一键列、时间列、时区、金额单位、整理时间与工具、已知限制 | 供输入检查与任务记录使用 |
| 案例计算代码 | 经营案例要求 revenue、cost、returned 等实际列名 | 按已有公式计算;中文描述不会自动映射成任意英文列 |
| 预测配置 | 目标字段、允许或禁止字段、时间和评估要求 | 供预测案例的检查和评估使用 |
| 任务配置 | 保存分析问题、案例选择、输入合同等内容 | 将本次输入与执行条件关联 |
分析输入合同是一份结构化的数据说明。用户或开发者可以填写,也可以让 AI 协助整理,再确认实际列名。具体指标公式由案例代码实现,预测字段限制由预测配置提供。
FastAPI 接收请求,SQLite 保存任务状态,文件另行保存。程序记录文件校验值,用于检查后续读取的文件内容是否发生变化。
2确认用途,选择检查要求
| 结果给谁用 | 采用的模式 | 发布要求 |
|---|---|---|
| 个人初步探索 | 探索 | 保留待验证草稿 |
| 团队内部报告 | 标准 | 发布前人工批准 |
| 预测、对外或高风险任务 | 治理 | 先确认任务,再批准发布 |
根据报告给谁用、是否用于预测等条件,确定检查范围与批准要求,并判断本机是否适合执行。
工具与方法:Python 按预先编写的规则执行运行前检查,读取文件信息并估算资源。
3检查数据是否符合本次任务的要求
编号、日期、金额等
符合当前任务要求
统计空值、重复
及规则规定的异常
按配置核对字段限制
与时间划分要求
根据合同、预测任务配置和程序已有规则,检查字段是否齐全、关键值是否缺失、记录是否重复,以及是否存在规则规定的异常,并保存检查结果。
工具与方法:DuckDB 是本地数据查询引擎,通过 Python 调用;SQL 查询负责统计空值、重复和异常。
查看处理方法与依据收起处理方法与依据
- 读取合同、案例规则与预测限制
- DuckDB 查询字段、缺失值、重复和异常
- 预测案例另核对禁止字段与时间要求
- 保存通过项、问题项和对应原因
| 检查范围 | 规则从哪里来 | 检查例子 |
|---|---|---|
| 列与类型 | 分析输入合同和案例要求 | 计算收入需要的列是否存在 |
| 重复和缺失 | 指定的唯一编号及程序检查规则 | 按站点+小时统计重复,统计关键列空值 |
| 异常数值 | 程序已经实现的质量规则 | 经营案例统计收入小于 0 且未标记退货的记录 |
| 预测限制 | 外部复核后写入的预测配置 | 核对是否使用禁止字段,是否符合时间划分要求 |
CitiBike 的电动车比例、会员比例和平均骑行时长,由我与外部 AI 编程助手结合原项目代码确认存在同小时信息问题,再写进预测配置。工作台负责按配置检查,上传表格本身不会让工作台读取外部代码。
程序能检查已经声明并实现的规则。字段实际代表什么、生成过程是否合理,需要用户结合业务和来源确认。
重复数按每组记录数减 1 后求和计算,例如同一个订单编号出现三次,重复数记为 2。空值统计读取各列的 NULL 数量。
4按已有公式计算数据结果
CitiBike 数据:用历史均值等参考方法预测,再计算误差。
调用当前案例已有的计算代码,把数据转为指标,并保存查询、结果文件和结论依据。
工具与方法:经营任务使用 DuckDB 和 SQL 汇总数据;预测案例使用 Python 执行参考方法与误差计算。
查看处理方法与依据收起处理方法与依据
- 读取本次输入和已确认的计算定义
- 运行对应案例的固定查询或预测评估
- 保存数值结果及查询依据
- 将结论关联到对应计算结果
| 案例 | 怎样计算 | 得到什么 |
|---|---|---|
| 经营数据 | DuckDB 用 SQL 汇总收入,再按月份、渠道等分组 | 整体指标与分组结果 |
| CitiBike 预测案例 | 从允许的历史训练数据计算参考预测,再评估后续时段 | 参考预测及误差指标 |
| 假设订单例子 | 三张订单收入分别为 100、200、150,求和 | 收入合计 450,保存对应查询和结果 |
DuckDB 是在本地执行表格查询的数据库工具。这里的计算由预先实现的程序完成,AI 不需要逐行读取数据或临时决定公式。
预测参考方法可以使用历史相同时段的平均需求。计算历史统计量时只使用训练部分,后面的验证、测试记录用于评价预测。
5检查结论能否由当前计算结果支持
核对结论引用的文件是否存在、是否属于本次运行、数值是否相符,以及计算是否遵守任务规则。
工具与方法:Python 校验文件内容与版本,逐项对照结论及依据;预测案例另外检查时间与特征规则。
查看处理方法与依据收起处理方法与依据
- 读取待审查结论和对应计算文件
- 核对结论数值、引用位置与任务版本
- 检查文件内容及预测规则
- 保存审查状态,并按共同原因汇总问题
| 核对内容 | 如何判断 | 为什么要查 |
|---|---|---|
| 数值依据 | 结论所写数值与引用的计算结果比较 | 防止结论脱离实际计算 |
| 输入与版本 | 比对任务记录、文件校验值及产物对应关系 | 防止使用旧输入或被替换的文件 |
| 预测条件 | 重新核对配置中的字段和时间要求 | 数值算出来,也需要满足使用条件 |
| 问题展示 | 将相同拒绝原因归并,保留逐条记录 | CitiBike 的 112 条重复拒绝可以先看共同原因 |
沿用上一阶段的假设例子:结论写收入 450,程序找到对应结果也是 450,再确认输入版本和其他要求。检查状态由这些规则产生;AI 解释不会改变检查状态。
6把结果、检查状态和限制写进报告
任务范围与数据来源
主要结果与检查状态
尚存问题与适用限制
把前面得到的结果按固定模板组织起来,让读者先看到结论与问题,再展开查看技术记录。
工具与方法:Jinja2 是生成网页内容的 Python 模板库;Python 读取阶段产物并填写报告。
7由人确认发布,再导出所需材料
检查问题与限制
记录具体报告版本
经营分析 BI 数据包
确认报告能用于什么场景,记录人工批准,再按该版本导出材料。
工具与方法:Python 检查发布条件;SQLite 保存批准记录;导出程序打包数据、查询和指标说明。
查看处理方法与依据收起处理方法与依据
- 用户阅读当前报告的问题和限制
- 程序确认模式及发布条件
- 记录对这份报告的人工批准
- 导出 HTML 报告或经营分析 BI 数据包
| 导出材料 | 包含什么 | 后续怎样使用 |
|---|---|---|
| HTML 报告 | 结果、依据、检查状态和适用范围 | 供他人阅读本次运行结果 |
| 经营分析 BI 数据包 | 数据、查询、指标说明和 Power BI 建议 | 继续搭建报表并核对计算定义 |
| 批准记录 | 具体报告版本和批准决定 | 确认此次导出对应哪次运行 |
输入或报告改变后,需要重新确认相关结果。探索模式保留草稿;标准和治理模式按各自要求完成批准,AI 解释不能代替人的发布决定。
图片与材料
点击文件夹展开,再点击图片放大。
首页:创建分析任务,查看运行状态与历史记录。
项目结果
- 01
稳定分析需要先固定输入、口径、证据和发布边界,再让AI解释检查结果和可能影响。
- 02
同一套严格规则不适合所有任务;按风险、数据规模与用途分档,才能平衡时间、成本和可信度。
- 03
CitiBike复核证明:工作台能发现实验设计疑点,但复杂判断仍需要人工理解业务后确认。
分析中的判断与处理
CitiBike成为工作台第一次完整的项目复核。初版界面输出了112条重复拒绝,专业词汇也让我很难快速判断问题的实际影响。这个使用过程直接推动新版修改:重复问题合并成总览;普通视图按“发生了什么、影响是什么、下一步怎么办”解释;系统规则、AI解释、人工确认和最终批准分别标明;绿色、黄色和红色状态说明当前结果能否使用。工作台保留专业证据,但普通用户不必先读完整技术报告才能知道下一步。
我与 AI 如何完成项目
Codex + ChatGPT-sol
个人产品设计与交付。本人定义使用场景、运行分档、证据规则、中文普通视图和验收标准;AI协助实现与测试。
需求怎样从已有项目开始
我先阅读朋友的HomeWork-PipeLine,并让AI继续查找数据流程、Agent分工和审查机制的开源项目。调研帮助我理解Spec、阶段依赖和执行记录,也让我看见原始设想包含了过多功能。
AI怎样参与
AI主要负责读取代码库、实现FastAPI、SQLite、DuckDB、Jinja2页面、测试和文档并参与产品定位、使用流程和结果解释。我负责确定产品服务谁、哪些阶段保留、每种状态代表什么,以及哪些结果允许导出。
Skill与固定规则怎样进入项目
前端修改会调用界面设计Skill,通俗解释会使用固定的中文表达规则。Skill负责提供可重复执行的检查方法;我根据实际使用反馈继续修改规则,例如要求专业术语第一次出现时立即解释,并为拒绝结果提供具体修改建议。
当前Agent流程实现到哪里
数值检查仍由固定代码完成,AI只解释已经生成的结果。Planner、Analyst、Reviewer和Reporter按顺序处理解释任务。当前版本没有实现多个Agent并行探索,也没有使用LangGraph或独立MCP Server。
参考与使用说明
86thAuspiciousVerse / HomeWork-PipeLine ↗
参考了Spec提取、阶段执行和审核记录的组织方式。当前工作台聚焦分析输入、质量检查、结果审查和发布,并保留各阶段的证据与责任记录。
结果适用范围
- 当前是本地求职展示版,不是企业级多用户云平台。
- 工作台接收分析就绪数据,不承担所有繁重的数据清洗工作。
- 它提高的是“结果能否被检查和解释”,不能保证AI自动得到唯一正确结论。