Vinfinity

SKILL生活服务
生活服务 未标注权限 许可证不明确
安装这个技能

Vinfinity 葡萄酒识别助理, 上传或拍照片,全自动生成酒款信息PDF报告

一句话选型结论

按资料字段整理

Vinfinity是生活服务类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类生活服务 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_0e69c095/vin-label-search
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

生活服务
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_0e69c095仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验未标注上游最后核验时间 · 数据更新 1791724160
正文体量67.8 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
行程与攻略

按目的地和天数排行程。

日常信息查询

查天气、交通、办事信息。

生活事务整理

把琐事整理成清单逐项处理。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在生活服务场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
Vinfinity当前 未标注权限 未标注 未标注 未标注 有
食谱批量下载文件夹 联网访问 GitHub 仓库 28.5 万 Codex、Claude、Cursor 有
食谱创建演示文稿 未标注权限 GitHub 仓库 28.0 万 Codex、Claude、Cursor 有
recipe 备份 sheet AS CSV 联网访问 GitHub 仓库 27.9 万 Codex、Claude、Cursor 有
recipe create Gmail filter 邮件管理 未标注权限 GitHub 仓库 27.8 万 Codex、Claude、Cursor 有
配方观察驱动器变化 联网访问 GitHub 仓库 27.4 万 Codex、Claude、Cursor 有

SKILL.md 全文

67.8 KB
模型实际读到的说明书原文,来自技能仓库

Vinfinity 🍷

Tony哥哥(用户称呼偏好)的葡萄酒识别助理 — 完整工作流程。

> ℹ️ 2026-07-11 工作流优化:三步递进→双PDF(标准+深度档案)→双语品鉴笔记→百度网盘备份

⚠️ 2026-07-15 关键教训:双PDF + 双重确认 + 角色分离

铁律 #3:双PDF必须带 --image 嵌入原图

Tony哥哥两次批评"没有根据要求贴上我的原图"。wine_report_pdf.py 和 wine_deep_report.py 都支持 --image <图片路径> 参数。每次生成双PDF时必须使用!

铁律 #4:深度报告必须通过stdin正确pipe档案

错误做法: echo '---END---' | python3 wine_deep_report.py ...(不会传递archive_text)
正确做法: cat 故事文件.txt | python3 wine_deep_report.py ...(通过stdin传递真实内容)
后果: 用echo代替pipe会触发gen_default_archive()自动生成,混入错误的产区描述。

铁律 #5:LLM Vision的classification字段不可盲信

LLM Vision输出的classification(Premier Cru/Grand Cru/村级)必须与OCR标签/KB交叉验证后再确认。

铁律 #6:FusionOCR + LLM Vision 双重确认

FusionOCR只识别到酒庄但没识别到具体酒款/产区时,必须立即跑LLM Vision补充。

角色分离规则

所有酒标先走vinfinity流程。确认是葡睿产品后再切小马模式查报价/运费。非葡睿酒款只做识别+报告。

核心规则(用户反复纠正过,必须遵守)

快速识别铁律(2026-07-12,用户多次纠正)

  • 绝对不要问"对不对?" — 用户极其反感。给出最佳判断即可
  • 不要列候选清单 — 选最可能的那个,直接说
  • 不要问"哪家酒庄?" — 除非OCR完全没读到任何可识别的生产者信息
  • OCR不全时 → 只说出明确识别的部分,不清楚的跳过或标记 ❓
  • 用户会主动纠正 → 错了就接受、修改、继续,不解释不争论

PDF命名与推送规则(2026-07-12定稿)

  • 文件名格式: {酒庄缩写}{年份}_{酒名缩写}_cn.pdf (如 d2022_cc_cn.pdf)
  • 酒庄缩写: 取每个实词首字母(跳过 et/de/du/des/la/le/les/aux/domaine/chateau/maison),最多4字母
  • 酒名缩写: 同上规则取前3字母, 用于区分同酒庄同年份的不同酒款 (防止文件覆盖)
  • 深度档案: d{酒庄缩写}{年份}_{酒名缩写}_deep_cn.pdf
  • 示例: d'Ardhuy Corton-Charlemagne 2022 → d2022_cc_cn.pdf / dd2022_cc_deep_cn.pdf
  • 示例: d'Ardhuy Ladoix Le Rognet 2022 → d2022_lr_cn.pdf / dd2022_lr_deep_cn.pdf
  • 缩写规则: 先用空格替换连字符 - → Arnoux-Lachaux → Arnoux Lachaux → al (取每个实词首字母)
  • 跳过词: et/de/du/des/la/le/les/aux/en/sur/sous/par/domaine/chateau/maison
  • 最多6字母, 纯ASCII, 无空格, 无特殊字符
  • 连字号处理: Arnoux-Lachaux → 需先替换连字号为空格再分词, 否则会被视为一个词
  • 一次发两份MEDIA齐发 (短文件名保证微信接收)
  • 同步百度网盘备份 /Vinfinity_Reports/
  • MEDIA发送失败 → cp到新短路径再发 (微信可能有文件句柄缓存)
  • 用户纠正后: 更新DB → 重新生成双PDF → 重新发送+备份

多瓶同图识别(2026-07-12 新增,用户测试通过)

当一张图中有多瓶酒时(常见1280x1700竖图,3瓶并排):
1. 分列扫描:将图片均分为3列(左/中/右)或3行(上/中/下),EasyOCR分别扫描每列,互不干扰
2. 独立推理:每列的OCR结果独立分析,不跨列混合,避免张冠李戴
3. 分别保存+出报告:每瓶酒独立入库,各自生成独立双PDF
4. 顺序发送:按左→中→右顺序发送MEDIA,每瓶的标准+深度档案可一次齐发
5. 示例:左Lafite 2000/中Margaux 2000/右Cheval Blanc 2000 — 成功识别3款一级庄

代理使用规则(2026-07-13 用户明确要求)

需要时直接启动,不询问,不报告,不关闭。 用户明确要求\"每当需要代理时直接启动\"。

  • 需要时直接后台启动:/usr/bin/verge-mihomo -d /home/ubuntu/.config/clash &>/dev/null &
  • 等待2秒即可,不需要等3-4秒。端口2秒内就绪。
  • 不需要关闭 — 保持运行,下次直接用。不要 pkill,不要问用户是否要关。
  • 深度报告生成时若知识库信息不足,必须联网搜索补充,不生成空模板

不需要代理的场景: 微信公众号(mp.weixin.qq.com)、百度网盘(bypy)、国内API、Firecrawl API直连
需要代理的场景: OpenRouter API、DuckDuckGo搜索、海外葡萄酒网站

混合识别管线 — FusionOCR v2.3 + LLM Vision

核心策略:清晰标签→FusionOCR (26s);花体字/复杂标签→LLM Vision (35s)

graph LR
    A[酒标图片] --> B{FusionOCR v2.3}
    B -->|高置信≥3项| C[快速识别 ✅]
    B -->|花体字/深色底/低置信| D[wine_vision_hybrid.py]
    D --> E[LLM Vision → JSON]
    C --> F[交叉验证]
    E --> F
    F --> G[最终输出]

FusionOCR v2.4 — 10技术融合 (默认首选)

一键执行:

python3.12 ~/.hermes/scripts/fusion_ocr.py <image_path> [--verbose] [--json] [--no-zoom]

FusionOCR v2.4 — 10引擎融合(2026-07-16新增RapidOCR/腾讯云OCR/预处理 🚀):
1. 📐 快速分类 (0.2s) — 自动检测暗/模糊/低对比, 智能选择策略组合
2. 🔬 多尺度金字塔 — 0.5x/1x/1.5x, 兼顾速度和精度
3. 🔤 EasyOCR (en,fr) — 花体字/拉丁/法文识别
4. 📝 Tesseract (eng+fra) — 印刷体辅助
5. 📊 字典匹配 — 精确匹配 wine_database.db (去除年份字段, 只返回匹配单词)
6. 🎤 音频纠错 — 30+常见OCR误读修正 (HAMBOLLE→CHAMBOLLE, NRAYAL→RAYAS, HA@BCRTIN→Chambertin 等)
7. 🧠 LLM推理纠错 — 年份/等级/产区检测 + Monopole关键词 + 知识库交叉引用 + 🇦🇺澳洲产区/酒庄/品种检测 (92产区+49酒庄+17品种, 来自AWD培训资料)
8. 🇦🇺 澳洲语音纠错 — 136条澳洲特有OCR误读修正 (COONAMARRA→Coonawarra, BAROSA→Barossa, SEMILION→Semillon等)
10. 🦚 RapidOCR (PP-OCRv3) — 中文酒标最强,安装: pip install rapidocr-onnxruntime(已装 ✅)
11. ☁️ 腾讯云OCR — 云端高精度,需配置 TENCENTCLOUD_SECRET_ID/KEY 环境变量
12. 🖼️ 图像预处理管线 — 去噪→纠偏→CLAHE对比度增强(来自OCR-Pro v2)

增强模块: ~/.hermes/scripts/fusion_ocr_enhanced.py — 整合自PaddleOCR-Skills(⭐32)/腾讯云OCR/OCR-Pro v2(1k下载)
参考: references/fusion-ocr-20260716-enhancements.md

知识库深度融合(2026-07-16 已完成)

条件 耗时 优化
高截图(>2000px)自动缩放 62s→25s (60%↑) 仅高截图触发
正常酒标 39s→34s (13%↑) 所有
难标(暗/模糊) ~40s 多阈值二值化(120/160/200) + 反色 + zoom
花体/手写 ~35s → LLM Vision wine_vision_hybrid.py (OpenRouter)

🔬 GitHub开源增强集成(参考: references/github-ocr-enhancements.md):
已融合5个开源项目: ViTSTR(312⭐)预处理 → 年份数字识别提升 | handprint(192⭐)多引擎投票架构 | OpenWinesOCR(36⭐)酒标区域分割 | ha-wine-tracker(18⭐)Vivino API验证 | WinesLabelDataset颜色校正。

