FA Foundry:可追溯的 AI 财务分析师。AI 读月结套表做经营分析,每个数字都能点回原单元格;口径、差异处置和结论由财务经理拍板。macOS 桌面应用。
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
把月结数字变成经营判断。FA Foundry 让 AI 直接读你们自己的月结套表,按财务的方法把利润偏离、现金、回款和全年预计算清楚,写成管理层能用的分析,每个数字都能点回 Excel 原单元格。分析由 AI 动手,口径、差异处置和结论由财务经理拍板。 0.13.0 让助手更主动地帮你看数:打开任务先看「本月三句话」,回答下方出可以接着问的结果卡片,收缴率能一路拆到账单,看板可以全屏汇报。0.12 新增每个任务的看板,0.11 新增打开即见的「总览」和改版的成果库,详见下文。 应用里内置了华宸物业(虚构的大型物业集团,住宅与非住宅混合业态,50 家城市公司)2026 年 8 月的示例资料。打开应用落在「总览」,第一次会提示一键打开示例看板,看三处就知道它能做什么。想完整走一遍,建议先在这套假账上把月结和经营分析做完,再导入自己的套表:查看完整 README ↗
把月结数字变成经营判断。FA Foundry 让 AI 直接读你们自己的月结套表,按财务的方法把利润偏离、现金、回款和全年预计算清楚,写成管理层能用的分析,每个数字都能点回 Excel 原单元格。分析由 AI 动手,口径、差异处置和结论由财务经理拍板。
产品介绍网页 · 当前版本 0.14.4 · 下载 macOS 应用(已签名公证) · 仅支持 macOS Apple Silicon
0.14.4 重新整理总览:当前任务的六步进度、关键数字和待办集中展示,用细分割线和少量线性图标组织内容,减少嵌套卡片。总览右上角的「继续」按钮已移除,可直接点六步入口或待办中的「去处理」。
0.14.4 已完成 Developer ID 签名、Apple 公证及安装验证。下载 Release 中的 FA-Foundry-0.14.4-macOS-arm64.zip,解压后将 FA Foundry.app 移到「应用程序」;同页提供 SHA256SUMS.txt 校验下载文件。
代码审查 · 产品与架构方案 · 验收设计 · 实施与验证记录
应用里内置了华宸物业(虚构的大型物业集团,住宅与非住宅混合业态,50 家城市公司)2026 年 8 月的示例资料。打开应用落在「总览」,第一次会提示一键打开示例看板,看三处就知道它能做什么。想完整走一遍,建议先在这套假账上把月结和经营分析做完,再导入自己的套表:
截至 2026 年 10 月 10 日:
财务经理决定口径、假设及文稿是否采用。系统分别记录执行、可复现性、用户判断和发布状态,不把程序运行成功当作业务结论正确。首次执行不会自动显示“可复现”;相同定义和输入的实际重跑一致后,才标记 SQL 结果可复现。
| 能力 | 当前行为 |
|---|---|
| 解释质量 | 事实占位符自动绑定精确引用;数字、单位、方向及当前稿引用检查;背景按当前任务授权与期间复用。检查未发现问题不等于经理认可或业务原因已证实 |
| 证据标签与时效 | 文稿每条引用和已引用事实按服务端记录(引用依据、计算、复算规则、分析要求、一致性核对、修订比较、资料时效)分为 12 类证据标签,并汇总为证据等级(可决策、研究级、初步、假设主导、无法支持);保存与预览用同一规则,不按正文措辞判断(正文里没绑定依据的数字记为未知),也不采用调用方传入的标签;写明是用户假设或专业判断的引用即使指向某个结果也按假设或判断计,脚本输出没有通过的来源复算时记为未知。资料页逐份文件列出截至日、期间和时效(当前、资料过期、期间不符、未声明;分析期间还没确认时为无法判断),只比较声明的期间、截至日和已确认的分析期间,不用电脑日期,没声明就是未声明;系统刷新按刷新范围的期间判断,上月文件(包括同名的上月文件)显示期间不符而不是资料过期;已存文稿的时效和证据标签按读者能读到的资料得出:权限较窄的会话不会因为它读不到的新版本看到资料过期,经理读助手会话保存的文稿时,会话当时读不到的新版本照样算过期,保存之后才上传的文件不改变已存文稿的结论。证据等级是对依据的分类,不并入核验状态、月结顶栏或完成判断,「可决策」不代表经理认可;直接引用整本工作簿时,文稿里的时效不按其工作表重读,可能显示未声明;控制和月结页判断「资料已更新」仍按同名新版本,不区分期间,会话只按它能读到的新版本判断 |
| 外部报告复核 | 导入的 Word、PDF、PPT、Markdown、HTML 月报(PPT 只取文字和表格,不能导出为 PPT)可在采用前或保存后由经理点「复核数字」:逐个数字与当前有效的套表单元格、资料表和计算结果比对,分为一致、四舍五入后一致、疑似单位换算、不一致、需人工核对,并给出位置、原文片段和来源单元格。按数值和行名比对、不理解语义;同名项目只有单位和期间(本月、累计、预算等)都对得上才算不一致,否则列为需人工核对;OCR 无页码文字一律需人工核对;一份文稿只复核前 3000 个数字,超出时提示且不显示为全部一致;结果另存为记录,不改动文稿。复核只比对数字,不代表报告可以对外发送 |
| 财务分析 | 真实条件筛选、分组、预算差异、账龄与现金情景计算;示例验收使用合成资料 |
| 关联计算 | 声明快照、关联键和基数,检查重复计数;派生 CTE 的 JOIN 需先物化成快照 |
| 金额 | 导入和常规运算保留 Decimal;DuckDB 除法产生的浮点结果明确提示;XLSX 无法精确保留的长数以文本输出 |
| 工作簿公式体检 | 添加 XLSX 时顺带检查外部链接、迭代计算、隐藏工作表、跨簿引用、易变函数、公式里写死的数字(百分数按换算后的值判断)、公式里留下的 #REF! 断链、结果为错误值的单元格、无缓存值公式,以及同一行或同一列里与复制写法不同的公式(夹在中间或紧接在最后一格),结果随资料快照保存,资料页逐类列出并可打开原单元格;较早的工作簿可手动体检一次(只显示不保存)。只提示不阻断,原有导入拒绝规则不变;外部链接只记文件名,样例公式里带路径的文字显示为“…”;超过 10 万行或 256 列的工作表跳过并注明,最多检查 20 万个公式单元格,写法各不相同的公式很多时会更早停止并注明;不重算公式,“写死的数字”和“写法不一致”按固定规则判断:开头的期初数、引用本行或本列这些格的小计和合计不算,但有意设置的其他写法(例如从别处取数的小计)、有意返回的 #N/A 结果仍会列出,可能有误报或漏报,是否修改由经理判断 |
| 脚本 | macOS 系统隔离、冻结输入、独立工作目录、资源上限、代码/环境/产物哈希;归档输出可打开 |
| 后台任务 | 查看、取消、重试;重试创建新记录并沿用原输入;取消回收脚本进程 |
| 子任务 | 真实 spawn/fork,冻结父任务上下文,有深度与工具范围限制;记录结束状态 |
| Office | 隔离 Python/openpyxl 生成或修改工作簿成果,原始快照保持不变;可导出、打开后重新导入 |
| 下月套表滚动 | 资料页「滚动到下月」按「来源到单元格」映射,把本月数(资料单元格、区域合计、计算结果或手填值)写进上月套表的副本:先预览,只写普通单元格并保留其数字格式;公式、数组公式、合并单元格非左上角、受保护锁定格、错误值、会把数字格变成文字的值(例如「1,200」)和写进日期格的数字只列入清单不写。生成和导出副本只能由经理操作,生成前复核每个来源,原快照不变,副本登记为新资料并逐格留变更记录,可导出到自选位置在 Excel 里打开;模板只存映射和文字提示(其中数字都换成 #),不存当月资料和手填金额,套用时工作表名按位置换成本月的。不做公式重算:副本公式在 Excel 打开时重算,保存后重新添加才能读到结果;含图表、图片、批注、外部链接、宏,或迷你图、部分下拉列表、条件格式等扩展内容的工作簿只给「需手工填写」清单、不生成副本;工作表名不会改 |
| 方法 | SQL 方法显式保存,移除注释与具体字面值,跨任务重新绑定;脚本暂不保存为方法 |
| 财务方法技能 | 随包提供 financial-statements、variance-analysis、reconciliation、journal-entry 四项方法,以及 setup、close、bva、cash 四个路由包;分析会话可发现并加载正文与配套说明。连接器占位不代表已连接 ERP,分录技能用于草拟。随包技能的措辞由契约测试把关:不声称已接通 ERP、能过账或付款,斜杠命令和正文里反引号标出的工具名必须真实存在;这只检查文字,助手的回答仍需经理核对 |
脚本隔离目前只支持 macOS;其它系统拒绝执行,没有静默降级。Bash 支持受限命令,不提供任意子进程或网络。工作簿生成不包含 Excel 公式重算引擎;带公式但缺少缓存值的输入会明确报错。日常回归使用确定性适配器;真实模型验收另用显式 --live 入口,在临时配置中使用已有 provider 和合成资料。每次实测分别记录模型、技能来源、计算和草稿。新版解释质量的功能验收、首轮模型成绩和边界见 解释质量交付记录;历史基线见 r2 实施记录。
var/tasks/<task_id>/
task.json, windows.jsonl, sessions.jsonl, deliverables.jsonl
analysis/
datasets/ # 原始资料与元信息、哈希
revisions/ # 不可变计算定义与版本
runs/ # 实际输入、执行结果与状态
drafts/ # 文稿版本、来源与用户判断
methods/ # 显式保存的复用方法
jobs/ # 后台/子任务运行记录
foundry/ 统一负责数据读写;Electron 与插件调用 CLI,不另建数据库入口。每次助手调用以服务端登记的 session 解析 task、workspace 与资料范围;未知 session 拒绝执行。A→B→A 切换不会让 A 的会话落到全局 current 指向的 B。父任务补资料后可以显式刷新上下文,已派出的子任务保持原资料范围。会话读到的每条记录都按它的资料范围得出:读不到上一版的修订按没有上一版显示,沿用了上一版内容(标题、正文、引用、附注、计算依据、取数配方、核对规则、重要性等)的修订则不显示;分析要求核对只计文稿引用的运行和只读要求资料(及所引运行资料)的运行,完成回执、勾稽控制结果和月结状态不因范围外的文稿、运行或新版本而改变;当前要求版本在范围外时会话不能保存文稿,导出登记只由桌面端做。
新任务默认使用 analysis preset,工具通过相同的数据与执行边界开放。旧 period / f3 和技能创作保留在“旧版期间流程”中,便于处理已有窗口。旧命令详见期间流程参考。mark-done 的合同校验、引擎样例通过与方法实际执行分别报告,不能互相替代。
foundry --var VAR task-new --title "华东利润与预算分析"
foundry --var VAR --task TASK dataset-add --path actual.csv --name "本月实际"
foundry --var VAR --task TASK analysis-state
foundry --var VAR --task TASK analysis-save --spec '{"question":"经营利润","bindings":{"actual":"SNAPSHOT_ID"},"sql":"SELECT revenue-cost-expense AS profit FROM actual"}'
foundry --var VAR --task TASK analysis-run --analysis ANALYSIS_ID
foundry --var VAR --task TASK analysis-draft --spec '{"title":"经营简报","body":"可编辑的管理层判断","run_ids":["RUN_ID"]}'
foundry --var VAR --task TASK analysis-export --draft DRAFT_ID --format xlsx
--var、--task、--session 是全局参数,放在子命令前。应用原生选文件是受信任的用户操作;助手只能导入已登记工作目录内的资料。
依赖以 pyproject.toml、uv.lock、app/package-lock.json 为准。当前固定 harness 为 @deepseek-ai/[email protected]。没有为本轮新增第三方依赖。
uv sync --extra dev
cd app
npm ci
npm run harness
npm run foundry
npm run formulator
npm run package
npm run package 检查 runtime/冻包版本,实际启动冻结的 Data Formulator 校验 connector,再构建 macOS 应用。npm run foundry 使用 PyInstaller one-dir,校验冻结引擎及真实脚本隔离。产物在 app/release/,构建脚本不会安装或覆盖 /Applications。
开发时 FOUNDRY_BIN 可以指向本仓库虚拟环境的 foundry,FOUNDRY_VAR 指向独立测试目录;npm run dev --prefix app 启动桌面窗口。不要让测试使用真实财务资料或用户已有任务目录。
.venv/bin/python -m pytest -q
npm test --prefix app
npm run build --prefix app
FOUNDRY_DSH_BIN="$PWD/app/extra/dsh/node_modules/@deepseek-ai/dsh/lib/bin.js" .venv/bin/python -m pytest -q tests/test_real_load.py tests/test_analysis_runtime.py
.venv/bin/python tools/verify_analysis_workbench.py --foundry .venv/bin/foundry
.venv/bin/python tools/verify_analysis_workbench.py --foundry app/extra/foundry/foundry
桌面真实交互脚本为 tools/verify_desktop_workbench.cjs 和 tools/verify_desktop_sessions.cjs,使用已有 Playwright(PLAYWRIGHT_MODULE 指定其模块路径),无需添加项目依赖。会话脚本测试打包应用时另设 QA_APP 为应用可执行路径,QA_FOUNDRY 为包内 CLI;默认使用开发应用,此时先在 app/ 下 npm run build,再运行 npx vite --port 5273 --strictPort。
发布前在装好的应用上跑一次独立分发检查:node tools/verify_standalone_bundle.cjs "/Applications/FA Foundry.app"。它用空 HOME 和 PATH=/usr/bin:/bin 依次核对包内文件和字体齐全且全部为 arm64、冻结 CLI 自检、GBK 收费明细算出收缴率、包内 PDF 和 DOCX 转换、冻结 Data Formulator 的连接器,最后冷启动应用,确认没有启动包外程序、没有连外网。打包时 app/scripts/check-packaged-bundle.cjs 也会做其中的静态部分,缺文件或混入 Intel 二进制会直接停下。
最后一条请使用实际冻包中的可执行路径。详细结果、桌面交互证据及尚未验证的边界见实施记录。
| 差异类型与可用结论 | 每项勾稽差异可标问题类型(公式或控制缺陷、来源矛盾、无依据假设、未更新、口径不同):助手只能建议并附理由,经理在界面采用或改选才算定下;类型绑定当时那笔差额,确认或修改控制后仍跟随同一检查。月结页另给整套表和逐个工作簿的可用结论(可用、带保留可用、不可用、无法判断),只按经理确认的控制和处置得出,类型和助手建议不改变级别;它不替代顶部状态,也不代表经理复核或业务原因已证实 |
| 后续领域 | 总账、凭证过账、银行支付尚未实现;现金预测属于分析,不执行资金划拨 |