通義靈碼實踐教程——編碼使用實踐

通义灵码發表於2024-10-21

點選此處,立即下載通義靈碼!https://tongyi.aliyun.com/lingma/

通義靈碼最佳使用實踐參考

通義靈碼是JetBrains或VSCode整合開發環境(IDE)中嵌入的一款智慧開發助手工具,旨在透過人工智慧技術簡化軟體開發過程,提升開發效率。本文將介紹在開發過程中如何深度體驗多種輔助功能。其主要功能包括:通用大模型問答、生成單元測試、提供場景最佳化、編寫說明文件,以及根據您的程式碼生成高質量AI驅動的程式碼等。這些功能為開發者提供了顯著的便利與效率提升。

快捷鍵的運用

預設快捷鍵

通義靈碼的多個操作均配備了開箱即用的快捷鍵,以下列出了幾項常用的快捷鍵。

此外,在通義靈碼的問答皮膚中,使用者可以透過使用 Cmd+Enter(適用於 MacOS/Linux)或 Ctrl+Enter(適用於 Windows)來實現換行功能。請注意,直接按下 Enter Enter鍵將立即將當前提問內容傳送給模型。

說明:使用更換生成結果快捷鍵會提高生成的多樣性引數(temperature),有時能生成更長或更發散的內容。

自定義快捷鍵

JetBrains IDE

  1. 首先開啟選單欄中的設定頁面。
  2. 在皮膚左側選擇“快捷鍵”(Keymap),隨後找到“外掛”(Plugins)中的“TONGYI Lingma”子項,展開後即可檢視和編輯相關快捷鍵。

VSCode

  1. 請單擊 IDE 左下角的設定圖示,隨後選擇鍵盤快捷方式選單。

  1. 在頁面中搜尋“TONGYI Lingma”,即可檢視和編輯所有快捷鍵。

說明:為了便於識別,VSCode 的大部分通義靈碼快捷鍵都是以 TONGYI Lingma 命名的,但觸發內聯建議、顯示上一個/下一個內聯建議快捷鍵複用了已經存在系統級功能項,因此命名風格上稍有差異。

配置的運用

配置皮膚

JetBrains IDE

JetBrains IDE 的配置皮膚位於設定頁面的頂級選單“TONGYI Lingma”板塊。可以透過單擊狀態列中的通義靈碼小圖示,迅速選擇“高階設定”項進行訪問。

VSCode

VSCode 的配置皮膚同樣可以從狀態列右下角的通義靈碼圖示點選“高階設定”進入。

常用配置項

  1. 按檔案型別禁用自動補全功能。
  • 如果某些型別的檔案在使用自動補全時產生干擾,可將該檔案的字尾型別新增至列表中。多種字尾之間應使用英文逗號分隔(例如:txt,md)。

說明:禁用特定檔案型別的自動補全功能主要是指禁用自動補全觸發。然而,在檔案內透過快捷鍵手動觸發補全(預設快捷鍵為 Alt+P)時,仍然可以使用大模型的內容自動續寫生成的功能。

  1. 下拉提示時保留補全結果。
  • 預設情況下,當 IDE 有基於語法的下拉補全提示時,通義靈碼會自動停止展示大模型補全內容,避免視覺上的衝突。image

  • 若希望通義靈碼總是生成大模型補全,可以勾選該配置項,效果如下圖所示,此時按下 Tab 鍵將會採納大模型的生成結果。image

  1. 生成長度控制。
  • 通義靈碼支援將自動觸發和手工觸發的程式碼續寫能力分別設定生成長度引數。通常建議將手工觸發(預設快捷鍵 Alt+P) 設定得比自動觸發稍長。

說明:這個配置項只是設定模型允許生成的最大長度,若模型某次補全生成的內容長度原本就較短,透過修改此配置並不能讓模型生成的內容變長。

程式碼註釋的運用

透過註釋引導補全生成