关键改进:
- 2026-07-12: 速度从123s→26s (4.7x, 删减冗余EasyOCR调用)
- 2026-07-12: dict_fuzzy_match修复 — 去除DB字段中年份, 只返回匹配单词; 过滤常见词
- 2026-07-12: 顶部缩放策略自动条件触发
- 2026-07-13: 花体字纠错库扩展至30+规则; Monopole关键词检测; KB交叉引用

Legacy (备用):

python3.12 ~/.hermes/scripts/wine_ocr_v3.py <image_path> --langs en,fr
python3.12 ~/.hermes/scripts/wine_ocr_easyocr.py <image_path> --langs en,fr

Identity Inference — V3 统一搜索引擎 (2026-07-14升级 🚀)

搜索优先级(2026-07-15更新):
1. 🔥 Firecrawl — 首选,网页→干净Markdown,中文完美,免费2000页/月
2. 📰 last30days — 社交研究,搜Reddit/X/YouTube/HN/GitHub上的近期讨论
3. 🎯 wine_search_v2.py — OCR文本→DB搜索+语音匹配+KB查找
4. 🌐 smart_search.py — DDG Lite备选

一键搜索:

# Firecrawl 搜索(优先)
python3.12 ~/.hermes/scripts/firecrawl_search.py search "酒庄名 关键词"
python3.12 ~/.hermes/scripts/firecrawl_search.py "https://酒庄官网"

# last30days 社交研究(搜Reddit/X/YouTube上的酒评/讨论)
/last30days 酒庄名 wine review
/last30days 产区 vintage tasting notes

# OCR文本→搜索 (DB+KB)
python3.12 ~/.hermes/scripts/wine_search_v2.py ocr "<ocr_text>" [--image <path>]

# 图片→OCR→搜索
python3.12 ~/.hermes/scripts/wine_search_v2.py image <image_path>

v2 核心升级:
1. 🎯 语音模糊匹配 (Metaphone) — "Ramanay"→"Ramonet", "Richebour"→"Richebourg"
2. 🗄️ DB集成 — 直接搜索 wine_database.db,不依赖硬编码JSON
3. 📊 多维评分 — 酒庄+酒名+产区+品种+年份+视觉,0-100分排序
4. 📚 知识库智能查找 — 根据OCR文本自动选择KB文件
5. ⚡ 结果缓存 — 12小时缓存,重复查询秒回

Layer Tool When
1 wine_search_v2.py ocr 首选: OCR文本→DB搜索+语音匹配+KB查找
2 wine_search_v2.py image 有图片: OCR→全管线搜索
3 wine_patterns.py 快速检测产区/葡萄/年份
4 wine_image_search.py Legacy 视觉+跨维度推理
5 KB refs inside-burgundy.md, burgundy-domaine-stories.md

Validate Before Reporting 🛡️ (MANDATORY)

import sys, os, importlib.util
sys.path.insert(0, os.path.expanduser('~/.hermes/scripts'))
spec = importlib.util.spec_from_file_location("v", os.path.expanduser("~/.hermes/scripts/wine_validator.py"))
mod = importlib.util.module_from_spec(spec)
spec.loader.exec_module(mod)
report = mod.validate(image_path, ocr_text, producer, appellation, vintage)

Report Template — 三步递进式回复

用户要求三步走,不可合并。分三条消息发送。

⚠️ 前置铁律:处理酒标前必须先加载本技能

收到酒标图片后,第一步必须是加载 vinfinity skill(skill_view(name='vinfinity')),然后严格按照以下三步流程执行。

铁律 #0(升级): 收到酒标图必须先加载本技能

Tony哥哥明确批评过"为什么不是vinfinity的酒标识别?" 处理任何酒标图片前,第一步必须是 skill_view(name='vinfinity')。

角色分离规则

所有酒标→vinfinity识别→确认葡睿产品→切小马模式查报价/运费。非葡睿酒款只做识别+报告。

铁律 #1(用户反复纠正):不要问"对不对"

🔴 第一步:快速识别(5秒内回复,核心速度优化 ⚡)

🔴🔴 铁律 #1(用户反复纠正,违反必被批评):不要问"对不对?"。绝对不要问"信息对不对"、"信息对吗"。给出最佳判断,用户会主动纠正。不要列候选清单,不要问"哪家酒庄"——选最可能的直接说。

目标:10秒内回复,只给结论,不问问题。

识别管线(2026-07-15更新——双重确认机制):

# 1. 快速检查图片尺寸
python3 -c "from PIL import Image; img=Image.open('img.jpg'); print(img.size)"

# 2. FusionOCR (默认首选)
python3.12 ~/.hermes/scripts/fusion_ocr.py <image> 2>&1 | grep "🏆\⭐" | head -10

# 3. 🔴 关键检查:如果FusionOCR只识别到酒庄+年份,但未识别出具体酒款/产区,
#    必须立即运行LLM Vision补充识别,不要仅凭酒庄名就生成报告!
python3.12 ~/.hermes/scripts/wine_vision_hybrid.py <image> --json

⚠️ 2026-07-15 重要教训:LLM Vision等级判断不可盲信

案例: Joseph Drouhin Chambolle-Musigny 2018 的 LLM Vision 返回了 "Premier Cru",但Tony哥哥纠正只是村级。
铁律: LLM Vision 输出的 classification 字段不可盲信——必须与OCR识别的标签文本交叉验证后再确认。

⚠️ 2026-07-15 重要教训:FusionOCR + LLM Vision双重确认

案例: Mouton Rothschild Aile d'Argent 2019 — FusionOCR读到"Moutcn rothschild"误判为Mouton红,LLM Vision正确识别"Aile d'Argent"(木桐白)。
铁律: OCR碎片模糊时("d'ergent"→实际是"Aile d'Argent")必须跑LLM Vision二次确认。FusionOCR + LLM Vision 双确认后才能报告。

⚡ 2026-07-15 FusionOCR v2.3 → v2.4 速度优化

  • 高截图(>2000px)自动缩放到1280px → EasyOCR省一半时间
  • 删掉创建了但不用的多尺度缩放(0.5x/1.5x/2x/b120/b200)
  • 二值化扫描仅对暗标触发(不浪费正常标时间)
  • 1x结果≥2高置信时跳过zoom

实测: 高截图62s→25s(60%↑),正常标39s→34s(13%↑),复杂标64s→58s(10%↑)
- FusionOCR正确识别了Joseph Drouhin + 2018,但未能识别酒款名Chambolle-Musigny Premier Cru
- LLM Vision(wine_vision_hybrid.py)成功识别了完整的酒庄+酒款+产区
- 教训: 即使FusionOCR高置信识别了酒庄,如果酒款名/产区不明确,必须用LLM Vision做二次确认
- 铁律: 两份PDF必须包含原酒标图(--image <图片路径>参数),否则用户会批评"没有贴上原图"

正确的完整管线流程:

1️⃣ FusionOCR → 检查结果
   ├── 酒庄✅ 酒款✅ 产区✅ → 直接回复
   └── 酒庄✅ 但酒款❌或模糊 → 2️⃣ LLM Vision补充识别
2️⃣ wine_vision_hybrid.py → 获取完整酒庄+酒款+产区
3️⃣ 回复快速识别摘要
4️⃣ 生成双PDF(必须加 --image 参数嵌入原图)

关键规则(违反会被用户批评):
- 不要问"对不对?" — 用户明确表达过不满。给出最佳判断即可
- 不要列候选清单 — 选最可能的那个,直接说
- 不要问"哪家酒庄?" — 除非OCR完全没读到任何生产者信息
- OCR不全时 → 只说出明确识别的部分,不清楚的跳过或标记 ❓
- 格式精简 → 只保留 酒庄/酒款/年份/产区/品种 五行,不用完整markdown表格
- 仅限第一轮 → 故事和PDF在后续步骤进行
- 用户会主动纠正 → 错了就接受、修改、继续,不解释不争论

🟡 第二步:背景故事(搜索整理完成后回复)

至少3-4段落,包含: 酒庄历史(100字+) | 家族传承 | 地位 | 地块风土(土壤/朝向/海拔) | 轶事 | 酿酒哲学(新桶/整串/生物动力法)

开头:📖 背景故事整理好了:

故事来源: references/burgundy-domaine-stories.md + references/cote-de-beaune-domaines-top17.md + references/inside-burgundy.md

🟢 第三步:PDF报告(必须带 --image 参数嵌入原图)

🔴🔴 铁律 #4(2026-07-15 Tony哥哥批评):生成双PDF时,必须加上 --image <原图片路径> 参数嵌入酒标图!
Tony哥哥两次批评"没有根据要求贴上我的原图"。wine_report_pdf.py 和 wine_deep_report.py 都支持 --image 参数。

🔴🔴 铁律 #5(2026-07-15 Tony哥哥批评,两天内两次违反):
错误做法: echo &#x27;---END---&#x27; | python3 wine_deep_report.py ... → 不会传递archive_text,触发gen_default_archive()自动生成(内容可能混入错误的产区描述,例如智利酒出现阿德莱德)
正确做法: cat 故事文件.txt | python3 wine_deep_report.py ... → 通过stdin传递真实档案内容

# 中文版(默认)—— 必须加 --image &lt;原图路径&gt; 嵌入酒标图!
python3 ~/.hermes/scripts/wine_report_pdf.py &quot;酒名&quot; &quot;酒庄&quot; 年份 &quot;产区&quot; &quot;品种&quot; &quot;故事...&quot; USD_min USD_max --cn --image &lt;原图路径&gt;

# 带酒标图
python3 ~/.hermes/scripts/wine_report_pdf.py &quot;酒名&quot; &quot;酒庄&quot; 年份 &quot;产区&quot; &quot;品种&quot; &quot;故事...&quot; USD_min USD_max --cn --image &lt;path&gt;

🖼️ 多阈值二值化 + 反色预处理(2026-07-13 新增)

FusionOCR pyramid_scales() 现在除了标准缩放外增加了:
- 3级二值化阈值:120/160/200 → 提升花体字/浅色字识别
- 反色预处理:深色底浅色字标签自动反转 → 提升识别率
- 倒置扫描: 当标签以深色为底浅色为字时(如金/白字),inverted版本显著提升Tesseract效果

