全部產品
Search
文件中心

AI Coding Assistant Lingma:企業代碼補全增強使用實踐

更新時間:Jun 14, 2025

靈碼提供了企業代碼補全增強能力,在開發人員使用通義靈碼 代碼產生時,可以結合企業上傳的程式碼程式庫作為上下文進行行間代碼補全,使代碼補全更加貼合企業代碼規範、業務特點。本文將分享如何構建高品質的企業程式碼程式庫,以及開發人員在前端和後端開發情境的使用實踐。

適用版本與支援語言

適用版本

支援後端

支援前端

企業專屬版

Java、C#、C/C++、Go、Python

JavaScript、TypeScript、Vue、React

管理員如何準備高品質企業程式碼程式庫

為確保代碼資料的有效處理,我們建議您遵循以下指導原則來準備程式碼程式庫。這將有助於提升檢索的效率與準確性。

程式碼程式庫的選擇和準備指導

下文將介紹在兩類不同情境下您應該如何進行程式碼程式庫的準備:

  • 情境一 日常工程開發,提升研發效率

    在企業開發中,為了提高代碼複用和開發效率,可以利用多種代碼倉庫來支援檢索增強功能。以下是幾種主要的代碼倉庫選擇方式:

    後端情境的程式碼程式庫準備
    • 【推薦】挑選高頻程式碼片段或檔案:選擇在當前開發工程中頻繁出現或被多次使用的程式碼片段。這些程式碼片段通常具有高度引用性和重複使用的特點,適合作為知識庫的內容。將滿足上述條件的某個工程內的程式碼片段或代碼檔案整理成一個獨立的程式碼程式庫,並上傳到一個獨立的知識庫中,以便於管理和調用。

    • 當前專案的工程代碼:也可以將整個當前專案工程放入知識庫,可以實現跨整個程式碼程式庫的全面檢索,從而提高代碼複用和開發效率。但如果工程中存在幹擾性代碼或大量品質不高的代碼,則會影響代碼補全增強效果。

    前端情境的程式碼程式庫準備
    重要

    上傳使用組件庫的代碼倉庫,而不是組件原始碼倉庫。並且覆蓋的使用情境越全越好。

    • 【推薦】前端模板頁面程式碼程式庫:通過拼裝企業自訂群組件,將那些通用性強且與具體業務緊密相關的前端頁面封裝成模板。這類模板頁面代表了最高品質的實踐案例,例如登入頁、註冊頁、賬戶展示、轉賬等。如果您的企業已經建立了這樣的模板庫,建議優先將其上傳到企業代碼知識中。

    • 當前專案的工程程式碼程式庫:當前專案的程式碼程式庫是包含了與當前開發工作單位最相關的代碼,對於那些編寫得當、結構清晰且具有良好實踐的工程代碼,將其上傳到企業的代碼知識庫,可以實現跨整個程式碼程式庫的全面檢索,從而提高代碼複用和開發效率。但請注意,如果當前專案程式碼程式庫中存在幹擾性代碼或大量品質不高的代碼,則會影響代碼補全增強效果。

  • 情境二 特定業務情境下,確保代碼一致性,減少重複開發

    在企業級應用開發中,某些商務邏輯需要保持一致性以確保系統的穩定性和可維護性。在缺乏統一標準的情況下,不同開發人員可能會採用不同的實現方式,導致商務邏輯不一致,增加代碼維護的複雜性,並可能引發系統穩定性問題。

    情境案例一:企業架構和中介軟體實現的邏輯複用

    某企業在其商品售賣系統中,庫存管理需要採用統一的分布式鎖機制。通過將企業自研的業務架構整合到代碼知識庫中,開發人員在IDE端編寫相關商務邏輯時,能夠方便地召回並複用這些標準化的程式碼片段,從而提升開發效率,減少重複開發,提高代碼品質,並保證商務邏輯的一致性。

    程式碼程式庫的選擇和準備:

    明確目標業務模式和具體實現機制:

    • 識別關鍵業務模組:確定系統中需要統一實現的關鍵商務邏輯模組,例如庫存管理、訂單處理、支付系統等。

    • 細化具體業務的實現機制:例如,在庫存管理中,可能涉及到庫存扣減、庫存查詢、庫存鎖定等不同情境,每個情境可能需要不同的實現機制。

    選擇相關業務架構內的代碼檔案並放入企業代碼知識庫:

    • 從業務架構中篩選出實現關鍵商務邏輯的核心代碼,整理並放入到獨立的代碼知識庫中。例如,庫存扣減需要使用分布式鎖機制確保並發安全,那麼選擇實現分布式鎖的核心代碼模組。

      /**
       * 使用企業自研的分布式鎖架構進行並發控制
       */
      @Service
      public class InventoryService {
          
          @Autowired
          private DistributedLockFramework lockFramework;
          
          @Autowired
          private InventoryRepository inventoryRepository;
          
          /**
           * 扣減庫存,使用分布式鎖確保並發安全
           * @param productId 產品ID
           * @param quantity 扣減數量
           * @return 是否扣減成功
           */
          public boolean deductInventory(Long productId, int quantity) {
              String lockKey = "inventory:" + productId;
              return lockFramework.withLock(lockKey, 30, TimeUnit.SECONDS, () -> {
                  Inventory inventory = inventoryRepository.findByProductId(productId);
                  if (inventory == null || inventory.getQuantity() < quantity) {
                      return false;
                  }
                  inventory.setQuantity(inventory.getQuantity() - quantity);
                  inventoryRepository.save(inventory);
                  return true;
              });
          }
      }
    情境案例二:企業核心商務邏輯複用

    某企業希望建立一種統一的個人化推薦策略應用於其商品推薦系統。通過將自主研發的業務架構融入代碼知識庫,當開發人員在整合式開發環境(IDE)中編寫相關功能時,能夠輕鬆訪問並重複利用這些已標準化的代碼模組。這樣做不僅能夠加速軟體開發過程,避免不必要的重複工作,還能提升代碼的整體品質,同時確保整個系統內商務邏輯的一致性和穩定性。

    程式碼程式庫的選擇和準備:

    明確目標業務模組和具體行為:

    • 識別關鍵業務模組:首先需要確定系統中哪些關鍵商務邏輯模組需要統一實現,例如商品推薦系統。

    • 細化具體的行為:其次,需要具體的業務行為和核心操作步驟:例如,在個人化推薦策略中,可能包括擷取使用者行為資料、提取使用者興趣特徵、擷取候選商品池、計算商品得分並進行排序、以及返回得分最高的商品等幾個核心步驟。這些步驟的實現通過固定的程式碼群組合來完成。

    選擇相關業務架構內的代碼檔案並放入企業代碼知識庫:

    • 從業務架構中挑選出實現關鍵商務邏輯的核心代碼,整理後存放到獨立的代碼知識庫中。以推薦系統的個人化推薦機製為例,以下是一個程式碼範例:

      /**
       * Recommendation Engine服務
       * 實現了基於使用者行為和商品特徵的個人化推薦機制
       */
      @Service
      public class RecommendationService {
          
          @Autowired
          private UserBehaviorRepository userBehaviorRepo;
          
          @Autowired
          private ProductRepository productRepo;
          
          /**
           * 為指定使用者產生個人化推薦列表
           * @param userId 使用者ID
           * @param limit 推薦數量
           * @return 推薦的商品ID列表
           */
          public List<Long> generateRecommendations(Long userId, int limit) {
              // 擷取使用者行為資料
              List<UserBehavior> behaviors = userBehaviorRepo.findRecentByUserId(userId, 100);
              
              // 提取使用者興趣特徵
              Map<String, Double> userInterests = extractUserInterests(behaviors);
              
              // 擷取候選商品池
              List<Product> candidateProducts = productRepo.findRecentlyActive(1000);
              
              // 計算商品得分並排序
              List<ScoredProduct> scoredProducts = candidateProducts.stream()
                  .map(product -> new ScoredProduct(product, calculateScore(product, userInterests)))
                  .sorted(Comparator.comparing(ScoredProduct::getScore).reversed())
                  .collect(Collectors.toList());
              
              // 返回得分最高的商品
              return scoredProducts.stream()
                  .limit(limit)
                  .map(sp -> sp.getProduct().getId())
                  .collect(Collectors.toList());
          }
          
          // 其他輔助方法...
      }
    重要

    對提取出的目標業務模組的代碼進行適當的注釋說明,以便開發人員後續在IDE端可以通過行間注釋方便召回程式碼片段。

    情境案例三:參考舊專案,以提升新專案研發效率

    企業在進行新專案研發時,通過複用舊專案中的核心相似模組代碼,提高了開發效率,減少從零開始編寫所有代碼所需的時間和成本,確保新專案的品質更加可靠。

    程式碼程式庫的選擇和準備:

    明確目標業務和情境識別關鍵業務模組:

    • 確定相似功能:首先明確舊專案和新專案之間的相似功能和實現部分。例如,如果舊專案和新專案都涉及使用者管理、商品展示和訂單處理等功能,這些模組可以作為重點。

    • 評估代碼品質:確保舊專案的代碼已經經過充分測試,並且是穩定可靠的。清理不必要的檔案和配置,確保程式碼程式庫中的內容是乾淨和可複用的。

    細化具體業務行為及核心動作:

    • 提取核心功能:在舊專案中,針對已明確可複用的模組,提取出關鍵的核心功能模組代碼。例如:

      • 使用者管理:使用者註冊、登入、資訊修改等。

      • 商品展示:商品列表、詳情頁、搜尋功能等。

      • 訂單處理:建立訂單、支付處理、訂單狀態更新等。

    重要

    對提取出核心功能模組的代碼進行適當的注釋說明,以便開發人員後續在IDE端可以通過行間注釋方便召回程式碼片段。

    選擇相關業務架構內的代碼檔案並放入企業代碼知識庫。將舊專案的代碼按照模組化結構重新整理,根據新專案各模組負責團隊的分工實現代碼隔離,並建立獨立的模組程式碼程式庫:

    • 代碼知識庫隔離:根據專案的功能模組,將準備好的舊專案代碼上傳到相應的代碼知識庫中。例如,將使用者管理模組、商品展示模組、訂單處理模組等分別存放在不同的獨立知識庫下。

    • 許可權管理:設定合適的存取權限,確保只有相關Team Dev對該模組的知識庫可見,避免在IDE端進行代碼補全時造成不必要的幹擾。

