選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
8 分鐘閱讀時間 (1534 個字)

打造資料不出門的 AI 開發體驗:建構企業內網的 AI 開發助理 - Part 2

2025-05-19-202326-dall-e-3

對重度拖延症患者來說,寫 code、寫 blog,或是其他類似的創作產出,我們都會盡量拖到最後一刻才動手。因為我們覺得,到了那個 Deadline 的時候,我們比現在更老了,思想也比現在更成熟、更完整了 (???)。

But!!自從上一篇設定好了 Continue 之後,我發覺我的拖延症被稍稍治癒了。 但這篇仍然拖上了一段時間

這一切的改變,來自今天要介紹的兩個功能: Continue 的 autocomplete 和 edit。讓寫 code 不再是把腦袋當牙膏擠,而是一段拖延症患者與模型的對話。

不用在視窗之間切換,單純在編輯器中與模型對話,聽取模型建議後再給予模型回饋,讓思緒集中在對話的脈絡中。這不就是 Vibe Coding 嗎?

由於此篇 blog 的底稿同樣也是使用 VS Code 編寫 markdown 的方式進行的,我想這也算是一種 vibe blogging (誤)。


雖然說是 vibe blogging,但由於我在 Continue 中有給一條 rule 是『總是假裝自己是貓咪,用貓咪說話的方式回覆, 並加上 emoji 以及語尾助詞』,所以其實大部分的時候不是在跟 AI 對話,而是我在構思該怎麼往下寫的時候,貓咪跑來窩在鍵盤上睡覺一樣的 XD


好了,廢話講完了,在要開始進入正題之前,先來提個 Continue 讓我困擾的快速鍵,以及調整方式。

Continue 的其中一個快速鍵是 Ctrl + Shift + L

作用是將當前反白的行數加入 Continue Chat 中作為上下文使用

但這個快速鍵跟 『選取所有重複項目』 的快速鍵衝突到了,導致很常用這個功能的我被此困擾

可以到 File -> Preferences -> keyboard Shortcuts (快速鍵 Ctrl + K, Ctrl + S) 來調整


如果有其他慣用快速鍵被這個套件卡到的,可以用同樣的方式調整開來,避免影響日常的使用。


 Edit

開始寫這個章節之前,我期待著真正(?)的 vibe blogging,給點提示讓模型幫我把這篇講完,但可能我的 Prompt 下得太隨便了,感覺 Edit 的產出跟 Apply 的實際套用也是滿隨便的。

以下是 Continue 在 Edit 上給出來的建議:


有感受到截稿日在即卻被寵物亂入的煩躁感了嗎.... XD

但總之,隨便歸隨便,還是能透過這個範例來帶一下 Continue 的 Edit 是怎麼個運作的方式。

首先,在 Continue 的設定檔中,要先配置 Edit 以及 Apply 角色的模型,可以替原本的模型增加 roles 的設定,並給予 Chat、Edit、Apply 等角色,設定如下:

models:
  - name: gemma-3-27b
    provider: openai
    model: gemma-3-27b
    apiBase: https://llmhost.example.com/v1/
    apiKey: ****************** # 非必填, 服務需要 apiKey 時填入
    roles:
      - chat
      - edit
      - apply


如此就可以在 Continue 的 Models 選單中,看到你的 gemma-3-27b。如果之後有配置更多模型,也可以在這裡做切換。


完成設定後,可以對要編輯的部分將其反白,按下快速鍵 Ctrl + I來加入作為 Edit 的上下文,接著給予提示,如下圖我將一個 .NET Core C# 啟動類別內的註解反白,加入至 Edit 對話中,並請模型幫我接著寫。


這時會發現,明明指定好了要異動的位置及說明,但模型總是會給一些額外的驚喜,好在 Continue 的 Edit 很貼心的提供 Accept/Reject 的功能,覺得 Apply 運作不太好,也可以 Reject 重來,或是只針對需要的部分進行 Accept。

像下圖請模型幫忙生成 C# 的 DI 注入,他寫對了,只是多補了一行已經存在的 WebApplication.CreateBuilder(args);

是說,模型給的註解好像滿完整的。 不過這樣充滿聲音的註解,不知道發了 merge request 後會不會被 reviewer 給退回來 XD


 AutoComplete

AutoCom plete,顧名思義就是自動完成, 可以針對缺少的部分進行補完,例如下圖,我輸入了 using(var conn = new) ,模型就自動幫我補上了 SqlConnection(connectionString) 以及後續的 INSERT 語法。


在設定檔中的相關設定如下:

models:
  - name: gemma-3-27b
    provider: openai
    model: gemma-3-27b
    apiBase: https://llmhost.example.com/v1/
    apiKey: ****************** # 非必填, 服務需要 apiKey 時填入
    roles:
      - autocomplete


可以在原先的模型設定上,直接多增加一個 autocomplete 的 role。或是有其他特別針對 autocomplete 的模型可用時,可以獨立一段設定。

在測試 autocomplete 時遇到了一點障礙,如下圖,同樣建立 SqlConnection 的程式碼片段,模型的建議程式碼推薦總是給我一些奇怪的程式碼,或是不打算回答我問題。


為了確認這個問題,我們可以使用 Continue 的 Console,來確認一下 Continue 實際上送了什麼 Prompt 給模型,進而找出問題所在。使用 Ctrl + Shift + P,並輸入 Continue Console,來開啟 Continue 的 Console。


在 Console 視窗中,我們可以觀察到 Continue 傳送給模型的 Prompt 內容,以上圖的程式碼範例,可以看到 Continue 傳送給模型的 Prompt 內容如下:


可以看到送出去的 Prompt 內,把我的部分程式碼送出,並插入了像是 <fim_prefix> 的內容,並且在游標停駐的位置有 <fim_suffix>,但顯然模型認不得這是要做什麼。

翻找一下官方的 AutoComplete 文件,文件中提到:

An "autocomplete model" is an LLM that is trained on a special format called fill-in-the-middle (FIM)

看起來是需要像是 codegemmacodellama,或是 starcoder 等支援 FIM 的模型才能夠順利運作。

不過,Continue 允許我們自訂提示詞,只是如此會需要消耗比較多的 token,有興趣的人可以搭配下方方式自訂 promptTemplates,再參考 Continue 的 SourceCode 來試試看。

models:
  - name: gemma-3-27b
    provider: openai
    model: gemma-3-27b
    apiBase: https://llmhost.example.com/v1/
    apiKey: ****************** # 非必填, 服務需要 apiKey 時填入
    roles:
      - autocomplete    
    promptTemplates:
      autocomplete: |
        `
        # 自訂的 autoComplete 提示
        `


 最後,有些檔案我們不會想要被送上 LLM 進行程式碼補完,像是這個 Continue 的 yaml,或是在開發 Docker 時常常用到的 .env 等,這時可以透過 Continue 的 User settings 來指定哪些檔案不要啟用 autocomplete。


 參考文件

以 LLM 為核心打造零程式碼查詢流程:簡化 Dify 流程設計、讓非工程人員也能上手
高併發壓力來襲,你的服務是彈性伸縮,還是直接斷線?

相關文章

 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2025/05/22, 週四

Captcha 圖像