Skip to content

hellowinter2025/zhouli-commentary

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

周礼评议与今译(Zhouli Commentary & Modern Paraphrase)

一个面向 AI 智能体的 Skill:对内置的简体中文古汉语语料做语义检索,生成两种风格的中文写作——

  • 评议模式:以“文言课本译文”的口吻评议现代事件,并自然援引贴切的经籍原句;
  • 翻译模式:把用户的话扩写成“文言课本被认真翻译成现代白话”的规整白话,保留原人称、立场与事实。

“周礼”既是本 Skill 的风格代称,也对应语料中真实收录的《周礼》正文(Kanripo KR1d0001)。

两种模式

模式 触发词 输出
评议模式 评议 / 分析 / 评价 4 段现代白话:重述事件 → 分析处境 → 援引 1–3 句古文并解释 → 收束小道理
翻译模式 翻译 / 改写 / 扩写 保留原人称与立场的扩写白话,古句仅作自然点缀(0–2 句)

两种模式都必须输出现代简体白话,不得写成可以直接冒充古文的句子。

语料

随仓库发布的向量数据库包含 11752 个句子级片段(已转简体、UTF-8 保存):

作品 句子数
《大学》 142
《中庸》 283
《孟子》 2922
《论语》 1419
《诗经》 3689
《周礼》 3297

《大学》《中庸》《孟子》《论语》《诗经》整理自 chinese-poetry;《周礼》正文来自 Kanripo KR1d0001,经 OpenCC 转简体后入库。

输出示例

以下示例均基于真实语义检索结果撰写:先运行 search_classics.py 得到候选原句,再按 Skill 规则生成评议/今译。引文均来自库内原文,不是模型凭记忆补写。可复现检索命令附在各例之后。

示例一:评议模式(公司重组 / 职责重划)

输入

公司重组后,新领导把各部门职责重新划分,并强调制度先行、各守其职;有人觉得只是换了名字,也有人觉得终于有章可循。

检索到的关键句(节选)

作品 出处 原句 score
《周礼》 天官冢宰·大宰 大宰之职,掌建邦之六典,以佐王治邦国:一曰治典,以经邦国,以治官府,以纪万民; 0.751
《周礼》 夏官司马·叙官 政官之属:大司马,卿一人; 0.612
《诗经》 大雅·文王 仪刑文王,万邦作孚。 0.562

输出(评议模式)

公司重组之后,新来的领导把各部门的职责重新划分了一遍,并且明确提出:先把制度立起来,各人守住自己的本职。事情的表面并不复杂,只是重新说清楚谁管什么、按什么规矩去做,以及遇到边界时该往哪里查。

有人觉得,这不过是把旧的名目换了几个新的称呼,桌子还是那些桌子,人还是那些人,所谓重组只是表面上热闹一阵。也有人觉得,以前职责交叉、互相推诿的时候,终于有了可以依循的章法,做事时不必再处处猜对方会不会越界、自己该不该伸手。同一套安排,在不同人眼里,一个像换了招牌,一个像立了规矩。

《周礼·天官冢宰》中说:“大宰之职,掌建邦之六典,以佐王治邦国:一曰治典,以经邦国,以治官府,以纪万民。”意思是说,治理先要建立起纲目与制度,用来整顿官府、约束众人,而不是先忙着换一批好听的名号。书中又记“政官之属:大司马,卿一人”,说的是官属与职任本就应当分列清楚。放到公司里看,新领导所做的,也正是先分清职事、再立下可查的边界;至于有人只看见名称变动,有人看见秩序出现,差别往往在于他是否真的需要那份“可依的法度”。

由此可以看出,重组是否有用,并不取决于名目换得响不响,而取决于分工有没有被说清楚、规矩有没有被真正用起来。有章可循的人,会感到事情终于能按顺序推进;只看见改名的人,则往往还在旧的推诿习惯里打转。制度先行这件事,说到底,是把“各守其职”从口号变成可以核对的日常。

可复现检索

python scripts/search_classics.py `
  --query "公司重组后新领导重划职责并强调制度先行各守其职" `
  --query "设官分职建邦六典以佐王治" `
  --query "职分官属官法纪万民" `
  --top-k 8 --max-per-work 3 --json

示例二:翻译模式(保留第一人称 / 职责边界)

输入

我不是不想帮忙,只是现在职责边界还没划清,我怕越权,也怕最后两边都不讨好。

检索到的关键句(节选)

作品 出处 原句 score
《周礼》 夏官司马·职方氏 王设其牧,制其职,各以其所能,制其贡,各以其所有。 0.821
《论语》 泰伯篇 慎而无礼则葸; 0.569
《论语》 尧曰篇 谨权量,审法度,修废官,四方之政行焉。 0.585

输出(翻译模式)

