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

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

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

Github Copilot 在去年的 12 月開始開放免費版本,Google 的 Gemini Code Assist 也推出了個人授權的免費版本 ,甚至 Cursor 也提供了兩周的免費試用

這些免費的服務真的是又香又方便,但每次使用時,心裡都有一個問號:『有沒有可能公司的程式碼就這樣默默的 open source 啦?』,只好都拿來寫一些無關緊要的 Side Project。

如果能有不用不擔心程式碼外流,又能在程式碼撰寫的過程中享受 AI 助理的服務。挖賽!這不是香爆了嗎!!

剛好這陣子老闆請我評估一下如何將 Dify 跟 Open WebUI 導入部門內使用,才發現像是 Ollama 或 LM Studio 這種本地模型部署與管理平台,都提供 OpenAI 相容 API 的支援。

這時!我腦中閃過一個聲音:

『如果有一款 VS Code 的程式碼助理套件,可以透過 OpenAI 相容 API 來跟模型溝通,是不是就可以解決程式碼外流的問題了?』

Dify 跟 Open WebUI 串本地模型很棒,有各種好用的加值工具及模型整合能力,不過一個沉浸式、沒有 context switch 的 AI 協作,我想應該會是工程師夢寐以求的開發體驗。

事不宜遲,就來問 ChatGPT 天底下有沒有這種好康的東西吧:


原來叫做 Continue (這會是一個什麼迴圈嗎??? )

於是,我開始踏上了一個名為 Continue 的旅程。

旅程的一開始,就讓我們先跳過本地模型的建置,因為我用的是已經配置好的 OpenAI 相容 API 服務。

如果需要配置本地模型,可以考慮安裝 Ollama 或是 LM Studio,這兩個服務都有支援 OpenAI 相容 API。

如果要自行配置 Ollama 或是 LM Studio,需考量手上設備的硬體規格是否符合最低要求,或於安裝後選擇適合的模型使用。

Continue 的安裝非常簡單,在 Extensions Marketplace 中搜尋 continue ,找到正確的套件安裝即可。


安裝完成後,在側邊欄會出現 Continue 的圖示,點一下就能開始進行初始設定。


由於我們的訴求是不要有程式碼外流的風險,所以我們沒有要 Log in,也沒有要註冊帳號,我們選 remain local。點選後,會出現如下的提示,說明如何安裝 Ollama 以及配置什麼模型。

由於我手上的 OpenAI 相容 API 並不是本機的 Ollama,我必須自己配置設定檔。

在提示畫面的最下方會看到一行字 This will update your config file,點進去後就可以直接編輯 config file 來完成自定義的模型設定。

撰寫文章的當下,設定檔的格式為 yaml,網路上找得到的資料 (或是問 ChatGPT 等),大多都是 config.json,在官方的文件中說道 Config YAML replaces config.json, which is deprecated. AI 的世界真是快速更迭,連 AI 的工具都是這樣說變就變。

我都在想『朝聞道,夕死可矣』該不會是古人占卜預測未來,發現未來人的世界資訊變化快速,早上才找到教學,下午要實作就改版,氣死!

嗯... 離題了... 

Yaml 說到底,就是另一種跟 json 類似的設定檔表示方式而已,Google 找到的 Blog 文章 (或是 ChatGPT 回答的資料) 仍具有參考價值!

在這邊我們先提供一個最基礎的設定,來測試 Continue 是否能順利跟 AI 模型溝通:

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


好的,有通!但我不想邊 Coding 邊學英文啊!

這時候可以透過 rules 來指定 Continue 該怎麼回覆:


OK!跟美語老師說掰掰了。

在這邊也可以依照自己喜歡或想要的方式,填入想要的規則,像是:

  • 回答簡明扼要,除非使用者要求詳細說明
  • 如果有更好的方式,應主動提出建議
  • 應提醒語法錯誤
  • 應提醒邏輯錯誤
  • 總是假裝自己是貓咪,用喵喵語回覆

嗯...? 好像有什麼奇怪的規則混進來了