在缺乏額外註釋引導的情況下,模型只能基於當前程式碼的上下文,以及專案中引用和找到的相似程式碼來推測接下來可能要編寫的內容。當模型的推測不準確時,可以透過增加程式碼的方式來引導模型實現所需的程式碼。

  1. 例如,在以下這段程式碼中,模型首先推測了一個 CHAT_CONTEXT 欄位,然而並不是我們所期望的內容。

  1. 接下來,我們新增一行註釋,以指示模型下一個欄位為歷史記錄。隨後,模型生成了符合預期的欄位及其相應的資料填充程式碼。

使用描述生成方法

  1. 透過“編輯區的程式碼註釋引導補全”或“使用通義靈碼問答皮膚”,均可實現基於註釋生成整個方法的目標。由於通義靈碼的智慧問答場景所使用的模型引數量通常大於程式碼補全模型的引數量,因此,對於這類場景,通常建議在問答皮膚中直接提出所需生成的問題描述。

  1. 如果對期望生成的語言或方法簽名(包括方法名、引數型別、返回值型別)有特殊要求,請在提問時詳細描述該方法簽名。

跨檔案索引的運用

及時儲存檔案並更新索引

  1. 通義靈碼的跨檔案索引是抑制程式碼幻覺的重要機制。透過自動識別當前上下文中所涉及的型別和方法定義,模型能夠感知專案中其他檔案的型別所包含的成員以及方法所具有的引數。在首次開啟新專案時,通義靈碼將自動建立專案的檔案索引。此後,每次儲存檔案時,將觸發單個檔案的增量索引更新。然而,由於整合開發環境(IDE)中的檔案通常存在記憶體快取,在剛剛編寫完一個檔案後切換到另一個檔案時,可能因本地索引尚未更新而無法識別新增加或修改過的內容,仍然按照原有的型別結構進行推理。例如在某程式碼專案中,我們為 Pet 物件新增了一個 saleable 屬性。

  1. 隨後切換至另一個檔案,嘗試讓大模型進行補全,但模型推理出的邏輯使用的是另一個不太相關的欄位。

  1. 若要消除這種資訊差異,建議在編輯完前一個檔案後,主動按下檔案儲存鍵快捷鍵Ctrl+S,然後再繼續編輯其他檔案。這樣生成的內容將能夠正確引用到修改過的物件結構。

針對MyBatis場景的最佳化方案

除了 Java、Python、JavaScript 等主流程式語言專案的跨檔案引用功能,通義靈碼還支援在編寫 MyBatis 的 XML 檔案時自動識別 Mapper 物件所引用的表結構型別。例如,在編寫如下的 insert 語句時,外掛會利用當前專案中的 TexiOrder 型別資訊,確保生成的每個欄位都為正確的。

及時清理上下文資訊

適時清空上下文

在同一次會話中,前文的對話內容會在每次向大模型提問時,自動作為上下文提供給模型。當實際提問的是一個與前文無關的問題時,這些額外資訊可能會對模型的回答產生干擾。

此時,使用者可以單擊問答皮膚頂部的新建會話按鈕,以在新的會話中進行提問,或使用/clear context命令清空上下文,以減少前文對後續問答的干擾。

檢視歷史對話記錄

在建立新的會話後,如需查詢之前提問的內容,可利用歷史記錄功能返回至先前的話題,並繼續進行追問。

基於程式碼提問

通用問答

若需要基於特定程式碼段的內容進行提問,除了可以直接將程式碼內容貼上到問答區外,還可以先在程式碼編輯器中選擇一段程式碼,然後在問答區針對該段程式碼進行提問,例如。

內建程式碼任務

  1. 通義靈碼外掛內建了四項程式碼任務:解釋程式碼、生成單元測試、生成程式碼註釋和生成最佳化建議。通義靈碼大語言模型針對這些任務進行了專項訓練。例如,在生成單元測試的情況下,使用內建任務的效果優於先框選程式碼後再輸入生成單元測試的方式。

  2. 程式碼任務有三種使用方式。其中最常用的方式是在方法定義的開頭,點選通義靈碼的小圖示,並在下拉選項中直接選擇所需執行的任務。

