AI钱币鉴定:Claude Agent + GLM-5.1实现图像识别与批量报告生成
这次我们来看一个偏实际业务的落地方向AI 钱币鉴定。简单说就是用 Claude Agent 做任务编排与工具调度用智谱 GLM-5.1 大模型做钱币图像的视觉理解与推理最终输出一份可批量生成的鉴定报告。很多人在大模型应用上还停留在“聊天、写文案、改代码”的层面。钱币鉴定这个案例最大的价值在于它不是单个模型一次推理就能完成的而是要把图像识别、特征描述、知识比对、报告生成串成一条流水线这正好是 Agent 编排大模型的标准场景。钱币鉴定这类任务对细节敏感程度很高文字、图案、材质、边缘磨损、铸造工艺都会影响判断结果单靠一个通用对话模型很难稳定输出必须有任务拆解和多轮工具调用。本文会带你拆解这套系统的完整设计。从环境准备、图像预处理、Agent 工作流、API 服务到批量任务全部给出可落地的代码模板。同时讲清楚哪些环节容易翻车、模型能力边界在哪里、批量鉴定的 API 调用怎么写。如果你关心大模型在垂直行业的落地或者准备做一个类似的图像鉴定、质检、藏品识别工具这篇文章可以收藏备用。1. AI 钱币鉴定核心能力速览能力项说明项目类型大模型垂直行业应用钱币鉴定辅助系统技术底座Claude Agent 负责任务编排和工具调度智谱 GLM-5.1 大模型负责图像理解与推理主要功能钱币图像识别、正反面特征提取、版别判断、真伪辅助评估、鉴定报告生成输入形式单张图片、目录批量图片、HTTP API 请求输出形式结构化 JSON、Markdown 报告、CSV 汇总表批量能力支持目录扫描、任务队列、失败重试接口能力可封装为 FastAPI 服务供第三方系统调用推荐硬件云端 API 模式对本地硬件要求很低本地部署大模型则需要 GPU显存以实际模型版本为准启动方式Python 脚本启动、API 服务启动、Agent 工作流引擎适合人群大模型应用开发者、收藏平台、拍卖行、电商和质检系统技术人员从材料看这类 AI 钱币鉴定系统的核心逻辑不是“给一张图让模型直接说真假”而是用一个 Agent 来编排多个子任务。先让视觉模型看钱币图像提取文字和图案特征再结合钱币目录和版别知识进行比对最后由推理模型给出结论并生成报告。这套思路同样适用于邮票鉴定、玉器鉴定、关键零部件外观质检等场景。2. 适用场景与使用边界2.1 适合谁用AI 钱币鉴定第一类用户是做收藏平台和电商系统的开发者。商品上架时经常需要填写钱币的名称、版别、品相和大致市场范围人工审核成本高用大模型做初筛可以极大减少重复劳动。第二类用户是拍卖行和典当行的内部系统需要在大量藏品图片中找到疑似高价值或仿制的对象再交给人工复核。第三类是普通开发者想拿一个真实场景练习 Claude Agent 与多模态大模型的配合方式。2.2 不适合什么场景这套系统再强也做不到专业评级机构的物理检测。钱币真伪鉴定需要称重、直径测量、边缘厚度检测、金属成分分析、铸造纹路显微观察这些不是普通图片输入能解决的。AI 只能做“图像特征的辅助判断”不能替代法院、拍卖行或评级机构的最终结论。投资决策也不能直接依赖输出结果模型对市场价格的理解有时间滞后性这类价值评估只能作为参考区间。2.3 合规与安全边界使用 AI 钱币鉴定时要注意几个底线。处理他人藏品图片前必须获得授权尤其是涉及私人收藏和未公开藏品时不得随意采集、传播和用于商业训练。涉及文物监管目录中的钱币系统只能做知识科普和特征整理不得输出任何可能诱导非法交易的内容。伪造鉴定结论是明确的违规行为系统前端必须展示“辅助参考非专业鉴定”的免责声明。对于声音、人脸、版权素材同样遵循授权优先原则不做规避限制的用途。3. AI 钱币鉴定系统整体架构设计这个项目不是“一个模型打天下”而是“多个模型各干各的”。从实际工程经验看推荐四层结构。第一层是数据接入层。图片可以从本地上传、批量目录扫描、HTTP 接口或对象存储拉取。系统要记录每张图片的来源、拍摄时间、分辨率和采集设备这样后续做追溯会方便很多。第二层是图像预处理层。钱币图片经常存在背景杂乱、反光、倾斜、分辨率不足的问题先做目标检测定位钱币主体再做裁剪和透视校正能显著提升识别效果。第三层是模型服务层。智谱 GLM-5.1 负责多模态理解读取钱币图像中的文字、图案、边缘、色泽等特征Claude Agent 作为编排器决定调用哪个工具、查哪个知识库、生成什么格式的报告。第四层是应用输出层。把结构化结果写入数据库生成 Markdown 或者 PDF 鉴定报告通过 API 返回给上游业务系统。图片输入 ↓ 图像预处理目标检测 / 裁剪 / 透视校正 / 增强 ↓ Claude Agent 任务编排 ├── 调用 GLM-5.1 多模态理解识别文字、图案、工艺 ├── 调用知识检索查钱币目录、版别、参考价格区间 ├── 推理判断真伪辅助概率、品相分级、风险点描述 └── 生成结构化报告JSON / Markdown / CSV ↓ 输出到 Web 页面 / 接口服务 / 批量任务队列程序在执行时Agent 会维护一个任务状态机。每个子任务都有输入、输出、重试次数和超时时间。某个环节失败后Agent 决定是重试还是跳过而不是直接返回一个空结果。从可维护性角度看把每个子任务拆成独立函数或者独立服务是比较稳的做法。4. 环境准备与前置条件4.1 基础环境建议使用 Python 3.10 或更高版本。项目依赖包括图像处理、Web 框架和大模型调用相关库。# 创建虚拟环境避免污染全局 Python python -m venv venv # Windows 激活虚拟环境 venv\Scripts\activate # Linux / macOS 激活虚拟环境 source venv/bin/activate # 安装依赖Windows 也可以去掉 -U 参数 pip install -U requests pillow opencv-python pandas fastapi uvicorn python-multipart如果只在云端 API 模式下运行不需要 NVIDIA 显卡和 CUDA。本地部署大模型时才需要 GPU。部署前先确认显卡驱动能正常识别建议更新到较新的稳定版本避免 CUDA 运行时版本不匹配。4.2 目录结构规划coin-ai/ ├── venv/ # Python 虚拟环境 ├── inputs/ # 待鉴定图片目录 ├── outputs/ # 鉴定报告输出目录 ├── logs/ # 运行日志 ├── prompts/ # 提示词模板 ├── app/ │ ├── agent.py # Claude Agent 编排逻辑 │ ├── preprocess.py # 图像预处理 │ ├── vision.py # GLM-5.1 多模态调用 │ ├── service.py # FastAPI 接口 │ └── batch.py # 批量任务脚本 └── config.yaml # 模型、接口、路径配置4.3 配置项准备模型调用通常需要 API Key 和接口地址。推荐用环境变量保存敏感信息不要硬编码在代码仓库里。# Windows PowerShell $env:GLM_API_KEY你的API Key $env:GLM_API_URLhttps://你的接口服务地址/chat/completions # Linux / macOS export GLM_API_KEY你的API Key export GLM_API_URLhttps://你的接口服务地址/chat/completions说明这里写的是通用多模态 API 调用模板实际接口路径、请求字段、鉴权方式都要以你所用服务的官方文档为准不要照搬死配置。5. 核心实现图像输入与预处理模块钱币鉴定失败很大一部分原因不是模型不够强而是输入图片太乱。反光、阴影、背景干扰会直接误导视觉模型。所以第一步是把图片处理成适合大模型理解的状态。5.1 目标检测与裁剪如果没有现成的目标检测模型可以先用最朴素的方案基于轮廓检测定位钱币主体区域。对背景纯色或简单纹理的图片效果已经足够。import cv2 import numpy as np def detect_coin_region(image_path): 使用轮廓检测定位钱币主体区域。 仅适用于背景相对简单的图片复杂背景下建议替换为目标检测模型。 img cv2.imread(image_path) if img is None: raise FileNotFoundError(f无法读取图片: {image_path}) gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) blurred cv2.GaussianBlur(gray, (5, 5), 0) # 边缘检测 膨胀闭合成闭合轮廓 edges cv2.Canny(blurred, 50, 150) kernel np.ones((5, 5), np.uint8) closed cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel) contours, _ cv2.findContours(closed, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) if not contours: return None, None # 取面积最大的轮廓作为钱币区域 largest max(contours, keycv2.contourArea) x, y, w, h cv2.boundingRect(largest) return img[y:yh, x:xw], (x, y, w, h)5.2 透视校正与归一化如果钱币是倾斜拍摄的直接裁剪出来的图像是椭圆形文字和图案会有透视形变。可以用四点变换把椭圆区域近似校正为圆形视角。这里给出思路检测到最大轮廓后取轮廓外接椭圆获取椭圆外接矩形的四个端点再通过透视变换拉正。def normalize_coin(crop_img, output_size(512, 512)): 将裁剪后的钱币图像缩放为统一尺寸。 实际部署时可根据需要叠加去反光、增强对比度等处理。 if crop_img is None: return None resized cv2.resize(crop_img, output_size, interpolationcv2.INTER_CUBIC) return resized预处理模块的目标是让 GLM-5.1 每次看到的钱币图片角度、大小、背景尽量一致。实测项目里图片统一到 512x512 或 1024x1024 是一个常用区间具体以模型的输入限制为准。如果原图分辨率过低就不要强行放大否则模型只会看到更模糊的细节。5.3 批量目录扫描预处理完成后自然需要一个批量入口。目录结构可以这样组织inputs/ ├── 康熙通宝-正面.jpg ├── 康熙通宝-背面.jpg ├── 崇宁重宝-正面.png └── 批量任务/ ├── 001/ │ ├── front.jpg │ └── back.jpg └── 002/ ├── front.jpg └── back.jpgimport os from pathlib import Path EXTENSIONS {.jpg, .jpeg, .png, .webp} def scan_input_dir(input_dir): images [] for root, _, files in os.walk(input_dir): for file in files: if Path(file).suffix.lower() in EXTENSIONS: images.append(os.path.join(root, file)) # 排序保证执行顺序稳定 return sorted(images) if __name__ __main__: imgs scan_input_dir(./inputs) print(f扫描到 {len(imgs)} 张图片)6. 核心实现Claude Agent 与智谱 GLM-5.1 工作流6.1 Agent 编排设计Claude Agent 在这个项目里的核心价值是任务编排。它不是直接把图片丢给一个大模型问“这是什么钱币”而是把任务拆成多个小步骤。一个典型的鉴定任务流程如下Agent 读取任务配置拿到正反面图片路径。调用 GLM-5.1 多模态接口识别钱币上的文字、图案、面值、年份。调用检索工具去钱币目录中找版别和参考信息。综合视觉结果和知识库结果推理出真伪辅助概率和品相评级。生成 JSON 和 Markdown 报告保存到输出目录。class CoinAgent: 简化版 Agent 工作流。 以 Claude Agent 的任务拆解思路为设计参考 具体模型调用需要替换为实际服务地址。 def __init__(self, vision_client, knowledge_baseNone): self.vision_client vision_client self.knowledge_base knowledge_base def run(self, front_path, back_path): # 子任务1理解钱币正面 front_result self.vision_client.analyze(front_path, 正面) # 子任务2理解钱币背面 back_result self.vision_client.analyze(back_path, 背面) # 子任务3检索知识库 kb_result self.knowledge_base.search(front_result, back_result) # 子任务4汇总推理生成报告 report self.vision_client.generate_report(front_result, back_result, kb_result) return report6.2 智谱 GLM-5.1 多模态调用多模态大模型的调用方式通常是“图片转 Base64 文本提示词”。下面给出通用模板你需要把 API Key 和地址配置好再根据实际接口字段调整。import base64 import requests class GLMVisionClient: def __init__(self, api_key, api_url, modelglm-5.1): self.api_key api_key self.api_url api_url self.model model def _encode_image(self, image_path): with open(image_path, rb) as f: return base64.b64encode(f.read()).decode(utf-8) def analyze(self, image_path, side正面): base64_image self._encode_image(image_path) payload { model: self.model, messages: [ { role: user, content: [ {type: text, text: 请识别这张钱币图片输出文字内容、图案特征、铸造工艺特征。}, {type: image_url, image_url: {url: fdata:image/jpeg;base64,{base64_image}}} ] } ], temperature: 0.2 } headers { Authorization: fBearer {self.api_key}, Content-Type: application/json } response requests.post(self.api_url, jsonpayload, headersheaders, timeout120) response.raise_for_status() return response.json()这里有几个实际注意点。图片过大时Base64 字符串会非常长容易超过请求体限制。建议先把图片压缩到 1024 像素以内再编码。请求超时时间要适当调大多模态推理比纯文本慢尤其是遇到高分辨率图片时。温度参数建议设低一些钱币鉴定这种任务需要稳定输出不需要模型发挥创意。6.3 钱币鉴定提示词模板提示词决定了输出质量。直接把图片丢给模型它可能只会给你一段散文描述。更好的方式是要求模型输出固定结构。你是一名钱币鉴定辅助专家。请基于用户提供的钱币图像完成以下任务 1. 识别钱币信息 - 币名 - 面值 - 铸造年份或时期 - 正反面文字 - 图案描述 - 边缘、材质、工艺特征 2. 判断品相等级 - 按流通程度和磨损情况给出描述 - 用“极美品 / 美品 / 上品 / 中品 / 下品”五档表示 3. 真伪辅助判断 - 指出图像中可疑特征 - 给出疑似仿品的依据例如文字呆板、图案模糊、包浆不自然 - 输出一个 0 到 1 的“真品参考置信度” 4. 输出格式 使用 JSON 格式返回字段包括 coin_name, denomination, year, obverse_text, reverse_text, pattern_desc, craft_feature, condition_grade, authenticity_confidence, suspicious_features, reference_notes 注意 - 图像无法判断的信息输出 null - 不要伪造不存在的知识 - 最后在 description 字段用自然语言写一段结论6.4 结构化输出解析模型输出可能是带 Markdown 代码块的 JSON也可能是普通 JSON。为了稳定解析建议先提取 JSON 片段再转换。import json import re def extract_json(text): # 优先匹配代码块中的 JSON match re.search(r(?:json)?\s*(\{.*?\})\s*, text, re.DOTALL) if match: return json.loads(match.group(1)) # 如果没有代码块尝试直接解析 return json.loads(text)7. 功能测试与效果验证7.1 测试集设计验证 AI 钱币鉴定系统不能只拿几张高清官图测。推荐准备至少三类测试样本测试类型样本要求验证目标基础识别不同年代、不同面值的常见钱币币名、面值、文字识别准确率复杂场景反光、背景杂乱、倾斜、低分辨率图片预处理模块的鲁棒性异常样本仿品、修补币、染色币、磨损严重币真伪辅助判断和风险描述能力每种类型至少准备 20 到 50 张图片图片放在独立目录中并记录“标准答案”。只有知道正确答案才能判断模型输出的准确率。7.2 测试执行import json import time from pathlib import Path def run_evaluation(test_dir): results [] images sorted(Path(test_dir).glob(*.jpg)) sorted(Path(test_dir).glob(*.png)) for img_path in images: start time.time() try: # 这里替换为实际 Agent 入口 report agent.run(str(img_path)) latency time.time() - start results.append({ image: img_path.name, status: success, report: report, latency: round(latency, 2) }) except Exception as e: results.append({ image: img_path.name, status: error, error: str(e) }) with open(outputs/eval_result.json, w, encodingutf-8) as f: json.dump(results, f, ensure_asciiFalse, indent2) return results7.3 判断标准系统是否成功不只看最终结论对不对还要看中间步骤有没有崩。文本识别是否和图片实际文字一致。品相判断是否和人工判断在一个档位内。真伪置信度是否稳定同图多次推理差异应尽量小。报告 JSON 是否能被代码直接解析。单张推理时间是否在可接受范围内。如果同一张图每次都输出不同币名说明提示词不够约束或者温度设置偏高。如果大量图片都返回“无法识别”优先检查图像预处理不要先怀疑模型能力。8. 接口 API 与批量任务8.1 FastAPI 接口服务把 Agent 封装成 HTTP 接口后任何系统都可以调用。from fastapi import FastAPI, UploadFile, File import shutil import os app FastAPI(titleAI 钱币鉴定服务) app.post(/api/coin/analyze) async def analyze_coin(image: UploadFile File(...)): # 保存临时文件 temp_path ftemp/{image.filename} with open(temp_path, wb) as f: shutil.copyfileobj(image.file, f) try: report agent.run(temp_path) return {code: 0, data: report} except Exception as e: return {code: 500, message: str(e)} finally: if os.path.exists(temp_path): os.remove(temp_path)8.2 调用示例import requests # 假设服务跑在本机 8000 端口实际地址需按部署环境修改 url http://127.0.0.1:8000/api/coin/analyze with open(inputs/qianbi.jpg, rb) as f: response requests.post( url, files{image: (qianbi.jpg, f, image/jpeg)}, timeout120 ) result response.json() print(result)8.3 批量任务设计批量鉴定不能简单 for 循环一把梭。推荐把任务写入本地队列或数据库表每个任务包含图片路径、状态、重试次数、错误信息。import time import json import traceback from pathlib import Path class BatchTask: def __init__(self, task_id, image_path, statuspending, retry0): self.task_id task_id self.image_path image_path self.status status # pending / running / success / failed self.retry retry self.result None def run_batch(input_dir, max_retry3): tasks [] image_paths scan_input_dir(input_dir) for idx, img_path in enumerate(image_paths): tasks.append(BatchTask(task_ididx, image_pathimg_path)) for task in tasks: task.status running try: report agent.run(task.image_path) task.status success task.result report except Exception as e: if task.retry max_retry: task.retry 1 task.status pending # 实际应重试入队 else: task.status failed task.error str(e) finally: time.sleep(0.5) # 避免请求过快触发限流 save_results(tasks) def save_results(tasks): output [] for task in tasks: output.append({ task_id: task.task_id, image_path: task.image_path, status: task.status, result: task.result }) with open(outputs/batch_result.json, w, encodingutf-8) as f: json.dump(output, f, ensure_asciiFalse, indent2)批量任务最容易踩的坑是中间一张图片卡死。图片可能是损坏文件也可能是超大尺寸图导致超时。处理方式很简单给每个任务加超时控制失败后记录错误继续处理下一张不要因为单张失败拖垮整个队列。9. 资源占用与性能观察9.1 云端 API 模式使用智谱 GLM-5.1 这类云端 API 时本地资源占用主要集中在图片预处理和 Agent 编排进程上。CPU 版本就能跑通常不会超过 2GB 内存。需要重点观察的是接口响应延迟和 token 消耗。云端 API 模式下多模态图片通常按图片张数和 token 双重计费。同样的图片分辨率越高模型需要处理的 token 可能越多。建议先压缩图片再把温度参数调低减少无意义的随机输出能省一部分成本。9.2 本地部署大模型模式如果想把大模型完全部署到本地需要考虑显存资源。不同量化版本、不同上下文长度、不同图像分辨率下显存占用差异很大没有统一数字。更稳妥的判断是先用小模型、低分辨率、小批量测一轮观察显存峰值再决定是否切换到更大参数版本。观察方法Windows 任务管理器可以看 GPU 显存占用。Linux 下用nvidia-smi -l 1实时观察显存。Python 代码里可以打印进程 CPU 和内存使用情况。# Linux / macOS 下查看显存占用 watch -n 1 nvidia-smi9.3 降低资源占用的方法图片输入前统一缩放到 512 或 768避免无意义的大图 token 消耗。提示词固定为精简模板减少每次请求的 token 数。批量任务增加并发控制避免同时发大量请求打爆接口或显存。单张超时设置 60 到 120 秒超时自动标记失败并重试。本地部署时优先尝试量化模型显存不够就降低分辨率。10. 常见问题与排查方法问题现象可能原因排查方式解决方案接口返回 401 或 403API Key 错误或权限不足检查环境变量和账号配置重新生成 API Key核对权限范围请求超时图片过大或模型推理时间过长查看服务端日志和调用耗时压缩图片调大超时时间分批处理返回结果不是 JSON提示词约束不足或模型输出异常打印原始返回内容加强提示词格式约束增加解析兜底逻辑识别的币名频繁变化温度过高或输入图片质量差同图多次测试温度降到 0.2 以下改善图片预处理批量任务全部失败图片目录路径错误或 API 限流检查日志和错误堆栈确认路径增加重试和退避本地部署无法启动 GPU驱动、CUDA、运行库版本不匹配运行 nvidia-smi 检查驱动按实际运行库要求重装版本报告内容出现明显幻觉知识库缺失或模型推理过度核对钱币目录数据增加检索知识库提示词禁止臆测图片里钱币区域识别偏大反光或背景干扰查看中间可视化结果增强预处理或引入目标检测模型11. 最佳实践与使用建议AI 钱币鉴定系统的成败很大程度取决于工程细节而不只是模型能力。以下几点是实际项目中最值得提前规划的。第一把图片预处理当成一等公民。很多团队花了大量时间调提示词却忽略了最常见的反光和倾斜问题。预处理做好模型识别的稳定性会明显提升。建议在预处理模块中加入可视化输出跑批时把裁剪后的图片存下来人工抽检时能直接看出输入质量。第二保留一套最小可运行配置。代码写复杂以后很容易出现模型版本、API 地址、路径配置互相干扰。把“输入一张图、输出一份报告”的最简链路单独保存任何一次改动都能快速回滚验证。第三模型文件、图片素材、输出报告分开管理。输入图片、临时文件、最终报告不要混在同一目录。长期运行后临时文件会占满磁盘建议写个定时清理脚本。第四批量任务一定要有日志和失败重试体系。每张图片的处理结果、耗时、错误信息都记录下来。这样做的好处是即使一次跑了几千张也可以在结果 JSON 中快速定位失败项重新生成失败任务清单。第五商用前必须人工复核。AI 鉴定结果只能作为辅助筛选凡是涉及较大金额或争议场景必须有专业人员复核。系统界面和报告中要明确展示免责声明。第六控制访问范围。接口服务如果部署在公网必须加认证和限流防止接口被恶意刷量。本地测试时监听地址设置为 127.0.0.1 即可不需要监听 0.0.0.0。12. 总结与下一步AI 钱币鉴定这个案例最有价值的点是把 Claude Agent 的任务编排能力和智谱 GLM-5.1 的多模态理解能力组合成了一条完整流水线。这种“Agent 编排 多模态大模型 知识库检索”的架构不只适用于钱币还可以迁移到邮票鉴定、瓷器底款识别、工业零部件外观检测、票据识别等场景。如果你准备自己动手做一遍建议先跑通最简链路一张图进经过预处理调用 GLM-5.1 识别文字图案Agent 汇总输出一份 JSON 报告。稳定之后再加批量任务、知识库和 API 服务。最容易踩的坑在前面图像预处理不到位后面所有环节都会被影响。值得先验证的第一个功能是钱币正面文字识别。如果模型在清晰图片上都不能稳定读出文字那后面的版别判断和真伪评估都没有意义。再从单张扩展成批量目录扫描最后再封装成 HTTP 接口。希望这套方案能给你一个清晰、可执行的落地参考。

相关新闻

最新新闻

日新闻

周新闻

月新闻