LemonWrench — 汽车维修研究
将“如何在我的 <车型> 上更换 X”转化为一个完整的步骤流程、扭矩表格和带标注的图示,然后将其与零件目录和真实世界的现场笔记进行交叉验证,这样你便不会因为手册遗漏的某个步骤而浪费时间。
主要数据源:https://lemon-manuals.la — 涵盖约 10,000 种美国/加拿大车型,涉及 69 个品牌,1960–2025 年,免费使用,无需登录。包括国产车、进口车、孤儿品牌(如 Pontiac、Oldsmobile、Saturn、Saab、AMC、Geo、Mercury、Suzuki)、欧洲豪华车、卡车/商用车以及现代电动车(特斯拉 2012→,Rivian 2022→)。车型年份跨度很大,不仅仅是近年的:丰田和福特拥有连续 66 个车型年份的数据。提供真实的 HTML 文本(扭矩表、容量、分步说明),图示位于 /images25/ 目录下。内容并非扫描的 PDF。
每个车型年份包含两个数据库:
| 数据库 | 数据源 | 用途 |
|---|---|---|
| LEMON | 2025 年抓取 | 2010 年及以后车型、最新 TSB(技术服务公报)、完整目录树、图注 |
| CHARM | 2013 年的 DVD | 1990 年代至 2000 年代车型、更精细的细节、目录树深度有限 |
三源规则
单纯的维修手册不足以构成一个确定的答案。这里每一个有信心的答案都来自三个来源:
- 维修手册 — 操作步骤和扭矩数据。
- 零件目录(例如 gmpartscenter.net、gmpartsdirect.com、rockauto 等) — 提供零件编号,以及结构上的证明:如果两个铸件是分开的零件,那么它们就是分开的零件。这就是你如何在不通过照片猜测的情况下回答“这个支架是盖子的一部分吗?”这个问题的方法。
- 现场共识(车型论坛、JustAnswer/identifix 讨论帖、YouTube 转录文本) — 工程师从未亲手操作过而遗漏在手册外的步骤。如果某一步是现场共识而非手册原文,请如实说明。
如果三个来源存在分歧,就如实报告这种分歧。切勿掩盖。
工具用法
S=scripts/lemon.py
python3 $S <命令>
| 命令 | 用途 |
|---|---|
makes | 获取标准化的品牌名称 |
years MAKE | 获取存在的车型年份 |
cars MAKE YEAR [regex] | 列出该年份下的车辆,并标注 [LEMON] / [CHARM] |
index VEHICLE [--refresh] | 获取并缓存整个链接树(每辆车只需执行一次) |
find VEHICLE TERM... [-n N] [--strict|--any] | 在缓存的目录树中搜索关键词 |
read VEHICLE TERM... [-k N] | 渲染第 N 个搜索结果,并自动跟进子页面 |
get URL | 通过绝对 URL 渲染单个页面 |
sub URL | 获取某个集散页面下的子页面列表 |
imgs URL / pic URL / note URL TEXT / notes [URL] | 图示处理流程 + 持久化缓存 |
selftest | 解析器自检,不涉及网络请求 |
VEHICLE 参数是网站路径去掉斜杠后的形式:Toyota/2015/Camry LE、Pontiac/2007/G6 V6-3.9L。
工作流程
- 正确解析车辆信息。 使用
cars MAKE YEAR列出所有具体配置。发动机和配置的不同会导致手册不同 ——G6 GT, 4D Sedan, 3.9 1, Automatic和G6 GT, 4D Sedan, 3.5 N是两本完全不同的手册。请说明你使用的是哪个具体配置。请注意,车辆徽章可能具有欺骗性:同一个车型名称可能搭载多款发动机,因此务必确认排量。 - 创建一次索引。 LEMON 单页目录树大约 5.5 MB / 13,000 个链接,CHARM 分隔树大约 1.3 MB。缓存在
~/.cache/lemon/<hash>.idx;后续查询都是本地 grep 操作。仅当网站新增了手册时才使用--refresh。 - 使用网站常用术语搜索 — 如
removal、installation、disassembly、torque specifications、fluid capacities、valve clearance、component locations、wiring diagram、DTC、labor times。默认允许一个不匹配的术语;--strict要求完全精确匹配,--any用于单个关键词的模糊搜索。 - 读取,并逐级深入。
read命令会打印搜索结果,然后显示最佳页面的文本,并跟进子页面。CHARM 目录树深度有限:集散页面通常只列出标题,需要你先执行sub <url>再执行get <url>。通常需要进行两级深入,这并非异常。 - 给出回答:编号步骤、按手册原文列出的扭矩、页面 URL,以及每条声称信息的置信度说明(
manual/catalog/field)。
图示处理
read/get 命令会输出 [FIGURE https://lemon-manuals.la/images25/XXXX/] 这样的行,如果存在缓存的描述,则会附加在行尾。
python3 $S pic https://lemon-manuals.la/images25/GM1557668/ # -> ~/.cache/lemon/img/GM1557668.png
# 查看图片,然后:
python3 $S note https://lemon-manuals.la/images25/GM1557668/ "右侧摇臂盖,螺栓环,线圈支架上方"
页面文本中的图注(如 Fig 1: View Of Right Valve Rocker Arm Cover)是图示的真实标题——请直接使用它们,即使在扫描件不清晰的情况下,这些图注也是准确的。1-bit 线条图在原始大小下清晰可读。值得查看的图示包括:分解图(它们包含文本中遗漏的扭矩标注)、接线图、连接器端视图。
描述信息持久化存储在 ~/.cache/lemon/imgnotes.json 中——只需描述一次图示,它就会永久作为文本存在。
超越手册本身
- 结构性问题(如“这个零件是正时盖的一部分吗?”) → 使用零件目录。独立的零件编号 + 独立的垫片 = 独立的铸件。零件目录图还能告诉你某个紧固件属于哪个子总成。
- 可达性问题(如“是什么挡住了这个螺栓?”) → 使用现场资料。搜索
<年份> <车型> <发动机> "<零件>" bracket bolt,然后阅读论坛/JustAnswer 讨论帖;经销商技术人员会发布那些缺失的步骤。 - 是否需要特殊工具(如
压入式皮带轮、Torx内六角、螺柱) → 请查看拆卸步骤中的预备步骤,它们会列出所需的特殊工具(例如J 25034-C)。 - 无法识别的零件螺栓扭矩 → 通过部件名称查看扭矩表,然后通过零件编号确认铸件。同一发动机上看起来相似的支架通常具有不同的扭矩规格(例如相邻部件上分别为 25 N·m vs 50 N·m)。
回答规则
- 精确引用扭矩值,包括所有三个单位:
34 N*m (350 kgf*cm, 25 ft*lbf)。 - 明确指出低扭矩紧固件(如气门室盖、塑料/复合盖):在铝合金部件上过度拧紧是导致重复泄漏和螺纹拉脱的首要原因。
- 路径中的
[09/2014 - ]是修订日期——表示该页面从该日期起适用。 - LEMON 页面常会注明该手册“与以下车型配置完全相同,除非工时、油液和轮胎型号有所不同”——应复用已有搜索结果,避免重复搜索。
<vehicle>/Labor Times/目录列出了拆卸与更换操作;如果显示“仅适用于其他车型配置”,请使用它指定的那个配置。- 没有覆盖到?请如实说明,并列出最接近的有覆盖的年份。切勿臆造任何规格。
- 顺序很重要:给出操作的前置依赖链(例如皮带 → 附件 → 支架 → 盖板),而不仅仅是盖板螺栓的步骤。
交付物
将结果编写为独立的 Markdown 笔记,而非对话式散文:
- 前置元数据(如
tags、vehicle、job、status、updated) - 状态说明——指出工作当前的实际进展
- 首先直接回答关键问题
- 按操作面/组件编号的步骤
- 一个包含所有接触到的紧固件的扭矩表格
- 带图注的图示嵌入
- 来源/置信度表格 —— 包含声称、来源、已验证 / 现场共识
请参见 examples/ 目录获取一个完整的工作示例笔记。
注意事项
- URL 区分大小写,品牌名称拼写需与网站一致(如
Dodge and Ram、Mercedes Benz);canon_make可以自动处理,但手动使用 curl 时则不行。 - 所有目录 URL 必须包含尾部斜杠。
/bundle/的 zip 下载包已被禁用(返回 303 状态码,重定向到/static/sad.html)。robots.txt也禁止访问/bundle/。/hyperlink/...这类 URL 是交叉引用解析器,并非实际内容。- 路径中包含版本标签和
%2F编码的斜杠:请始终使用工具打印出的绝对 URL;直接使用解码后的路径会导致 404 错误。 - 横幅提示“临时服务器运行 / 可能会变慢”会被解析器自动跳过;请设置 120 秒的超时时间。
- 如果主站点宕机,备用镜像站点:
lemon-manuals.org.ua、lemon-manuals.gy、lemon.dogeware.me—— 可通过设置环境变量LEMON_BASE=https://…来覆盖。 - Miniforge/pyenv 等 Python 发行版通常不包含系统 CA 证书包;
lemon.py会回退到/etc/ssl/certs/ca-certificates.crt。
验证
python3 scripts/lemon.py selftest # 期望输出:selftest OK