如何用好 AI 編碼工具,讓通義靈碼幫你做更多工作
通義靈碼,是阿里云與通義實(shí)驗(yàn)室聯(lián)合打造的智能編碼輔助工具,提供行級(jí)/函數(shù)級(jí)實(shí)時(shí)續(xù)寫(xiě)、自然語(yǔ)言生成代碼、單元測(cè)試生成、代碼優(yōu)化、注釋生成、代碼解釋、研發(fā)智能問(wèn)答、異常報(bào)錯(cuò)排查等能力,提供代碼智能生成、研發(fā)智能問(wèn)答能力。
國(guó)際市場(chǎng)研究機(jī)構(gòu) Gartner 發(fā)布業(yè)界首個(gè)AI代碼助手魔力象限,全球共12家企業(yè)入圍,基于通義大模型技術(shù)打造的通義靈碼在產(chǎn)品功能和市場(chǎng)應(yīng)用等方面表現(xiàn)優(yōu)秀,阿里云也成為唯一進(jìn)入挑戰(zhàn)者象限的中國(guó)科技公司。
通義靈碼上線不到一年就入圍 Gartner 挑戰(zhàn)者象限,產(chǎn)品能力得到廣泛認(rèn)可。通義靈碼底層基礎(chǔ)模型已升級(jí)至 Qwen2,熟練掌握 200 多種編程語(yǔ)言,同時(shí)兼容 Visual Studio Code、Visual Studio、JetBrains IDEs 等主流編程工具,可以輔助寫(xiě)代碼、讀代碼、查 Bug、優(yōu)化代碼,并提供研發(fā)智能問(wèn)答等能力。通義靈碼還支持上傳企業(yè)私域知識(shí)庫(kù),實(shí)現(xiàn)私域知識(shí)問(wèn)答,讓 AI 推薦的代碼更貼合企業(yè)規(guī)范。
歡迎下載使用:https://tongyi.aliyun.com/lingma
如何更好用好通義靈碼呢?這里是我們準(zhǔn)備的最佳使用指南,歡迎收藏!
快捷鍵的運(yùn)用
1.1 默認(rèn)快捷鍵
通義靈碼的許多操作有開(kāi)箱即用的快捷鍵,以下是比較常用的幾項(xiàng):

另外,在通義靈碼的問(wèn)答面板里,可以使用 Cmd+Enter(Macos/Linux)或 Ctrl+Enter(Windows)在輸入問(wèn)題時(shí)換行(直接按下 Enter 回車(chē)鍵會(huì)直接發(fā)送當(dāng)前提問(wèn)內(nèi)容給模型)。
備注說(shuō)明: 更換生成結(jié)果快捷鍵會(huì)提高生成的多樣性參數(shù)(temperature),有時(shí)能生成更長(zhǎng)或更發(fā)散的內(nèi)容。
1.2 自定義快捷鍵
JetBrains IDE 的快捷鍵設(shè)置方法。打開(kāi)菜單欄的 Settings(設(shè)置)頁(yè)面,左側(cè)點(diǎn)擊 Keymap(快捷鍵),然后找到 Plugins -> TONGYI Lingma 子項(xiàng),展開(kāi)即可查看和編輯快捷鍵。

VSCode 的快捷鍵設(shè)置方法。點(diǎn)擊 IDE 左下角的設(shè)置圖標(biāo),點(diǎn)擊鍵盤(pán)快捷方式菜單,在頁(yè)面中搜索 TONGYI Lingma 即可查看和編輯所有快捷鍵。


備注說(shuō)明: 為了便于識(shí)別,VSCode 的大部分通義靈碼快捷鍵都是以 TONGYI Lingma 命名的,但觸發(fā)內(nèi)聯(lián)建議、顯示上一個(gè)/下一個(gè)內(nèi)聯(lián)建議快捷鍵復(fù)用了已經(jīng)存在系統(tǒng)級(jí)功能項(xiàng),因此命名風(fēng)格上稍有差異。
配置的運(yùn)用
2.1 進(jìn)入配置面板
JetBrains IDE 的配置面板在設(shè)置頁(yè)面的頂級(jí)菜單 TONGYI Lingma 板塊,可以通過(guò)點(diǎn)擊狀態(tài)欄的通義靈碼小圖標(biāo),選擇“高級(jí)設(shè)置”項(xiàng)快速打開(kāi)。


VSCode 的配置面板同樣可以從狀態(tài)欄右下角的通義靈碼圖標(biāo)點(diǎn)擊“高級(jí)設(shè)置”進(jìn)入。