🔄 LLM Vision 混合识别 v2.0(2026-07-13 并行加速 🚀)

对于FusionOCR难以识别的花体字/复杂标签/深色底标签,启用LLM视觉模型。

v2.0优化:
- FusionOCR + LLM Vision 并行执行(非串行),Vision为主路径
- Vision先出结果即回复文字(~25-30s),不等待OCR完成
- PDF报告后续生成发送(不阻塞文字回复)
- 图片自动压缩至800px + JPEG q70加速API调用
- 线程安全:threading.Thread 并行
- 代理自动启动 — 需要时直接后台启动,不询问不报告
- 快速回复铁律: Vision结果一到就发文字,不等OCR完成。目标25-30s。

python3.12 ~/.hermes/scripts/wine_vision_hybrid.py &lt;image.jpg&gt; [--json]

快速回复铁律(2026-07-13 用户明确要求):
- 文字回复目标:25-30s(之前3分钟被批评"太慢")
- 核心策略:Vision结果一到就发文字,不等OCR完成
- 不要问"对不对"、"信息对吗" — 直接给出最佳判断
- 不要列候选项 — 选最可能的直接说

MEDIA发送铁律(2026-07-13 用户反复批评,4次违反记录):
- 发MEDIA必须附带文字确认 — 绝不能只发MEDIA不说话。用户4次批评"没有收到"、"空回复"、"快修复"
- 正确: MEDIA:/path + 下一行 "xxx 双PDF齐发 ✅"
- 错误: 只发MEDIA后面没任何文字
- PDF生成后立即发送,不等百度网盘上传完成

效果对比(花体字JC Guyaux Chambertin标签):
| 检测项 | FusionOCR(纯OCR) | LLM Vision |
|:-------|:-----------------|:-----------|
| Chambertin | ❌ Qhambedin | ✅ Chambertin |
| Grand Cru | ❌ 未识别 | ✅ Grand Cru |
| Pinot Noir | ❌ 未识别 | ✅ Pinot Noir |

配置: 自动从 CUSTOM_OPENROUTER_API_KEY 读取密钥,自动启动mihomo代理。

🐛 2026-07-15 重要教训:LLM Vision分类字段不可盲信

案例1 — Drouhin Chambolle-Musigny: LLM Vision返回 "Premier Cru",实际是村级。Tony哥哥纠正了两次。

案例2 — Mouton Aile d'Argent: FusionOCR读到"Moutcn rothschild" + "d'ergent",仅凭OCR会误判为Mouton红。LLM Vision正确识别出"Aile d'Argent"(木桐白)。

铁律:
- FusionOCR 只识别到酒庄但没识别到具体酒款/产区 → 必须跑LLM Vision
- LLM Vision 的 classification 字段不可盲信(尤其是一级园vs村级)→ 与OCR标签/KB交叉验证
- OCR碎片模糊时(如"d'ergent"实际是"Aile d'Argent")→ 必须LLM Vision二次确认
- FusionOCR + LLM Vision 双确认后才能下结论

⚡ 2026-07-15 FusionOCR v2.3 → v2.4 速度优化

  • 高截图(>2000px)自动缩放到1280px → EasyOCR省一半时间(实测62s→25s, 60%↑)
  • 删掉创建了但不用的多尺度缩放(0.5x/1.5x/2x/b120/b200)
  • 二值化扫描仅对暗标触发(不浪费正常标时间)
  • 1x结果≥2高置信时跳过zoom
  • 正常标39s→34s(13%↑),复杂标64s→58s(10%↑)

🔤 2026-07-15 OCR纠错词典扩充(意/德/西)

在 wine_search_v2.py 的 FRENCH_FIXES 新增30+条目:
- 意大利: Barolo, Barbaresco, Brunello, Montalcino, Montepulciano, Nobile, Valpolicella, Amarone, Chianti, Prosecco, Nebbiolo, Sangiovese, Barbera
- 德国: Spätlese, Auslese, Beerenauslese, Trockenbeerenauslese, Kabinett, Mosel, Rheingau, Pfalz, Trocken, Feinherb
- 西班牙: Crianza, Reserva, Gran Reserva, Tinto, Tempranillo, Garnacha, Ribera, Priorat

问题: gen_default_archive() 只对勃艮第/波尔多/澳洲3个产区有详细内容,其他所有葡萄酒(奥地利、德国、意大利、西班牙、美国等)在每个板块都只生成1行占位文本。
修复 (wine_deep_report.py v1.2):
- 新增 is_austria / is_germany / is_italy / is_spain / is_usa 产区检测
- 每个产区在各板块都提供详细的数段文字(酒庄背景/故事/葡萄园/酿造/哲学/风格/年份/品鉴)
- 新增 Grűner Veltliner 品种匹配(gruener/veltliner/grüner/gruner),GV在酿造风格、品鉴笔记、餐酒搭配均有专属内容
- 所有 else 分支不再生成1行占位,而是生成有实质内容的段落
- 联网搜索从1次增加到2次(历史+品鉴),搜索结果用于充实所有板块而非仅背景
- 新增奥地利酒庄到 is_australian_wine() 排除列表
- 版本号: wine_deep_report.py → v1.2

📄 深度档案内容生成(联网搜索增强)+ 餐酒搭配参考 ✅

餐酒搭配参考书(2026-07-13 确认已入库 + 已集成到深度报告管线):
~/.hermes/references/perfect_pairing_kb.md — Evan Goldstein《完美搭配》侍酒师大师餐酒搭配指南,572KB/320页全OCR。涵盖12个品种的详细食物搭配建议。
wine_deep_report.py 已集成:自动追加【餐酒搭配】板块。

品种匹配顺序(重要!): cabernet → 必须在 sauvignon 之前检查,否则 Cabernet Sauvignon 会被误判为 Sauvignon Blanc。

gen_default_archive() 在知识库信息不足时自动联网搜索补充:

联网搜索补充流程(2026-07-15更新):
1. 自动启动代理
2. 🔥 Firecrawl 搜索酒庄官网/Vivino/Wine-Searcher获取酒评、价格、评分
3. 📰 last30days 搜索Reddit/X/YouTube上的近期讨论和口碑
4. 按产区类型适配内容(勃艮第/波尔多/澳洲等专属描述)
- Chardonnay → 霞多丽
- Sauvignon Blanc → 长相思(必须在Cabernet之后)
- Semillon → 赛美蓉
- Gewürztraminer → 琼瑶浆
5. 搜索结果不理想时回退到产区适配模板

