TaxHacker:用 AI 让记账报税变得不再痛苦

本文欲回答的核心问题:如何用一个自托管的开源工具,让自由职业者和小企业主彻底摆脱手动记账的噩梦,并用 AI 自动化处理发票、收据和多币种转换?

自由职业者和小企业主每年在记账报税上花费的时间,平均超过 100 小时。翻找发票、手动录入数据、转换币种、分类归档——这些琐碎但必不可少的工作,吞噬了大量本该用于创造价值的时间。更糟糕的是,一旦遇到跨国交易或加密货币支付,传统记账工具要么无能为力,要么需要支付高昂的订阅费用。

TaxHacker 的出现,是为了解决这个真实痛点。这是一个完全开源、可自托管的 AI 驱动记账应用,能够自动识别发票和收据、提取关键信息、转换货币(包括加密货币),并将所有数据整理成结构化数据库。最重要的是,你的财务数据完全掌握在自己手中,不需要依赖任何第三方服务。

为什么需要一个 AI 驱动的记账工具

传统记账软件的三大困境,恰好是 TaxHacker 设计的出发点。

第一个困境是手动录入的低效性。每一张纸质收据、每一份 PDF 发票,都需要人工打开、阅读、提取商家名称、日期、金额、税额等信息,然后逐字录入系统。这个过程不仅耗时,还容易出错——一个小数点的偏差可能导致账目混乱。

第二个困境是多币种管理的复杂性。如果你的业务涉及跨国交易,就必须手动查询历史汇率、计算转换金额,并记录每笔交易的原始币种和换算基准。对于接受加密货币支付的自由职业者,情况更加棘手:主流记账软件根本不支持比特币、以太坊等数字货币的汇率转换。

第三个困境是数据隐私与控制权。大多数云端记账服务要求将财务数据上传到第三方服务器,这意味着你的敏感信息——客户名单、收入明细、支出记录——都存储在别人的数据库中。一旦服务商倒闭、涨价或更改服务条款,你可能面临数据丢失或被迫迁移的风险。

TaxHacker 的核心设计理念很简单:用 AI 替代人工录入,用自托管保障数据主权,用开源代码确保透明可控。它不是为了追求功能大而全,而是专注于解决自由职业者和小企业主最核心的痛点——让记账这件事变得足够简单,简单到可以每天完成,而不是拖到季度末或报税前夜。

AI 如何自动化发票识别与数据提取

TaxHacker 的 AI 引擎能够处理几乎所有类型的财务文档:超市收据、餐厅账单、服务发票、银行对账单,甚至手写收据。无论文档语言是中文、英文还是其他语种,无论货币是美元、欧元还是比特币,系统都能准确识别并提取关键信息。

从上传到结构化数据的完整流程

当你上传一张收据照片或 PDF 发票时,TaxHacker 的处理流程如下:

  1. 文档预处理:系统使用 Ghostscript 和 GraphicsMagick 对 PDF 进行转换和优化,确保图像质量足以被 OCR 引擎准确识别。
  2. AI 数据提取:调用你配置的 LLM 模型(OpenAI、Google Gemini 或 Mistral),对文档内容进行语义理解,提取日期、金额、商家名称、商品清单、税额等字段。
  3. 自动分类:根据文档内容和商家信息,系统自动将交易归类到预设或自定义的类别中(例如”办公用品””差旅费用””软件订阅”)。
  4. 项目拆分:如果一张发票包含多个项目(比如一次采购清单中有办公用品、营销物料和员工福利),系统可以将其拆分为独立的交易记录,每条记录对应一个具体项目。
  5. 结构化存储:所有提取的数据保存到 PostgreSQL 数据库中,形成可过滤、可搜索、可导出的结构化记录。

这个流程的关键在于 AI 提示词的可定制性。TaxHacker 允许你修改系统级别的提示词模板,也可以为特定字段、类别或项目编写专属的提取规则。

实际应用场景:跨境自由职业者的记账难题

假设你是一名跨境电商卖家,每月需要处理来自不同国家的采购发票、物流费用、平台佣金账单。这些文档可能包含英文、中文、日文,涉及美元、人民币、日元等多种货币。

