乐于分享
好东西不私藏

没写一行代码,做了一个能上线的 PDF 翻译 SaaS

没写一行代码,做了一个能上线的 PDF 翻译 SaaS
我必须先把最反常识的事写在开头——
我是一个正经写了 10 年代码的程序员,花了零散几天时间,从数据库 schema、Celery worker、PyMuPDF 排版逻辑、微信支付 v3 签名回调,到 OpenAPI 文档站、SEO 着陆页、备案页脚——全部由 AI 代笔,我自己一行都没写。
并且这个产品,已经上线、已经在收钱
你可能觉得离谱:程序员不写代码,那干嘛去了?
这件事我想认真聊聊。不是爽文,不是”AI 要替代程序员了”的狼来了——是想给你看一种程序员主动让位之后会发生什么。
这篇文章我会拆给你看:

我为什么作为程序员,选择”不写代码”

「译档」是个什么东西,技术上怎么搭的

我作为 Tech Lead,被 AI 摩擦后保留下来的几个判断

这个项目的局限,以及我对”AI 写代码”的真实感受

一、为什么我决定不写代码

先说我为什么主动不写。
很久以前我自己手撸过一个类似的小项目。pip installdocker-compose up到第一次跑通 OCR,整整两周。中间有 60% 的时间在写”业务其实根本不需要”的代码——过度抽象的 repository、留作扩展但永远不会被调用的接口、为”未来可能”加的中间层。
写完之后我意识到一个问题:我花两周写的代码,AI 大概 30 分钟能给我一个更好的版本。我这两周里创造的价值——和被消耗的耐心——是不成比例的。
所以这一次,我给自己定了一个规则:

AI 写代码。我做 Tech Lead。

具体来说:
✅ 我负责定方向、选型、定边界、review diff、挑刺、跑测试
❌ 我不亲自敲实现代码,连print都不手写
✅ 失败就 commit revert,重新让 AI 写
❌ 不容忍”差不多就行”,出问题我让它修到干净为止
这不是”懒”,这是把有限的注意力花在 ROI 最高的环节——架构、边界、和产品决策。

二、我没写代码,我做了什么?

澄清一下”零代码”不是”零参与”。事实上我做的事情比写代码还累。

1. 我做技术选型

不是”挑个数据库”这么简单。是定整套生产级约束:
后端:FastAPI + PostgreSQL + Redis + Celery
端:Vite + React + TypeScript
核心引擎:现成的 PDF 翻译 CLI(PyMuPDF + Playwright Chromium 渲染),作为独立进程被 worker 调度,不让翻译逻辑污染 API 服务
支付:微信支付 v3 Native 扫码(不是 mock)
存储:StorageService抽象,本地文件系统起步,URI scheme 已经为 S3 切换留好接口
任务状态机:uploaded → inspecting → awaiting_confirmation → estimated → queued → running → succeeded | failed | canceled | pending_payment
这些都是一行一行我拍板的。AI 提建议,我说 OK 还是 No。

2. 我做架构边界

最容易出 bug 的不是”怎么实现”,是”哪里不该实现”。我列的 v1 不做清单:
❌ OCR(扫描版 v1 不接)
❌ 支付宝 / 小程序支付(先把微信跑通)
❌ 团队共享额度(数据库预留organization_id,下一版做)
❌ 退款 / 发票
❌ “逐像素复刻”原文版式(保留结构线索就够了)
✅ 失败必须退还冻结积分(不能坑用户)
✅ 任务状态必须可追溯(不能把异常包装成成功)
我比 AI 更清楚”不做”比”做”重要。让 AI 写代码,它什么都愿意帮你加;只有人才知道什么时候该砍。

3. 我做 Code Review——而且是这个项目里最高频的工作

AI 写完一个模块,我做的事情只有:
code review 调整找出问题
根据上面review的结果制定一个优化计划
review 实施计划
开始实施
我的工作流变成了对AI说:
提交,并push到仓库
创建MR请求
创建tags
循环下来,我比 AI 更像是在做它的 Tech Lead。

4. 我做产品决策

这个脱离不开代码:
用户的真实痛点是”翻译过但还要复核一遍”,所以左原文 / 右译文同步翻页是硬需求
商业上不能”惊喜扣费”,所以冻结 → 结算 → 退款三段式必须可追溯
API 是核心场景之一,所以 OpenAPI 文档必须从代码生成,不能手写一份就放着过期
这些决策比代码重要 10 倍。AI 写得再快,做错一个边界判断就全部返工。

三、「译档」到底能做什么?

直接上图 👇
打开主页,是这样的:
顶部导航:译档 logo、产品介绍、定价、安全说明、登录、开始翻译
主视觉:上传 PDF → 预估积分 → 确认下单 → 拿到译文 PDF 的流程示意图

核心功能 1:上传 → 预估 → 确认

这是我觉得最体贴的一个设计——先告诉你多少钱,再让你点确认
上传 PDF 后,平台先解析:多少页、能不能抽取文本、有没有加密
估算输入 token 和输出 token
折算成积分,展示在你的余额旁边
你点了”确认下单”,才冻结积分、开跑任务
整个过程没有任何”惊喜扣费”