PDF文件名规则(2026-07-12定稿): {酒庄缩写}{年份}_cn.pdf / d{酒庄缩写}{年份}_deep_cn.pdf
- 缩写:取酒庄每个实词首字母(跳过 et/de/du/des/la/le/les/aux/en/sur/sous/par/domaine/chateau/maison),最多6字母
- 连字号处理: Arnoux-Lachaux → 需先替换 - 为空格(.replace(&#x27;-&#x27;,&#x27; &#x27;))再.split(), 否则被当做一个词, 缩写只剩首字母(如 a 而非期望的 al)
- 多瓶同图: 1280x1700竖图分3列OCR, 每瓶独立推演+出报告
- Monopole检测: 标签出现MONOPOLE→自动标记独占园, 可唯一锁定酒庄身份
- 示例:Bouchard Père et Fils → bpf2005_cn.pdf / dbpf2005_deep_cn.pdf
- 短纯ASCII文件名时,两份PDF可一次MEDIA齐发(已验证成功,不会丢失)
- 长文件名/特殊字符才需要分开发
支持 --image &lt;path&gt; 嵌入酒标图片。图片自动等比缩放(max 50×70mm),保持原始比例不变形。
双字体: 标题副行(英文酒庄名+年份)用 FreeSans 正常字距,中文正文用 WenQuanYi ZenHei。

🔴🔴 铁律 #2(用户反复批评"空回复"):发MEDIA文件必须附带文字确认。 用户多次批评"你返回了空内容""没有收到""快修复"。每次发MEDIA时,必须同时写一句简短文字,如"xxx 双PDF齐发 ✅"。禁止只发MEDIA文件不说话,禁止只发MEDIA文件+空消息。

该铁律同样适用于所有其他Agent(小马/虾王啊发) — 任何MEDIA文件输出后必须带文字确认。
1. 生成PDF后 立刻 发MEDIA文件,不要等
2. 同时上传百度网盘 /Vinfinity_Reports/ 备份(bypy)
3. 必须附带简短文字确认 — 用户多次批评"空回复"。MEDIA发完后务必写一句如"xxx 双PDF已发 ✅",不能只发文件不说话。
- 短纯ASCII文件名时: 两份PDF可一次MEDIA齐发(同一消息两个MEDIA引用均成功送达)
- 只有文件名超过40字符或有特殊字符时才需分两条消息
- 🔴 铁律:发MEDIA必须附带文字确认 — 用户反复批评"空回复""没有收到""快修复"。每次发MEDIA文件后,同一消息中必须写一句简短文字(如"xxx 双PDF齐发 ✅")。禁止只发MEDIA不说话,禁止只发MEDIA+空消息。
- MEDIA发送失败 → cp到新短路径再发(微信可能有文件句柄缓存,新建文件路径解决),同时告知用户百度网盘有备份

快速识别铁律:\n- 不要问"对不对?" — 用户多次明确批评过。给出最佳判断即可,用户会主动纠正\n- 不要列候选清单 — 选最可能的那个,直接说\n- 不要问"哪家酒庄?" — 除非OCR完全没读到任何生产者信息

深度档案8大板块(2026-07-13 用户明确要求)

每瓶酒的深度档案必须包含以下8个板块,缺一不可:
1. 🏰 酒庄背景 — 建立年份、创始人、所在地、等级地位
2. 📖 酒庄故事 — 历史轶事、名人关联、趣闻掌故(至少3段)
3. 🍇 葡萄园背景 — 面积、土壤类型、朝向、种植比例、藤龄
4. 🍷 酿造风格 — 发酵方式、橡木桶比例、陈年时间、年产量
5. 🧠 酿造哲学 — 酒庄核心理念(如Rousseau"尊重风土最少干预")
6. 🎯 风格与亮点 — 口感香气、酒体结构、陈年潜力
7. 📅 年份特色 — 天气条件、成熟度、评分、产量影响
8. 📝 品鉴笔记(中英双语必需) — 至少2位酒评家(RP/WS/JS/Decanter/Vinous等),每位格式:酒评家(分数):+英文原文+中文译文

⚠️ 注意: 当用户未提供详细背景文字时,wine_deep_report.py 会自动调用 gen_default_archive() 生成8大板块的通用内容(基于酒庄名/产区/品种/年份自动填充)。但泛化内容不如真实知识库丰富——建议优先从知识库中查找具体信息。

多瓶同图识别(2026-07-13新增,用户测试通过)

当一张图片中有多瓶酒时(常见1280x1700竖图,3瓶并排):
1. 分列扫描:将图片均分为3列(左/中/右),EasyOCR分别扫描每列,互不干扰
2. 独立推理:每列的OCR结果独立分析,不跨列混合,避免张冠李戴
3. 分别保存+出报告:每瓶酒单独入库,各自生成独立双PDF
4. 顺序发送:按左→中→右顺序发送MEDIA,每瓶的标准+深度档案可一次齐发
5. 示例:左Lafite 2000/中Margaux 2000/右Cheval Blanc 2000 — 成功识别3款一级庄

🟢🟢 双PDF管线(标准版 + 深度档案版)

每识别一款新酒,生成两份PDF,各发微信+备份百度网盘:

PDF 脚本 内容 格式
📄 标准报告 wine_report_pdf.py 酒款识别+酒庄故事+价格 深红金色,10-15K字
📄 深度档案 wine_deep_report.py 历史/葡萄园/酿酒哲学/品鉴笔记(多位酒评家中英双语)/年份详解 档案风格,15-25K字

深度档案内容要求(2026-07-13 用户明确要求8大板块,缺一不可):
1. 🏰 酒庄背景 — 建立年份、创始人、所在地、产权归属
2. 📖 酒庄故事 — 历史轶事、名人关联、趣闻掌故
3. 🍇 葡萄园背景 — 面积、土壤类型、朝向、种植比例、藤龄
4. 🍷 酿造风格 — 发酵方式、橡木桶比例、陈年时间、产量
5. 🧠 酿造哲学 — 酒庄核心理念
6. 🎯 风格与亮点 — 口感香气、酒体结构
7. 📅 年份特色 — 天气、成熟度、评分、陈年潜力
8. 📝 品鉴笔记(中英双语必需) — 至少2位酒评家,英文原文+中文译文各一段

v1.1 🇦🇺 澳洲自动集成: wine_deep_report.py 现在自动检测是否为澳大利亚葡萄酒(通过产区/酒庄/品种判定)。检测到澳洲酒后,在深度档案中自动插入 🇦🇺 澳大利亚葡萄酒知识板块,包含:产区特色描述、品种知识(设拉子/赤霞珠/霞多丽等12+品种的区域风格差异)、James Halliday/Langton's评级体系、Barossa老藤宪章、螺旋盖说明。法国/勃艮第/意大利等非澳洲酒不受影响,不插入此板块。

传送规则(每份PDF都要执行):
1. 生成PDF后 立即 发MEDIA文件
2. 上传百度网盘 /Vinfinity_Reports/ 备份
3. 附带文字确认"两份PDF已发+百度网盘已备份"

Price Rules

  • 用户提供的价格永远是地面真相 — 以此反向推算国际价。立即更新DB,同时重新生成PDF(价格变了PDF也必须更新)。
  • 精品小产量酒庄(Bernstein/Bizot/Cathiard/Dugat-Py等)特级园 ≠ 常规价格 — 稀缺溢价极高,估价上浮3-5倍。
  • 发布价格时加注: "国内价请以实际购买渠道为准,欢迎提供最新行情"。

Self-Review (v7)
1. Weak link? OCR? DB gap? Search?
2. Used fusion_ocr.py first? FusionOCR v2.3 is the primary pipeline.
3. FusionOCR只识别到酒庄但没识别到酒款/产区? 必须立即跑 LLM Vision 补充,不能只用酒庄名生成报告!(2026-07-15 教训:Joseph Drouhin 被误判为通用酒,实际是 Chambolle-Musigny)
4. LLM Vision的classification可能不准确(2026-07-15教训:LLM Vision误标Chambolle-Musigny为Premier Cru,实际是村级)。LLM Vision的输出不能盲信,特别是等级(村级vs一级园vs特级园)——必须与标签信息或已知KB核对后再确认。
5. Used wine_search_v2 for inference? Phonetic matching catches garbled OCR.
6. OCR fragments combined? Check if multiple high-confidence fragments should be read together.
7. Inverted tried? If tesseract returned empty on dark label, did you try 255-arr?
8. Image search used? If <3 fragments → wine_search_v2.py image?
9. Story adequate? 3+ paragraphs with all required items?
10. Price realistic? Cult producers can be 3-5x higher than typical estimates.
11. 双PDF加了 --image 参数了吗? 必须嵌入原酒标图,否则Tony哥哥会批评"没贴上原图"!(2026-07-15 教训)
12. 加载了 vinfinity skill 吗? 处理酒标前先 skill_view(name='vinfinity')

Reference Files

Full index: wine_knowledge_base_index.md — 14,500+ lines across 8 primary KB files, 3 raw archives.

📰 微信专辑批量提取工作流(2026-07-13 验证成功)

16篇文章批量入库(~85K字符),来自葡萄酒图书馆勃艮第+波尔多专辑。

管线: 专辑链接 → Album JSON API → 去重过滤 → 并行 extract_wechat_article.py → 清洗HTML → Markdown入库

脚本: ~/.hermes/scripts/extract_wechat_article.py

python3.12 ~/.hermes/scripts/extract_wechat_article.py &quot;&lt;文章URL&gt;&quot; &quot;&lt;标题&gt;&quot; &quot;&lt;日期&gt;&quot;

专辑API: https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&amp;__biz=XXX&amp;album_id=XXX&amp;count=20&amp;begin=0&amp;f=json
- 去重(按title),跳过汇总/转发
- 已知限制: offset参数无效, 只返回最新~20篇

📰 WeChat Article Extraction(微信公众号文章提取)

推荐工具: wechat-export(pip安装,替换之前的manual提取方式)

当前规模: 113篇已入库,覆盖勃艮第全产区(Chambertin/Musigny/Montrachet/DRC/Leroy/Richebourg等),来源:微信公众号「葡萄酒图书馆」
参考书目: 35+本权威著作(Lavalle 1855 → Rodier → Pitiot → Coates → Morris 完整版),保存在 burgundy-reference-books.md
参考网站: 30+个(winehog.org / cadastre.gouv.fr / burgundy-report.com / domaine-leroy.com 等)
中文酒庄库: eswine-chinese-wine-database.md (逸香名庄, 99酒庄)
评分数据: eswine-ratings-database.md (逸香名庄 RP/WS/JS)

批量入库工作流(已验证 115+篇文章):

# 1. 批量导出(支持多个URL同时)
wechat-export &quot;url1&quot; &quot;url2&quot; &quot;url3&quot; ... \
  --format markdown --output ./output --no-images --proxy http://127.0.0.1:7890

# 2. 自动分类入库
# 勃艮第/波尔多 → Vinfinity KB (references/wechat-*.md)
# 葡睿酒业文章 → Pran KB (references/wechat-articles/)

# 3. 提取酒庄/地块名 → 注入burgundy_knowledge.py

完整参考书目: references/burgundy-reference-books.md (35+本, 含Lavalle 1855到Morris 2021)
中文酒庄名数据库: references/eswine-chinese-wine-database.md (99+酒庄, 来自逸香名庄)
评分数据库: references/eswine-ratings-database.md (正在后台爬取中, 含RP/WS/JS评分)

🧠 Burgundy Knowledge Module(勃艮第知识模块,2026-07-13新增)

scripts/burgundy_knowledge.py — 从115+篇微信文章中自动提取结构化的勃艮第知识:
- 154个酒庄名(Domaine de la Romanée-Conti, Leroy, Rousseau, Dujac, Fourrier, Cathiard等)
- 156个地块/Climat名(Les Amoureuses, Les Suchots, Aux Malconsorts, Les Caillerets等)
- 31个特级园(Chambertin, Musigny, Montrachet, La Tâche, Richebourg等)

自动集成到 wine_deep_report.py 中:
- 识别到已知酒庄 → 自动标注酒庄背景
- 识别到特级园 → 自动标注 🌟 特级园标记
- 识别到Climat → 自动补充风土描述

微信文章可从专辑页JSON API批量提取(优先于OCR):

步骤1:获取专辑文章列表(JSON API,无需代理)

curl -s &quot;https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&amp;__biz=XXX&amp;album_id=XXX&amp;count=20&amp;begin=0&amp;f=json&quot; \
  -H &quot;User-Agent: Mozilla/5.0 (Linux; Android 13) AppleWebKit/537.36 Chrome/120.0.0.0 Mobile Safari/537.36&quot;

返回JSON含 article_list[](每个有title/url/create_time)和 base_info(专辑名/文章总数)。
- 已知限制: API只返回最新~20篇,旧文章无法通过分页获取(offset参数无效)
- 翻页循环 begin=0,10,20... 直到重复标题出现即停止

步骤2:批量提取正文(extract_wechat_article.py)

python3 scripts/extract_wechat_article.py &quot;&lt;url&gt;&quot; &quot;&lt;标题&gt;&quot; &quot;&lt;日期&gt;&quot;

该脚本用 Mobile UA 直接访问文章HTML,从 id=&quot;js_content&quot; div 提取正文,清洗HTML标签后保存为 Markdown。
- 国内服务器不需要代理
- 保存到 references/wine-library-{标题}.md
- 跳过"汇总"(含有文章列表但无URL)和"转发"类文章

步骤3:并行批量提取(delegate_task)
当有10+篇文章需要提取时,使用 delegate_task 并行化:

每批3篇(max_concurrent_children=3),每篇独立调用 extract_wechat_article.py
→ 约30-40秒完成12篇
  • 分批策略:按主题分组(如勃艮第Richebourg系列、Volnay系列等)
  • 已完成16篇批量提取(~70K字符),含勃艮第12篇+波尔多4篇
  • 索引更新:在 wine-library-articles.md 文件头添加新文章引用

传统方法(备用):
完整技术手册见 references/wechat-article-extraction.md。

关键参数:

User-Agent: Mozilla/5.0 (Linux; Android 13) AppleWebKit/537.36 Chrome/120.0.0.0 Mobile Safari/537.36
Referer: https://mp.weixin.qq.com/
  • Mobile UA绕过显示层验证,文章内容在HTML的 js_content div中(CSS隐藏)
  • 正则提取: id=&quot;js_content&quot;[^&gt;]*&gt;(.*?)&lt;/div&gt;\s*&lt;script
  • 验证状态不影响提取 — verify_status=1 的文章仍有完整源码
  • 保存后更新 knowledge-base-index.md 索引

🏘️ Wine Library Articles (9 OCR'd, ~9 pending)

🏪 SkillHub 扩展引擎(2026-07-15共安装8个技能 🔥)

下技能已从SkillHub安装,可在识别管线中自动调用:

技能 用途 热度 触发时机
🔤 ocr-pro-v2 OCR加强版(RapidOCR+EasyOCR+TrOCR) 1k FusionOCR低置信时自动调用
🍷 wine-info-search 葡萄酒信息查询/评分/价格 785 需要搜索酒款详情/评分时
🔍 anysearch 实时搜索增强(替代smart_search) 18k 搜索备选/搜索引擎超时后
🧠 llm-wiki 结构化知识库管理 2.5k 组织团长知识库内容
📚 ima-skills 知识库读写检索 101k🔥 大规模知识检索
✍️ unclecheng-reduce-ai-perception-v2 去AI味(报告更自然) 37k🔥 生成报告后润色
📊 data-analysis-plus 数据分析大师 6k 葡萄酒数据分析
✅ doc-consistency-checker 文档校对 3.5k PDF报告质量检查

📚 团长知识库(2026-07-15更新 — 366本书,24MB文字已提取 ✅)

百度网盘 /团长知识库/专业书籍/ → 本地 ~/.hermes/knowledge/团长知识库/
完整索引:~/.hermes/knowledge/团长知识库/INDEX.md

已消化核心书籍(30个摘要文件,24MB文字,806MB原始资料):

类别 已消化情况 重点书
📜 核心百科(3本) ✅ 全部提取 Oxford Companion 6.4MB/3807页, Wine Grapes 3.3MB/3552页, WSET D1 232页
🇫🇷 勃艮第(3本) ✅ 全部提取 Clive Coates 1,884页/2.7MB, My Favorite Burgundies, InsideBurgundy 408MB
🦘 澳洲(3本) ✅ 全部提取 Halliday Wine Companion 2,222页, Australian Wine Ency, Varietal Wines
🇮🇹 意大利(5本) ✅ 全部提取 Barolo&Barbaresco, Vino Italiano(21大区), Gambero Rosso 2014/2015
🇨🇳 WSET中文笔记 ✅ 148个PDF已提取 Units 3-6 + 考官报告12份 + 真题40+份
🍽️ 餐酒搭配(2本) ✅ 提取完毕 Daring Pairings 923KB, Food&Wine Pairing 889KB
🥃 烈酒/清酒(13本) ✅ 提取完毕 Whisky/Gin/Rum/Sake 各专业书
🏪 慢宋+陶语记 ✅ 完整报价入库 慢宋3款黄酒 + 陶语记8家进口酒70+款
📚 WSET D3-D5教材 ✅ 已提取 D3全球产区82MB, D4起泡31MB, D5加强9.6MB

> 深度报告/识别知识不足时优先查询团长知识库,标注来源 📚 团长知识库

📖 2026-07-16 知识库深度融合(Decanter/WSET/菠萝碎语/期货报告)

来源 内容 用途 路径
📰 Decanter UK 15年 45期杂志目录+年份评分+名庄品鉴 深度报告引用权威评分 ~/.hermes/knowledge/wine/decanter_kb/
📕 菠萝碎语277篇 勃艮第完整知识(起源/名庄/风土/年份/特级园) 勃艮第酒庄故事增强 ~/.hermes/knowledge/wine/wset_diploma_kb/菠萝碎语/
📘 WSET Diploma Unit3-6试题总结(品种×产区配对) 品鉴笔记专业术语 ~/.hermes/knowledge/wine/wset_diploma_kb/WSET_notes/
📈 历史期货报告23份 3月威科夫策略复盘 虾王交易员策略参考 ~/.hermes/knowledge/wine/wset_diploma_kb/期货报告/

调用方式: 写勃艮第深度报告时,优先从菠萝碎语搜索酒庄名/产区名提取故事和背景;引用权威年份评分时查Decanter知识库;品鉴描述参考WSET配对表。

📗 2026-07-11 Session — 3-Book Bilingual Extraction (14,500+ lines)

File Lines Source Book
clive_coates_cote_de_nuits.md 619 Clive Coates MW 941pp → Côte de Nuits villages
clive_coates_beaune_chalonnaise.md 438 Clive Coates MW → Beaune/Chablis/Chalonnaise
clive_coates_vintages.md 501 Clive Coates MW → 18 vintages 2005-1959
inside_burgundy_part1.md 920 Jasper Morris MW 801pp OCR → Background/Chablis
inside_burgundy_part2.md 1,016 Jasper Morris MW → Gevrey/Vosne/Chambolle/Nuits
inside_burgundy_part3.md 449 Jasper Morris MW → Beaune/Chalonnaise/Vintages
perfect_pairing_kb.md 10,342 Evan Goldstein → 餐酒搭配全书(中文)
burgundy-reference-books.md 35+ 勃艮第权威参考书目(1855-2021,含Lavalle/Rodier/Coates/Morris等,见微信文章)
wechat-*.md 104篇 微信公众号「葡萄酒图书馆」勃艮第/波尔多深度文章(2026-07-13批量入库)

🏘️ 葡萄酒图书馆 · 批量提取文章(2026-07-13新增16篇,70K字符,非OCR)

2026-07-13 从公众号「葡萄酒图书馆」勃艮第+波尔多专辑批量提取了16篇独立文章,直接抓取HTML而非OCR:

勃艮第专辑(12篇):
- wine-library-Vosne-Romanee-扩张.md (8.3K, 2025最新)
- wine-library-Gros-家族历史及-Richebourg.md (15.6K)
- wine-library-Domaine-Chantal-Remy.md (13.7K)
- wine-library-Michel-Gros-第四个孩子引发了好奇心.md (4.8K)
- wine-library-Benjamin-Roblot-的爱侣.md (6.4K)
- wine-library-Comte-Georges-de-Vogue-Chambolle-Musigny.md (4.3K)
- wine-library-Comtes-Lafon-注册地址信息补充.md (3.4K)
- wine-library-Richebourg-地图更新-Gros交换后.md (3.4K)
- wine-library-Richebourg.md (4.5K)
- wine-library-DRC-Richebourg-产量.md (1.4K)
- wine-library-Gagnard-家族的特级田.md (2.0K)
- wine-library-Chantal-Remy-文章的疑问.md (2.5K)

波尔多专辑(4篇):
- wine-library-也聊巴黎审判.md + wine-library-也聊巴黎审判-勘误和反馈.md
- wine-library-Château-Clerc-Milon---双人舞.md
- wine-library-拉菲酒庄的La-Caillava葡萄园.md

提取工具:scripts/extract_wechat_article.py(专辑JSON API → 逐篇js_content提取)
|:-----|:--------------|
| vincent-dancer-oskar-2021.md | 🆕 Vincent Dancer cuvée Oskar 2021 — 4块田(含Chevalier-Montrachet GC)混酿Vin de France, 2021霜冻年份 |
| village_name_evolution.md | 勃艮第9村改名时间线+语源+Morey难产 |
| montrachet_expansion_history.md | 1921诉讼→Dent de Chien 0.367ha升级为Montrachet |
| prieure_roch_clos_des_corvees.md | 菜刀酒庄Prieuré-Roch独占园5.13ha |
| prieure_roch_clos_des_corvees_qanda.md | 2016天灾减产70%→只出一款+无硫Pure版 |
| musigny_blanc_de_vogue.md | De Vogüé Musigny白1994-2014降级Bourgogne Blanc之谜 |
| burgundy_book_recommendations.md | 70+本勃艮第书中精选 |
| climats_vs_lieux_dits.md | 官方定义+Le Cailleret地块实图解说 |
| combe_d_orveau.md | La Combe d'Orveau地块Faiveley/Jacques Prieur拆分 |
| wine_library_articles_index.md | 索引: 8篇已入库+10篇待OCR |

🌍 WSET Diploma 中文笔记(Unit 3 全球产区,24篇,~380KB)

inside-burgundy.md (30KB Coates+Morris双体系) | burgundy-domaine-stories.md (36KB 29酒庄故事) | wset-diploma-burgundy-notes.md (30KB 邢威WSET D3笔记) | burgundy-map-analysis.md (10KB BIVB地图解析)

📚 WSET Diploma 中文笔记(Unit 4/5/6 + Examiners Reports, NEW! 🔥)\n\nUnit 4 — 烈酒(Spirits, 6篇, ~76KB):\nflavoured-spirits (8.9K) | fruit-spirits (13.7K) | grain-spirits (18K) | market (3.9K) | spirits-production (10K) | sugar-cane-agave-spirits (11.6K)\n\nUnit 5 — 起泡酒(Sparkling, 4篇, ~42KB):\neurope (10.5K) | france (18K) | new-world (8.9K) | production (4.9K)\n\nUnit 6 — 加强酒(Fortified, 6篇, ~50KB):\naustralia-rutherglen-muscat (3.2K) | madeira (9.7K) | overview-production-market (2.9K) | port (13.5K) | sherry (13.3K) | vin-doux-naturel (6.9K)\n\nExaminers Reports(考官报告, 12份, ~1.8MB):\n2003-04 (105K) | 2004-05 (142K) | 2005-06 (166K) | 2006-07 (199K) | 2007-08 (207K) | 2008-09 (171K) | 2009-10 (153K) | 2010-11 (180K) | 2011-12 (128K) | 2012-13 (147K) | 2013-14 (123K) | 2014-15 (87K)

欧洲(10篇,~118KB): Austria (8.8K) | Bulgaria (2.3K) | Germany (18K) | Greece+Cyprus (7.5K) | Hungary (6.3K) | Italy (38K) | Portugal (10K) | Romania (1.2K) | Spain (22K) | Switzerland (2.8K)

美洲(6篇,~35KB): Argentina (6.3K) | Canada (3.2K) | Chile (7.8K) | Mexico (0.6K) | Uruguay+Brazil (1.5K) | USA (15K)

亚非大洋洲(6篇,~36KB): Asia (2.4K) | Australia (17K) | Eastern Mediterranean (1.3K) | New Zealand (6.5K) | North Africa (1.5K) | South Africa (7.8K)

百度网盘路径:

[邢威 WSET Diploma] 中文笔记/[邢威 WSET Diploma] Unit 3 中文笔记/
├── Unit 3 法国/          8篇
├── Unit 3 法国以外的欧洲/ 10篇
├── Unit 3 美洲/          6篇
└── Unit 3 亚非大洋洲/    6篇

文件名含中文/特殊字符——bypy downfile 时保持原路径不变,下载到本地后重命名为英文。

📖 WSET3 课本OCR全本 (44章, 1.2M字, NEW! 🔥)

见 knowledge-base-index.md 完整列表。全部 44 章文件以 wset3-*.md 命名存于 references/ 目录。

🇦🇺 澳洲葡萄酒培训 (23 files, 175KB)

australian-wine-training-complete.md (索引) | 13产区+品种 AWD模块 | 澳洲官方中文课件
2026-07-13: 已整合进 wine_deep_report.py v1.1 — 自动检测澳洲酒 → 添加产区特色/品种知识/评级体系/老藤/螺旋盖信息
结构化知识库: ~/.hermes/knowledge/vinfinity-awd-integration.md

🇦🇺 FusionOCR Australia Dictionary (2026-07-13 新增)

fusion_ocr_australia_dict.py — 407条澳洲葡萄酒术语字典,从35+份AWD培训PPT中提取:
- 92个产区 (65 GI产区+子产区, 英中双语映射)
- 49家酒庄 (Tyrrell's, Penfolds, Best's, Teusner, Henschke, Grosset, Leeuwin等)
- 17种澳洲特色品种 (Shiraz/Mataro/Verdelho/Durif/Assyrtiko/Botrytis Semillon等)
- 136条语音纠错规则 (COONAMARRA→Coonawarra, BAROSA→Barossa, SEMILION→Semillon等)
- 39条澳洲葡萄酒术语 (Langton's分级, James Halliday, 老藤分级, Jimmy Watson奖等)
- 74个标签关键词 (用于OCR标签分区)

自动集成到FusionOCR管线中,在 phonetic_correct / llm_correct / kb_crossref / calibrate 四个环节生效。

🌍 其他

china-wine-tariff-rates.md | producer-database-coverage.md | network-restrictions.md | wine-closures-knowledge.md | german-wine-labels.md | kb-search-api.md — ☁️ 跨Hermes知识库搜索API方案(本会话新增)

📚 团长知识库(2026-07-15 新增 🔥)

200+本葡萄酒专业书籍,存放于百度网盘 /团长知识库/专业书籍/→本地 ~/.hermes/knowledge/团长知识库/。2026-07-15批量消化:37个摘要文件+24MB文字+806MB原始资料。完整索引:INDEX.md。含WSET Diploma教材(Units 3-6中文笔记148PDF)、James Halliday、Jancis Robinson、Clive Coates勃艮第(1884页)、意大利5本书、烈酒清酒13本、餐酒搭配2本。

已下载重点书籍

书名 作者 类型
Daring Pairings Evan Goldstein MW 🍽️ 餐酒搭配(侍酒师大师)
Adventures on the Wine Route Kermit Lynch 📖 葡萄酒文化经典

团长知识库核心资源

  • WSET Diploma教材:D1酿造/D2商业/D4起泡/D5加强
  • James Halliday系列:澳洲葡萄酒指南、百大酒庄
  • Jancis Robinson:Oxford Companion to Wine、Wine Grapes
  • Clive Coates:The Wines of Burgundy(权威勃艮第)
  • Benjamin Lewin MW:多产区指南系列
  • Champagne专业书:8,000款香槟品鉴记录(A Scent of Champagne)
  • 餐酒搭配:Daring Pairings + Food and Wine Pairing
  • 烈酒/清酒:Gin/Rum/Whisky/Sake 专业指南

> 深度报告中引用团长知识库时标注来源:📚 团长知识库

📖 WSET3 课本OCR流水线 🔥

目标: 200页 JPG 扫描 → tesseract OCR → 44章结构化知识库

流程

  1. 下载 — bypy download &#x27;&lt;path&gt;/&#x27; ./ 批量取回全部JPG
  2. OCR — tesseract &lt;img&gt; &lt;basename&gt; -l eng --psm 3(单文件约2-5秒)
  3. 组装 — 按文件名前缀分组(WSET_15_Burgundy* → Burgundy章),合并为单文件
  4. 存储 — references/wset3-&lt;chapter&gt;.md(含页数标注+OCR说明)
  5. 索引 — 更新 knowledge-base-index.md

结果统计

指标 数值
原始JPG 202张(~120MB)
OCR字数 1,212,516 chars
章节目录 44章(从SAT品酒到加强酒)
覆盖产区 法国/德/奥/意/西/葡/美/加/智/阿/澳/新/南非
覆盖主题 品酒/餐酒搭配/储存/葡萄栽培/酿造/法律/全球产区/起泡/加强酒

💡 技巧

  • 先下载再OCR — bypy下载较慢,分批取回后本地批量OCR
  • 批量命令 — for f in *.jpg; do name=&quot;${f%.jpg}&quot;; tesseract &quot;$f&quot; &quot;$name&quot; -l eng --psm 3; done
  • 进度监控 — 每20张输出一次进度,避免超时不确定
  • pymupdf vs tesseract — 对text-based PDF用pymupdf提取(快),对JPG扫描用tesseract OCR(准)

📂 PPT/PPTX/DOCX培训资料处理

  • DOCX — python-docx 提取文字
  • PPTX(新格式) — python-pptx 解析
  • PPT(旧格式) — 需 LibreOffice 转为 PPTX 后再处理
  • 安装 — 用proxy从pypi.org直接安装: pip install --proxy http://127.0.0.1:7890 --index-url https://pypi.org/simple/ --trusted-host pypi.org --break-system-packages python-docx

📰 Decanter 杂志库处理

  • 存储于百度网盘 /葡萄酒杂志 Decanter UK 10-26/(13年/156期)
  • 单期50-200MB,image-based PDF
  • 处理:下载→pymupdf检查可提取文字→提取文字/OCR
  • 示例: Decanter Jan 2024 (108页, 333K字提取)
  • 已处理2025-2021共55期, 提取文字23M+字符

Excel报价表分析(葡睿酒业)

  • 190MB+ Excel → 用 openpyxl read_only=True + data_only=True 逐行读取
  • 结构: 国家分类作为折叠头 → 酒庄简介(含图片公式) → 具体产品行(含价格)
  • 图片公式 =DISPIMG(...) 无法解析,但酒庄描述文本仍有价值
  • 葡睿报价表: 南非4家+澳洲26家酒庄, 完整价格体系从¥20-¥1,688

> ⚠️ 重要: 多个关键脚本(包括 wine_deep_report.py, wine_search_v2.py, wine_validator.py, wine_db.py 等)位于全局 ~/.hermes/scripts/ 而非本技能目录。详见 references/global-scripts-location.md。调用时使用完整路径 python3 ~/.hermes/scripts/&lt;script&gt;.py 或 import 前先 sys.path.insert(0, os.path.expanduser(&#x27;~/.hermes/scripts&#x27;))。

All Scripts

Script Function
burgundy_knowledge.py 🧠 勃艮第知识模块 — 154酒庄+156地块+31特级园, 自动标注GC/Climat, 2026-07-13从115+微信文章自动提取
fusion_ocr.py 🚀 [PRIMARY] FusionOCR v2.4 — 11技术融合+RapidOCR+预处理+腾讯云OCR+多阈值二值化(120/160/200)+反色增强, ~15-30s
fusion_ocr_enhanced.py 🆕 新增引擎(9-11)+预处理管线: RapidOCR/腾讯云OCR/去噪/纠偏/CLAHE
fusion_ocr_australia_dict.py 🇦🇺 澳洲葡萄酒字典 (407条: 92产区+49酒庄+17品种+136语音纠错+39术语, 被fusion_ocr.py自动导入)
wine_search_v2.py 🚀 统一搜索引擎: 语音匹配+DB+KB+多维评分
wine_deep_report.py 🔥 深度档案PDF v1.2 — 扩展覆盖10大产区(含意大利16品种深度集成)。新增3大板块: 酒名含义与品牌故事、酒庄联系与产品线、识别过程与方法论
wine_html_report.py 🆕 暗黑风格HTML报告(可选): 深红+金色配色, 快速档案+酒庄故事+品鉴参考+识别过程, 替代PDF用于微信预览
wine_report_pdf.py 📄 标准报告PDF
pairing_master.py 🍽️ 餐酒搭配大师 v2.0 — 酒体分级+11中餐菜系+14品种+Nebbiolo/Sangiovese

扩展引擎(SkillHub新增,2026-07-15)

  • 🔤 ocr-pro-v2 — OCR加强版(RapidOCR+EasyOCR+TrOCR),FusionOCR不够准时的备用
  • 🍷 wine-info-search — 葡萄酒信息查询/评分/价格搜索
  • 🔍 anysearch — 实时搜索增强
  • 🧠 llm-wiki — 结构化知识库管理
    | wine_ocr_pro.py | 专业级OCR备选 |

Baidu Netdisk Delivery 🔗

当微信发送 PDF 失败时,通过百度网盘(bypy)交付。

# 上传单个PDF
python3 ~/.hermes/scripts/baidu_upload.py /path/to/report.pdf
# 上传全部
python3 ~/.hermes/scripts/baidu_upload.py

用户路径: 百度网盘 → 我的应用数据 → bypy → Vinfinity_Reports/

设置(一次性,已完成):

pip install --proxy http://127.0.0.1:7890 --index-url https://pypi.org/simple/ --trusted-host pypi.org --break-system-packages bypy
bypy info  # 获取授权URL → 用户浏览器打开 → 粘贴授权码

分享链接处理流程(百度网盘分享链接→知识库):
1. 用户提供百度网盘分享链接(含密码)
2. 告知用户先「保存到网盘」到 /apps/bypy/ 路径下
3. 保存成功后,用 bypy list 找到对应文件夹
4. 用 bypy.download() 下载到本地
5. 用 pymupdf 提取文字(text-based PDF)或 OCR(扫描PDF)
6. 结构化保存到 references/ 目录下
7. 更新 knowledge-base-index.md
8. 同步上传到百度网盘 /Vinfinity_Reports/ 备份

⚠️ 注意: bypy 下载报 "hash DOESN'T match" 错误不影响文件可用性——文件仍完整可用,继续提取即可。
⚠️ 分享链接: bypy 不支持直接下载分享链接。需用户先「保存到网盘」,保存到 /apps/bypy/ 后 bypy list 可见。授权码通过用户浏览器打开OAuth URL获取后粘贴。

🟢 PDF文件名规则(2026-07-12定稿)

格式: {酒庄缩写}{年份}_{酒名缩写}_cn.pdf (如 d2022_cc_cn.pdf)
- 酒庄缩写: 取每个实词首字母,跳过 et/de/du/des/la/le/les/aux/domaine/chateau/maison,最多4字母
- 酒名缩写: 同上规则取前3字母,用于区分同酒庄同年份的不同酒款,防止文件覆盖
- 深度档案: d{酒庄缩写}{年份}_{酒名缩写}_deep_cn.pdf
- 示例: d'Ardhuy Corton-Charlemagne 2022 → d2022_cc_cn.pdf / dd2022_cc_deep_cn.pdf
- 示例: d'Ardhuy Ladoix Le Rognet 2022 → d2022_lr_cn.pdf / dd2022_lr_deep_cn.pdf

空格→下划线, 删除重音符号, 仅保留字母数字下划线。防止 WeChat 发送失败。

Pitfalls

  • 🔴🔴 2026-07-15 致命bug: 深度报告用 echo '---END---' 代替pipe档案 → 导致 gen_default_archive() 自动生成内容,可能混入错误信息(案例:智利酒出现阿德莱德)。必须用 cat 故事文件.txt | python3 wine_deep_report.py ...,不能用 echo &#x27;---END---&#x27; | python3 ...!
  • 🔴🔴 2026-07-15 双PDF必须带 --image → Tony哥哥两次批评"没有贴上原图"。wine_report_pdf.py 和 wine_deep_report.py 都支持 --image &lt;原图路径&gt; 参数,必须使用。

  • wine_deep_report.py 缺少 import re: 如果代码重构移除了 import re,gen_deep_report() 中的 re.sub() 会报 NameError。修复:文件顶部添加 import re。

  • 酒款搭配品种匹配(Yquem等贵腐甜酒): 当品种含 semillon 和 sauvignon 时,必须优先匹配 semillon(→甜酒/贵腐搭配:鹅肝/蓝纹奶酪/杨枝甘露),而非 sauvignon(→海鲜搭配)。pairing_master.py 的 GRAPE_MAP 中 semillon 必须在 sauvignon 之前。
  • 餐酒搭配 fallback 嵌套陷阱(2026-07-14 修复): gen_default_archive() 中的餐酒搭配 fallback 代码之前嵌套在 if guide:(即仅当 perfect_pairing 模块返回内容时才执行)。当品种不在书中(如 Grüner Veltliner, Tempranillo)时,get_pairing_guide() 返回 None → if guide: 不通过 → fallback 永远不执行 → 餐酒搭配板块完全缺失。
    修复: 将 fallback 从 if guide: 内部移出,改为独立代码块。pairing_tips 变量在 if guide 内填充(来自书中),if not pairing_tips 在外层处理 fallback(品种通用建议)。任何时候修改餐酒搭配逻辑,必须检查 fallback 是否在 if guide: 内部——它必须独立在外。
  • gen_default_archive() 只覆盖3个产区(2026-07-14 修复): 此函数原先只对勃艮第/波尔多/澳洲3个产区有详细内容,其他产区(奥地利/德国/意大利/西班牙/美国等)的每个板块只生成1行占位文本。修复方向:新增 is_austria/is_germany/is_italy/is_spain/is_usa 检测,为每个产区提供专属数段文字。每次添加新产区时,必须同步扩展以下板块:酒庄背景/酒庄故事/葡萄园背景/酿造风格/酿造哲学/风格与亮点/年份特色/品鉴笔记——缺一不可。

OCR & PDF Pitfalls

FusionOCR v2.0 升级点:
- 速度优化:EasyOCR仅跑1x原图(跳过0.5x和1.5x),无必要跳过zoom扫描,123s→26s(4.7x)
- 花体字纠错库:30+常见OCR误读替换('HA@BCRTIn'→Chambertin, 'QHAMBEDIN'→Chambertin, 'MUCNIEK'→Mugnier等)
- 知识库交叉引用:OCR碎片→自动查DB建议可能酒庄(如读Chambertin+2017→建议Armand Rousseau)
- Monopole关键词检测:读到MONOPOLE→标注独占园
- 顶部缩放策略:Smart zoom on top 25%(仅在1x结果不足时触发,节省30s)
- 字典匹配修复:只返回匹配单词而非整条DB记录(防止年份注入)
- fancy font修正:GHAT→CHAT, CHATGAU→CHATEAU, ROTSCHILD→ROTHSCHILD等
- PDF文件名:标准报告r{timestamp}cn.pdf → 改为{酒庄缩写}{年份}{酒名缩写}_cn.pdf(如ar2017_cgc_cn.pdf)

批量AWD培训资料处理(2026-07-13验证,35+份)\n\n当用户连续发送多份PPTX/PDF资料时:\n1. 自动分类:AWD=葡萄酒培训 → Vinfinity KB;SA/VIC/NSW=产区指南 → Vinfinity KB;Z-Library=期货书籍 → 期货KB\n2. 子Agent并行:delegate_task 每个子Agent处理4-8个文件,约30页/文件\n3. 文件格式:PPTX用 python-pptx;PDF先用 pymupdf 检查文本层\n4. 扫描版OCR: 无文本层→Tesseract(不用EasyOCR,太慢);用 multiprocessing.Pool(4) 并行,150 DPI\n5. 关键修复: 不要用 subprocess.run 的 input= 传字节给 tesseract stdin(会报 AttributeError);用 tmpfile 保存图片再 OCR\n6. 索引更新: 写入 knowledge-base-index.md + 葡睿training-materials.md\n\n### 🍇 品种匹配优先顺序(2026-07-14 更新)

gen_default_archive() 和品鉴笔记中的品种关键词匹配顺序必须如下(由具体到通用),否则会导致误判。此bug在7月13日被用户发现并修复: Cabernet Sauvignon 同时包含 cabernet 和 sauvignon,如果 sauvignon 规则在 cabernet 之前,会导致波尔多红酒被误判为白葡萄酒。

gen_default_archive() 和品鉴笔记中的品种关键词匹配顺序必须如下(由具体到通用),否则会导致误判:

  1. pinot → 黑皮诺(最先检测,防止Pinot被其他规则匹配)
  2. cabernet 或 merlot → 赤霞珠/梅洛(必须在sauvignon之前,防止Cabernet Sauvignon被误判为Sauvignon Blanc)
  3. shiraz 或 syrah → 西拉/设拉子
  4. chardonnay → 霞多丽
  5. sauvignon → 长相思(必须在cabernet之后)
  6. semillon → 赛美蓉
  7. gewur 或 traminer → 琼瑶浆
  8. riesling → 雷司令

已知bug: Cabernet Sauvignon 同时包含 cabernet 和 sauvignon。如果 sauvignon 规则在 cabernet 之前,会导致波尔多红酒被误判为白葡萄酒。此bug已修复。

🍽️ 餐酒搭配集成 (pairing_master.py + perfect_pairing.py)

深度报告自动追加【餐酒搭配】板块,两个代码路径均生效:
1. gen_default_archive() 自动生成时含搭配建议
2. 用户提供存档内容时,主代码在渲染完存档后自动追加

配对流程:
- pairing_master.py 为主模块,含西餐+中餐双系统
- perfect_pairing.py 为备选,从《完美搭配》书中提取
- 先查 GRAPE_MAP → 找不到则备选

GRAPE_MAP 顺序(重要!多次修复):
- pinot → 先检测,防误配
- cabernet → 必须在 sauvignon 之前(防Cabernet Sauvignon→长相思)
- semillon → 必须在 sauvignon 之前(防Yquem贵腐→长相思干白,导致海鲜搭配推荐)
- shiraz/syrah → 再检测
- 其余品种按从具体到通用排列

中餐搭配格式:
- 每个品种配2-3道中国地方菜
- 标注菜系来源:[粤]、[川]、[京]、[浙]、[湘]、[潮]、[西北]、[东北]等
- 包含详细WHY解释(\"为什么赤霞珠配红烧牛腩\"等原理说明)

西餐搭配格式:
- 含食材描述 + 原理说明(如\"西拉的胡椒味与烧烤焦香形成共振\")
- 推荐3道经典菜品
- 标明书籍来源:侍酒师大师 Evan Goldstein《完美搭配》
- 双重匹配:先查 pairing_master.py 的 GRAPE_MAP → 找不到则查 perfect_pairing.py
- GRAPE_MAP 顺序(重要!): semillon 必须在 sauvignon 之前。否则贵腐甜白(Yquem等Sémillon+Sauvignon Blanc混酿)会被误判为长相思干白,导致海鲜搭配推荐。正确→ semillon 匹配甜酒/贵腐搭配(鹅肝、蓝纹奶酪、杨枝甘露🍨)。
- 中餐搭配: 每个品种配2-3道中国地方菜(粤/川/京/浙/湘/潮/西北等)+ 详细WHY解释
- 西餐搭配: 含食材描述 + 为什么这样搭配的原理说明(如"赤霞珠的单宁与红肉脂肪结合使口感更顺滑")
- 输出格式: 含 🥩 西餐搭配 + 🥢 中餐搭配 两个子板块,自动插入深度报告

弱项: 花体字/手写 + 其他已知问题\n- 🇦🇺 澳洲酒检测误判: is_australian_wine() 函数在wine_deep_report.py中必须有排除已知非澳洲产区的逻辑(见non_aus数组)。否则Robertson SA会被误判为澳洲酒并在报告中插入澳洲板块。\n- gen_default_archive() 防空页: 当archive_text为空或<50字符时自动填充8个板块。品鉴笔记按品种自动匹配(琼瑶浆/长相思/霞多丽/西拉/赤霞珠/黑比诺各有专属模板)。\n- 字典匹配防年份污染: dict_fuzzy_match 必须去掉DB字段中的年份(4位数字)再匹配,只返回匹配单词不返回整段字段,过滤常见词避免噪声\n- 慢速瓶颈: EasyOCR首次需~2GB模型加载;普通标~26s, 难标~40s

  • 🐛 gen_default_archive仅覆盖有限产区: 目前只实现了Austria/Germany/Italy/Spain/USA/Chile/Burgundy/Bordeaux/Australia 9个产区的专属内容。其中意大利产区已于2026-07-15大幅扩展:23个产区关键词 + 16个意大利品种(内比奥罗/桑娇维塞/巴贝拉/黑达沃拉/普里米蒂沃/阿里亚尼考/科维纳/卡尔卡耐卡/灰皮诺/多姿桃/阿内斯/维蒙蒂诺/菲亚诺/格莱科/卡诺娜/维纳恰) + 子产区风土细节(托斯卡纳Galestro土壤/皮埃蒙特Tortonian泥灰岩/西西里埃特纳火山岩/威尼托风干法)。详见 references/italy-wine-support.md。
  • 🐛 餐酒搭配 fallback 独立性问题: gen_default_archive() 中的餐酒搭配 fallback 必须独立于 if guide: 代码块外,否则品种不在perfect_pairing书中时板块完全缺失。
  • 🐛 已知bug: 深度档案文件名不含酒款缩写,同酒庄同年份不同酒款会互相覆盖。标准报告用 {酒庄缩写}{年份}_{酒名缩写}_cn.pdf 格式(含酒名后缀),但 wine_deep_report.py 的深度报告用 d{酒庄缩写}{年份}_deep_cn.pdf(无酒名后缀)。当同一酒庄同年份有多款不同酒时,后生成的深度档案覆盖前一个。修复方向:深度报告文件名加入酒名缩写 d{酒庄缩写}{年份}_{酒名缩写}_deep_cn.pdf。

OCR v3 (wine_ocr_v3.py) — 备用引擎

  • 硬依赖检查: EasyOCR (python3.12), pytesseract(可选). 首次运行会下载~2GB模型
  • _run_easyocr_on_image参数顺序: 永远是 _run_easyocr_on_image(reader, img_pil, langs) — reader第一,PIL Image第二。所有策略函数传参时注意 reader 在前
  • 并行策略超时: 默认60s/策略。GPU不可用时CPU耗时约20-30s。6策略并行最多等60s,单个策略超时不阻塞其他策略
  • EasyOCR Reader缓存: 全局缓存 _EASYOCR_READER_CACHE 按语言组合key,避免每次重复加载模型
  • 模糊检测阈值: Laplacian方差<100判定为模糊。如果反复误判,调整 cv2_laplacian 阈值
  • 暗标签检测: mean_brightness < 80 触发 invert 策略。如果深色底金/白字没识别到,检查 is_dark_label 和 gold_text_likely 两个标记
  • 长截图自动分块: 宽高比 h > w * 4 触发。每块1200px高。如果微信截图较小(3000-5000px)也触发了,说明截图方屏+内容高,不影响结果

Search v2 (wine_search_v2.py)

  • 语音匹配阈值: 酒庄名匹配 sweet spot 0.35-0.4;低于0.35的多为噪声误报
  • fuzzy_match 评分规则: 子串匹配(1.0) > 单词级语音(0.9x) > 整体语音(0.8x) > 编辑距离(0.7x) > Jaccard重叠。最终加权取 top-2 平均,长度差异大时降权30%。二次排序按 (-score, len(candidate), edit_distance) 破平
  • Metaphone编码注意: 法语字母 (é/è/ê/ë/ç/œ/æ) 映射到基础字母后编码。ch->S, gn->NY, ill->Y, 尾音h省略
  • OCR乱码测试命令: python3.12 wine_search_v2.py phonetic &quot;Ramanay&quot; &quot;Ramonet&quot; 快速验证匹配度
  • KB搜索限制: 按行搜索,多词查询跨行时不匹配。改进方向:改为段落级上下文搜索
  • DB集成要点: db_search_by_phonetic 对全库所有条目做语音匹配,成本O(n)。65条时~50ms,可接受。当DB增长到200+条时建议加索引

DB (wine_db.py)

  • FTS5虚拟表: CREATE VIRTUAL TABLE wines_fts USING fts5(...)。添加方式:先 DROP 再 CREATE。不要用 CREATE TABLE
  • phonetic_code 列升级: 现有DB升级时用 ALTER TABLE wines ADD COLUMN phonetic_code TEXT,不是 CREATE TABLE
  • 重建FTS5索引: python3.12 wine_db.py rebuild_fts。每次批量导入/更新后都要重建
  • 预计算语音编码: from wine_search_v2 import phonetic_encode -> 合成 winery+name 后编码 -> UPDATE wines SET phonetic_code=? WHERE id=?

Legacy OCR (v1/v2)

  • 花体字->EasyOCR (python3.12) — tesseract不行就上
  • 深色底->倒置OCR — tesseract返回空时尝试 255-arr 倒置+多阈值+4x放大
  • 高置信度优先 — >0.9 必须优先于 <0.5(Pipinot 1.00 > Bicinins 0.28)
  • 字母误读修正 — Common: C->G, M->H, z->l, s->o, HAMBOLLE->CHAMBOLLE, AINT->SAINT
  • 碎片组合解读 — 相邻高置信度碎片尝试组合(D+RDHUY->D'Ardhuy)
  • Shiraz vs Syrah 产地线索 — Shiraz暗示澳洲,Syrah更多加州/法国
  • Cote-Rotie 模式 — Shiraz+Viognier=罗讷经典混酿工艺
  • 微信长截图->分块 — 1200px/块

PDF

  • 文件名无空格/重音 → 微信发送失败。脚本自动创建短ASCII副本(r{timestamp}.pdf/d{timestamp}.pdf)
  • 左对齐防字距异常 — multi_cell 必须 align='L'
  • 每次只发1个PDF — 两份PDF分两条消息发, 等用户确认第一条后再发第二条
  • MEDIA发送失败 → cp到新路径再发 — 微信可能有文件句柄缓存, 新建文件路径解决
  • 用户纠正后必须再生双PDF — 酒庄名/年份/价格等修改后立即(a)更新DB (b)重新生成两份PDF (c)重新发送+备份

WeChat Article Extraction

  • Mobile UA是关键 — Desktop UA返回验证页面;Mobile UA绕过显示层但内容仍在HTML中
  • js_content div提取 — 正则 id=&quot;js_content&quot;[^&gt;]*&gt;(.*?)&lt;/div&gt;\s*&lt;script 比 var msg_title 可靠
  • 验证状态不影响提取 — verify_status=1 的文章仍有完整HTML源码在 js_content 中
  • 保存后更新索引 — 添加新文件到 knowledge-base-index.md
  • 文章链接获取 — 专辑页用 data-link 属性提取文章URL;单文章用 Mobile UA + 代理访问 mp.weixin.qq.com/s/&lt;id&gt;
  • 关键请求头: User-Agent: Mozilla/5.0 (Linux; Android 13) AppleWebKit/537.36 Chrome/120.0.0.0 Mobile Safari/537.36 + Referer: https://mp.weixin.qq.com/
  • 代理: mihomo 127.0.0.1:7890 (HTTP)
  • 百度网盘同步备份 — 与PDF报告一样上传到 /Vinfinity_Reports/

工作流

  • 三步不可合并 — 识别→故事→PDF 分三条消息
  • 双PDF必需 — 每款新酒生成标准+深度两份
  • PDF齐发(短文件名时) — 短纯ASCII文件名下两份MEDIA可一次发送, 均成功送达
  • 分开发(长文件名/特殊字符时) — 文件名超40字符或含è/É/括号等特殊字符时分两条消息
  • 独占园(Monopole)强调 — 大区级独占园比特级园更稀有
  • 大区级≠村庄级陷阱 — 带有地块名的大区级Bourgogne ≠ Hautes-Côtes或村庄级AOC
  • 自信判断 — 不要问"对不对",用户会主动纠正
  • 快速识别格式 — 精简表格5行,5秒内回复
  • 双语品鉴笔记 — 深度档案必须含2-3位酒评家中英双语

Excel大文件处理

  • 190MB+ Excel → 用 openpyxl read_only=True + data_only=True 逐行读取
  • 结构: 国家分类作为折叠头 → 酒庄简介(含图片公式) → 具体产品行(含价格)
  • 图片公式 =DISPIMG(...) 无法解析,但酒庄描述文本仍有价值
  • 用于提取完整价格体系和产品组合分析

常见问题

5 问
答案由本站依据条目字段整理
Vinfinity怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_0e69c095/vin-label-search。安装方式为未标注。装完刷新技能列表或重开客户端。

Vinfinity支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

Vinfinity权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

Vinfinity收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

Vinfinity用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 未标注。