使用传统方法,你需要:

  • 打开每张发票,手动识别并录入商家名称、日期、金额
  • 查询历史汇率,计算每笔交易折合成人民币的金额
  • 将不同类型的费用分类记录到不同的 Excel 表格中
  • 定期汇总数据,生成报税所需的财务报表

使用 TaxHacker,你只需要:

  • 批量上传所有发票和收据
  • 系统自动识别语言、提取数据、转换货币、分类归档
  • 在月底使用高级过滤功能,筛选出特定类别或项目的交易
  • 一键导出 CSV 文件,附带所有原始文档,直接交给会计师或用于报税

时间成本从每月 10 小时降低到不到 1 小时,准确性却大幅提升。

为什么 AI 提示词可定制如此重要

不同行业的财务文档格式和术语差异巨大。建筑行业的报价单可能包含”材料费””人工费””机械费”等细分项目;软件公司的发票可能需要区分”一次性授权””年度订阅””技术支持费用”。如果 AI 提示词是固定的,系统很难准确提取这些行业特定的信息。

TaxHacker 的解决方案是 完全开放的提示词系统。你可以在设置中修改以下内容:

  • 系统级提示词:定义 AI 如何理解和处理所有文档的通用规则
  • 字段级提示词:为某个自定义字段编写专属的提取逻辑(例如”从发票中提取项目编号”)
  • 类别级提示词:指导 AI 如何判断交易应该归类到哪个类别
  • 项目级提示词:为不同项目定义不同的提取优先级和命名规范

举个例子,如果你经营一家设计工作室,需要从客户邮件中提取项目名称和紧急程度,可以创建一个自定义字段”项目紧急度”,并编写提示词:

从文档中提取客户要求的交付时间。如果文档中包含"urgent""ASAP""尽快"等词汇,标记为"高";如果明确了具体日期且距今不足7天,标记为"中";其他情况标记为"低"。

这种灵活性让 TaxHacker 不仅仅是一个记账工具,而是一个可以适配任何业务逻辑的数据提取平台。

多币种与加密货币的自动化处理

全球化业务最头疼的问题之一,就是货币转换。TaxHacker 内置了覆盖 170 多种法定货币和 14 种主流加密货币的汇率数据库,并且使用 历史汇率 进行转换——这意味着系统会根据交易实际发生的日期,查询当天的汇率,而不是使用今天的汇率倒推。

为什么历史汇率如此重要

假设你在 2024 年 3 月 1 日用比特币支付了一笔 0.5 BTC 的服务器托管费。当时比特币价格约为 6 万美元,这笔交易折合 3 万美元。但如果你在 2024 年 12 月整理账目时,比特币价格已经涨到 10 万美元。如果使用当前汇率计算,这笔费用会被错误地记录为 5 万美元,导致你的成本虚增、利润虚减。

TaxHacker 的历史汇率功能避免了这个问题。系统会自动识别交易日期,查询 2024 年 3 月 1 日的 BTC/USD 汇率,并以此为基准计算转换金额。这不仅确保了财务数据的准确性,也符合大多数国家税务部门对外币交易的核算要求。

支持的加密货币清单

当前版本支持以下 14 种加密货币的汇率转换:

  • 比特币 (BTC)
  • 以太坊 (ETH)
  • 莱特币 (LTC)
  • 波卡 (DOT)
  • 瑞波币 (XRP)
  • 卡尔达诺 (ADA)
  • 索拉纳 (SOL)
  • 狗狗币 (DOGE)
  • 币安币 (BNB)
  • 泰达币 (USDT)
  • 美元稳定币 (USDC)
  • 波场 (TRX)
  • Polygon (MATIC)
  • Avalanche (AVAX)

如果你的业务涉及其他加密货币,可以通过修改数据库配置或提交功能请求来扩展支持。

实际应用:远程团队的跨国薪资管理

某初创公司在美国、中国、印度雇佣了 10 名远程员工,每月需要支付美元、人民币、卢比三种货币的薪资,以及用 USDT 支付的自由职业者费用。传统记账流程需要:

  1. 手动记录每笔支付的原始币种和金额
  2. 查询支付日期的汇率
  3. 计算每笔支付折合成公司基准货币(假设是美元)的金额
  4. 汇总后生成月度财务报表

使用 TaxHacker,整个流程简化为:

  1. 上传银行转账记录和 USDT 交易截图
  2. 系统自动识别币种、提取金额、查询历史汇率、完成转换
  3. 在”薪资”类别下筛选本月所有交易,一键导出报表

