有沒有想過建立像 GitHub Copilot 這樣的程式碼完成工具很複雜?令人驚訝的是,它並沒有看起來那麼難!
身為工程師,我一直對程式碼完成工具的幕後工作方式著迷。因此,我對這個過程進行了逆向工程,看看我是否可以自己建造一個。
這是我自己建造並發布的一個 - LLM-Autocompleter
隨著 AI 輔助工具成為軟體開發的常態,創建自己的程式碼完成工具是了解語言伺服器協定 (LSP)、API 以及與 OpenAI 的 GPT 等高階模型整合的好方法。另外,這是一個非常有價值的項目。
程式碼補全工具本質上將語言伺服器協定 (LSP) 伺服器與來自 VS Code 等平台的內嵌程式碼補全機制結合。在本教程中,我們將利用 VS Code 的內聯完成 API 並建立我們自己的 LSP 伺服器。
在深入討論之前,讓我們先了解什麼是 LSP 伺服器。
LSP 伺服器是一種後端服務,為文字編輯器或整合開發環境 (IDE) 提供特定於語言的功能。它充當編輯器(客戶端)和特定於語言的工具之間的橋樑,提供以下功能:
程式碼完成(在您鍵入時建議程式碼片段),
前往定義(導航到定義符號的程式碼部分),
錯誤檢查(即時反白顯示語法錯誤)。
語言伺服器協定(LSP)背後的想法是標準化此類伺服器和開發工具如何通訊的協定。這樣,單一語言伺服器就可以在多個開發工具中重複使用,LSP 只是一個協定。
透過標準化這些伺服器透過 LSP 與編輯器的通訊方式,開發人員可以創建跨各種平台無縫工作的特定於語言的功能,例如 VS Code、Sublime Text,甚至 Vim。
現在您已經了解了 LSP 的基礎知識,讓我們逐步深入建立我們自己的程式碼完成工具。
我們將首先使用 VS Code 提供的範例內聯完成擴充。您可以直接從 GitHub 複製它:
vscode-sample-inlinecompletion
現在讓我們開始設定lsp伺服器,您可以按照以下結構
1 2 3 4 5 6 7 8 9 |
|
有關更多信息,您還可以查看 lsp-sample
我會給你們一些程式碼,你們必須將一些東西縫合在一起,我希望你們能夠學習。下圖顯示了我們要建立的內容。
讓我們前往 client/src/extension.ts 並刪除激活函數中的所有內容
1 2 |
|
讓我們開始設定
副檔名.ts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
一些資訊
我們可以遵循不同類型的協定來在伺服器和客戶端之間進行通訊。
欲了解更多信息,您可以訪問 microsoft-lsp-docs
為什麼是stdio? Stdio 是客戶端和伺服器之間支援最廣泛的通訊協定之一。它允許我們建立的 LSP 伺服器不僅可以在 VS Code 中運作,還可以在 Vim 和 Sublime Text 等其他編輯器中運作。
server.ts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
|
初始化.ts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
退出.ts
1 2 3 |
|
shutdown.ts
1 2 3 |
|
完成基本功能後,您現在可以使用鍵盤上的 F5 鍵或按照偵錯指南在偵錯模式下執行 vscode
現在讓我們從新增內聯提供者開始,並根據
取得請求和回應讓我們在 methodStore 中加入一個新方法
server.ts
1 2 3 4 5 6 |
|
一代.ts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
|
模板.ts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|
現在讓我們註冊內聯供應商
副檔名.ts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
|
本部落格為您提供了建立自己的程式碼完成工具所需的基礎,但旅程並沒有就此結束。我鼓勵您嘗試、研究和改進此程式碼,探索 LSP 和 AI 的不同功能,以根據您的需求自訂工具。
無論是誰嘗試實現這一點,我都希望他們能夠學習、研究並將東西整合在一起。
了解 LSP 伺服器:您已經了解了 LSP 伺服器是什麼、它如何為特定於語言的工具提供支持,以及為什麼它對於跨編輯器支援至關重要。
建立 VS Code 擴充:您已經探索如何使用 API 將程式碼完成整合到 VS Code 中。
AI 驅動的程式碼完成:透過連接到 OpenAI 的 GPT 模型,您已經了解了機器學習如何透過智慧建議提高開發人員的工作效率。
如果你到達這裡,我很想知道你學到了什麼。
如果您今天從我的部落格中學到了新東西,請按讚。
與我聯絡- linked-In
以上是建立您自己的 GitHub Copilot:程式碼完成工具逐步指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!