ClassicalCN 分册 · 中文古诗词/古籍的 AI 处理与阅读学习(CPU 服务器部署)¶
版本基线: chinese-poetry(仓库
chinese-poetry/chinese-poetry,原作者 jackeyGao;MIT;唐诗 5.5 万 / 宋诗 26 万 / 宋词 2.1 万首;最近提交 2026-06-17,约 5.2 万 star,低频维护但存活)· 殆知阁修正版daizhige-org/daizhigev20(data 分支,2026-10-12 更新,约 2.89 万文件 / 5.55GB;无统一 LICENSE)· CTEXT 中国哲学书电子化计划 JSON API(api.ctext.org,需 apikey、按用户组限流;内容许可按站点条款,具体版本未核实)· gelv-poetry(MIT,零依赖,平水韵 8000+ 字)· GuwenBERTethanyt/guwenbert-base(Apache-2.0,殆知阁 15,694 部 / 17.4 亿字语料)· OpenCC 1.1.9(PyPI 2024-08-08,Apache-2.0;上游 1.2.0 已发布,发行版打包滞后)· jieba 0.42.1 / HanLP 2.1.1 · Ollama 0.40.14 + qwen3:1.7b/4b(详见 NLP 分册)(核对日期 2026-11-11,来源:官网/GitHub/HuggingFace/PyPI)宿主机约束(必读): Windows Server 2022,2×Xeon Gold 6138(40 核 80 线程)、256GB 内存、F 盘 895G / 剩余 862G。无独立 GPU,纯 CPU 推理。服务以 Docker 容器优先部署,产物只存
F:\EricLiu\下;模型权重统一放F:\EricLiu\labs\models\。业务目标: ① 古典语料的本地化归集与可检索化;② 用本地 LLM(Ollama/Dify,见 NLP 分册)搭"诗词问答 + 古籍阅读助手";③ 输出可校验的格律/断句/翻译辅助,服务于阅读学习与教学内容生产。
1. 选型对比¶
1.1 语料/数据集¶
| 类型 | 名称 | 规模 | 许可证 | 获取方式 | 维护状态 | 适用范围 | 限制 |
|---|---|---|---|---|---|---|---|
| 诗词全集 | chinese-poetry(chinese-poetry/chinese-poetry) |
唐诗 ≈5.5 万首(诗人≈1.4 万)、宋诗 ≈26 万首、宋词 ≈2.1 万首(词人 1,564),另含诗经/楚辞/论语/四书五经/蒙学/元曲/五代/纳兰/幽梦影;JSON 约 2,246 个文件 | MIT(2017-06 加入 LICENSE) | git clone(浅克隆即可) |
低频但存活:最近提交 2026-06-17(633 commits);PR 仍在合入 | 诗词问答、飞花令、检索、RAG 底料、教学素材 | ① 数据源自互联网采集,未逐字校对;② 全唐诗为繁体、宋词为简体,混用会掉召回;③ 宋词记录无 id/title,跨库合并需自建主键 |
| 古籍全文 | 殆知阁(修正版 daizhige-org/daizhigev20) |
修正版口径约 2.89 万文件 / 5.55GB(另一口径 1.96 万部 / 5044MB),十藏分类(易儒道佛子史诗集医艺) | ⚠️ 无统一 LICENSE;文本多为公有领域,但整理/校勘内容权利未明;部分模块(如 CBDB)标 CC BY-NC-SA 4.0 | git clone --branch data --depth 1(不拉历史) |
修正版活跃(2026-10-12 更新);原始仓库 garychowcmu/daizhigev20 2020-01-20 停更 |
扩展语料、RAG 底料、古文 NLP 训练(如 GuwenBERT 即用它训练) | 已知繁简转换错、论坛残留、HTML/脚本残留;引用前必须回原文校对;再分发/商用需逐条确认权利 |
| 权威原典 | CTEXT(中国哲学书电子化计划)JSON API | 覆盖经史子集 + 出土文献,URN 定位到篇章 | 内容许可按站点条款(具体 CC 版本未核实);API 免费但需 apikey | https://api.ctext.org/gettext?urn=ctp:analects/xue-er&if=zh;Python 客户端 ctext |
站点长期在线、稳定 | 需要权威原文/异文对照时按需取;校对基准 | ① 明确不是批量下载通道,按用户组限流(未登录/登录/机构订阅三档);② 断网即不可用,不适合做离线主库 |
| 校勘参照 | 维基文库(Wikisource 中文) | 按书分页 | 站点条款(CC BY-SA 体系,未逐页核实) | 网页/API | 社区维护 | 与 chinese-poetry/殆知阁互校 | 版本混杂、无统一质量保证 |
| 商业库 | 中华经典古籍库 / 籍合网等 | 精校点校本 | 商业授权 | 订阅 | 商业 | 出版级引用 | 回避:授权成本与条款限制,本项目不做 |
⚠️ 规模数字随快照浮动(star 数、文件数、字数各口径不一),引用时注明"截至某日快照"。公开可下载 ≠ 可商用,殆知阁尤其如此。
1.2 工具链(分词 / 格律 / 文言 NLP)¶
| 类型 | 项目 | 版本/规模 | 许可证 | CPU 可行性 | 适用范围 | 限制 |
|---|---|---|---|---|---|---|
| 分词 | jieba | 0.42.1(原版,2020 后无更新);活跃分支 jieba-py 0.46.12 | MIT | ✅ 极佳,十万字/秒级 | 现代汉语分词、关键词;(古文效果一般) | 词表是现代汉语,古文虚词/人名易切碎;诗句检索不要依赖分词 |
| 分词/NER/句法 | HanLP | 2.1.1 | Apache-2.0 | ✅ 中小模型 CPU 可跑 | 需要词性/NER/依存的中文产线 | 古文领域模型缺失,古文 NER 用 GuwenBERT 系更合适 |
| 格律校验 | gelv-poetry | 无 release 号(git 主干),纯 Python 3.8+ 标准库 | MIT | ✅ 零依赖、毫秒级 | 五绝/五律/七绝/七律:平仄贴谱、押韵、粘对、孤平、三平尾、对仗、重字;查字/取谱/找韵脚 | 多音字与生僻字在强制位放行,✓ 仅表示"未查出硬伤";跨句拗救可能误报;判不了语义对仗 |
| 格律校验(GUI/词) | couyun 诗词格律校验工具 | 无 release 号 | 未核实(仓库未见明确 LICENSE) | ✅ Python + GUI | 诗校验 + 词校验(钦定词谱/龙榆生词谱)+ 查字(平水/词林正韵/中华新韵/中华通韵) | 桌面 GUI 形态,不适合服务化;许可未明,仅内部试用 |
| 格律校验(API/CLI) | fangcun | v2.2.1 | 未核实 | ✅ Flask :5050 | 格律校验 + 2500+ 词牌 + 韵部查询 + 6 个 HTTP 端点(供 AI Agent 调用)+ CLI + Android 离线 | 个人项目、单点维护;许可未核实 |
| 文言预训练 | GuwenBERT(ethanyt/guwenbert-base / -large) |
base 12 层/768 隐/12 头;语料 15,694 部 / 17.4 亿字 | Apache-2.0 | ✅ base 版 CPU 推理毫秒~百毫秒级/句 | 断句、标点、NER、古文语义(作为下游底座) | 语料已统一转简体,繁体输入需先转换;2020–2022 年后无新版本 |
| 文言下游 | guwen-models 合集(AbitCd/guwen-models) |
断句 guwen-seg / 标点 guwen-punc / 引号 / NER / 分类 / 情感 | 随各模型(未逐一核实) | ✅ 均为中小 BERT 系 | 直接可用的古文处理任务 | 官方提示:用 Transformers 序列标注有误差,实战建议接 CRF 解码 |
| 繁体古籍预训练 | sikubert / sikuroberta / sikuGPT2 | 基于四库全书语料 | 未核实 | ✅ CPU 可跑 | 繁体古籍(不需繁简转换) | 许可与下载渠道需自查 |
| 文言→白话 | wenyanwen-ancient-translate-to-modern(raynardj) | 训练语料约 90 万句对(BangBOOM/Classical-Chinese) | 未核实(HF 模型卡需自查) | ✅ 小模型 CPU 可跑 | 阅读辅助:逐句今译 | 质量有限,长句/典故易错;必须标注"机译,供参考" |
| 古籍 OCR | PaddleOCR 3.7 + PP-OCRv6 / 繁体 chinese_cht 识别模型 |
见 OCR 分册 | Apache-2.0 | ✅ 见 OCR 分册耗时 | 扫描件/影印本 → 文本(竖排需自写列排序) | 见 OCR 分册;异体字无模型能包办,需映射表或微调 |
| 古籍 OCR(VLM) | AnandaSky | 626M(ViT + Qwen3-0.6B 解码器),4 百万行图像训练,行级 CER 0.33%–4.89% | CC BY-NC 4.0(非商用) | ❌ 硬依赖 FlashAttention + NVIDIA Ampere 及以上 GPU | 研究级行级转写(四部丛刊/敦煌写本/清代文书) | 本机不可用(无 GPU);且非商用 |
1.3 应用层(问答 / RAG / 生成)¶
| 方案 | 形态 | 许可证 | 本机可行性 | 适用范围 | 限制 |
|---|---|---|---|---|---|
| Ollama + qwen3:1.7b/4b | 本地 LLM 运行时(OpenAI 兼容 /v1) |
MIT(Ollama) | ✅ 1.7B ≈10~25 tok/s;4B ≈5~15 tok/s(见 NLP 分册) | 诗词讲解、典故问答、译文润色、RAG 生成端 | 小模型记不准原文/平仄/异体字,必须外接语料检索与格律脚本 |
| Dify / RAGFlow | 知识库 + 工作流编排 | 见 NLP 分册 | ✅ CPU 可跑(Dify 全套 4~8GB 内存) | 建"古籍阅读助手"(分卷检索 + 引用出处) | chunk 策略对召回影响极大(诗句短,见 §3.1) |
| bge-m3(Ollama 拉取) | embedding / rerank | MIT | ✅ 1.2GB | 混合检索 | 古文语义弱于现代文,纯向量召回不稳定,需关键词兜底 |
| 九歌(THUNLP) | 诗歌生成系统(80~90 万首诗训练) | 站点为在线服务;GitHub THUNLP-AIPoet 下有 Datasets / BERT-CCPoem / MixPoet / WMPoetry 等,2019 开源,README 注明 resources 仅限学术用途;Resources 仓库标 MIT 但同样写 academic use only |
⚠️ 学术用途;模型多为 2018–2022 年,未适配当前栈 | 研究、教学演示 | 不作生产依赖:许可限学术、代码久未维护;商用需另行确认 |
| 通用 LLM 微调(LoRA)做诗 | 自建 | 取决于底模 | ❌ 本机无 GPU,训练不现实 | — | 回避:CPU 训练不具可行性;生成需求改用"通用 LLM 起草 + gelv-poetry 校验" |
| 格律脚本 + LLM 分工(推荐) | LLM 出意象/谋篇 → check.py 挑错 → 改 → 复查 |
MIT(gelv-poetry) | ✅ 全 CPU | 教学写作、内容生产 | 脚本只判格律不判意境;最终仍需人工把关 |
限制与回避(选型前先看这条): - 回避 AnandaSky:CC BY-NC 4.0 + 硬依赖 FlashAttention/Ampere GPU,本机纯 CPU 跑不起来;古籍 OCR 走 PaddleOCR + 竖排列排序自写(见 OCR 分册)。 - 回避殆知阁整库商用/再分发:无统一 LICENSE,含整理与校勘内容,权利未清;仅作内部研究语料,引用必须回原文校对。 - 回避 CTEXT 批量抓取:官方明确 API 目标是扩展 CText 功能而非"下载大量资料",按用户组限流;做批量语料会触发限制并违反使用条件。 - 回避"让 LLM 直接背诗/判平仄":小模型对入声字(国/白/一/独/节/竹)几乎必错,平仄判定必须查表(平水韵),名句必须回语料核对。 - 回避用分词结果做诗句检索:jieba 词表是现代汉语,会把"白日依山尽"切碎;诗句检索用字级 n-gram / 全文索引。 - 回避九歌开源模型直接进生产:学术用途声明 + 2019–2022 年代码,无维护。
推荐结论(本机纯 CPU): - 首选 = chinese-poetry(MIT)作语料底座 + jieba/HanLP 做现代文处理 + gelv-poetry(MIT)做格律校验 + Ollama(qwen3:1.7b/4b) 做问答生成。理由:许可干净、体量够(37 万+ 首)、全 CPU 毫秒~秒级、可完全离线。 - 增强首选 = GuwenBERT(Apache-2.0)做断句/标点/NER,为 RAG 预处理与"无标点古籍"阅读场景服务;繁体场景先 OpenCC 归一或改用 sikubert(许可待核实)。 - 选配 = CTEXT API(按需取权威原文做校对基准)/ 殆知阁 data 分支(内部研究扩展语料,禁商用)/ fangcun 的 HTTP 端点(需要词牌校验时试用,许可待核实)/ Dify 建知识库。 - 回避 = AnandaSky(GPU+非商用)、殆知阁商用再分发、CTEXT 批量抓取、九歌开源模型生产化、CPU 上微调 LLM。
2. 语料获取与导入¶
2.1 目录约定(硬约束)¶
F:\EricLiu\labs\corpus\classical\ # 语料落盘根(不入 git)
chinese-poetry\ # git clone 的仓库
daizhige\ # 殆知阁 data 分支快照
ctext-cache\ # CTEXT API 响应缓存(按 URN 存 JSON)
normalized\ # 归一化产物(简体/去噪/统一标点)
F:\EricLiu\labs\models\classical\ # GuwenBERT / 翻译模型 / 古文 NER 权重
F:\EricLiu\labs\data\classical\ # SQLite / 索引文件
F:\EricLiu\outputs\classicalcn\ # 检索结果、导出、评测报告
F:\EricLiu\labs\docker\classicalcn\ # compose 与脚本
磁盘预算:chinese-poetry 浅克隆约百 MB 级;殆知阁 data 分支约 2~5.5GB;模型(GuwenBERT base ≈400MB、翻译模型 ≈1GB 级)另计。所有下载前先 df -h /f 核对余量。
2.2 chinese-poetry 获取¶
mkdir -p /f/EricLiu/labs/corpus/classical
cd /f/EricLiu/labs/corpus/classical
git clone --depth 1 https://github.com/chinese-poetry/chinese-poetry.git
要点:
- 目录为中文目录名(2023-04 起从 json/ 迁到 全唐诗/、宋词/、诗经/…),网上 2023 年前的教程路径已失效。
- 排除 rank/、strains/ 两个派生目录(词牌排行/字频统计),它们不是原始语料。
- JSON 结构(注意字段不统一):
// 全唐诗/poet.tang.0.json —— 繁体,有 id
{"author": "太宗皇帝", "title": "帝京篇十首 一",
"paragraphs": ["秦川雄帝宅,函谷壯皇居。"], "id": "3ad6d468-..."}
// 宋词/ci.song.0.json —— 简体,无 id/title,用词牌
{"author": "苏轼", "rhythmic": "水调歌头", "paragraphs": ["明月几时有,把酒问青天。"]}
2.3 殆知阁(仅内部研究)¶
cd /f/EricLiu/labs/corpus/classical
git clone --branch data --depth 1 https://github.com/daizhige-org/daizhigev20.git daizhige
--depth 1只取快照、不拉历史(否则仓库极大)。- 修正版已把旧 TXT 转 Markdown + 文件头元数据,但繁简混杂(README 说全简体,更新日志承认部分史书保留繁体),入库必须做繁简归一。
- 无统一 LICENSE → 在库内 README 与 API 元数据中标注"研究用途、来源殆知阁、未获商用授权"。
2.4 CTEXT 按需取(不要批量)¶
# 取一篇原典正文(URN 见站点 URL,如 ctp:analects/xue-er)
curl "https://api.ctext.org/gettext?if=zh&urn=ctp:analects/xue-er&apikey=$CTEXT_KEY"
# 取文献元数据 / 顶层书目
curl "https://api.ctext.org/gettextinfo?if=zh&urn=ctp:analects/xue-er&apikey=$CTEXT_KEY"
curl "https://api.ctext.org/gettexttitles?if=zh&apikey=$CTEXT_KEY"
守则:① apikey 只放环境变量(不写文档/仓库);② 请求结果落 ctext-cache/<urn 转义>.json,同 URN 不重复请求;③ 加 1~2 秒间隔,遇 ERR_REQUIRES_AUTHENTICATION 即停(说明触发配额),不换 IP 绕过;④ 仅作校对基准,不做全库镜像。
2.5 归一化与入库(SQLite FTS5 最小可用)¶
# normalize.py —— opencc 繁转简 + 标点统一 + 去空白;原文另列保留
import json, sqlite3, glob, re, os
from opencc import OpenCC
cc = OpenCC("t2s") # 繁→简;展示层需要台港用词时用 t2s 的短语库版本另配
db = sqlite3.connect(r"F:\EricLiu\labs\data\classical\poetry.db")
db.execute("PRAGMA journal_mode=WAL")
db.execute("""CREATE TABLE IF NOT EXISTS poem(
id TEXT PRIMARY KEY, source TEXT, dynasty TEXT, author TEXT, title TEXT,
body_raw TEXT, body_sim TEXT, nchar INT)""")
db.execute("CREATE VIRTUAL TABLE IF NOT EXISTS poem_fts USING fts5("
"title, author, body_sim, content='poem', content_rowid='rowid', "
"tokenize='trigram')") # trigram:中文无需分词,短句召回稳
def clean(s: str) -> str:
s = cc.convert(s)
s = re.sub(r"[ \t\u3000]+", "", s)
return s.replace(",", ",").replace(".", "。").replace("?", "?").replace("!", "!")
rows = []
for f in glob.glob(r"F:\EricLiu\labs\corpus\classical\chinese-poetry\全唐诗\poet.tang.*.json"):
for p in json.load(open(f, encoding="utf-8")):
body = "\n".join(p["paragraphs"])
rows.append((p["id"], "chinese-poetry/全唐诗", "唐", p["author"], p["title"],
body, clean(body), len(body)))
for f in glob.glob(r"F:\EricLiu\labs\corpus\classical\chinese-poetry\宋词\ci.song.*.json"):
for i, p in enumerate(json.load(open(f, encoding="utf-8"))):
body = "\n".join(p["paragraphs"])
rows.append((f"ci-{os.path.basename(f)}-{i}", "chinese-poetry/宋词", "宋",
p["author"], p.get("rhythmic", ""), body, clean(body), len(body)))
db.executemany("INSERT OR REPLACE INTO poem VALUES(?,?,?,?,?,?,?,?)", rows)
db.execute("INSERT INTO poem_fts(poem_fts) VALUES('rebuild')")
db.commit()
print("rows:", len(rows))
检索(字级、不依赖分词):
cur = db.execute("""SELECT author, title, body_sim FROM poem_fts
JOIN poem ON poem.rowid = poem_fts.rowid
WHERE poem_fts MATCH ? LIMIT 10""", ('"明月几时有"',))
trigram分词器要求 SQLite ≥ 3.34(Python 3.11 自带版本满足)。若用 MySQL/PostgreSQL 替代,中文需ngram/pg_trgm,效果同理。
3. AI 应用实验路径¶
3.1 诗词问答(RAG,接 NLP 分册)¶
链路:问题 → 关键词/向量检索(SQLite FTS5 + bge-m3 混合)→ 命中诗句 + 出处 → qwen3 生成回答 → 引用校验。
Dify 侧要点(细节见 NLP 分册 §4):
- chunk 策略:按"一首 = 一 chunk"(平均 40~80 字),不要按 500 token 切——会把一首诗切两半,出处也丢。诗题 + 作者拼进 chunk 头(《春望》杜甫:),提升召回。
- 检索:混合检索 + Rerank,Top-K 放 5~10(诗句短,K 太小易漏),Score 阈值 0.4 起调。
- 提示词约束(必须写进 system prompt):
你是古籍阅读助手。规则:
1. 只依据【检索到的原文】回答;检索不到就答"语料库中未收录,无法确认"。
2. 引用诗句必须原样抄录,并给出作者、篇名、语料 id。
3. 不得改写、补字、合并不同诗作;不得推断作者存疑的作品。
4. 涉及平仄/押韵时,声明"需用格律工具校验",不凭记忆判定。
- 回答后校验:把回答里的引文抽出,回
poem表精确匹配;匹配不到 → 标记"⚠️ 未在语料中检出,请人工核对"(§5 守则第 3 条)。
3.2 格律检查(生成侧唯一可信环节)¶
git clone https://github.com/chenmisss/gelv-poetry.git /f/EricLiu/labs/tools/gelv-poetry
cd /f/EricLiu/labs/tools/gelv-poetry/scripts
python check.py check "白日依山尽,黄河入海流。欲穷千里目,更上一层楼。"
python check.py tone 国白一独 # 查平仄+韵部,标注入声
python check.py yun 十一尤 # 找韵脚备选字
输出解读:✓=未查出硬伤(不等于全对);●=平仄错;←韵=押韵位;结论行给韵部。已知局限(多音字放行、跨句拗救误报、语义对仗判不了)写在仓库 NOTES.md。
生产化建议:把 check.py 包成 HTTP 端点(FastAPI,127.0.0.1:8120),供 Dify 工作流或前端调用;返回结构固定为 {ok, lines:[{text, tone, expect, mark}], rhyme, issues[]},便于程序消费。
3.3 断句 / 标点 / 古文 NER(GuwenBERT)¶
# pip install torch --index-url https://download.pytorch.org/whl/cpu
# pip install transformers==4.*(版本随 HF 生态,按需 pin)
import os
os.environ["HF_HOME"] = r"F:\EricLiu\labs\models\classical\hf" # 权重只落 F 盘
from transformers import AutoTokenizer, AutoModelForTokenClassification, pipeline
tok = AutoTokenizer.from_pretrained("ethanyt/guwenbert-base")
# 下游任务权重(断句/标点/NER)见 guwen-models 合集,按任务替换模型名
ner = pipeline("token-classification", model="ethanyt/guwenbert-base",
tokenizer=tok, aggregation_strategy="simple", device=-1) # -1 = CPU
print(ner("庆历四年春,滕子京谪守巴陵郡。"))
注意:官方建议序列标注接 CRF 解码 才能达到论文水平;transformers 原生 softmax 解码会有边界抖动。CPU 上 base 版单句毫秒~百毫秒级,整本 10 万字级约分钟级(后台跑)。
3.4 文言 → 白话(辅助今译)¶
用 raynardj/wenyanwen-ancient-translate-to-modern(约 90 万句对训练)逐句翻译,只作阅读辅助:
from transformers import pipeline
tr = pipeline("text2text-generation",
model="raynardj/wenyanwen-ancient-translate-to-modern", device=-1)
print(tr("此诚危急存亡之秋也", max_length=128)[0]["generated_text"])
工程要点:① 按句(。!?;)切分再译,整段喂会串行丢句;② 输出必须带"机译,供参考"水印;③ 典故/官职/地名专名易错,教学场景要求对照注释本;④ 该模型许可未核实,商用前查 HF 模型卡。
3.5 诗词生成(合规路径)¶
推荐组合(不用微调):
1. LLM 起草:给 qwen3:4b 明确"五律/七绝 + 主题 + 韵部 + 意象",要求输出纯文本四/八句;
2. check.py check 校验,把 issues 回灌给 LLM 重写(最多 3 轮);
3. 人工定稿,标注"AI 辅助创作"。
不要做:拿 chinese-poetry 在 CPU 上从头训练/微调生成模型(无 GPU,周期不可控,且质量难超通用 LLM + 校验)。若未来上 GPU,再看 九歌/BERT-CCPoem 系(学术用途)或自建 LoRA。
3.6 评测(换模型/改 prompt 必跑)¶
| 指标 | 方法 | 基线要求 |
|---|---|---|
| 检索命中率 | 50 条人工问题(含作者/篇名/名句三类),看 Top-5 是否含正确诗 | ≥85% |
| 引文准确率 | 回答中引文与语料精确匹配比例(逐字,含标点归一) | 100%,不达标即上线阻断 |
| 幻觉率 | 抽取回答中"语料未收录"的作者/篇名/诗句数 / 总引用数 | ≤2%,且必须全部带警示标 |
| 格律判定一致率 | 与人工判定 50 首对照(含入声字陷阱) | ≥95% |
| 端到端延迟 | 单问 RAG + 生成(qwen3:1.7b) | ≤15 秒(CPU 可接受) |
4. 排障¶
| 症状 | 原因 | 处置 |
|---|---|---|
读文件报 UnicodeDecodeError: 'gbk' |
Windows 默认 locale 是 GBK,脚本未指定编码 |
所有 open() 加 encoding="utf-8";环境变量 PYTHONUTF8=1;控制台 chcp 65001 后再跑(只影响显示,不改文件) |
| 输出到终端是乱码 | 控制台代码页与 UTF-8 不符 | chcp 65001;或重定向到文件 > out.txt 再用编辑器看;不要把 GBK 文件当 UTF-8 读 |
| 繁体诗检索不到简体关键词 | 语料繁简混排(全唐诗繁体/宋词简体/殆知阁混杂) | 入库时 body_sim 走 OpenCC t2s,body_raw 保留原文;检索与展示分离;只对索引列归一 |
| OpenCC 把"皇后"转成"皇後"之类 | t2s/s2t 有一简对多繁、多义短语问题 |
用短语级配置(s2twp/t2s 自带词库),对高频错例建白名单修正表(fixes.tsv:错误→正确),入库后统一过一遍 |
| 生僻字/扩展 B 区字显示成方块或存库失败 | 字体缺字;MySQL utf8 只有 3 字节 |
数据库一律 utf8mb4;前端用思源宋体/花园明朝等覆盖扩展区的字体;导出 PDF 前做缺字检查 |
| 诗句被切碎、搜"春风"搜不到 | 用 jieba 分词建索引 | 改用字级索引(SQLite FTS5 trigram、MySQL ngram、ES ik_max_word 之外配 ngram);古文检索不需要分词 |
| chinese-poetry 目录名不对/路径 404 | 2023-04 起目录改中文名,旧教程路径失效 | 以仓库当前目录为准(全唐诗/、宋词/ 等),代码里用 glob 而非硬编码 |
CTEXT 返回 ERR_REQUIRES_AUTHENTICATION / ERR_INVALID_APIKEY |
未带 apikey、key 失效、或触发配额 | 检查 key 与 URN;停止重试、改从缓存/本地语料取;不要换 IP 绕限流 |
| RAG 召不回正确诗 | chunk 过大/过小、纯向量检索对古文弱 | 一诗一 chunk + 题名作者入 chunk 头;混合检索 + Rerank;Top-K 加大到 10;加作者/朝代元数据过滤 |
| 模型答"《静夜思》作者李白,作于长安"但细节错 | 小模型常识幻觉 | 提示词强制"只用检索原文";回答中每个断言附语料 id;引文回表校验(§3.1) |
| Ollama 回答被截断/忘记前文 | 默认 num_ctx 小(2K/4K),长文档塞不进去 |
请求里显式设 num_ctx(如 8192);长文按章分次提问;不要一次喂整本 |
| 殆知阁数据出现"记忆体/香港脚/利瓦伊" | 原数据集繁简转换错误(社区已公开承认) | 不做字面直引;引用前回影印本/点校本;内部建"已知错例表"过滤 |
5. AI 操作守则¶
- 落盘硬约束:语料只放
F:\EricLiu\labs\corpus\classical\,模型只放F:\EricLiu\labs\models\classical\,产物只写F:\EricLiu\outputs\classicalcn\;禁止写 C 盘用户目录与容器内临时路径。 - 下载前先报体积:clone/下载前
df -h /f核对余量;>10GB 或整库操作必须先向用户确认(殆知阁全量、模型合集属此类)。 - 版权与出处标注(硬性):所有引用必须给"作者 / 篇名 / 语料来源 / 语料 id",缺一不可;殆知阁、维基文库内容标注来源与"未获商用授权";不得把开源语料包装成自有版权内容再分发;CTEXT 内容遵守站点条款,不批量镜像。
- 幻觉零容忍(古诗文名句必须校对原文):凡输出诗文,逐字回语料库匹配(标点归一后比较);匹配失败必须显式标注"未在语料中检出,请核对原文",禁止"看起来像"就写。常见坑:张冠李戴(把宋词当唐诗)、改字("床前明月光"改成"窗前")、续写伪作、给出不存在的篇名。
- 平仄/押韵只信查表:入声字(国/白/一/独/节/竹/石/发)在普通话里是平声但平水韵是仄,任何模型凭语感判都会错;判定统一走 gelv-poetry,结论附"工具+韵书版本"。
- 机译必须标识:文言→白话输出统一加"(机译,供参考)"前缀;教学/出版场景必须对照权威注本。
- 许可核查:商用前逐项核对——chinese-poetry(MIT,可商用)/ GuwenBERT(Apache-2.0,可商用)/ gelv-poetry(MIT)/ 殆知阁(无统一许可,禁商用再分发) / AnandaSky(CC BY-NC,禁商用) / 九歌系(学术用途);不确定的标"许可待确认",不得默认可用。
- 不代调用、不绕过限制:CTEXT 等外部 API 只给代码示例,实际调用与配额消耗由用户决定;遇限流即停,禁止换 IP/多 key 绕过。
- 长任务后台跑:整库归一化、全量索引重建、整本断句/NER 均为分钟~小时级,放后台并轮询进度,不阻塞交互;开始前告知预估耗时。
- 版本回查:本文基线为 2026-11-11 核对;安装/升级前回查 GitHub Releases 与 HF 模型卡,特别是标注"未核实"的许可项(couyun / fangcun / sikubert / 文言翻译模型 / 九歌)。
6. 与其它分册的接口¶
| 需求 | 去哪本 |
|---|---|
| 分词/HanLP/Ollama/Dify/RAGFlow 安装与参数 | AppDocs\NLP\README.md |
| 扫描件、影印本、竖排繁体 OCR | AppDocs\OCR\README.md(PaddleOCR + 自写列排序) |
| 诗词朗读/古文有声书(TTS) | AppDocs\TTS\README.md |
| 国风插画、诗词配图 | AppDocs\ArtGen\README.md |
| 青少年编程教学(诗词小工具) | AppDocs\YouthCoding\README.md(待建:Scratch/Python 调本地服务) |