一个面向 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下面是一次真实检索的命令与结果摘要(模型: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 | 周礼 | 乃分地职,奠地守,制地贡,而颁职事焉,以为地法,而待政令。 |
说明:相似度只负责排序候选;最终写进正文的句子,仍须由使用者/智能体判断是否贴切,不可只看分数硬引。
- 语料经
BAAI/bge-small-zh-v1.5编码为 512 维向量,存入 SQLite(float32,已归一化); - 检索时把查询向量化,与语料向量做余弦相似度,取最相关原句;
- 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
- 克隆仓库(已含约 47 MB 向量库,无需再下语料)
- 安装 Python 依赖
- 准备嵌入模型(Hugging Face 主路径;GitHub Release 备份)
- 运行检查脚本,再开始检索
在 skill 根目录执行:
powershell -ExecutionPolicy Bypass -File .\scripts\setup_windows.ps1该脚本会:
pip install -r requirements.txt- 预热 / 下载
BAAI/bge-small-zh-v1.5(优先 Hugging Face;失败则尝试 Release 备份) - 运行
scripts/check_setup.py
可选参数:
-SkipModel:只装依赖,不拉模型-PreferReleaseBackup:跳过 HF,直接用 GitHub Release 备份 zip-Python "C:\Path\to\python.exe":指定解释器
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-hintpython 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 或本地路径
使用 $zhouli-commentary,以周礼评论或周礼翻译模式处理我接下来提供的文字。
若 Agent 首次检索失败,应先按上文安装依赖并准备模型,再重试;不要在未检索的情况下凭记忆编造引文。
在本机已有 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,请遵循其仓库条款