為何 80% 的 COBOL 至 Java 移轉會失敗——以及知識圖譜如何修復它
一家大型銀行嘗試使用商用 AI 程式編寫助理,移轉累積 30 年的 COBOL 系統。其語法轉換堪稱 完美。但該應用程式 卻使資料庫崩潰 ——就發生在部署上線之時。這次失敗並非語法層次的失敗,而是在於 脈絡。
標準 LLM 將程式碼視為線性文字,飽受「Lost in the Middle」(迷失中段)症候群之苦。Veriprajna 的儲存庫感知知識圖譜則捨棄隨機的文字預測,轉向 決定性的圖形推理,達成可用數學驗證的現代化。
Veriprajna 與《財星》500 大企業、金融機構及政府機關合作,透過結構性理解——而非統計猜測——降低現代化風險。
將任務關鍵的 COBOL 交易系統移轉至雲端原生 Java 微服務,不必承擔營運風險。我們的知識圖譜方法確保整個轉換過程零資料損毀,並全程維持法規遵循。
擺脫 IT 預算 80% 都拿去維護老舊基礎架構的維運陷阱。將 PL/I 與 RPG 系統轉型為現代、可維護的架構,同時保留機構邏輯。
標準的「LLM 包裝器」只會加速產出有缺陷的程式碼。Veriprajna 內建編譯修正迴圈的代理式工作流程,把驗證重擔從人類轉移給 AI,第一次產出就能交付可直接上線的程式碼。
AI 現代化失敗的零號病例:為何語法完美的程式碼會在正式環境崩潰
挑戰: 一家大型金融機構必須將核心電匯處理系統從 IBM 大型主機(COBOL/DB2)移轉到雲端原生 Java 微服務。
做法: 他們部署了一套熱門的 AI 程式編寫助理——一種 LLM 包裝器——來翻譯一份含複雜 COMPUTE 敘述的 COBOL 程式。
初期成功: AI 完美翻譯了語法。程式碼編譯通過。單元測試(由同一個 AI 依局部脈絡生成)也全數通過。
正式環境失敗: 部署到 UAT 後,第一筆交易就撞毀了資料庫一致性檢查。
在局部脈絡裡,變數 TRN-LIMIT 只是一個單純的數值欄位
TRN-LIMIT 其實早在數千行之前,就已連同 REDEFINES 子句定義在某個 COPYBOOK 裡
大型主機:壓縮十進位。Java:標準整數。型別不符損毀了二進位資料
標準 LLM 飽受「Lost in the Middle」(迷失中段)症候群之苦。當關鍵定義出現在龐大上下文視窗的中段,注意力會大幅衰退。AI 在統計上忽略了文件中段的資訊。
當 AI 找不到 TRN-LIMIT 的定義,它並未停下——而是依機率憑空臆測出一個「看似合理」的型別。在銀行系統裡,臆測型別會導致捨入誤差與資料損毀。
這份 Java 程式碼語法完美、編譯零錯誤,卻未能複製原始 COBOL 分毫不差的執行期行為。這就是翻譯與理解的差別。
為何加大上下文視窗解決不了問題:讀懂 LLM 的認知架構
大型語言模型在處理長上下文時,呈現出一種已有充分記載的注意力模式:
單一 COBOL 程式可能有數千行之長。當 MAX-TRANSACTION-LIMIT 這類關鍵變數定義出現在這段脈絡的中段時,AI 很可能在統計上忽略它。AI 接著憑空捏造一個預設型別,釀成災難性的語意分歧。
實證研究顯示:資訊落在上下文視窗中段時,LLM 效能會衰退
現代 LLM 號稱擁有 100 萬 token 以上的上下文視窗。然而, 有效運用那些上下文的能力並不均勻。更大的視窗並不能消除注意力谷底——只是把谷底拉得更寬。
在擁有數千個 COPYBOOK 相依的企業 COBOL 系統裡,關鍵定義可能散落在合計數百萬行的多個檔案中。上下文視窗再怎麼擴充,也修不好這個根本問題: 隨機性的注意力不是結構性的理解。
標準 AI 把程式碼當成「詞袋」,搜尋文字相似度。當模組 A 經過一串中介者呼叫模組 Z 時,文字式檢索便告失靈,因為這些模組沒有任何共同關鍵字。
我們的知識圖譜把程式碼表示成一座邏輯的關聯式資料庫。每個變數、函式與相依都以 帶有明確邊的節點的形式存在。分析模組 A 時,我們走訪圖譜便可找出:
切換視覺化畫面,看看我們的系統如何找出純文字 AI 完全看不見的隱藏相依。
軟體不是文字。它是一套高度結構化的系統——邏輯相依、資料流與狀態變化交織,存在於多維度的拓撲空間之中。
AST 擷取程式碼的階層式文法結構。 COMPUTE INTEREST = PRINCIPAL * RATE 會變成 AssignmentNode → MultiplicationNode → Operands 的一棵樹。
呼叫圖把應用程式的神經系統攤在眼前——哪個副程式呼叫了哪個。想在把單體拆解成微服務時不留懸空參照,這至關重要。
「銀行失敗事件」正是肇因於 A→B→C 的傳遞相依。我們的圖譜計算完整閉包,沿相依鏈一路追溯到每個變數的「真相根源」。
| 特性 | 文字分析(標準 AI) | 結構分析(Veriprajna) |
|---|---|---|
| 分析單位 | Token/詞 | 節點(AST 元素) |
| 上下文邊界 | 任意 Token 上限 | 邏輯範疇(函式/類別) |
| 相依解析 | 關鍵字比對 | 圖走訪 |
| GOTO 處理 | 視為文字字串 | 映射控制流邊 |
| 準確性 | 機率性 | 決定性 |
專為遺留系統現代化打造的管線——靜態結構與語意兼備
Tree-sitter 解析器可攝取 COBOL、JCL、PL/I、Java(13 種以上語言)。語意分塊借助 AST 找出邏輯邊界——按 SECTION/PARAGRAPH 分塊,而不是任意切 token。
擷取實體(類別、變數、資料庫資料表)與關係(CALLS、UPDATES_TABLE、IMPORTS_COPYBOOK、DEFINES_VARIABLE),灌入 Neo4j/Memgraph。
符號解析會合併重複的參照。跨模態合併則靠嵌入向量,把文件(「User API」PDF)與程式碼(UserAPI 類別)連結起來,讓意圖與實作接軌。
計算深層相依鏈(A→B→C)。分析模組 A 時走訪圖譜,為每個變數找出真相根源——就算模組 C 位於另一個儲存庫也一樣。
為何語意相似度對程式碼行不通,而圖走訪如何解開多跳推理
若開發人員把 Account 重新命名為 Acct,語意相似度就會下滑——即使邏輯完全相同。
搜尋「利息計算」時,如果函式名稱是 FNC-001 又沒有任何註解,就可能錯過真正的數學運算。
依餘弦距離擷取分塊。可能撈到一個單元測試加一則 UI 註解,卻因變數名稱不同而漏掉核心業務邏輯。
檢索奠基於圖的邊,而非文字相似度。無論命名慣例為何,都能找出所有 CALLS、READS、INCLUDES 關係。
相關性擴展會走訪圖譜,拉出副程式、變數定義、COPYBOOK——這些邏輯上不可分割的部件,組裝成連貫的提示。
就算模組之間毫無文字相似度,也能沿 A→B→...→Z 走訪,回答「如果我改了模組 A,模組 Z 裡有哪些報表會壞掉?」
| 能力 | 向量 RAG | GraphRAG |
|---|---|---|
| 檢索依據 | 餘弦距離(相似度) | 圖的邊(關係) |
| 上下文品質 | 高召回、低精確 | 高精確、互連 |
| 多跳推理 | 差(漏掉間接連結) | 優(走訪整條鏈) |
| 幻覺風險 | 高(用猜的補連結) | 低(連結明確) |
| 最佳用途 | 非結構化文字(FAQ) | 結構化系統(程式碼) |
帶著編譯修正迴圈的自主 AI 代理人,把驗證重擔從人類肩上搬到機器身上
結果:人類自己成了除錯迴圈,花好幾個小時修補憑空捏造的相依。
結果:第一次出手就是可直接上線的程式碼,開發人員的驗證負擔大幅下降。
代理人在執行面上自主,在策略面上受監督。知識圖譜提供了 可解釋性——開發人員可以確切看到 AI 為何做出某項決策:「AI 之所以匯入 com.bank.logic ,是因為它在第 2,847 行發現了對 COPYBOOK-X 的相依。」
銀行業與政府需要可稽核的決策。我們從「相信我,我是 AI」走向「這是這段邏輯的引註鏈」。
把驗證重擔從人類轉移給 AI。生成後除錯時間縮短 70-80%,達成 2-3 倍的生產力提升。
估算圖形化現代化相對於人工或包裝器做法,所能帶來的成本節省與生產力增益
Veriprajna 如何破解 COBOL 至 Java 移轉中最棘手的難題
COBOL 在 DATA DIVISION 裡使用全域變數,各種 PERFORM 都會修改它。Java 的最佳實務要求封裝——不留任何隱藏狀態。
資料流分析追蹤變數的生命週期。CALC-TAX 若讀取 GROSS-INCOME,圖譜便將它標記為輸入相依,並產生明確的參數傳遞。
GOTO 會製造非線性的控制流。Java 沒有 GOTO。文字型 AI 則生成遞迴呼叫 → StackOverflowError。
控制流圖把 GOTO 目的地映射出來。模式辨識據此判定:
遺留系統裡有 20-30% 是死碼(過時的促銷邏輯、除錯常式)。文字型 AI 會全部照搬移轉——白白燒錢,攻擊面還因此擴大。
呼叫圖可揪出不可達節點——沒有任何入邊(無人呼叫)的段落。在移轉開跑前先標記待刪。
AI 程式編寫助理飽受 'Lost in the Middle'(迷失中段)症候群之苦——當 COPYBOOK REDEFINES 子句這類關鍵定義出現在距離待翻譯程式碼數千行遠的地方,注意力就會衰退,AI 便在統計上把它們漏看。在某大型銀行的案例裡,AI 生成了語法完美的 Java,編譯通過、單元測試也全數過關,部署時卻撞毀了資料庫——因為它憑空臆測了變數型別,造成壓縮十進位對標準整數的型別錯配。
儲存庫感知知識圖譜把每個變數、COPYBOOK、資料定義與相依,都映射成圖結構中的節點和邊。它不像把程式碼當線性文字處理那樣受注意力衰退之害,圖譜保留所有關係,不受原始碼中距離遠近的影響。如此一來,決定性的變數相依解析、變更管理的影響分析,以及通常能把程式碼庫縮減 20-30% 的自動化死碼偵測,都成為可能。
美國的遺留銀行與政府系統已累積 $1.52 兆的技術債。95% 的 ATM 交易與 43% 的銀行系統至今仍跑在 COBOL 上。維運陷阱吃掉 80% 的 IT 預算,失敗的現代化專案(失敗率 70-80%)又再多燒掉數十億美元。以知識圖譜為基礎的做法能在成功移轉的同時,達成 2-3 倍的開發人員生產力提升。
Veriprajna 的儲存庫感知知識圖譜不只是拉高移轉成功率——它們從根本上改變了理解的物理學。
預約諮詢,分析您的遺留程式碼庫,並為圖形化現代化建立投資報酬模型。
完整技術報告:AST 解析、GraphRAG 架構、代理式工作流程設計、與向量 RAG 的比較分析、企業案例研究,以及完整的參考文獻。