
如果最近有一部電影能同時讓 IT 圈的人和公司管理者坐進同一個放映廳那大概是《奧德賽》。很多人的關注點并不在于劇情本身而在于一個反復出現的隱喻AI 已經能生成一個又一個逼真的世界但那個世界是否真正遵循某種物理法則、社會規則和因果鏈條你從畫面上一眼看不出差距。這個隱喻放在軟件開發里幾乎一模一樣。過去兩年AI 編程工具的進步速度快到讓人眩暈給一段需求描述一次回車頁面能生成接口能生成數據庫表能生成連 Dockerfile 都能順手補齊。于是很多團隊開始興奮地討論“程序員是不是要被替代了”。可真正在企業系統里試過一遍的人往往會遇到另一種困惑AI 生成的代碼確實快但系統里真正負責“企業真實世界”的那部分反而變得很難推進——不是寫不出來而是不知道該怎么定義。這篇文章想回答一個問題為什么 AI 可以快速搭建軟件卻搭不出企業的真實世界以及當我們接受這個邊界之后到底應該怎么用 AI 開發軟件才能既享受速度又不丟掉企業系統最需要的確定性。文章不會只停留在觀點層面我會用一個采購訂單模塊的最小案例把“代碼能跑”和“業務正確”之間的差距拆開來看再給出一條適合團隊落地的實踐路徑。這篇文章真正要解決的問題先說結論AI 擅長的是把“已經定義清楚的需求”快速翻譯成代碼但它不擅長定義需求本身。企業軟件之所以復雜不是因為代碼量大而是因為業務規則藏在組織流程、歷史數據、合規要求和人的決策習慣里。很多團隊在引入 AI 開發工具時真正遇到的不是“代碼質量問題”而是“上下文缺失問題”。AI 可以生成一個非常標準的 HTTP 接口但接口背后的審批流、校驗規則、數據權限、冪等策略、與第三方系統的閉環并不會因為提示詞寫得漂亮就自動出現。這些內容必須由人先定義清楚再讓 AI 去實現。這篇文章適合三類讀者第一類是正在評估“AI 能否替代研發部門”的技術管理者。你需要看到 AI 的能力邊界避免把 Demo 當成生產系統。第二類是真正使用 AI 編程工具的開發者。你需要理解為什么 AI 生成的代碼偶爾“看起來很對跑起來出事”以及怎么用測試和架構約束把這些風險堵住。第三類是參與企業數字化轉型的人。你需要知道AI 的價值不在生成代碼那一瞬間而在把業務規則結構化、可驗證、可演化的整個過程中。電影《奧德賽》與 AI 軟件生成的共同點像不等于真《奧德賽》里最震撼的畫面往往是那些由算法生成的宏大場景。你看到一個世界它符合視覺上的直覺光影正確、物體清晰、海面有波濤。但如果你追問這片海域的潮汐規律是什么這位船長根據什么數據決定航線船上的物資能在海上支撐多少天電影并不會回答因為算法生成的只是“看起來合理”的畫面而不是一個有完整物理和社會規則的模擬世界。AI 生成軟件也是同理。你用 AI 做一個訂單管理后臺它能生成表單、按鈕、表格能創建訂單、更新狀態、計算金額。表面上這已經是一套能跑的軟件了。但企業真正關心的問題往往不在這個表面上訂單金額超過多少需要二級審批供應商資質過期了能不能繼續下單同一個客戶在不同渠道的訂單能不能合并結算這些規則如果不在提示詞里AI 默認不會知道也不會主動問。這就引出了一個核心概念軟件的表面真實和本質真實是兩回事。表面真實是代碼能編譯、接口能請求、頁面能交互本質真實是軟件在特定企業的組織、流程、合規和商業目標下能否持續輸出正確結果。AI 生成軟件的速度越快我們越容易把表面真實誤當成本質真實。電影里的世界可以只追求“像”企業系統里的世界卻不能只要“像”它必須“是”。AI 開發工具的能力邊界它擅長什么不擅長什么先把 AI 開發工具能做好的事情說清楚避免走向另一個極端。AI 非常擅長以下幾類工作樣板代碼和腳手架工程。比如生成一個新的服務模塊、CRUD 接口、前端頁面、數據庫遷移腳本。代碼解釋和遺留系統分析。給 AI 一段老代碼讓它總結邏輯、標注潛在問題通常效率比人逐行讀高得多。單測和邊界測試生成。給定一個函數和輸入輸出示例AI 可以生成不少有價值的測試用例。跨語言翻譯和框架遷移。把 Java 代碼改成 Go把 Spring Boot 遷移成其他框架AI 能完成大部分機械工作。文檔生成和維護。根據代碼生成接口文檔、數據庫字段說明、部署說明能省不少時間。但 AI 不擅長的地方恰好是企業軟件最核心的地方定義業務邊界。同一個“訂單”在電商、制造業、醫療、物流行業里含義完全不同。AI 默認會用互聯網常見的訂單模型而不是你們公司的訂單模型。識別業務不變量。比如“庫存不能為負”“每人每周最多提交 3 次申請”“退款金額不能大于實付金額”。這些規則通常散落在制度文件和老員工的腦子里。處理歷史包袱。生產環境里的臟數據、舊系統的接口協議、被多個團隊共享的數據庫表AI 看不到也不會理解。判斷非功能需求。接口要在幾毫秒內返回數據最多能丟幾秒審計日志要保留幾年這些問題直接影響系統設計卻不能靠“生成”解決。如果把 AI 當成一個極其高效的外包程序員它確實合格。但如果把它當成了解你公司業務的資深架構師它一定不合格。問題的關鍵不在于 AI 能不能寫代碼而在于“誰負責把真實世界翻譯成 AI 能理解的上下文”。從“訂單模塊”看真實世界一個最小案例概念講多了容易飄我們用一個小而完整的采購訂單模塊來拆解。4.1 AI 生成的“表面正確”代碼假設某制造企業需要開發一個采購訂單創建接口。你給 AI 一個很常見的 prompt用 Python FastAPI 實現一個采購訂單創建接口。請求參數包括供應商ID、商品列表、總金額。AI 大概率會生成類似下面的代碼# 文件路徑main.py from fastapi import FastAPI, HTTPException from pydantic import BaseModel app FastAPI() class PurchaseOrder(BaseModel): supplier_id: int items: list total_amount: float orders [] app.post(/purchase_orders) def create_po(order: PurchaseOrder): orders.append(order) return {id: len(orders), status: created}這段代碼能運行嗎能。寫入數據了嗎寫入了。但在真實企業里這段代碼大概率不能直接上線。原因不是語法而是它缺少對一個真實采購系統的全部上下文。4.2 真實業務規則開始出現后現在把企業的真實規則加進來。比如只有通過認證的供應商才能創建采購訂單。訂單總金額超過 100 萬時必須進入兩級審批。同一供應商如果已經有一筆待審批訂單且采購品類相同則不能重復創建。金額計算必須使用 Decimal不能用 float避免精度問題。這些規則看起來不難但每一條都意味著代碼結構的變化。下面是加入部分規則后的服務層實現# 文件路徑services/purchase_order_service.py from decimal import Decimal from domain.purchase_order import PurchaseOrder, OrderStatus from domain.business_rule_error import BusinessRuleViolation def create_purchase_order(repo, supplier_repo, approval_service, order_draft): supplier supplier_repo.find_by_id(order_draft.supplier_id) if supplier is None or not supplier.verified: raise BusinessRuleViolation(supplier must be verified) po PurchaseOrder( supplier_idsupplier.id, itemsorder_draft.items, total_amountcalculate_total(order_draft.items) ) existing repo.find_pending_po_by_supplier_and_category( supplier.id, po.category ) if existing is not None: raise BusinessRuleViolation(duplicate pending po) if po.total_amount Decimal(1000000.00): po.status OrderStatus.PENDING_APPROVAL approval_service.start_flow(po, level2) repo.save(po) return po def calculate_total(items): return sum((Decimal(str(item.unit_price)) * item.quantity) for item in items)這仍然是一個簡化版本但已經能看出來真實業務規則會影響函數輸入、狀態流轉、依賴服務和異常處理。AI 能不能生成這段代碼如果提示詞寫得很細它大概率也能生成。但問題是這些規則從哪來不是 AI 能憑空想出來的而是業務人員、財務人員、采購專員坐在一起經過很多次討論后才確定下來的。4.3 用測試把業務規則變成可執行約束要保證 AI 生成的代碼不會破壞業務規則最有效的方法是把規則轉成測試。下面是一個針對“未認證供應商不能下單”的測試# 文件路徑tests/test_purchase_order_service.py import pytest from decimal import Decimal from services.purchase_order_service import create_purchase_order from domain.business_rule_error import BusinessRuleViolation def test_cannot_create_po_from_unverified_supplier(): unverified_supplier Supplier(id999, verifiedFalse) repo MemoryRepo() supplier_repo MemoryRepo([unverified_supplier]) approval_service ApprovalService() draft OrderDraft( supplier_id999, items[OrderItem(skuA001, quantity2, unit_priceDecimal(50.00))] ) with pytest.raises(BusinessRuleViolation): create_purchase_order(repo, supplier_repo, approval_service, draft)寫這個測試的意義比寫業務代碼本身更重要。因為它把一條看不見的規則變成了一個每次提交代碼都會自動運行的“守門員”。AI 可以快速生成代碼但只有人才能決定哪些規則必須被測試固化下來。運行測試的命令很簡單pytest tests/test_purchase_order_service.py -v預期輸出tests/test_purchase_order_service.py::test_cannot_create_po_from_unverified_supplier PASSED如果這條測試失敗說明供應商校驗邏輯沒有被實現或者被后續 AI 重構時改壞了。企業系統的可靠性本質上就是這樣一條一條測試堆起來的而不是靠某一次“生成”完成的。為什么真實世界不能被一次性“喂”給 AI很多人會想既然 AI 生成代碼需要上下文那我多寫一點提示詞把規則全部塞進去不就行了理論上可以但實踐中行不通。5.1 企業軟件的“上下文”遠大于提示詞一個運行五年以上的企業系統它的真實上下文包括幾十張數據庫表的歷史含義、多個系統之間對賬規則、不同業務部門對同一字段的解釋差異、還有因為特殊情況留下的兼容邏輯。這些內容不可能全部寫進一次對話的提示詞里。更現實的做法是把企業級的上下文拆成兩類一類是穩定的業務規則比如“價格必須大于 0”“訂單不能重復提交”另一類是不斷變化的環境比如某個客戶生命周期在某個階段需要特殊處理。前者可以結構化地描述給 AI后者必須靠持續運維和反饋閉環來修正。5.2 AI 不知道你不知道的規則這是最容易被忽略的一點。企業在招聘新人的時候老員工會告訴他“我們這個系統里有個特殊邏輯三年前因為某個大客戶要求加的文檔里沒寫。” AI 也一樣它不知道你們企業內部那些“只可意會”的規則。如果 AI 生成代碼時沒有這些規則它就會用自己從海量公開代碼里學到的“通用世界模型”來填空。通用模型對大多數 Demo 有用但對特定企業來說很可能就是錯的。尤其是在金融、醫療、制造等強合規行業用通用模型填充特定業務風險極高。5.3 企業系統的確定性要求電影生成允許隨機性這次生成的畫面不滿意可以再生成一次。但企業系統對同一輸入必須保證同一輸出。訂單提交后不能因為某個模型參數變化導致金額計算不同。這種確定性要求決定了 AI 不能作為業務邏輯的唯一決策來源。正確的模式是AI 負責生成實現人負責定義確定性規則測試負責固化規則架構負責隔離變化。只要這個分工清晰AI 才能真正進入企業開發流程而不是停留在玩一玩的層面。企業引入 AI 開發容易踩的四個坑在實際落地過程中我經常看到團隊把 AI 開發工具用成“麻煩制造機”問題通常出在以下四個地方。第一個坑把 AI 生成的結果當成需求完成。AI 給出一個訂單接口團隊直接把接口聯調上線但沒人校驗“審批流是否接入”“金額精度是否正確”。等業務發現數字對不上問題已經埋進生產環境。第二個坑業務人員直接用 AI 工具自建系統。業務部門響應速度慢于是有人用 AI 寫腳本處理核心數據比如把手工 Excel 里的數據批量導入數據庫。這些腳本沒有經過審查沒有日志出錯后連備份都沒有。這實質上是把未受管制的邏輯放進了生產鏈路。第三個坑AI 生成了大量樣板代碼卻沒人維護。AI 一天能生成 3000 行代碼很快代碼庫就膨脹起來。但企業系統維護成本不是按代碼行數算的而是按業務邏輯復雜度和依賴關系算的。樣板越多依賴越亂后續改動越難。第四個坑讓 AI 直接修改生產代碼缺少回歸測試。AI 重構很快就完成了但沒跑測試沒看影響范圍。上線后出現數據不一致只好回滾。回滾本身并不可怕可怕的是你根本不知道它改了幾處地方。這四類問題的根源都一樣我們已經非常信任 AI 的執行能力卻還沒有建立起相應的治理和驗證機制。一套落地的 AI 輔助開發流程既然 AI 解決不了“真實世界缺失”的問題那我們應該把它放在一個合適的流程里讓它的速度為企業所用同時讓企業規則不被稀釋。7.1 先寫決策記錄再讓 AI 動手建議在項目里引入輕量級的決策記錄文檔不需要很長但一定要寫清楚為什么會做某個技術選型、為什么某條業務規則存在。比如# ADR-001采購訂單金額使用 Decimal ## 背景 財務結算要求金額不能有誤差。 使用 float 可能出現 0.1 0.2 不等于 0.3 的問題。 ## 決策 所有金額字段使用 Decimal禁止使用 float。 ## 影響 API 層需要做類型轉換數據庫字段映射為 decimal 類型。把 ADR 放在倉庫里并讓 AI 在生成代碼前閱讀這些文檔。如果使用編程 Agent 一類的工具可以把 ADR 作為工作區上下文。這樣AI 生成的代碼就更容易符合團隊已經做過的決策。7.2 用“結構化提示 測試先行”鎖定業務規則不要只給 AI 一句話需求而是把業務規則、輸入樣例、測試預期都寫清楚。下面的 prompt 模板比較適合企業場景請基于以下規則實現采購訂單創建接口 業務規則 1. 只有已認證供應商可以創建訂單。 2. 訂單總金額超過 100 萬時需要二級審批。 3. 同一供應商、同一品類、存在待審批訂單時禁止重復創建。 4. 所有金額使用 Decimal禁止使用 float。 工程約束 - 使用 FastAPI。 - 服務層不直接依賴 HTTP 層。 - 輸出單元測試。 請在代碼注釋中標出每條業務規則對應的實現位置。關鍵不是 prompt 寫得多長而是讓 AI 把一個明確規則映射到代碼和測試。如果規則有歧義不要直接問 AI“你覺得怎么做”而是讓人先開會把歧義消除。7.3 用 CI/CD 守住質量邊界AI 生成代碼進入主分支之前至少應該經過自動化測試、靜態檢查和依賴掃描。一個很基礎的 CI 配置長這樣# 文件路徑.github/workflows/ci.yml name: ci on: [push] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - uses: actions/setup-pythonv5 with: python-version: 3.12 - name: Install dependencies run: | pip install -r requirements.txt pip install pytest - name: Run tests run: pytest -v如果 AI 生成的代碼不能通過這條流水線就不應該進入人工評審環節。這樣AI 的“快”和企業的“穩”之間就有了一個強制隔離點。常見問題與排查思路下面這張表列出企業在使用 AI 開發時最容易碰到的問題以及對應的排查方式。遇到問題不要先懷疑 AI 能力先按表里的順序看。問題現象可能原因排查方式解決方案AI 生成的代碼能運行但業務結果不對只描述了功能沒有描述業務規則對照需求文檔和代碼中的規則分支把業務規則寫成測試用例建立規則清單AI 重構舊代碼后原有功能被破壞回歸測試缺失測試覆蓋太少查看 git diff運行全量測試在改動前補上關鍵路徑測試小步提交業務人員用 AI 建腳本處理核心數據正常需求響應太慢治理缺失檢查有沒有未受管制的腳本、報表或數據庫連接建設需求通道和自助數據平臺同時規范 AI 使用AI 生成依賴有安全漏洞依賴版本過新或存在已知漏洞運行 pip-audit / npm audit 等工具鎖定版本加入依賴掃描流程團隊內代碼風格混亂缺少格式化和架構約束檢查 review 記錄和靜態掃描結果引入 formatter、lint 和架構測試AI 在中間步驟產生幻覺調用了不存在的接口上下文不完整工具權限過高查看 AI 執行日志確認模型上下文縮小任務范圍提供準確的接口文檔最佳實踐與工程建議想讓 AI 長期穩定地輔助企業軟件研發建議把下面幾件事當成制度而不是臨時動作。第一先建模后生成。業務邊界、領域對象、狀態機、權限模型這些高層決策必須由人來定義。AI 可以幫你畫草圖但負責判斷和拍板的一定是團隊。第二把業務規則變成資產。為每條核心規則編號例如 R-001、R-002并且在代碼里通過注釋或測試用例引用對應編號。這樣后續 AI 在修改代碼時更容易通過上下文找到要遵守的規則。第三測試從業務規則出發而不是只追求覆蓋率。覆蓋率高低不是核心目標是否正確覆蓋了關鍵不變量才是。一個 60% 覆蓋率但覆蓋了所有核心規則的測試套件要好過一個 95% 覆蓋率卻只測了正常路徑的測試套件。第四給 AI 工具設置權限邊界。不要讓 AI 直接操作生產環境數據庫也不要讓它直接往 main 分支推代碼。你要的不是一個“足夠自由”的助手而是一個“在邊界內高效工作”的助手。第五人工審查不要流于形式。AI 生成的代碼審查者必須能回答三個問題這段代碼真的滿足業務規則嗎如果規則變化哪里會受影響異常路徑里數據是否保持一致如果審查時回答不了說明上下文還沒建好。第六把線上的異常反饋變成新的測試。生產環境出現數據不一致不要只修數據更要追問為什么測試沒有提前發現然后把反饋轉成測試用例不斷逼近企業的真實世界。這些實踐看起來不酷但企業系統恰恰是靠著這種“不酷”的確定性才敢支撐每天數百萬筆交易。AI 的價值在于壓縮實現時間而不是壓縮驗證和治理環節。結語AI 加快建造但定義世界仍是人的工作回到《奧德賽》那個比喻。AI 可以生成無數個視覺上足夠真實的場景但在一場真正的航行中你需要的不是一幀好看的畫面而是清晰的航線、可靠的船體結構以及在風暴來臨時仍然有效的判斷規則。軟件也一樣。AI 可以把代碼這座“建筑”砌得很快但只有人才知道這座建筑為什么存在、給誰使用、哪根柱子不能動。企業的真實世界不是一個提示詞就能覆蓋的它是一個由組織流程、數據歷史、合規要求和人組成的持續演化的系統。如果你正在推進 AI 輔助開發下一步不是去收藏更多的 prompt 模板而是回到辦公室里和業務負責人一起把你最核心的訂單、審批、對賬規則寫清楚。把這條規則變成測試放進 CI再讓 AI 在那個邊界里盡情發揮。這才是 AI 開發工具真正值得被信任的方式。