GOI 聖經
如資料庫般索引的聖經——由 AI 翻譯,像軟體一樣受審查。
A classical-style painting of a hand reaching down toward an open Bible, evoking the GOI Bible project.

一部完整的聖經,適用於任何語言,
建構於單一可攜檔案之上。

GOI 聖經專案是一項實驗,探討一個聖經翻譯領域從未能提出的問題: 當翻譯流程被當作軟體來對待——版本化、建立索引、交叉檢查、 並可重複執行——而不是一次性的學術工作時,會發生什麼事?

目前也提供中文的繁體與簡體版本,並以同一套 GOI 索引與資料結構加以對齊與審查。

目標:以不到十美元的 LLM 運算成本,產出任何語言的初稿聖經
願景:讓地球上每一位神學院學生,都能在自己的筆電上 攜帶一份 GOI 聖經——離線、以自己的母語並對照原文語言、可無限搜尋, 並由最靈活的交叉引用工具支援:一個檔案, 讓「這個詞、主題或片語還出現在哪裡?」從一項研究專案變成一條查詢。

I.什麼是 GOI?

GOI 代表 Global Ordinal Index(全域序數索引)。 這正是整個專案命名的核心概念——一個單一的整數鍵,讓每一節經文, 在每個版本、每種語言之間,都能以相同的方式被定位、比較與連結。 本頁其他一切——資料庫、翻譯流程、審查記錄—— 都是為了填入並驗證附著於這個索引上的文字。

每一部聖經都有自己的分節系統——書、章、節。問題在於 不同的分節系統彼此並不一致。希伯來馬索拉文本將某些詩篇標題 算作第 1 節;許多英文譯本則不這麣做。不同的正典順序會把書卷排在 不同的位置。如果兩個版本的編號方式不同,比較「第 14503 節」 在兩個版本之間毫無意義。

全域序數索引(GOI)用一個概念解決這個問題: 為每個版本中的每一節經文,依照該版本正典閱讀順序中的位置, 指定一個單一、連續的整數。

SELECT
    *,
    ROW_NUMBER() OVER (
        PARTITION BY edition_id
        ORDER BY conical, chapter, verse
    ) AS goi
FROM verses;

conical 是目前資料庫結構中實際使用的欄位名稱—— 這是「canonical」長期以來的拼寫錯誤,為了保持資料庫內部的向後相容性 而維持原樣未改。)

因為 GOI 是依每個版本分別從正典順序計算出來的,它讓 「這個譯本在結構上是否完整?」變成一條單一查詢;而且—— 一旦兩個版本被對應到同一套正典序數序列之後—— 它讓「另一個版本中對應的是哪一節?」變成一個 join。 GOI 並不能消除整合不同分節系統所需的工作;它所做的是 為這項整合提供一個單一、持久的目標表示法,因此每個版本只需做一次, 而不必每次比較時重新推導。(本專案中的希伯來文 WLC 版本, 正是這項整合尚未完成的活生生例子——詳見下方狀態表。)

KJV (edition_id = KJV) goi book ch:vs 19301 PSA 23:1 19302 PSA 23:2 WLC (edition_id = WLC) goi book ch:vs 19301 PSA 23:1 19302 PSA 23:1b join on goi A jump in the goi sequence between two editions of the same book ⇒ a missing, merged, or split verse — found by SQL alone.

兩個版本,兩套不同的分節系統,一個共用的整數鍵。 結構上的差異從手動比對變成了一條查詢。

本專案需要一個版本作為參考序數序列—— 也就是其他每個版本的 goi 最終都要對照的正典書/章/節順序。 欽定版(King James Version)被選為此角色: 66 卷書、31,102 節經文,goi 值從 1 到 31,102。 選擇它並非因為其用詞——AI 翻譯並不會照抄它—— 而是因為其分節方式是最廣為人知的「最大公分母」順序, 因此是偵測其他版本節數差異時最有用的固定標尺。

為何從 WLC + TR1550 開始——以及為何採用 MIT 授權?