核心功能 2:保留版式输出

这是 PDF 翻译的真正分水岭。
很多翻译工具的输出是这样的:标题、段落、表格全糊在一起,没有页码、没有结构线索,看起来就像把 Word 排版扔进了搅拌机。
「译档」的输出:
尽量保留段落位置和顺序
表格保留结构线索
页码、页眉页脚尽量维持
不是逐像素复刻,但看起来像一份被翻译过的正经 PDF
技术实现上用的是 PyMuPDF 解析 + Playwright Chromium 渲染,模式叫preserve-layout。我把它抽成独立 CLI 子进程,worker 用subprocess调度——这样翻译逻辑的 Python 版本、依赖、运行环境都不污染 API 服务。SRE 友好的边界。

核心功能 3:原文 / 译文左右对照

这是我作为”翻译输出复核者”最依赖的一个功能。
左侧原文 PDF,右侧译文 PDF
翻页同步、缩放同步
你可以盯着对照检查:”这段翻译对不对?””这个术语准不准?””这一页是不是漏了一句?”
做合同翻译、金融研报翻译的同学应该秒懂这个功能的价值。

核心功能 4:按 token 结算,失败退款

这一段是商业逻辑层面的设计,但用户能直接感受到。
下单时冻结积分 = 预估积分
任务跑完,按 LLM 返回的实际input_tokens + output_tokens结算
实际消耗 < 预估:差额退回
实际消耗 > 预估:v1 不追加扣费(平台吸收差额,避免用户被”超额罚款”)
任务失败:冻结积分原路退回,状态可追溯
你的积分流水,每一笔都看得见。
技术实现上,所有积分变更走BillingService的账本流水,幂等键task:{id}:settle、task:{id}:refund——并发重试也不会算错。

核心功能 5:对外开放 API

如果你不想走网页,也可以直接 API 调:
创建 API Key
查询余额、查询用量
上传 PDF、创建翻译任务
查询状态、下载 artifact
OpenAPI YAML 直接生成文档站,对开发者友好到不需要再问 PM 一句话。API 设计层面我特意做了一件事:每次翻译任务返回一个idempotency_key,并发提交同一个任务不会双扣积分。

四、几个我承认的局限

我说它”能上线”,但没说它”什么都能”:
  1. 扫描版 PDF 不支持——v1 没有 OCR 引擎,扫描件会返回 OCR_REQUIRED。这一块留给下一版。
  2. 复杂版式不能保证逐像素复刻——比如带图层、带特效的报告 PDF。但段落、表格、页码线索会尽量保留。
  3. 不接支付宝 / 不接小程序支付——先把微信跑稳,next step。
  4. 没有团队共享额度——v1 按个人账户计费。数据库预留了 organization_id,下版做团队功能。
  5. 没有退款 / 没有发票——平台级能力没做,先用积分制简化。
  6. CLI 子进程不沙箱化——v1 直接 subprocess.run,长任务超时靠动态计算(CLI_TIMEOUT_PER_PAGE_SECONDS + per-10k-tokens)。生产上要补一层 gVisor / firecracker 沙箱,这是 v2 的事。
这些局限不是”没时间做”,是”先把第一版边界划清楚”。

五、我的真实感受

最后说点务虚的。
我过去手写代码的时候,每次 review 别人的 PR 都觉得累——业务方提的需求模糊、代码风格不一致、命名飘忽、边界 case 漏一半。这一次作为”AI 的 Tech Lead”,我 review 的其实是AI 的 PR。体感上反而更顺:
不会跟我争论命名风格
不会漏掉类型注解
不会”差不多就行”
我说改就改到干净为止
但我也明显感受到 AI 的几个弱点:
  • 它不知道”不该做什么”——你不说”不做 X”,它就给你加 X。要靠人划清边界。
  • 它会引入隐式依赖——明明是两个无关的模块,它悄悄加了 import 链,破坏了解耦。
  • 它不会主动补测试——你不说要 test,它就只给 happy path。
  • 它的代码 80% 正确、20% 微妙错——这是最耗时的,需要你真的有 review 能力才抓得出来。
换句话说:AI 替代的是”打字员”,不是”工程师”。工程师值钱的部分——定边界、看 diff、抓微妙 bug、做产品权衡——目前 AI 还差得远。
以前我手撸两周的事,现在 30 分钟。这件事 2022 年前还是天方夜谭,2026 年已经变成日常。
如果你也是一个程序员,正在犹豫要不要试试这条路——
我的建议是:别等。先把最烦的一个模块丢给 AI,自己只 review 不写。
你会发现,最累的其实不是 review,而是忍住不自己动手

写在最后

「译档」是一个小工具,日常作用不大,但需要的时候又很迫切。
它目前已经上线,可以正常使用,注册送体验积分。
如果你想:
🧪 体验产品:主页有入口
📚 看 API 文档:文档站已开放
💬 给我反馈:评论区留言
我会认真看每一条反馈,并且——还是让 AI 帮我改。
毕竟,我都说了,我是一行代码都没写的。

平台:译档(YiDoc)|https://translate.qkfintech.cn/r/R7A60326B