我并不是不想帮忙。我心里原本是愿意出手的,只是眼下各方的职责边界还没有划清楚。我之所以迟疑,是因为怕自己一旦越过应有的权限,就会把事情办得越出分寸;同时也担心,做完之后两边都不能满意,最后谁的好也讨不着。

这并不是单纯的推脱,而是一种对界限不明的谨慎。事情虽然看似可以插手,其实在职责尚未分明的时候贸然介入,很容易使自己陷入两边为难的处境。

《周礼》里说“制其职,各以其所能”,意思是设立职务要根据各人的能力与分际来安排。这个道理放在这里看,也很合适:职责如果没有先划分明白,行动起来就容易失度,这也正是我现在顾虑的由来。

可复现检索

python scripts/search_classics.py `
  --query "我不是不想帮忙只是职责边界还没划清怕越权也怕两边不讨好" `
  --query "职责边界不明越权谨慎" `
  --query "制其职各以其所能" `
  --top-k 8 --max-per-work 3 --json

示例三:评议模式(无效会议 / 议而不决)

输入

开了三小时会,最后只决定下周再开一次会。

检索到的关键句(节选)

作品 出处 原句 score
《论语》 为政篇 言寡尤,行寡悔,禄在其中矣。 0.703
《孟子》 万章上 不可谏而不谏,可谓不智乎? 0.568
《诗经》 大雅·常武 不留不处,三事就绪。 0.579

输出(评议模式)

这件事的经过并不复杂:众人开了三个小时的会,讨论来讨论去,最后形成的决定,却只是“下周再开一次会”。也就是说,时间花掉了,座位坐热了,真正能够推进的结论却几乎没有留下。

这样的会常常会让人产生一种奇特的疲惫。表面上,每个人都在发言,空气里充满了认真的姿态;实际上,问题只是被原样打包,推到了下一个时间段。于是“开会”本身变成了工作的替代品,好像只要把人聚在一起,事情便已经前进了一寸。可到头来,需要拍板的人还没有拍板,需要动手的人还不知道从何处动手。

《论语》中说:“言寡尤,行寡悔,禄在其中矣。”意思是说话少出差错,做事少留悔恨,这才是稳妥的日常。放到会议里看,若是言说很多、决断很少,便很容易只剩下“尤”与“悔”的材料,而缺少可以执行的结果。《诗经》里写“不留不处,三事就绪”,说的是事情不滞留、不拖延,各项事务才能真正就绪。三小时的讨论若只换来下一次集合的约定,便恰恰与“就绪”相反。

由此可以看出,会议的价值不在于时长,而在于有没有把争议收敛成可执行的一步。会可以再开,但若每一次都只负责制造下一次会,那便不是商量,而是把犹豫制度化了。

可复现检索

python scripts/search_classics.py `
  --query "开了三小时会最后只决定下周再开一次会" `
  --query "议而不决空谈反复开会" `
  --query "言多而行寡" `
  --top-k 8 --max-per-work 3 --json

示例四:评议模式(抢功 / 改头换面)

输入

同事把我做的方案改了两个标题,就当成自己的成果汇报。

检索到的关键句(节选)

作品 出处 原句 score
《孟子》 离娄上 诚身有道:不明乎善,不诚其身矣。 0.592
《孟子》 离娄下 不祥之实,蔽贤者当之。 0.552
《中庸》 中庸 诚者非自成己而已也,所以成物也。 0.554

输出(评议模式)

事情的经过大概是这样:方案本是一个人做成的,后来却被同事改了两个标题,便拿到会上,当作自己的成果来汇报。改动并不大,甚至可能只是措辞上的润色;可经过这一番“轻微加工”,功劳的归属却被悄悄挪了位置。

被改标题的人往往会感到一种说不清的憋闷。若要当场揭穿,似乎又显得小题大做;若要默认,心里又清楚真正费力的部分并不是那两个标题。于是尴尬不在于文字本身,而在于“谁做了什么”这件事被轻轻模糊了。

《孟子》中说:“诚身有道:不明乎善,不诚其身矣。”意思是人要站得住,先得把什么是正当的事情看明白;看不明白,便很难在自身行事上保持诚实。书中又说“不祥之实,蔽贤者当之”,指出遮蔽他人长处、掩没他人功劳,本身就是一种不祥的做法。放到职场里看,改两个标题也许省事,却把“明善”与“不蔽贤”这两条都绕开了。

由此可以看出,真正让人难堪的,往往不是标题写得巧不巧,而是努力被改写成了别人的附件。小改动可以润色文字,却不该顺手改写归属;一件事能否服人,最终还是要回到“谁做成了它”这个最朴素的事实上。

可复现检索

python scripts/search_classics.py `
  --query "同事把我做的方案改了两个标题就当成自己的成果汇报" `
  --query "掠人之美居功不实" `
  --query "取功不诚" `
  --top-k 8 --max-per-work 3 --json