代碼檔案的規範

  1. 支援語言及架構:

    • 後端:Java、C#、C/C++、Go、Python。

    • 前端:JavaScript、Typescript、Vue、React。

  2. 上傳限制:僅適用於原始碼檔案,程式碼程式庫中應僅上傳實際編寫的原始碼檔案。例如,對於Java應上傳.java檔案,對於C#應上傳.cs檔案,對於JavaScript應上傳.js.jsx檔案等。

  3. 請避免上傳以下內容:

  • 測試資料與代碼:請勿上傳測試指令碼、測試案例或任何不包含商務邏輯的測試相關代碼。

  • Mock方法:排除所有由類比方法和工具產生的程式碼,除非這些程式碼封裝含對商務邏輯的具體實現。

  • 構建產物:

    • 前端:排除通過構建工具(如Webpack、Gulp等)產生的檔案,這些檔案通常位於distbuild目錄下。

    • 後端:排除編譯產生的DLL檔案及其他所有編譯輸出。

  1. 注釋要求如下。

  • 對希望被檢索到的函數,在函數頭部應添加詳盡的注釋。

  • 注釋應提供充分的資訊以區分不同的函數,建議參考注釋模板或根據企業規範進行相應調整。

    /**
     * 更新指定訂單狀態。
     *
     * @param orderId 訂單的唯一識別碼。
     * @param newStatus 新的訂單狀態。
     * @return boolean 表示更新是否成功。
     */
  1. 函數名稱規範要求。

  • 如果函數注釋較為簡單,則函數名稱必須能夠準確描述其功能。

  • 使用清晰且具描述性的命名方式,例如:exportOrdersToPDFupdateOrderStatus而不是 func1