每月节省至少 3 小时的手动计算时间,并且避免了汇率查询错误导致的账目偏差。

完全可定制的字段、类别与项目

标准化记账软件的最大问题,是它们假设所有企业的财务结构都是相同的。但实际上,不同行业、不同规模、不同国家的企业,对财务数据的分类需求完全不同。

TaxHacker 的设计哲学是 零假设、全定制。系统预设了一些常用的类别(如”办公费用””差旅费””软件订阅”),但你可以随时删除、修改或新增任何类别。

自定义字段:像操作 Excel 一样灵活

自定义字段功能让你可以在交易记录中添加任意数量的额外列。这些字段可以通过 AI 自动提取,也可以手动填写。

应用场景 1:律师事务所的客户代码管理

律师事务所需要将每笔费用关联到具体客户案件,以便后续向客户收费。可以创建一个”客户案件编号”字段,并编写 AI 提示词:

从发票或邮件中提取客户案件编号。案件编号通常以"CASE-"或"C-"开头,后跟6位数字。如果文档中没有明确标注,查找客户名称并尝试匹配已知案件列表。

系统会自动从上传的文档中提取案件编号,并填入该字段。月底时,可以按客户案件编号筛选所有费用,生成客户账单。

应用场景 2:电商卖家的 SKU 追踪

电商卖家需要跟踪每笔采购对应的产品 SKU,以便计算每个产品的实际成本。可以创建”产品 SKU”字段,从供应商发票中提取:

从发票中提取产品 SKU。SKU 通常是8-12位的字母数字组合,可能以"SKU:"或"货号:"标注。如果一张发票包含多个 SKU,将它们拆分为独立的交易记录。

这样,每个 SKU 的采购成本都被单独记录,可以直接用于利润核算。

项目管理:多业务线的财务隔离

如果你同时运营多个业务(比如一个软件产品、一个咨询服务、一个内容订阅),需要分别核算每个业务的收支情况。TaxHacker 的项目功能允许你为每笔交易指定所属项目,并在筛选和导出时按项目分组。

实际案例:独立开发者的产品矩阵管理

某独立开发者同时维护三个 SaaS 产品:A、B、C。每个产品都有独立的服务器费用、广告投放、客服成本。使用 TaxHacker,可以:

  1. 创建三个项目:”产品 A””产品 B””产品 C”
  2. 为每个项目定义自定义的成本类别(比如产品 A 需要追踪”API 调用费用”,产品 B 需要追踪”视频存储费用”)
  3. 上传所有费用发票,系统根据发票内容自动分配到对应项目
  4. 月底分别导出三个项目的财务报表,评估每个产品的盈利能力

这种财务隔离不仅有助于决策(比如决定是否关闭某个亏损产品),也能在融资或出售某个产品时,快速提供准确的财务数据。

自托管与数据隐私:为什么这很重要

在云服务时代,将数据托管到第三方平台似乎是理所当然的选择。但对于财务数据而言,这种便利性伴随着不可忽视的风险。

云端记账服务的三大隐患

隐患一:数据泄露风险。财务数据是企业和个人最敏感的信息之一。一旦服务商遭遇黑客攻击、内部人员泄密或被政府要求提交数据,你的客户名单、收入明细、供应商信息都可能暴露。

隐患二:服务中断或倒闭。云服务公司可能因为经营不善而倒闭,或者被大公司收购后更改服务条款、大幅涨价。如果你的所有财务数据都存储在这些平台上,迁移成本可能极高——尤其是当平台不提供完整的数据导出功能时。

隐患三:合规性问题。某些国家或地区要求财务数据必须存储在本地服务器上,不得传输到境外。如果你使用的云服务在其他国家,可能违反当地法规,面临罚款或其他法律后果。

TaxHacker 的自托管方案

TaxHacker 提供了完整的 Docker 容器化部署方案,可以在几分钟内部署到你自己的服务器、NAS 设备或家庭电脑上。

最简单的部署方式:

curl -O https://raw.githubusercontent.com/vas3k/TaxHacker/main/docker-compose.yml
docker compose up

这条命令会自动下载并启动 TaxHacker 应用容器和 PostgreSQL 数据库容器,完成数据库迁移,并在 http://localhost:7331 上运行应用。