示例五:翻译模式(复习无效 / 考试发慌)

输入

我复习了很多遍,考试还是不会,心里很慌。

检索到的关键句(节选)

作品 出处 原句 score
《论语》 为政篇 子曰:“学而不思则罔,思而不学则殆。 0.761
《论语》 季氏篇 困而不学,民斯为下矣。 0.711
《论语》 学而篇 子曰:“学而时习之,不亦说乎? 0.740

输出(翻译模式)

我并不是没有用功。我把该看的内容复习了很多遍,可是一到考试,题目一换样子,我还是不会做,心里便乱了起来,越想越慌。

我之所以慌,大概不只是因为这一次答不出,而是因为“明明付出过”与“仍然拿不到结果”叠在一起,让人怀疑自己的方法是不是从一开始就偏了。我反复读过,却未必真正想明白;我着急求会,却在关键处仍然转不过弯。

《论语》中说“学而不思则罔”,意思是只学习而不思考,便容易糊涂无所得。这个道理放在我眼下的情形里,似乎正说中了某种难受:我并不是完全没有学,而是学与思没有真正接上,所以一遍一遍过后,心里仍旧不踏实。

可复现检索

python scripts/search_classics.py `
  --query "我复习了很多遍考试还是不会心里很慌" `
  --query "学而时习困而学" `
  --query "困而不学学而不思" `
  --top-k 8 --max-per-work 3 --json

示例六:评议模式(老友渐疏)

输入

老朋友渐渐不联系了,不是吵架,只是各自都忙。

检索到的关键句(节选)

作品 出处 原句 score
《论语》 里仁篇 朋友数,斯疏矣。 0.529
《论语》 学而篇 有朋自远方来,不亦乐乎? 0.628
《诗经》 小雅·车舝 虽无好友? 0.551

输出(评议模式)

这件事并没有戏剧性的决裂。老朋友之间并没有大吵一架,也没有谁说绝交;只是日子一天天过去,消息回得慢了,约见也一次次推后,最后便变成了“都知道彼此还在,却不再常联系”。疏远来自忙碌,而不是来自仇恨,这反而更让人说不清该不该难过。

这样的变化常常带着一点安静的失落。人们以为友谊坏掉时总会有响声,可更多时候,它只是被日程表一点点磨薄。各自都有正经事要做,于是问候变成可选项,共同记忆变成偶尔想起的旧物。没有人有错,却又像谁都欠了谁一点回音。

《论语》中说:“朋友数,斯疏矣。”意思是与朋友交往如果责备过频、纠结过密,反而容易生疏。放到今天看,也可以反过来体会:联系变得稀少时,关系同样会慢慢变薄;“疏”不一定来自争吵,也可能来自长久的不来往。书中又写“有朋自远方来,不亦乐乎”,说明朋友之所以可贵,正在于尚能彼此到达。当到达变成稀罕事,快乐便也跟着稀罕起来。

由此可以看出,有些分别并不需要理由充分,忙碌本身就足够了。真正值得珍惜的,未必是天天说话,而是在各自奔忙之后,仍旧愿意把关系从“还能想起”再往前推进一步,变成“还愿意联系”。

可复现检索

python scripts/search_classics.py `
  --query "老朋友渐渐不联系了不是吵架只是各自都忙" `
  --query "故人疏远各奔东西" `
  --query "旧雨情谊离合" `
  --top-k 8 --max-per-work 3 --json

示例七:仅做语义检索(原始 JSON 片段)

下面是一次真实检索的命令与结果摘要(模型:BAAI/bge-small-zh-v1.5,本地模型目录加载):