完成了簡單的規則定義之後,,終於可以開始實際使用 Continue 了!
在上圖的對話中,我問了一句『這是什麼?』,在這個問句的上前方有一段程式碼,並且上方提示是 Startup.cs 的 46-49 行。

要像這樣向 Continue 對某一段程式碼提問,可以選取該段程式碼,並使用快速鍵 Ctrl + L 來將選取的範圍加入至 Chat 中,作為上下文 (Context) 來請 Continue 解答

除了選取程式碼,在對話中我們也可以透過 @ 的方式,來將某個想提問的檔案整個作為上下文 (Context) 來交給 AI 幫我們解答問題


 譬如,我拿到一個已經使用過時寫法的 .NET Core 原始碼,我可以把 Startup 跟 Program 兩個 class 都送給 Continue,並請他幫忙建議新的寫法


假設 AI 的回答是我們需要的答案,我們也不用再手動複製貼上、怕不小心少刪幾行或貼錯位置,直接點選程式碼區塊右上方的 Apply 就可以將產出的程式碼給套用到對應的檔案去了。省時方便又不容易出錯!

我們也可以透過 prompt 來指定一些特定情境的提示,像是請 Continue 幫忙做 code review 等等


使用 gemma-3-27b 產生的審查建議,整體表現其實還不錯。雖然預先設計了幾個很明顯的錯誤,但該挑出來的問題,它基本上都有抓到!

程式碼以 dotnet samples 的 BuggyAmb/DataLayer.cs 進行微幅調整。

最後一點,也是關鍵的一點,由於我們一開始的訴求就是程式碼外流的風險,所以有一個設定一定要記得,就是關閉 Continue 的 Telemetry 功能!

在 File > Preferences > Settings 中,找到 Extensions 裡面的 Continue,並且下拉至 Telemetry Enabled 的選項,把它取消勾選


 這樣一來,Continue 就不會回傳任何使用資料回開發者的伺服器,確保資料不外洩。

這次先簡單玩了一下 Chat 功能,看起來 Continue 還支援 Edit、Agent 等進階功能,有機會再來繼續挖掘看看!


Continue 的完整 config.yaml 分享整理如下, # 字是註解的意思,想要體驗虛擬嚕貓可以解開 rules 的那條註解:

name: Local Assistant
version: 1.0.0
schema: v1
models:
  - name: gemma-3-27b
    provider: openai
    model: gemma-3-27b
    apiBase: https://llmhost.example.com/v1/
    apiKey: ****************** # 非必填, 服務需要 apiKey 時填入
rules:
    - "總是以繁體中文回應"
    - "總是以台灣用語回應"
    - "回答簡明扼要,除非使用者要求詳細說明"
    - "應提醒語法錯誤"
    - "應提醒邏輯錯誤"
    #- "總是假裝自己是貓咪,用貓咪說話的方式回覆"
prompts:
  - name: review
    description: "程式碼審查"
    prompt: |
      請針對以下程式碼進行審查,並特別注意以下幾點:
        - 變數命名是否清楚易懂,是否遵循 PascalCase、camelCase 等命名規範
        - 是否存在語法錯誤
        - 是否有邏輯錯誤
        - 是否有潛在的資安問題


配置完設定之後可以在 Continue 的 Chat 對話框的模型選單中,點選重整,就可以套用新的設定了! 


 參考文件

慢不是壞事,台灣雲端轉型的後發優勢
打破開發與運維的藩籬,實現真正的DevOps文化

相關文章

 

評論 2

Joe Fu (符文藻) 於 2025/04/25, 週五 09:49

我想看 "總是假裝自己是貓咪,用貓咪說話的方式回覆" 的結果

我想看 "總是假裝自己是貓咪,用貓咪說話的方式回覆" 的結果
Garry Chiang (江秉芳) 於 2025/04/25, 週五 13:47

加上去之後會變成 Catinue (?)

加上去之後會變成 Catinue (?)
已經注冊了? 這裡登入
Guest
2025/04/25, 週五

Captcha 圖像