生产环境的自定义配置:

如果你需要连接到现有的 PostgreSQL 数据库,或者修改默认端口,可以编辑 docker-compose.yml 文件:

services:
  app:
    image: ghcr.io/vas3k/taxhacker:latest
    ports:
      - "8080:7331"  # 修改外部端口
    environment:
      - SELF_HOSTED_MODE=true
      - UPLOAD_PATH=/app/data/uploads
      - DATABASE_URL=postgresql://myuser:mypassword@mydb.example.com:5432/taxhacker
    volumes:
      - ./data:/app/data
    restart: unless-stopped

关键配置项说明:

配置项 说明 示例
UPLOAD_PATH 文件上传和存储的本地目录 ./data/uploads
DATABASE_URL PostgreSQL 连接字符串 postgresql://user@localhost:5432/taxhacker
PORT 应用运行端口(默认 7331) 8080
BASE_URL 应用的基础 URL http://localhost:7331
SELF_HOSTED_MODE 启用自托管模式(自动登录、自定义 API 密钥等) true
DISABLE_SIGNUP 禁用新用户注册 false
BETTER_AUTH_SECRET 认证密钥(至少 16 字符) your-secure-random-key

LLM 服务商配置:

你可以在应用内设置,也可以通过环境变量配置:

  • OpenAI: OPENAI_MODEL_NAMEOPENAI_API_KEY
  • Google Gemini: GOOGLE_MODEL_NAMEGOOGLE_API_KEY
  • Mistral: MISTRAL_MODEL_NAMEMISTRAL_API_KEY

数据所有权与可移植性

TaxHacker 的所有数据都存储在你自己的 PostgreSQL 数据库中。你可以随时备份、迁移或删除这些数据,不受任何平台限制。

系统还支持完整的数据导出功能。你可以:

  • 导出筛选后的交易记录为 CSV 文件
  • 导出时附带所有原始文档(PDF、图片等)
  • 下载完整的数据归档文件,用于迁移到其他系统

这种设计确保了 零供应商锁定。即使 TaxHacker 项目停止维护,你的数据依然完全可用,可以随时迁移到其他工具或自行开发新的前端界面。

实用摘要与操作清单

核心功能速览

  • AI 驱动的发票识别:上传收据或发票,自动提取日期、金额、商家、税额等信息
  • 多币种自动转换:支持 170+ 法定货币和 14 种加密货币,使用历史汇率精确计算
  • 完全可定制:自定义字段、类别、项目,以及所有 AI 提示词
  • 高级过滤与导出:按日期、类别、项目、金额等任意条件筛选,导出 CSV 及原始文档
  • 自托管部署:Docker 容器化部署,数据完全掌握在自己手中
  • 开源透明:MIT 许可证,代码公开可审计

五分钟快速上手

  1. 部署应用

    curl -O https://raw.githubusercontent.com/vas3k/TaxHacker/main/docker-compose.yml
    docker compose up
    
  2. 配置 LLM 服务

    • 访问 http://localhost:7331
    • 进入设置页面,填入 OpenAI、Gemini 或 Mistral 的 API 密钥
  3. 上传第一张发票

    • 点击”上传文档”
    • 选择一张收据照片或 PDF 发票
    • 等待 AI 自动提取数据
  4. 查看和编辑交易记录

    • 在交易列表中查看提取结果
    • 如有需要,手动修正或补充信息
  5. 导出财务报表

    • 使用高级过滤筛选特定时间段或类别的交易
    • 点击”导出 CSV”,下载包含所有原始文档的压缩包

本地开发环境搭建

如果你想参与开发或深度定制 TaxHacker:

# 克隆仓库
git clone https://github.com/vas3k/TaxHacker.git
cd TaxHacker

# 安装依赖
npm install

# 配置环境变量
cp .env.example .env
# 编辑 .env 文件,设置 DATABASE_URL 等配置

# 初始化数据库
npx prisma generate && npx prisma migrate dev

# 启动开发服务器
npm run dev

访问 http://localhost:7331 即可看到本地运行的实例。

生产环境构建:

npm run build  # 构建应用
npm run start  # 启动生产服务器

反思与独特见解

在开发和使用 TaxHacker 的过程中,我有几点深刻的体会。