a. 第一種方式,是使用IDE下拉選單的方法。

b. 第二種方式,選擇程式碼後右鍵單擊滑鼠,並從上下文選單中選擇“通義靈碼”選項。整屏示例@1x

c. 第三種方式,選擇程式碼後在問答皮膚輸入斜線(/)以啟用內建任務選單,接著選擇相應的任務。整屏示例@1x

提示詞的使用技巧

在提問中引用所選程式碼

在提問時,如果同時在程式碼編輯區選擇了文字或程式碼段,所選擇的內容將自動以 Markdown 引用格式附加到提問內容的末尾。因此,若在提示詞中提及所選擇的程式碼,應使用“如下程式碼”或“以下內容”,例如。

  • 正確的說法:請檢查以下程式碼是否存在下標越界風險。
  • 錯誤的說法:請檢查選中的程式碼是否存在下標越界風險。 (模型並不知道選中的程式碼是什麼)

在使用命令時,請附加相關資訊。

透過在命令後追加更多的輔助資訊,可以為問答提供更為豐富的上下文,從而獲得更符合預期的回覆。

透過多輪對話生成有效程式碼

在與大語言模型進行對話時,提供的上下文越豐富,生成的結果越能符合使用者的預期。因此,使用者可以在上一輪對話的基礎上繼續進行問答,從而增加後續提問的上下文資訊,這樣生成的結果能夠更好地反映整個歷史上下文。然而,上一輪的歷史資訊有時可能會造成干擾,此時使用者需要適時清空上下文。

在上一輪的基礎上,進一步進行深入追問。

為模型提供參考示例

當需要模型按照指定格式輸出或遵循特定前置規則時,提供一個參考例項往往能取得更好的效果,而非僅用文字描述。例如,某一程式的執行結果檔案可以使通義靈碼整理成特定的 JSON 結構文件。首先,開啟檔案並全選問題內容,然後在問答區域進行提問。對比下述兩種提示詞,後者能夠更穩定地輸出預期的資料格式。

  • 提示詞1:將測試報告整理為JSON格式,每個測試結果為一個JSON結構。用例名稱應放置於name欄位,成功與否應記錄於success欄位,執行耗時需在duration欄位中體現(單位為毫秒),測試覆蓋率則應放置在coverage欄位。detail欄位的值為一個JSON,包含每次用例的輸入和輸出,分別存放於input和output欄位中。
  • 提示詞2:將測試報告整理為JSON格式,具體格式參照輸入報告。

```
…報告內容略…


應輸出的資料如下。請根據此示例生成測試報告。

[
{
“name”: “超出有效頁碼範圍時,應返回空列表並提示無更多資料”,
“duration”: 3434,
“coverage”: 80,
“detail”: [
{
“input”: “…”,
“output”: “…”
}
]
}
]


### 為模型設定身份

與單純的提問相比,預先向模型提供身份資訊能夠有效提升生成結果的穩定性和準確性。以生成測試用例為例,首先開啟介面文件檔案,全面選取檔案內容,然後在問答區域進行提問。對比下述兩種提示詞,後者能夠生成質量更高且覆蓋率更好的用例。

- 提示詞1:請根據以下介面文件生成相應的測試用例。
- 提示詞2:您是一位經驗豐富的測試工程師,具備對細節的高度敏感性,並能夠高效識別潛在問題及邊界情況。請根據以下介面文件生成詳盡的測試用例,以確保所有預期功能行為均得到驗證。

> **說明**:由於優質的提示詞通常需要輸入較多內容,因此這一部分的技巧與通義靈碼即將推出的自定義提示詞功能結合使用較為合適。在當前階段,使用者可以選擇手動輸入或將提問模板複製貼上到問題中進行編輯。

相關文章