南山问律 · 逻辑流程图

A / B / C / D 2026-09-13

一个白话问题进来,经过四步,出去时是一条每句都能翻回纸本某页某行的答案。 这一页把四步拆开摆出来,请诸位挑毛病。

大模型做的 我们写的代码 CBETA 原典 虚框=还没做
读者打一句白话:「什么情况下会被赶出僧团?」
A
选词 把白话问题变成「该查哪几个文言词」 大模型
A1
判断这问题属于哪一类:戒相/戒体/羯磨/僧制/史传/超范围
A2
把白话换成律文里真正出现的那几个字,给 2–5 个
A2-1
「赶出僧团」→ 灭摈 不共住 波罗夷 摈出
A2-2
避开在律典里出现几千次的通用词(比丘、僧、佛、戒、律)—— 它们命中的段落多到排不出重点,等于白查
A2-3
问罪名轻重时,罪名要写精确:波罗夷/僧残/偷兰遮/波逸提/提舍尼/突吉罗
这一步是整条链路的命门。读者打的是今天的话,律文写的是唐以前的话—— 问「拿钱」,律文写的是「捉持生像金银」;问「赶出僧团」,律文写的是「不共住」。 这不是同义词问题,是词汇断层,选错词后面全白搭。 ⚠️ 也是最安静的失败:选错了不会报错,只会返回一堆沾边但不对题的段落, 答案照样写得通顺。
A′
线索 用我们自己整理的资料,判断「该去原典的哪一段找」 接口已留 · 表在做 我们的代码
A′1
把《南山律一千问》等自有资料里的「白话问题 → 引了哪几处律典」抽成一张两列的表
A′2
读者一问,命中这张表,就直接知道该去哪几段找,补上 A 步可能漏掉的
⛔ 这一层只出坐标,不出原文。那批资料有版权,正文一个字都不进网站、 也不进大模型的上下文。抽完表之后,那批书可以整个从线上撤走。 已完成:64 个 doc/docx 全部转成可解析格式,从中定位到 2011 条白话问答、 30,597 处「某册某页某栏」的引证。尚未完成:把册页栏换算成 CBETA 坐标、人工审校。
B
检索 在律典原文里按词召回段落 我们的代码
B1
BM25 关键词精确匹配,不用向量语义检索
B1-1
为什么不用向量:五篇七聚(波罗夷/僧残/偷兰遮/波逸提/提舍尼/突吉罗) 是罪的轻重等级,向量会把它们拉得极近。在戒律里把重罪和轻罪搞混,是最不能犯的错。
B2
繁简归一:原文是繁體(「刪繁補闕行事鈔」),读者打简体。 索引里存简体 + 逐字双字组;展示仍用繁體原样——那才是坐标上真正的那几个字
B3
按层配额取,不是全局取前 N
B3-1
南山律的疏钞篇幅远大于律本。纯按相关度排,四律五论会被整片挤掉, 而「律本怎么说」恰恰最该先给
语料:21 部・272 卷・37,030 段・500 万字 四律 4 部/五论 5 部/道宣元照 12 部 全部取自 CBETA
C
作答 只依召回的原文写答案 大模型
C1
材料里没有的,就说没有。不许凭记忆补——它记得的律文可能是错的,而读者会去核
C2
分层写:哪句是律本直说的、哪句是道宣律师疏里判的、哪句是元照律师记里释的
C2-1
这条界线是这个库最有价值的东西——读者要看得见 哪些是律本明文、哪些是祖师判出来的。而这条线,正是今天各家分歧之所在
C2-2
合编本(含注戒本疏行宗记、济缘记)里疏文记文交错, 靠 CBETA 的 XML 标记分,不靠版式猜
C3
几部律说法不同就分别呈现,不替律典消除差异
C4
⛔ 不许写坐标,只许写「材料几」。坐标由 D 步的代码算
C4 是 2026-09-13 才改的,第一版就栽在这。原先让模型自己写坐标,核验「八条全过」, 手工一核——六条里五条,引文根本不在它标的那一行。 例如它引的《十诵律》「頗有比丘斷人命不犯波羅夷耶?佛言:有,誤殺者是」确是真话, 但真实位置在 p0377c23,它写成了 c21——那是材料清单里另一段的起点。 法师照坐标翻过去,找不到那句话。 ⚠️ 这不是模型不听话,是这件事它做不到:材料是按段给的,一段横跨好几行, 它无从知道自己引的那句落在第几行。所以现在连坐标都不给它看——看不见就抄不了。
D
核验 算出真实坐标,对不上的撤下 我们的代码
D1
取出模型引的那句「原文」,在它标的那段里定位到第几个字
D2
查该段的逐行偏移表,算出精确到行的坐标,填回答案
D3
引文不在那段?到别的段里找,找到就自动纠正材料号
D4
哪一段都没有?撤下这处出处,但保留那句话,并在页面上明说「此处出处未通过核验」
D4-1
⚠️ 不能把整句删掉。删了读者看不出发生过什么—— 「悄悄变好看」正是我们要防的那种失败
D 这一步是「不许编出处」唯一的执行机制。 在提示词里嘱咐模型「不要编造出处」是挡不住的——这是拿另一个项目的学费换来的。
带行级坐标的答案:T40n1805_p0345b14 = 大正藏 40 册・345 页・中栏・第 14 行

现在到底做到什么程度

下面是 2026-09-13 用固定的 14 道题跑出来的,不是估计值。 题库和跑法都在代码库里,可以重跑。

量什么结果怎么算的
行级坐标62 处 答案里引了原文、且定位到具体某一行的
段级坐标44 处 模型没括引文,只能给到段落起点。页面上标了「段级」,不冒充行级
行级坐标的准确率96%(60/62) 拿坐标回到 CBETA 原始文件比对,不是用自己的库自证。 漏的 2 处是合编本疏记交错,原文在版面上不连续
编造出处0 核验撤下 0 处、自动纠正 3 处(模型标错材料号,被代码救回)
红线拦截3/3 教理题与「评价某寺持戒」题,必须拒答。这三题是故意放进去的阳性对照—— 全答出来才是失败
一题多久约 6 秒两次大模型调用 + 一次本地检索

还不好的地方,一并说

· 四成引用只到段级,因为模型没把原文括起来。要往上提。
· 14 题里有 1 题挂零(「受具足戒需要多少位比丘」)——召回到的段落不对题。
· 三派分块还没做:将来一个问题会分三块答——南山律怎么判/四律五论怎么说/ 只依四分律能得出什么。第三块经常会答不出来,那时必须如实说「仅依《四分律》,此问无明文」, 绝不拿南山律的内容填进去充数。

三层解耦

网页、算法、数据分成三层,各自独立:

层装什么对外
网页层页面与静态资源。不含语料、不含算法,只通过 API 取数据 整层可独立运行
算法层选词、检索、作答、核验不开放
数据层私有资料抽出来的坐标表与术语表 不开公网端口,只有算法层能访问

网页层拿到的只有最终答案 + CBETA 原文 + 坐标, 拿不到语料、拿不到算法、也拿不到中间的检索线索。 即使有人用大量查询去拖库,能拖出来的也只是 CBETA 的公开原典。

想请诸位挑的,主要是这三处:
一、A 步选的那几个词对不对——这是最容易错又最不容易看出来的一步;
二、答案里「律本」「道宣律师疏」「元照律师记」这三层,分得对不对;
三、随手挑几个坐标翻纸本核一核,看是不是真在那一行。