最近把 Claude 的 Agent 能力跟智谱 GLM-5.1 大模型接到一起,做了一个 AI 钱币鉴定的体验 Demo。先说结论:这个方向能跑通,但它不等于专业鉴定。它真正擅长的是把“这张钱币图片里有什么”转成结构化信息,再结合资料库给出参考结果,帮你把查目录、对版别、估行情的重复劳动省掉。
这篇文章适合两类人。一类是钱币收藏新手,想知道 AI 能不能帮自己快速认识手里的币;另一类是正在做图像识别、Agent 工作流的开发者,想找一个比较完整的落地样例。最值得关注的点不是某个模型“强不强”,而是完整链路怎么设计:图片输入、视觉理解、知识库检索、结构化输出、失败兜底。
先说清楚一件事:我用它跑通的是“辅助鉴定”,不是“权威鉴定”。真伪、品相评分、精确估价这些事,静态图片本身就给不了足够证据。下面按实际落地顺序拆一遍。
1. AI 钱币鉴定系统到底在解决什么
1.1 传统流程里最花时间的不是“看”,而是“查”
一枚普通古钱币或者老银元拿到手里,新手通常要判断几件事:
- 品种是什么,例如“光绪元宝”“袁大头”“乾隆通宝”。
- 年号、面值、材质、直径、重量。
- 属于哪个版别,例如“大字版”“小字版”“甘肃版”。
- 品相如何,有没有明显磕碰、划痕、包浆。
- 当前市场参考价大概在什么区间。
这里面最耗时的不是第一眼“看”,而是后面反复“查”。新手不认识版别,就要去翻目录、问人、搜图对比。老手虽然认得多,但遇到冷门品种也要翻资料。
AI 鉴定的价值就在这里:先用多模态大模型读出币面可观察的信息,再让 Agent 去资料库里找候选品种,最后把结果整理成一张可以快速阅读的卡片。它替代的是“初步资料检索”,不是“最终拍板”。
1.2 这套 Demo 的协作方式
这个 Demo 里我用了两个角色:
- 智谱 GLM-5.1 大模型负责视觉理解。它看钱币图片,描述币面文字、年号、图案、面值和材质特征。
- Claude 的 Agent 能力负责调度和判断。它拿到文字描述后,提取关键实体,调用知识库工具,最后汇总输出。
为什么不用一个模型一步到位直接给结论?因为多模态模型直接回答“这是什么币、值多少钱”时,很容易把“看起来像”讲成“一定是”。幻觉来源很多:图片不清晰、特征不明显、训练数据里同品种图片太多。
所以更稳的做法是:先让视觉模型输出“可见事实”,再做实体抽取,再查资料库,最后才生成鉴定卡片。每一层都能检查和干预。
1.3 实际能力边界
这套方案能做的事情,我实测下来大概是这样:
| 能力 | 说明 |
|---|---|
| 常见币种识别 | 对清晰、常见品种,准确率较高 |
| 版别候选推荐 | 能从知识库给出多个候选,按相似度排序 |
| 信息整理 | 把散乱描述变成统一字段,方便录入 |
| 批量初筛 | 对大量图片做第一轮分类,适合目录整理 |
| 价格参考 | 只能给区间,且需要人工确认行情来源 |
| 真伪判断 | 对高仿、改刻、修补币基本不可靠 |
| 品相评分 | 只能描述明显缺陷,不能替代评级标准 |
开头不要期待过高。真正跑起来后你会发现,最有用的不是“它能准确说出这是哪一枚币”,而是“它能帮你把候选范围从几千种缩小到两三种”。
2. 跑通 Demo 前需要准备哪些条件
2.1 模型接入方式:API 优先,本地可作替换
智谱 GLM-5.1 大模型我直接走官方开放平台 API,这样最快,不用先折腾显卡和依赖。配套的 Claude Agent 也走官方 SDK,或者用支持相同调用方式的模型网关。简单说,你的代码只需要保存两个 API Key:一个给视觉大模型,一个给 Agent 编排模型。
如果你不希望图片出本地环境,可以改用本地部署的开源多模态模型,例如用 Ollama 拉起支持视觉能力的模型。这样图片隐私性更好,不用传外部接口。但代价是显存要求高,部署和调优时间长,而且不同小模型对币面小字的识别能力差距很大。新手不要一开始就钻进本地部署,先让云端 API 把流程跑通更重要。
2.2 图片素材和知识库
图片是这套系统的生命线。我建议准备至少正反面两张照片,放在同一个编号目录下。拍摄要求不复杂,但很关键:
- 自然光或均匀灯光,不要强反光。
- 背景用纯色,不要放一堆其他钱币。
- 不要手指捏着币面,会遮挡图案。
- 不要过度修图,不要锐化拉满。
- 图片长边建议在 1024 到 1536 像素之间。
知识库可以先用 CSV 维护,字段至少包含:名称、年份、面值、材质、直径、重量、参考价、备注。数据量小的几十条也能玩,但要真正好用,至少需要覆盖你常接触的品种。
name,year,denomination,material,diameter,weight,price_range,note 光绪元宝户部当制钱十文,1903-1906,十文,铜,28,7.2,30-150,常见版 袁大头民国三年一元,1914,一元,银,39,26.6,900-1500,以品相为准这个 CSV 后面会被 Agent 当作查询工具的数据源。
2.3 最小工程结构
我建议把项目拆成下面这样,而不是全部写在一个脚本里:
coin_agent/ ├── images/ │ ├── 001_obv.jpg │ └── 001_rev.jpg ├── knowledge/ │ └── coin_catalog.csv ├── output/ │ ├── result.jsonl │ └── report.md ├── main.py ├── config.json └── requirements.txtimages 放输入图片,knowledge 放知识库,output 放每次运行结果。这样做的理由是批量跑的时候更好排查:哪张图失败、哪条结果有问题、哪个阶段的输出异常,都能按目录定位。
3. 核心流程拆解:Agent 怎么把钱币图片变成鉴定卡
3.1 先让视觉模型“只描述,不判断”
这个 Demo 最关键的步骤,不是最后那句“它可能是某某币”,而是最开始让视觉模型老实描述。
我用的 Prompt 大概是这样的:
请仔细观察这张钱币图片,列出你确定的可见特征: 1. 币面上的文字、年号、面值; 2. 主要图案,例如龙、嘉禾、人像、建筑物; 3. 材质观感,例如银白色、铜黄色、包浆颜色; 4. 正面和反面的布局; 5. 任何明显缺陷,例如磕碰、划痕、穿孔。 只描述你能看到的内容,不要判断真伪,不要估价,不要推测版本。这样写的目的是把“观察”和“判断”分开。视觉模型只负责看,不负责猜。观察越干净,后面的 Agent 就越不容易被带偏。
3.2 Agent 负责抽取实体和查资料
视觉模型返回文字描述后,Claude Agent 要做的第一件事是抽取结构化实体。例如从“正面写着光绪元宝,背面有龙纹,边缘有英文”里提取出:
- 文字关键词:光绪元宝
- 面值:十文或一元
- 图案:龙纹
- 可能材质:铜或银
然后是查知识库。Agent 通过工具函数读取 coin_catalog.csv,做关键词匹配和筛选。比如“光绪元宝”选中一批数据,“铜”再筛掉一批,“龙纹”再筛一轮,最后留下候选列表。
整个流程用伪代码表示就是这样:
def identify_coin(image_path): # 第一步:视觉模型生成可观察描述 observation = glm_vision_chat( image_path, prompt="只描述可见特征,不要判断真伪" ) # 第二步:Agent 抽取实体 facts = claude_agent_extract_entities(observation) # 第三步:查知识库 candidates = search_coin_db( catalog="knowledge/coin_catalog.csv", conditions=facts ) # 第四步:Agent 汇总鉴定卡 result = claude_agent_generate_card( observation=observation, candidates=candidates ) return result这只是一个示意,不是完整可运行代码。你落地时可以直接用智谱和 Claude 的官方 SDK,把每一步封装成独立函数,方便日志记录和错误处理。
3.3 生成结构化的鉴定卡
最后的输出我推荐用 JSON,方便程序读取,也方便后续导出 Excel 或生成报告。
{ "id": "001", "observation": "正面有光绪元宝四字,背面有龙纹,边缘有英文,铜色明显。", "possible_names": [ "光绪元宝户部当制钱十文" ], "year_range": "1903-1906", "denomination": "十文", "material": "铜", "confidence": "中", "price_range": "30-150", "need_recheck": ["边齿", "重量", "直径"] }字段里最值得关注的是confidence和need_recheck。confidence表示知识库匹配和特征确认的程度,need_recheck表示哪些信息必须人工再看。这样设计的目的就是不让 AI 的输出显得绝对正确。
4. 关键参数和判断标准
4.1 图片预处理参数
图片不是越大越好。API 请求有体积限制,大图传输慢,还可能超出模型输入尺寸。小图又看不清年号和小字。
我一般先把图片长边压缩到 1024 到 1536 像素,JPEG 质量控制在 85 左右。如果一枚币上有特别小的暗记,再单独裁切局部图传给模型,而不是直接传整张高分辨率原图。
还要注意方向问题。有些手机拍的图自带 EXIF 旋转信息,直接读二进制给模型,可能会出现图片被转置的情况。建议先统一转成标准方向,再保存或上传。
4.2 大模型推理参数
鉴定任务和聊天任务不一样,不需要太多创造性。参数据我实测可以这样设置:
| 参数 | 建议值 | 原因 |
|---|---|---|
| temperature | 0.1 ~ 0.3 | 温度越低,回答越稳定,减少编造 |
| top_p | 0.9 | 和低温度配合,保留少量多样性 |
| max_tokens | 800 ~ 1200 | 输出鉴定卡足够,太长反而难解析 |
| timeout | 60 秒 | 图片请求比纯文本慢,要给够时间 |
| retry | 2 ~ 3 次 | 应对网络抖动和临时限流 |
Agent 的 system prompt 也要收窄。不要写“你是资深钱币专家”,因为这会诱导模型给出超出证据的判断。更好的写法是:
你是一个钱币鉴定流程的调度器。你只负责从视觉模型描述中提取事实、查询知识库、生成结构化报告。没有足够证据时,明确标注“待人工复核”。4.3 并发和重试
不要一上来就开最大并发。先单条任务跑一遍,确认输入、输出、日志都正常。然后并发 2 到 3 条,观察有没有限流或超时。再根据模型服务商配额往上加。
失败重试用指数退避,例如第一次等 2 秒,第二次等 4 秒,第三次等 8 秒。连续失败就别再重试了,把任务写入失败队列,等人工检查。
4.4 判断标准
什么样的结果算成功?不是模型不报错就算成功,而是:
- 视觉模型描述和图片内容一致,没有明显幻觉。
- Agent 抽取的字段能被知识库检索到。
- 候选列表里包含正确品种,或者至少没有完全离谱的选项。
- 输出 JSON 能被正常解析。
- 低置信度结果明确标出待复核项。
如果上面五条都满足,这套流程才算跑通。
5. 单条任务跑通之后再批量鉴定
5.1 文件命名和输入清单
批量处理前,先把图片命名规范好。我推荐用“编号_面别”的方式:
001_obv.jpg 001_rev.jpg 002_obv.jpg 002_rev.jpgobv表示正面,rev表示背面。如果你有一批现代纪念币,还需要记录材质和重量信息,建议再建一个输入清单:
id,obverse,reverse,known_year,known_weight,remark 001,images/001_obv.jpg,images/001_rev.jpg,2023,,纪念币 002,images/002_obv.jpg,images/002_rev.jpg,,26.6,银元命名规范的原因很简单:批量任务要把一枚币的正反面合并到同一条结果里,没有规范命名,程序没办法自动配对。
5.2 任务队列和断点续跑
批量任务不要把所有图片一次读进内存,也不要一个 for 循环跑到底。更稳的做法是维护一个任务状态列表,每个任务记录:
- 输入路径
- 当前状态:待处理、处理中、成功、失败
- 模型返回结果
- 错误信息
- 耗时
每次处理完一条,就把结果追加写入output/result.jsonl。这样即使任务中断,已经处理的结果也不会丢。下次启动时,读取已完成的 ID,只处理未完成的即可。
失败任务单独写进output/failed.json,不要混在成功结果里。我见过很多批量任务最后输出一堆空文件,就是因为失败和数据丢失没有被分开处理。
5.3 输出报告和人工复核
批量跑完后,可以生成两种输出:
- JSONL:给程序进一步处理。
- Markdown/HTML 报告:给人快速阅读。
报告里一定要有“置信度低”的分组。我的建议是:高置信度结果直接归档,中等置信度结果人工抽查,低置信度结果全部人工复核。对于钱币这种有收藏价值的物品,不要直接用系统结果做交易决策。
5.4 批量任务常见问题
批量阶段最容易出的问题不是模型判断错,而是数据链错。比如图片路径写错、正反面配对错、知识库字段类型不一致、CSV 编码乱码。先跑两条验证整条链,再放开全量,能省很多排查时间。
6. 常见报错和排查顺序
6.1 典型问题对照表
| 现象 | 优先检查 | 常见处理 |
|---|---|---|
| 图片上传失败 | 文件大小、格式、路径 | 压缩到 10MB 以内,转成 JPEG/PNG |
| 模型返回空 | 图片是否过暗、过模糊 | 提高分辨率或裁切局部 |
| 实体提取不准 | Prompt 不够具体 | 让模型先列观察项,再抽字段 |
| 知识库零命中 | 关键词不一致 | 检查“光绪元宝”和“光绪”等别名 |
| Agent 一直重试 | API Key、额度、超时 | 单独测试工具调用,看返回错误码 |
| JSON 解析失败 | 模型输出了多余解释 | 加 JSON Schema,要求只输出 JSON |
| 本地模型 OOM | 显存不足 | 降低图片尺寸,换小参数模型,开量化 |
6.2 系统化排查链路
遇到问题先别怀疑模型能力,按下面顺序查:
- 先直接调用视觉模型,输入单张图片,确认能生成正确描述。
- 再单独跑 Agent 实体抽取,确认字段完整。
- 然后查知识库关键词,确认能匹配到候选。
- 最后才整体联调,看是不是流程衔接问题。
多数“AI 鉴定不准”的案例,最后都卡在图片质量或知识库数据上,而不是模型本身。
6.3 本地部署大模型替代时的特别坑
如果换成本地部署的开源多模态模型,还会有两个额外问题:
- OOM。常见表现是程序启动后跑几条任务突然退出,或者推理速度越来越慢。
- 小字识别弱。币面年号往往很小,本地小模型容易看错。
解决思路是:降低图片输入尺寸,限制 batch size,不要多任务并发,优先用针对中文优化的小参数视觉模型。即便如此,本地模型的整体效果也可能弱于云端大模型,需要重新评估精度。
7. 这些边界会让你更清楚 AI 鉴定能做到哪一步
7.1 真伪鉴定不能只靠静态图片
钱币鉴定里最难的不是认品种,而是分真伪。高仿币可能图案、文字、重量都接近真品。包浆可以是人工做旧,边齿可以用机器复刻,这些细节在普通照片上很难体现。
如果只是拿手机随手拍一张图,AI 很可能把一枚高仿币识别成真品对应的品种,然后给出参考价。这个风险必须在前端提示。我的做法是在输出卡片上固定加一行:
本结果仅为图像辅助参考,不能作为真伪鉴定依据。如需交易或评级,请交由专业机构实物检测。
7.2 品相和估价要谨慎
估价是另一个容易翻车的地方。同一枚币,MS65 和 XF45 的价格可能差好几倍。AI 从图片上能看出明显划痕、磕碰、清洗痕迹,但无法准确判断压力、光泽、包浆状态。
所以估价字段永远用区间,并且加上“行情变化快,具体以成交为准”。不要让用户觉得 AI 报出来的数字就是市场价。
7.3 从 Demo 到生产还需要补什么
你如果想把这个 Demo 做成长期可用的工具,不能只优化模型,还要补这些工程项:
- 标准化拍摄环境,减少图片质量波动。
- 定期更新知识库,加入新发行的币种和行情变化。
- 增加人工复核队列,低置信度结果强制走人工。
- 记录每次模型的输入、输出、耗时、错误信息,方便复盘。
- 注意数据合规,不要未经授权处理他人收藏品图片,也不要采集不可信来源的数据做训练。
我个人的建议是,先把这个方案当辅助工具用。真正落地时,最该盯住的不是模型有多强,而是输入图片质量、知识库覆盖率和失败重试机制。踩过几次之后你会明显感觉到,很多问题不是 AI 不行,是图和资料没准备好。把这两件事做扎实,AI 钱币鉴定才能变成一个稳定可用的初筛工具。