第一,AI 的价值不在于炫技,而在于解决真实痛点。市面上有太多”AI 驱动”的产品,把 AI 当作噱头而非工具。但记账这件事,其痛点再清晰不过:手动录入太慢、容易出错、无法处理复杂格式。AI 恰好能解决这些问题——它不需要理解你的业务逻辑,只需要准确地从图像或 PDF 中提取结构化数据。这是 AI 的最佳应用场景:重复性高、规则明确、但人工操作效率低下的任务。

第二,数据主权比功能丰富更重要。很多人选择云服务是因为它们功能强大、界面精美。但当你意识到自己的财务数据存储在别人的服务器上,并且随时可能因为服务商的决策而失去访问权限时,那些华丽的功能就变得不那么重要了。TaxHacker 的自托管设计,虽然牺牲了一部分便利性(比如需要自己部署和维护),但换来的是对数据的完全控制。这是一种更长期、更可持续的解决方案。

第三,定制化能力决定了工具的生命周期。一个只能按固定模板工作的工具,注定只能服务于特定场景或特定时期。但如果工具提供了足够的定制能力——无论是字段、类别还是 AI 提示词——它就能随着你的业务成长而进化。这也是为什么 TaxHacker 没有限制你可以创建的字段数量,也没有锁定 AI 提示词。工具应该适应人,而不是人适应工具。

第四,开源不仅仅是代码公开,更是信任的基石。财务数据的敏感性决定了用户必须能够审计工具的行为。如果代码是封闭的,你永远无法确定应用是否在后台上传数据、是否存在安全漏洞。开源则让一切透明化——任何人都可以检查代码、提出改进建议、甚至 fork 出自己的版本。这种透明性,是传统商业软件无法提供的。

常见问题解答

1. TaxHacker 是否支持多用户协作?

当前版本主要为个人用户和小团队设计。虽然可以在自托管实例上创建多个账户,但协作功能(如权限管理、审批流程等)尚未完全开发。如果你的团队有这方面需求,可以在 GitHub 提交功能请求。

2. 如果 AI 提取的数据有错误,该如何处理?

系统会将提取的数据显示在编辑界面中,你可以随时手动修正。对于经常出错的字段,建议调整该字段的 AI 提示词,提供更明确的提取规则或示例。

3. 是否支持本地 LLM 模型(如 Ollama、LM Studio)?

官方文档提到”本地 LLM 支持即将推出”,但当前版本尚未实现。你可以关注项目的 GitHub 仓库,了解最新进展。

4. 数据库可以使用 MySQL 或 SQLite 吗?

TaxHacker 目前只支持 PostgreSQL 17+。由于使用了一些 PostgreSQL 特有的功能,暂时无法迁移到其他数据库系统。

5. 如何备份和恢复数据?

直接备份 PostgreSQL 数据库和 UPLOAD_PATH 目录即可。恢复时,将数据库和文件目录还原,重新启动应用即可。你也可以使用应用内的导出功能,定期导出 CSV 和原始文档作为冗余备份。

6. TaxHacker 是否符合各国的税务合规要求?

TaxHacker 是一个数据提取和整理工具,不提供税务建议或报税服务。具体的税务合规问题,需要咨询当地的会计师或税务顾问。应用的导出功能可以生成符合大多数会计软件要求的 CSV 格式,方便与专业工具集成。

7. 项目的更新频率如何?是否有长期维护计划?

项目目前处于早期开发阶段,更新较为频繁。官方文档建议”标星项目以获取新功能和 Bug 修复通知”。由于是开源项目,即使原作者停止维护,社区也可以继续开发。

8. 如果我不懂 Docker,是否有其他部署方式?

当前主要推荐 Docker 部署。如果你熟悉 Node.js 和 PostgreSQL,也可以直接克隆代码仓库,手动运行 npm installnpm run build,然后配置数据库连接。具体步骤参见”本地开发”章节。


TaxHacker 不是为了取代专业的财务软件或会计师,而是为了让那些被记账拖累的自由职业者和小企业主,重新夺回时间的掌控权。它用 AI 消除了最繁琐的数据录入工作,用自托管保障了数据的主权,用开源代码提供了可审计的透明性。如果你正在为每月的记账工作感到疲惫,或许可以给 TaxHacker 一个机会——毕竟,你的时间值得被用在更有价值的事情上。