本專案中每一個翻譯所依據的兩份原文—— 西敏列寧格勒抄本(希伯來文舊約)與 1550 年公認文本(Textus Receptus)(希臘文新約)—— 皆屬於公共領域。這個選擇並非偶然; 它正是讓本專案其他一切得以成立的基礎。從一份本身不受限制的原文出發, 意味著最終產出的譯文、資料庫與管線程式碼, 可以採用真正寬鬆的授權——MIT—— 不必擔心上游版權、不會有版稅鏈, 也不會有任何暗中限制他人複製、分叉或重新散布成果的條款。

這裡的「MIT」就是它一貫的意思:任何人——一所神學院、 一名獨立開發者、一個沒有預算的宣教機構—— 都可以取得這個資料庫、程式碼或翻譯文字,使用它、修改它、 將它發行出去、再免費分送給別人,不需要徵得任何人同意, 也不需要付費給任何人。一個建立在受限授權或受版權保護原文上的 聖經專案,永遠無法提供這樣的條件。從公共領域進,以 MIT 授權出, 就是整條供應鏈。

GOI 為本專案帶來的具體好處:

II.背景與動機

這個世界為什麼還需要另一個聖經翻譯專案?

聖經翻譯傳統上是現存最昂貴、最耗時的文字工作之一。 單一語言的翻譯,可能需要一支訓練有素的團隊花上十年甚至更久, 而最終成果——儘管極為用心——通常被鎖在某種格式裡 (印刷書籍、某個教派的專有資料庫), 難以比較、搜尋,或進行機器輔助審查。

GOI 聖經專案從一個不同的前提出發。大型語言模型現在已具備一定能力—— 雖非完美,但已足夠勝任——能根據已標記的原文產出初步翻譯。 真正有趣的問題已不再是「AI 能翻譯聖經嗎?」 而是:能否以我們對待程式碼庫同等的嚴謹程度, 大規模地檢驗這個結果——自動化測試、完整性關卡、 回歸追蹤,以及每一次修正都留下可見的審查記錄?

這正是 GOI 的核心思路。每一節經文都是一行資料。 每一個譯本都是一個版本。每一個名詞、子句與數字, 都是可以對照原文語言查核的事實。而這一切—— 文字、交叉引用、審查中介資料——都裝在一個可以放進隨身碟的單一檔案中。

我們的目標不是宣稱 AI 第一次就做對了所有事情。 它幾乎從來不會。我們的目標是讓每一個出錯的地方都 可被找到、可被修正、可被重新驗證——並公開所有記錄。

III.為何選擇 SQLite

整個專案——原文、譯文、交叉引用、審查表格——都存放在一個 SQLite 檔案中。 這個選擇是刻意的,而且重點不在於流行與否, 恰恰相反:重點在於耐久性與可攜性, 畢竟這是一份本質上理當比任何特定基礎設施都更長久的文本。

最後一點的重要性超乎其字面。在本專案偏好的技術組合中 (SQLite 檢視表 → PHP 直接傳遞檢視表的資料列 → htmx 變更 DOM),「該為某個語言、某個情境選用哪個詞」 這項「商業邏輯」,完全活在資料庫的檢視表定義裡。 應用層因此變得極其精簡——也意味著幾乎沒有東西需要維護、 替換或移植。

為何從「一節一檔」開始?

在任何內容進入 SQLite 之前,翻譯流程本身是以 每節經文一個純文字檔案的方式處理整個語料庫—— 例如 001_GEN_002_004.txt。這是一種不尋常的切分粒度, 而且是刻意如此:

一旦這個切分好的語料庫載入 SQLite, 原本的剛性就消失了,靈活性則轉移到輸出端。 讓翻譯安全地切分的「每節一行」結構, 也讓重新組裝變得輕而易舉——一章、一整卷書、 要不要顯示節號,都只是一條 SQL 查詢之遙:

-- Whole chapter, with verse numbers (e.g. for study/reference view)
SELECT verse, rendering FROM v_effective_rendering
WHERE book='JHN' AND chapter=3 AND lang=:lang ORDER BY verse;

-- Same chapter, reading view — no verse numbers, just flowing text
SELECT group_concat(rendering, ' ') FROM v_effective_rendering
WHERE book='JHN' AND chapter=3 AND lang=:lang
GROUP BY book, chapter ORDER BY verse;