上傳指南

  • 打包壓縮檔:將代碼檔案打包為.zip.gz.tar.gz格式。

  • 程式碼封裝大小限制:每個程式碼封裝的大小不得超過100 MB。

開發人員如何使用企業代碼產生增強

後端情境使用實踐

  1. 通過自然語言注釋產生代碼。

    1. 企業程式碼程式庫代碼上傳:上傳包含所需功能代碼的壓縮包至企業程式碼程式庫,例如雪花演算法的代碼,並確保目標函數遵循注釋規範,注釋位於函數頭部。更詳細程式碼程式庫準備指南請參見上述管理員如何準備高品質企業程式碼程式庫

      /**
       * 使用雪花演算法產生唯一序號
       * @param workerId
       * @return
      */
      public synchronized Long getSnowFlowerId(long workerId){
       long id = -1L;
      
       if (workerId < 0 || workerId > snowFlowerProperties.getMaxWorkerId()) {
          throw new IllegalArgumentException(
            String.valueOf("workerID must gte 0 and lte " + snowFlowerProperties.getMaxWorkerId()));
       }
      
       // ... 演算法實現代碼 ...
       
      return id;
      }
    2. 輸入注釋:在整合式開發環境(IDE)中定位到某Java類內,輸入與期望召回的函數相匹配的注釋。注釋格式可以靈活,但應確保含義的準確性和一致性。

      第一種方式

      //請通過雪花演算法產生唯一編號的代碼,返回產生的id

      第二種方式

      /**
       * 使用雪花演算法產生唯一序號
       * @param wId
       * @return
      */

      注釋說明。

      • 注釋長度要求:在編寫代碼時,注釋應盡量避免過於簡短,建議長度至少15個字元,過短的注釋將無法觸發召回。

      • 注釋語義要求:確保注釋的語義準確且有意義,最好包含關鍵詞與傳回值說明,以便靈碼準確地理解和匹配相應的代碼。

      • 多語言支援:支援中英文注釋,程式碼程式庫中的注釋和實際編碼時的注釋可以使用不同的語言。

      • 參數名稱靈活性:參數名稱可以靈活處理,靈碼會根據提供的參數自動調整以匹配召回的代碼。如下反例。

        • //雪花演算法問題:沒有提供足夠的資訊,注釋長度過短。

        • //產生唯一序號問題:沒有使用具體關鍵詞,可能會影響理解和匹配效果。

    3. 代碼產生:首次斷行符號後,靈碼將提供基於注釋產生補全建議;再次斷行符號後,靈碼將根據企業程式碼程式庫中的代碼進行補全。2024-09-12_18-11-55

      說明
      • 如果您的注釋中包含參數,靈碼將自動調整產生代碼中的參數,確保命名一致性。

      • 如果需要重新整理緩衝擷取新的補全建議,macOS可以使用⌥(option) P 手動觸發行間補全,Windows可以使用Alt P手動觸發。

  2. 通過函數簽名產生代碼。

    1. 程式碼程式庫代碼上傳:上傳包含所需功能代碼的壓縮包至企業程式碼程式庫,並確保這些函數具有清晰且獨特的標識,以便於檢索和識別。更詳細程式碼程式庫準備指南請參見上述管理員如何準備高品質企業程式碼程式庫

    2. 輸入函數簽名:在整合式開發環境(IDE)中定位到某Java類內,鍵入目標函數的簽名部分。參數名稱可以靈活處理,靈碼會根據提供的參數自動調整以匹配召回的代碼。

      public List<Object> nextList(String name, int size)

      函數簽名說明。

      • 函數名稱:使用較為清晰的函數名稱,需要具備一定語義作為相似性依據。

      • 參數和傳回值:類型和順序需要與目標函數保持一致,但參數名稱可以靈活處理,靈碼會根據提供的參數自動調整以匹配召回的代碼。如下反例。

        • public List<Object> func1(String name, int size)// 問題:函數名語義不清晰,無法準確反映函數功能

        • public List<String> nextList(int orderId)// 問題:參數類型和傳回值類型,與目標函數不匹配

    3. 代碼補全:首次斷行符號後,靈碼將提供代碼補全建議;再次斷行符號後,靈碼將根據企業程式碼程式庫中的代碼進行自動補全。2024-09-12_18-14-531723624742377-2a4c12e5-bdb9-438b-8732-2d0e15fd0e10.gif

      說明
      • 靈碼將根據您提供的參數名,自動調整產生代碼中的參數名,確保命名一致性。

      • 如果需要重新整理緩衝擷取新的補全建議,macOS可以使用⌥(option) P 手動觸發行間補全,Windows可以使用Alt P手動觸發。

