AI News HubLIVE
站内改写2 分鐘閱讀

Salesforce CodeGen教程:生成、驗證和重排Python函式,附單元測試和安全檢查

本教程實現了Salesforce CodeGen的端到端工作流程,從Hugging Face載入模型,超越基礎推理,新增函式提取、語法檢查、靜態安全檢查、單元測試驗證、最佳N候選重排、多步驟程式合成、提示風格實驗,最後視覺化迷你基準並匯出可複用檔案。

來源MarkTechPost作者: Sana Hassan

本教程詳細介紹瞭如何構建一個基於Salesforce CodeGen的端到端程式碼生成系統。首先,我們從Hugging Face載入CodeGen模型,例如codegen-350M-mono,並配置執行環境。這包括安裝所需的Python庫(如transformers、accelerate、radon等),檢測GPU是否可用,以及設定隨機種子以確保結果可復現。接著,我們定義了一個通用的文本生成函式generate_text(),它接收自然語言提示並返回生成的程式碼。該函式支援多種生成引數,如最大新令牌數、溫度、top-p和top-k取樣、重複懲罰等,為使用者提供了靈活的控制手段。

在基礎生成功能之上,我們構建了一套實用的工具層,用於提取、驗證和評估生成的程式碼。首先,函式extract_function_source()能夠從原始模型輸出中提取出特定名稱的Python函式定義,並處理可能的語法問題。然後,syntax_ok()利用Python的ast模組進行語法檢查,確保程式碼符合Python語法規範。static_safety_check()則執行靜態安全分析,禁止使用eval、exec、open等危險內建函式,以及禁止匯入模組、定義類或使用非同步函式等操作,防止生成惡意程式碼。這些安全檢查確保了生成程式碼的可靠性。

為了進一步驗證程式碼的功能正確性,我們實現了run_unit_tests_safely()函式,它在一個獨立的程序中執行使用者提供的單元測試,並設定了超時機制以避免無限迴圈。測試在受限制的環境中執行,只允許使用一組安全的內建函式,從而防止潛在的風險。同時,我們還利用radon庫計算程式碼的圈複雜度,為後續的評分提供參考。基於這些指標,我們設計了score_candidate()評分函式,綜合考慮語法正確性、安全性、測試透過率和程式碼複雜度,其中測試透過率的權重最高(3分),語法和安全各佔1分,並減去複雜的懲罰項。

教程透過兩個演示場景展示了系統的能力。第一個演示是基礎的自然語言到程式碼的生成,提示模型編寫一個計算圓面積的函式,並提取、驗證和測試生成的程式碼。第二個演示是“最佳N候選重排”,我們定義了多個程式設計任務,包括計算階乘、判斷迴文字串、生成斐波那契數列和去重保持順序等。對於每個任務,我們生成多個候選函式,然後使用評分函式對它們進行排序,選出最優方案。這個過程展示瞭如何透過多輪生成和重排來提升程式碼質量。

此外,教程還涉及了多步驟程式合成,即透過多次提示逐步構建複雜函式,以及實驗不同的提示風格(如新增註釋、指定返回型別等),以觀察對生成結果的影響。最後,我們對所有任務的結果進行了視覺化,生成了基準測試圖表,並將生成的程式碼工件匯出為獨立的Python檔案,方便日後複用。

透過本教程,讀者不僅學會了如何使用Salesforce CodeGen進行程式碼生成,還掌握瞭如何構建一個包含驗證、安全檢查和重排機制的魯棒程式碼生成流水線。這為在實際專案中應用大型語言模型進行輔助程式設計提供了實用的參考。