-- A whole book, concatenated, for export/printing
SELECT group_concat(rendering, '

')
FROM v_effective_rendering
WHERE book='JHN' AND lang=:lang
GROUP BY book, chapter ORDER BY chapter, verse;

同樣的底層資料列,三種不同的呈現方式—— 帶節號的研讀文本、流暢的閱讀文本,或可直接印刷的書卷輸出—— 都不需要不同的資料格式、匯出步驟或重新排版。 讓翻譯保持誠實的切分方式, 與讓呈現變得低成本的靈活性, 是同一套「每節一行」設計的兩面

想親自試試嗎?請參閱 SQLite 範例, 其中提供可直接複製貼上的查詢—— 產生整本聖經、取出單一章、製作詞頻熱圖, 以及用 FTS5 虛擬資料表搜尋「光」與「暗」相鄰的經文。

IV.GOI + 虛擬表:為何強大

GOI 讓每一語言的每一節經文都擁有相同的位址。 SQLite 的檢視表把這個共用位址, 變成應用程式可以直接讀取的預先解析「物件」—— 應用層完全不需要任何翻譯邏輯。

範例:詞義解析檢視表

許多詞語的意義取決於語境。希臘文 κύριος 可以是「主」,也可以單純是「主人/先生」。 希伯來文 אֱלֹהִים 可以是「神」、「眾神」,在某些句型中甚至是「審判官」。 與其為每一種新語言重新爭論這些判斷, 新約管線將每一個有歧義的出現位置一次性地、 不分語言地解析,並以詞義鍵 (例如 KYRIOS.HUMAN_MASTER)記錄這個決定。 一個檢視表接著針對每個詞、每種語言, 解析出該呈現哪個實際的詞:

狀態說明:下方的詞義鍵檢視表描述的是 新約管線。舊約的名詞錨定目前是透過更直接的 noun_translations 對照表進行,而非此檢視表; 隨著舊約審查的進展,兩者將會統一。

CREATE VIEW v_effective_rendering AS
SELECT
    o.book, o.chapter, o.verse, o.word_pos,
    COALESCE(
        sr.rendering,              -- 1. sense-specific word for this language
        dr.rendering               -- 2. fall back to the language's default
    ) AS rendering
FROM verse_rendering_overrides o
LEFT JOIN sense_renderings   sr ON sr.sense_key = o.sense_key AND sr.lang = :lang
LEFT JOIN strongs_lang_renderings dr ON dr.strongs_num = o.strongs_num AND dr.lang = :lang;

成果:整本新約中, 1,060 個依語境而定的選詞判斷只需做一次。 一個全新的語言,只需填入16 行—— 每種獨特詞義各一行——就能自動繼承所有這些判斷。 十六個一次性的決定,永久解決上千個語境判斷。

16每種新語言所需的詞義決定
1,060自動解析的語境位置
1個 SQL 檢視表,零應用程式碼

範例:任意詞語在全書中的「熱區圖」

因為每一節經文都有一個單一的整數位置(其 goi), 統計某個詞出現的次數與位置只是一條查詢—— 依連續的 goi 值分組成區段並計數即可。 不需要另外的搜尋索引,也不需要預先計算的表格: 經文文字與序數軸線本來就在同一行資料中。

SELECT (goi / 100) AS bucket,        -- ~100-verse "bins" across the whole Bible
       COUNT(*) AS hits
FROM v_effective_rendering
WHERE rendering LIKE '%light%'
GROUP BY bucket
ORDER BY bucket;

bucket 畫在 x 軸, hits 以顏色深淺呈現, 就得到「光」這個詞在創世記、詩篇、約翰福音、啟示錄中 聚集分布的熱區圖——可以即時生成,適用於任何語言, 因為每個版本的區段邊界都是相同的序數位置。

範例:「找出所有與『暗』相距 4 節以內的『光』」

鄰近搜尋——在大多數文字搜尋引擎中都是出名地棘手的查詢—— 在這裡變成一個帶有算術範圍的自我連接(self-join), 因為「相距 4 節」在 goi 軸上就只是 ±4

SELECT a.goi AS light_goi, a.rendering AS light_verse,
       b.goi AS dark_goi,  b.rendering AS dark_verse
FROM v_effective_rendering a
JOIN v_effective_rendering b
  ON b.goi BETWEEN a.goi - 4 AND a.goi + 4
 AND a.lang = b.lang
WHERE a.rendering LIKE '%light%'
  AND b.rendering LIKE '%dark%';

像「這兩個主題在哪些地方彼此靠近?」這類問題, 通常需要一套專門的搜尋/索引服務。 在這裡它只是一個 join 條件, 因為 GOI 早已把「經文之間的距離」變成了普通的減法運算。

建立在開放定址標準之上:OSIS 與 BCP 47

GOI 是本專案內部使用的序數—— 但它據以計算的欄位, 都是刻意採用普通、基於標準的識別碼, 讓這個資料庫與其他聖經軟體說同一種語言:

這個組合的重點在於:goi 解決的是 「這節經文在結構上位於何處」的問題 (這正是各分節系統彼此不一致的地方), 而 OSIS 書卷代碼與 BCP 47 語言標籤, 解決的是「這節經文按標準說法是什麼」的問題 (這是其他人的工具早已能理解的)。 GOI 並不取代這些標準—— 它是建立在這些標準之上的序數索引。

V.GOI 聖經的理由——以及它的審查記錄

是的——這個翻譯 100% 由 AI 生成。 正因如此,它才以這種方式被審查。

傳統翻譯委員會的工作筆記,很少能在出版後留存下來。 GOI 聖經採取相反的做法:每一次驗證、每一個被標記的經節、 每一次修正,都被記錄下來,可重現、可重新執行。 我們並不宣稱這個成果已經完成或達到學術水準—— 我們宣稱的是這個過程異常透明, 並且公開所有證據,讓這個宣稱可以被檢驗,而不只是被相信。

處理流程

1. 已標記的原文。 希伯來文(西敏列寧格勒抄本)與希臘文 (1550 年公認文本)經文,每個字都標註了 Strong's 編號與詞法—— 這是所有後續檢查所依據的基準事實。
2. 以名詞為錨點的 AI 翻譯。 每一節經文皆獨立翻譯(不需要章節或書卷層級的上下文), 並提供 Strong's 標記的名詞作為錨點—— 一節經文,一個檔案,一個確定性的輸入到輸出對應。
3. 名詞覆蓋率驗證。 原文中標記的每一個名詞,都會檢查是否出現在譯文中 (包含詞形變化/詞根比對)。新約結果: 28,889 / 28,889 個原文名詞均已對應—— 0 個遺漏,99.7% 精確相符。
4. 子句與語意檢查。 第二次 LLM 檢查,將每一節譯文對照希伯來文/希臘文, 尋找遺漏的子句、反轉的否定、錯誤的數字, 以及「偽友詞」誤譯 (例如 ἀφίημι 被譯為「赦免」,但此處語意應為「離開/容讓」)。
5. 分級與針對性修正。 被標記的項目依嚴重程度分級(高 / 中 / 噪音)。 乾淨的詞彙或結構性修正,以逐字比對的方式手動套用, 並記錄到各批次的備份 CSV 中; 確實已嚴重錯亂的經節,則依原文重新生成, 並將具體問題作為修正提示回饋給模型。
6. 完整性關卡。 validate.py 執行 13 項全語料庫不變條件檢查—— 檔案數量、經節邊界對齊、GOI 序列連續性、標點符號正規化—— 任何變更必須先通過這些檢查才算完成。

此圖中的每一個箭頭,都對應到程式庫中的一支腳本。 這裡沒有任何步驟是一次性的人工作業——整條流程都可以重新執行。

目前審查已發現的內容

28,925新約(英文)名詞已驗證,0 個遺漏
99.7%精確詞彙相符率(新約英文)
1,281舊約(英文)子句級標記數
1,276/1,276舊約英文子句標記已全部審查並結案
13項全語料庫完整性不變條件

即時狀態——目前實際完成的進度

下表是本頁面嘗試在一處清楚說明—— 管線的每個部分目前進行到哪個階段—— 讓訪客(或審查者)不必從文字敘述中自行推斷。

項目狀態
新約英文 — 名詞覆蓋率(28,925 個詞)已完成。0 個遺漏,99.7% 精確相符。
新約英文 — 偽友詞 / 子句檢查對目前已識別的模式已完成(變更記錄詳見 docs/README_GOI.md)。
新約英文與中文 — 對照 1550 年希臘文公認文本的子句檢查(98 項標記)已完成。全部 98 項標記均已分級檢視;套用 3 項確實修正(95 項為檢查器本身回應長度限制所造成的誤判,該限制已修正)。
舊約英文 — 子句檢查審查(1,281 項標記)已完成。1,276 項標記已全部審查:1,133 節完成人工修正並記錄;其餘 143 節在未修改的情況下結案——確認為檢查器誤判,或為語意確實含糊、現有譯文已符合既有翻譯傳統的疑難經文。
舊約中文 — 名詞對照表覆蓋率就目前的對照表版本而言已完成
舊約中文 — 子句檢查審查(604 項標記)已完成。604 項標記已全部審查:214 項完成人工修正並記錄。其餘項目在未修改的情況下結案——確認為檢查器誤判,或為現有譯文已符合既有翻譯傳統的詩歌/疑難經文。
新約中文 — 名詞字串比對覆蓋率進行中。正在處理已知的殘餘字串比對問題。
檔案數量 / 結構完整性(validate.py已完成,並於每次變更後重新執行。
希伯來文 WLC 版本 — GOI 跨版本對齊尚未重建。已確認先前的初步(依資料列順序)對齊有 81.1% 不相符後移除(第一個分歧點為 WLC 的創世記 32:1 對應 KJV 的創世記 31:55,屬章節分界位移)。重新對應計畫已於 2026-06-12 撰寫完成(docs/wlc_goi_realignment_plan.md),尚未開始實作。
學術 / 同行評審品質審查未宣稱已完成。這是一份已受檢查的 AI 初稿,不能取代翻譯者/委員會的審查。

誠實的提醒——公開,而非隱藏

GOI 聖經的主張,不是「相信這個 AI」。 而是「不要相信這個 AI——自動對照原文檢查它、 記錄每一次檢查與每一次修正,並讓任何人都能重新執行這些檢查」。

VI.更大的願景:每種語言都有聖經,成本不到十美元

世界上有超過 7,000 種仍在使用的語言。 其中大約 1,500 種完全沒有聖經譯本, 還有更多只有部分譯本。 要彌補這個差距,以人年計算的傳統成本極為龐大。

GOI 管線徹底重構了這個成本結構:

Source corpus WLC + TR1550 (fixed, one-time) + New language ~31k verses < $10 LLM compute + 16 sense rows manual, < 1 hr unlocks 1,060 positions Audited edition in v_effective_rendering Marginal cost of language #1,001 ≈ marginal cost of language #2.

這一切都不能取代以母語為使用者的審閱者、語言學家, 以及最終將決定他們語言中何謂「忠實翻譯」的群體所做的工作。 它所做的是移除初稿瓶頸—— 讓審閱者拿到的初稿,已經先經過機械式失誤模式 (遺漏詞語、遺漏子句、否定反轉、數字錯誤)的檢查, 這些通常會占去審閱時間中很大的一部分。

語音:即將推出。 文字轉語音技術已經發展到, 一份乾淨、逐節整理的文字語料庫, 就已經完成了製作有聲聖經大部分的工作。 因為每一節經文本身就已經是一筆可定位、 經過檢查、有 GOI 索引並標記語言的資料, 生成完整的有聲版本, 與本管線其他每一步驟一樣, 都只是「再多填一個欄位」這種模式—— 適用於任何支援的語言, 不僅僅是傳統上才有有聲錄製的少數語言。

SQLite — 單一檔案 以 Strong's 編號為錨點 GOI 跨版本索引 名詞覆蓋率:已驗證 子句審查:進行中 僅使用公共領域參考文本 語音:即將推出