前端情境使用實踐

  1. 通過標籤補全前端自研組件代碼。

    1. 程式碼程式庫代碼上傳:在開始之前,您需要確保所有必要的前端組件代碼已經上傳到企業程式碼程式庫中。如下是React架構樣本。

      <LTable
            isReady={isReady}
            formInitialValues={formInitialValues}
            rowKey="key"
            tableRef={tableRef}
            toolbarLeft={
                <Button type="primary">新增</Button>
            }
            formItems={formItems}
            formRef={formRef}
            columns={columns}
            request={async (params, requestType) => {
              const res: Record<string, any> = await apiGetUserList(params);
              return {
                data: res.data,
                total: res.total,
              };
            }}
      />
    2. 編寫組件代碼: 在您的IDE中開啟相應的.jsx檔案,並開始編寫代碼。輸入基礎HTML標籤或自訂群組件標籤,例如 <LTable />

    3. 代碼自動補全: 當您輸入的代碼達到一定長度,並且能夠與企業組件庫中的代碼匹配時,IDE將自動觸發代碼補全功能,為您產生完整的組件代碼。您也可以通過斷行符號,主動觸發代碼補全。2024-09-12_18-17-56

      重要

      請在完整的組件標籤內觸發您的補全。

  2. 通過自然語言注釋產生代碼。

    1. 程式碼程式庫代碼上傳:上傳包含所需功能代碼的壓縮包至企業程式碼程式庫,並確保每個函數都遵循注釋規範,注釋位於函數頭部。 更詳細程式碼程式庫準備指南見管理員如何準備高品質企業程式碼程式庫章節。如下是JavaScript樣本。

      /**
       * 根據報錯資訊產生,以id為索引值的對象
       * @param {Array<validator,Result>} results
       * @return {Record<string,string>}
      */
      function getErrObj(results) {
        // ... 函數實現代碼 ...
      }
    2. 輸入注釋:在IDE中,在JavaScript檔案內輸入特定的注釋內容,如下樣本。

      //根據報錯資訊產生以 id 為索引值的對象

      注釋說明。

      • 注釋長度要求:在編寫代碼時,注釋應盡量避免過於簡短,建議長度至少15個字元,過短的注釋將無法觸發召回。

      • 注釋語義要求:確保注釋的語義準確且有意義,最好包含關鍵詞與傳回值說明,以便靈碼準確地理解和匹配相應的代碼。

      • 多語言支援:支援中英文注釋,程式碼程式庫中的注釋和實際編碼時的注釋可以使用不同的語言。

      • 參數名稱靈活性:參數名稱可以靈活處理,靈碼會根據提供的參數自動調整以匹配召回的代碼。

    3. 代碼產生:首次斷行符號後,靈碼將提供基於注釋產生補全建議;再次斷行符號後,靈碼將根據企業程式碼程式庫中的代碼進行補全。2024-09-12_18-16-56

說明
  • 如果您的注釋中包含參數,靈碼將自動調整產生代碼中的參數名,確保命名一致性。

  • 如果需要重新整理緩衝擷取新的補全建議,macOS可以使用⌥(option) P 手動觸發行間補全,Windows可以使用Alt P手動觸發。

常見問題

在重新安裝後,即使重啟IDE或重新登入,仍無法成功召回知識庫中的代碼。

解決方案:

  • 在macOS系統中,請執行以下命令以重啟進程並清除緩衝。

    ps -ef|grep lingma|grep start|awk '{print $2}'|xargs -I {} kill -9 {}
  • 如果是Windows系統,請在進程管理器中結束Lingma進程。