AI智能體交互語言DevIns:構建上下文感知的AI驅動編程

代碼爲聘禮 2024-03-17 22:48:39

在 AutoDev 1.7.2 中,我們開始構建一個新的 AI Agent 語言:DevIns,即 Development Instruction。即 DevIns 可以讓用戶更快速描述軟件開發任務, 同時,還可以自動化處理來自 AI Agent 返回的內容。

諸如于: /write:README.md\n```\n# Hello, World!```\n",AutoDev 將會翻譯並執行這個指令,將# Hello, World! 寫入到README.md` 文件中。除此,在這個版本的 DevIns 裏,還可以執行補丁、提交代碼、運行測試。

PS:其實原來是叫 DevIn,但是無奈 Devin AI 項目發布了 demo 視頻,所以改名爲 DevIns。

Why DevIns?

在 AutoDev 項目中,我們通過構建上下文感知與自定義能力,來實現對于軟件開發任務的智能輔助,如自動測試生成與運行、UI 自動生成等。而當 我們在 AutoDev 構建了越來越多的智能體之後,發現所有與模型的交互都是通過指令文本(instruction)。即用戶通過指令文本來與智能體進行交互, 而智能體返回內容,並對編輯器或者 IDE 進行操作。

如在 AutoDev 的自定義 prompt 中,我們可以通過: 解釋選中的代碼:$selction 來讓 AI 爲我們解釋選中的代碼,而這裏的 解釋 就可以看作是一個指令。

所以,我們開始思考,是否可以通過自然語言來與智能體進行交互?即用戶可以通過自然語言來描述自己的需求,而模型可以回複對應的指令文本,以實現 對編輯器或者 IDE 的操作,進而實現對軟件開發任務的自動化輔助。

DevIns 語言是什麽?

DevIns 是一個界于自然語言與指令文本之間的交互語言,其中自然語言用于描述軟件開發任務,而指令文本用于與智能體和 IDE 進行交互。

簡單來說,DevIns 是一個可交互、可編譯、可執行的文本語言。你可以通過 DevIns 來描述軟件開發任務,諸如于:解析代碼、生成代碼、運行測試等等,而後 執行運行,DevIns 編譯器將根據你調用的指令,生成對應的指令文本,並將其發送給智能體,智能體將返回對應的結果,並對編輯器或者 IDE 進行操作。

你可以將你的需求描述成自然語言:

解釋代碼 /file:src/main/java/com/example/Controller.java

而後,AutoDev 將會結合上下文,並將其編譯成對應的指令文本,即讀取 src/main/java/com/example/Controller.java 文件內容。

DevIns Agent 指令

除了基本的讀取文件內容、代碼變更、自定義變量信息,DevIns 還支持更多的指令,諸如于:寫入文件、運行測試、提交代碼等。根據預先設計的指令, 對應的操作可以是:

/write,結合路徑信息,對指令的代碼進行操作/run,運行對應的測試/patch,根據 AI 返回的內容,執行對應的 patch/commit,提交代碼

諸如于于生成內容,可以是:

/write:src/main/java/com/example/Controller.java#L1-L5```javapublic Controller {public void method() {System.out.println("Hello, World!");}}```

詳細見:https://ide.unitmesh.cc/devins

別擔心指令的複雜度,我們在 IDE 開發上擁有豐富的經驗,爲此在 DevIns 構建了 “非常” 強大的交互能力 —— 智能補全與提示。

在 IDE 中使用 DevIns

在安裝完 AutoDev 1.7.2 版本的插件後,新建一個 hello.devins 文件,就可以開始編寫 DevIns 指令了,然後點擊運行即可。如下圖所示:

AutoDev DevIns

是不是非常簡單?

爲什麽名爲 DevIns?

幾周前,當我們開始設計這個語言時,我們的名字意圖是:AutoDev Input Language,即 AutoDev 的輸入語言,我們稱其爲 DevIn —— 我們搜索了一下, 並沒有發現類似的項目。而當語言接近發布的時候, 在社交媒體上更火的 Devin AI 項目也剛好發布了 demo 視頻。

WTF????

考慮到兩者的相似性,我們決定將其重新命名爲 DevIns,即 Development Instruction。改名字並不是一件容易的事,有大量的代碼需要修改, 還有大量的文檔需要更新(雖然沒有),除此還有 JetBrains 的插件市場、倉庫等等。而由于 JetBrains 的審核機制, DevIns 的默認文件後綴依舊是 .devin,還沒有改爲 .devins —— 實在是改不動了。

下一步

在接下來的版本中,我們考慮:

強化 DevIns 語言與智能體的交互方式(類似于 Jupyter Notebook?)結合 AutoDev 的自定義 Agent 能力,構建更多的智能體設計更豐富的 DevIns 指令,以讓 AI 來實現更多的軟件開發任務構建跨平台的 DevIns 編譯器

如果大家有興趣,歡迎加入我們的開發,或者提出你的建議。

立即體驗 AutoDev DevIns,下載對應的 snapshot 版本:https://plugins.jetbrains.com/plugin/21520-autodev/versions/snapshot

0 阅读:47

代碼爲聘禮

簡介:感謝大家的關注