2.2 常用配置項(xiàng)
2.2.1 按文件類型禁用自動(dòng)補(bǔ)全
若某些類型文件的自動(dòng)補(bǔ)全結(jié)果較為打擾,可將該文件后綴類型添加到列表中,多種尾綴之間使用英文逗號(hào)分隔,例如:txt,md。
JetBrains IDE 配置區(qū)域:

VSCode 配置區(qū)域:

備注說(shuō)明: 禁用特定文件類型的補(bǔ)全功能主要是禁用自動(dòng)補(bǔ)全觸發(fā),若在文件內(nèi)使用快捷鍵手工觸發(fā)補(bǔ)全(默認(rèn)快捷鍵位 Alt+P),依然能夠使用大模型的內(nèi)容自動(dòng)續(xù)寫(xiě)生成的功能。
2.2.2 下拉提示時(shí)保留補(bǔ)全結(jié)果
默認(rèn)情況下,當(dāng) IDE 有基于語(yǔ)法的下拉補(bǔ)全提示時(shí),通義靈碼會(huì)自動(dòng)停止展示大模型補(bǔ)全內(nèi)容,避免視覺(jué)上的沖突。

若希望通義靈碼總是生成大模型補(bǔ)全,可以勾選該配置項(xiàng),效果如下圖所示,此時(shí)按下 Tab 鍵將會(huì)采納大模型的生成結(jié)果:

JetBrains IDE 配置區(qū)域:

VSCode 配置區(qū)域:

2.2.3 生成長(zhǎng)度控制
通義靈碼支持將自動(dòng)觸發(fā)和手工觸發(fā)的代碼續(xù)寫(xiě)能力分別設(shè)置生成長(zhǎng)度參數(shù)。通常建議將手工觸發(fā)(默認(rèn)快捷鍵 Alt+P) 設(shè)置得比自動(dòng)觸發(fā)稍長(zhǎng)。
JetBrains IDE 配置區(qū)域:

VSCode 配置區(qū)域:

備注說(shuō)明: 這個(gè)配置項(xiàng)只是設(shè)置模型允許生成的最大長(zhǎng)度,若模型某次補(bǔ)全生成的內(nèi)容長(zhǎng)度原本就較短,通過(guò)修改此配置并不能讓模型生成的內(nèi)容變長(zhǎng)。
代碼注釋的運(yùn)用
3.1 通過(guò)注釋引導(dǎo)補(bǔ)全生成
在沒(méi)有額外注釋引導(dǎo)的情況下,模型只能根據(jù)當(dāng)前代碼的上下文,以及項(xiàng)目?jī)?nèi)引用和查找到的相似代碼來(lái)猜測(cè)接下來(lái)可能要編寫(xiě)的內(nèi)容。當(dāng)模型的猜測(cè)不準(zhǔn)確時(shí),可以嘗試通過(guò)增加代碼的方式來(lái)引導(dǎo)模型接下來(lái)應(yīng)當(dāng)實(shí)現(xiàn)什么代碼。
例如在這段代碼里,模型首先猜測(cè)了一個(gè) CHAT_CONTEXT 字段,但這并非我們期望的內(nèi)容:

接下來(lái),我們增加一行注釋,告訴模型下一個(gè)字段是歷史記錄,再次換行模型生成了符合預(yù)期的字段和相應(yīng)的數(shù)據(jù)填充代碼:

3.2 使用描述生成方法
通過(guò)“編輯區(qū)的代碼注釋引導(dǎo)補(bǔ)全”或“使用通義靈碼問(wèn)答面板”都能實(shí)現(xiàn)基于注釋生成整個(gè)方法的目的。由于通義靈碼的智能問(wèn)答場(chǎng)景,使用的模型參數(shù)會(huì)比代碼補(bǔ)全模型的參數(shù)量更大,因此,對(duì)于這類場(chǎng)景,通常更推薦在問(wèn)答面板里直接提出需要生成的問(wèn)題描述。

如果針對(duì)期望生成的語(yǔ)言或方法簽名(方法名、參數(shù)類型、返回值類型)有特殊要求,可以在提問(wèn)的時(shí)候?qū)⒎椒ê灻A(yù)先描述好。 例如:

跨文件索引的運(yùn)用
4.1 及時(shí)保存文件,更新索引
通義靈碼的跨文件索引是抑制代碼幻覺(jué)的重要機(jī)制。通過(guò)自動(dòng)找到當(dāng)前上下文用到的類型和方法定義,模型能感知到項(xiàng)目里其他文件里的類型具有哪些成員,方法具有哪些參數(shù)。
在首次打開(kāi)新的項(xiàng)目時(shí),通義靈碼會(huì)自動(dòng)創(chuàng)建項(xiàng)目的文件索引,此后每次文件保存時(shí),都會(huì)觸發(fā)單個(gè)文件增量的索引更新。然而由于 IDE 里的文件通常存在內(nèi)存緩存,在剛剛編寫(xiě)完一個(gè)文件,切換到另一個(gè)文件時(shí),可能因?yàn)楸镜厮饕形锤?,?dǎo)致無(wú)法感知新增加或修改過(guò)的內(nèi)容,依然按照原本類型結(jié)構(gòu)進(jìn)行推理。
例如在某代碼項(xiàng)目中,我們給 Pet 對(duì)象,新增加了一個(gè) saleable 屬性。

然后切換到另一個(gè)文件,嘗試讓大模型進(jìn)行補(bǔ)全,但是模型推理出的邏輯使用的卻是另一個(gè)不太相關(guān)的字段。

若要消除這種信息差異,可在編輯完前一個(gè)文件時(shí),主動(dòng)按下文件保存(快捷鍵Ctrl+S), 再繼續(xù)編輯其他文件,生成的內(nèi)容就能正確引用到修改過(guò)的對(duì)象結(jié)構(gòu)了。

4.2 針對(duì) MyBatis 場(chǎng)景的優(yōu)化
除了 Java、Python、JavaScript 等主流語(yǔ)言項(xiàng)目的跨文件引用,通義靈碼還支持在編寫(xiě) MyBatis 的 xml 文件時(shí)自動(dòng)感知 Mapper 對(duì)象上引用的表結(jié)構(gòu)類型。例如在編寫(xiě)如下 insert 語(yǔ)句時(shí),插件會(huì)利用當(dāng)前項(xiàng)目中的 TexiOrder 類型信息,確保生成的每個(gè)字段都是正確的。


及時(shí)清理上下文
5.1 適時(shí)清空上下文
在同一次會(huì)話里,前文中的對(duì)話內(nèi)容會(huì)在每次向大模型提問(wèn)時(shí),自動(dòng)作為上文提供給模型。當(dāng)實(shí)際要提問(wèn)的是一個(gè)與前文無(wú)關(guān)的問(wèn)題時(shí),這些額外的信息可能會(huì)對(duì)模型的回答帶來(lái)干擾。

此時(shí)可以點(diǎn)擊問(wèn)答面板頂部的新建會(huì)話按鈕,在新的會(huì)話里進(jìn)行提問(wèn),或使用 /clear context 命令,對(duì)上下文進(jìn)行清空,減少上文對(duì)接下來(lái)問(wèn)答的干擾。

5.2 查看歷史會(huì)話
創(chuàng)建新的會(huì)話后,如果需要尋找此前提問(wèn)過(guò)的內(nèi)容,可以使用歷史記錄功能回到之前的話題,并繼續(xù)追問(wèn)。

基于代碼提問(wèn)
6.1 通用問(wèn)答
若需要基于特定代碼段的內(nèi)容進(jìn)行提問(wèn),除了將代碼內(nèi)容直接貼入問(wèn)答區(qū),也可以先在代碼編輯器里框選一段代碼,然后在問(wèn)答區(qū)針對(duì)這段代碼進(jìn)行提問(wèn),例如:

6.2 內(nèi)置代碼任務(wù)
通義靈碼插件內(nèi)置了解釋代碼、生成單元測(cè)試、生成代碼注釋、生成優(yōu)化建議四個(gè)代碼任務(wù),通義靈碼大語(yǔ)言模型對(duì)這些任務(wù)進(jìn)行過(guò)專項(xiàng)訓(xùn)練。例如,在需要生成單元測(cè)試的時(shí)候,使用內(nèi)置任務(wù)會(huì)比框選代碼之后再輸入生成單元測(cè)試效果更佳。
代碼任務(wù)有三種使用方式,最常用的是在方法定義的開(kāi)頭,點(diǎn)擊通義靈碼小圖標(biāo),在下拉選項(xiàng)中直接選擇需要執(zhí)行的任務(wù)。
JetbriansIDE 的下拉菜單在方法上方:

VSCode 的下拉菜單在 IDE 頂部:

第二種方式是選擇代碼后點(diǎn)擊鼠標(biāo)右鍵,選擇通義靈碼菜單。

第三種方式是選擇代碼后在問(wèn)答面板輸入斜線(/)激活內(nèi)置任務(wù)菜單,然后選擇相應(yīng)任務(wù)。

提示詞的技巧
7.1 在提問(wèn)中引用選擇的代碼
在提問(wèn)時(shí),若同時(shí)在代碼編輯區(qū)圈選了文本或代碼段,則被選擇的內(nèi)容會(huì)自動(dòng)以 Markdown 引用的格式被附加到提問(wèn)內(nèi)容的最后,因此若在提示詞中提及選擇的代碼,應(yīng)對(duì)使用“如下代碼”或“以下內(nèi)容”。例如:
- 正確的說(shuō)法:請(qǐng)檢查以下代碼是否存在下標(biāo)越界風(fēng)險(xiǎn)。
- 錯(cuò)誤的說(shuō)法:請(qǐng)檢查選中的代碼是否存在下標(biāo)越界風(fēng)險(xiǎn)。(模型并不知道選中的代碼是什么)
7.2 在使用命令的時(shí)候,追加信息
通過(guò)在命令后,追加更多的輔助信息,為問(wèn)答提供更多的上下文,以獲得更符合期望的回復(fù)。


7.3 通過(guò)多輪對(duì)話生成有效代碼
在與大語(yǔ)言模型的對(duì)話過(guò)程中,給到上下文越多,生成出來(lái)的結(jié)果越符合用戶的預(yù)期。因此,用戶可以基于上一輪的對(duì)話的基礎(chǔ)上,再進(jìn)行問(wèn)答,這樣,后續(xù)的提問(wèn)的上下文會(huì)更多,因此生成的結(jié)果更符合整個(gè)歷史上下文。當(dāng)然,也會(huì)出現(xiàn)上一輪的歷史信息干擾的現(xiàn)象,這個(gè)時(shí)候,用戶需要適時(shí)地去清空上下文。

在上一輪的基礎(chǔ)上,再繼續(xù)追問(wèn)。

7.4 為模型提供參考示例
當(dāng)需要模型按照指定的格式輸出,或遵循特定的前置規(guī)則時(shí)。與其用文字描述,不如提供一個(gè)參考實(shí)例,往往能達(dá)到更好的效果。例如有一份程序的運(yùn)行結(jié)果文件,可以讓通義靈碼整理成所特定的 JSON 結(jié)構(gòu)文檔。首先打開(kāi)文件,全選問(wèn)題內(nèi)容,然后在問(wèn)答區(qū)域進(jìn)行提問(wèn)。對(duì)比下述兩種提示詞,后者能更穩(wěn)定的輸出預(yù)期的數(shù)據(jù)格式。
- 提示詞 1:將測(cè)試報(bào)告整理成 JSON 格式,每個(gè)測(cè)試結(jié)果是一個(gè) JSON 結(jié)構(gòu),用例名稱放到 name 字段,是否成功放到 success 字段,運(yùn)行耗時(shí)放到 duration 字段(單位毫秒),測(cè)試覆蓋率放到 coverage 字段,detail 字段的值是一個(gè) JSON,將每次的用例輸入和輸出放到其中的 input 和 output 字段。
- 提示詞 2:將測(cè)試報(bào)告整理成 JSON 格式,如輸入報(bào)告:
…報(bào)告內(nèi)容略…
應(yīng)輸出的數(shù)據(jù)為:
[
{
“name”: “超出有效頁(yè)碼范圍時(shí),應(yīng)返回空列表并提示無(wú)更多數(shù)據(jù)”,
“duration”: 3434,
“coverage”: 80,
“detail”: [
{
“input”: “…”,
“output”: “…”
}
]
}
]
請(qǐng)以此為例,生成測(cè)試的報(bào)告。
7.5 為模型設(shè)定身份
相比單純的提問(wèn),預(yù)先給模型提供身份信息也能夠有效的提升模型生成結(jié)果的穩(wěn)定性和準(zhǔn)確性。
以生成測(cè)試用例為例,打開(kāi)接口文檔文件,全選文件內(nèi)容,然后在問(wèn)答區(qū)域進(jìn)行提問(wèn)。對(duì)比下述兩種提示詞,后者能給生成質(zhì)量更高、覆蓋率更好的用例。
- 提示詞 1:請(qǐng)根據(jù)以下接口文檔生成測(cè)試用例。
- 提示詞 2:你是一位經(jīng)驗(yàn)豐富的測(cè)試工程師,特點(diǎn)是對(duì)細(xì)節(jié)異常敏感,并且能夠高效地識(shí)別潛在的問(wèn)題和邊界情況,請(qǐng)根據(jù)以下的接口文檔生成詳盡的測(cè)試用例,確保所有預(yù)期的功能行為都被驗(yàn)證。
備注說(shuō)明: 由于優(yōu)質(zhì)的提示詞往往也需要輸入較多內(nèi)容,這部分技巧比較適合配合通義靈碼即將推出的自定義提示詞功能一起使用。當(dāng)前階段可以先手工輸入或?qū)⑻釂?wèn)模板復(fù)制粘貼到問(wèn)題里再編輯。

浙公網(wǎng)安備 33010602011771號(hào)