python scripts/search_classics.py `
  --query "设官分职" `
  --query "建邦六典" `
  --top-k 3 --json

结果摘要:

rank score work text
1 0.587 周礼 四曰官刑,上能纠职;
2 0.614 周礼 大宰之职,掌建邦之六典,以佐王治邦国:一曰治典,以经邦国,以治官府,以纪万民;
3 0.583 周礼 乃分地职,奠地守,制地贡,而颁职事焉,以为地法,而待政令。

说明:相似度只负责排序候选;最终写进正文的句子,仍须由使用者/智能体判断是否贴切,不可只看分数硬引。

工作原理

  1. 语料经 BAAI/bge-small-zh-v1.5 编码为 512 维向量,存入 SQLite(float32,已归一化);
  2. 检索时把查询向量化,与语料向量做余弦相似度,取最相关原句;
  3. Skill 在写作前运行语义检索,依据 work / chapter 等元数据逐字引用并标注出处,不凭记忆补写。

仓库结构

zhouli-commentary/
├── SKILL.md                    # Skill 指令(模式、流程、质量检查)
├── agents/openai.yaml          # 智能体接口定义
├── scripts/
│   ├── search_classics.py      # 语义检索脚本
│   ├── check_setup.py          # 首次环境检查
│   ├── setup_windows.ps1       # Windows 一键安装依赖/模型
│   ├── warmup_model.py         # 预热 Hugging Face 模型缓存
│   ├── package_model_release.py
│   └── package_model_release.ps1  # 打包 HF 模型为 Release 附件
├── data/
│   ├── normalized_chunks.jsonl     # 归一化后的句子片段
│   └── poetry_embeddings.sqlite    # 预构建的向量数据库(约 47 MB)
├── models/                     # 可选:Release 备份解压目录(不入库)
├── references/
│   ├── corpus.md                   # 语料与检索技术说明
│   ├── style-guide.md              # 文风指南(写作前必读)
│   └── chinese-poetry-LICENSE.txt  # chinese-poetry 许可副本
├── requirements.txt
├── LICENSE
├── .gitignore
└── .gitattributes

安装与运行

首次使用(推荐顺序)

  1. 克隆仓库(已含约 47 MB 向量库,无需再下语料)
  2. 安装 Python 依赖
  3. 准备嵌入模型(Hugging Face 主路径;GitHub Release 备份)
  4. 运行检查脚本,再开始检索

方式 A:Windows 一键准备

在 skill 根目录执行:

powershell -ExecutionPolicy Bypass -File .\scripts\setup_windows.ps1

该脚本会:

  1. pip install -r requirements.txt
  2. 预热 / 下载 BAAI/bge-small-zh-v1.5(优先 Hugging Face;失败则尝试 Release 备份)
  3. 运行 scripts/check_setup.py

可选参数:

  • -SkipModel:只装依赖,不拉模型
  • -PreferReleaseBackup:跳过 HF,直接用 GitHub Release 备份 zip
  • -Python "C:\Path\to\python.exe":指定解释器

方式 B:手动安装

python -m pip install -U pip
python -m pip install -r requirements.txt
python .\scripts\check_setup.py

嵌入模型:主路径与备份

路径 说明
主路径(推荐) 首次运行检索时,自动从 Hugging Face 下载并缓存(约 92 MB)。能访问 GitHub 的环境通常也能访问 Hugging Face。
备份路径 从 GitHub Release 下载 bge-small-zh-v1.5.zip,解压到 models/bge-small-zh-v1.5/(目录内需有 config.json)。

Release 备份直链:

https://github.com/hellowinter2025/zhouli-commentary/releases/latest/download/bge-small-zh-v1.5.zip

手动放置示例:

# 下载 zip 后解压,使下列文件存在:
# models/bge-small-zh-v1.5/config.json
# models/bge-small-zh-v1.5/model.safetensors
# models/bge-small-zh-v1.5/tokenizer.json

说明:模型权重不进 Git 仓库,以免触及 GitHub 单文件 100MB 限制、并保持 clone 体积可控。向量库 data/poetry_embeddings.sqlite(约 47 MB)已随仓库发布。

打印安装说明:

python .\scripts\search_classics.py --print-setup-hint

检索示例

python scripts/search_classics.py `
  --query "用户原文" --query "处境与情绪" --query "可解释此事的道理" `
  --top-k 12 --max-per-work 4 --json

参数说明:

  • --query:可重复使用,一次检索多个语义角度(推荐 2–4 条互补查询)
  • --db:SQLite 数据库路径,默认自动查找或读取环境变量 ZHOU_LI_RAG_DB
  • --model / --model-path:覆盖模型名或指定本地模型目录(通常不必设置)
  • --top-k / --max-per-work:返回总数与各经籍上限
  • --min-score:相似度下限
  • --json:以 UTF-8 JSON 输出(便于程序调用)
  • --print-setup-hint:打印首次安装说明

相关环境变量:

  • ZHOU_LI_RAG_DB:向量库路径
  • ZHOU_LI_EMBED_MODEL_PATH:本地模型目录
  • ZHOU_LI_EMBED_MODEL:Hugging Face 模型 id 或本地路径

在 Codex / 兼容智能体中使用

使用 $zhouli-commentary,以周礼评论或周礼翻译模式处理我接下来提供的文字。

若 Agent 首次检索失败,应先按上文安装依赖并准备模型,再重试;不要在未检索的情况下凭记忆编造引文。

维护者:打包模型 Release 附件

在本机已有 HF 缓存时:

powershell -ExecutionPolicy Bypass -File .\scripts\package_model_release.ps1

默认输出 dist/bge-small-zh-v1.5.zip,上传为 GitHub Release 资产即可作为备份源。

许可证

代码与文档以 MIT License 发布(见 LICENSE)。

  • 四书五经 / 论语 / 诗经语料:见 references/chinese-poetry-LICENSE.txt
  • 《周礼》正文:来源 Kanripo KR1d0001,请遵循其仓库条款

About

Zhouli commentary skill and RAG pipeline

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages