KAI: Delphi跟 C++ Builder 的 AI 輔助工具
2021年開始, LLM 的發展一日千里, 一個月的發展比我們過去一年都快的多, 到了 2023, AI 可以陪我們聊天、幫我們搜尋資訊。到了2024, 生成式 AI 產生各種圖片, 一時每個人都有個吉卜力工作室的角色圖, 年底, Sora 讓大家可以跨越時空到赤壁之戰訪問諸葛亮、周瑜, 大家玩的很開心。2025年隨著MCP大量推出, 真正邁入了 Vibe coding元年, 各種工具都推出了自家的IDE輔助AI外掛, 一時之間, 不會程式語言的人也能做應用程式了, 當然, 2025 年底那位『AI講師』出來控訴 Google 沒有把關好Vibe coding程式的測試, 讓他噴掉了上萬元的 token 費用, 也讓懂程式的人們一下子安心了許多, 畢竟小白就是小白, 太嫩的小白就是會讓公司噴大錢, 這件事也讓很多老闆們看清楚了.
不過, 2025的7月開始, 許多世界級的開發工具供應商, 例如 JetBrains, 已經開始在全系列的開發工具: PHPStorm, WebStorm, CLion, PyCharm 裡面加入 AI 對話工具 AI Assistant, 到了 9 月, 正式推出了 AI 助手: Junie.
Junie 可以直接控管 IDE 打開的整個專案, 當其他工具都還需要用 CLI 下許多指令, 或者用對話提供程式片段讓 Programmer 複製貼上, 或者提供整個檔案, 讓 Programmer 複製進專案去測試的時候, Junie 這個功能領先很遠, 且聽我分享一下。
JetBrains Junie
在2025-2026的前段, 筆者有一段時間需要同時處理C++搭配Qt在Windows, MacOS, Linux三個平台上發佈同一個程式的三平台版本。先別提還有iOS, Android平台, 以及為什麼當時我沒有推薦用 Delphi 開發 (你怎麼知道後來我沒有這麼做?!) 。
在 CLion 上面處理 Qt 跟 C++ 程式的時候, 筆者對於這兩個東東的語法都不熟悉, 熟悉的只有對 OOP 的熟悉跟累積近 30 年的十幾種程式語言血淚史。
當時, 在 Junie 還沒有推出前, 我跟大家一樣, 就是開著 Claude (不是 Claude Code, 對, 我也是個AI免費仔... ), ChatGPT, Perplexity 這三個AI App輪流提問, 讓它們輪流生出 Code snippet, 閱讀裡面的設計有沒有問題, 確定沒有問題, 再貼到程式檔案裡, 試行編譯, 還很可能編譯不過...
但這已經比完全沒有AI的協助要好很多了, 到了9月, Junie 推出之後, 可以跟 Junie 對話, Junie 還是串接了 Claude Sonnet 或者 Gpt-5.0 模型, 但最棒的是我不用再自己複製貼上了, Junie 會自己新增、修改檔案, 還會自行試著編譯, 如果編譯有問題, 就會自己再次修改程式碼, 修改完再試著編譯, 這簡直是太棒了。
到了2026年上半年, 在C++與Qt的協作專案上, Junie幾乎幫我做了8成的設計與基本測試, 我則是看它設計的邏輯是否有問題、與API串接的做法、時機是不是需要調整。
至於跨平台的 CMakeList.txt 相關設定, 超複雜的, Junie 幫我cover了百分之百!
是的, 百分之百. 我對 CMakeList.txt 的設定細節很陌生, 幾乎都是讓 Junie 自己來, 我只負責需要去啟動 Xcode, 執行 GUI 的測試、跨平台的測試而已。
Junie, 真的是好物, 尤其對 GUI 重度依賴, 很討厭 Claude Code 那種 CLI 的人, 不管你的程式年資是 30 年, 20年, 10年, 或者10年以下, 甚至是程式小白, 你一定會愛它的!
但是還是有些專案我會使用 Delphi 來做, 超級期待 Delphi 版的 Junie.
2026/5/28, UTC 3:00 PM - Kai 發佈
Embarcadero 發佈了 Kai - RAD Studio AI 助理,以Youtube Webniar對全球一起發佈這個工具。
Kai 可以透過 GetIt 安裝在 RAD Studio 12/13 的環境中。安裝好了之後,需要從 Options->Kai 登入任何一個 AI 服務的帳號, 可以是 GitHub Copilot, 也可以是 ChatGPT 帳號.
我自己試過 GitHub copilot 帳號, 可能因為我的帳號是免費版吧, 對話內容跟反應有點智障。隔幾天, 為了測試 Codex, 我 Enable 了 ChatGPT Plus的訂閱, 把ChatGPT帳號登入在 Kai 的介面上之後, 試了兩三個專案, 我認為我未來可以不用再自己寫程式了, 這不是開玩笑的。
GUI, Code, Project 三種層次的測試
之前使用 Junie處理 C++ 搭配 Qt, Junie 能夠幫我處理一部分 Qt 的 GUI 設計, 但絕大多數仍舊需要我自己人工調整。所以這次我也把測試的層面寄望於 GUI 的生成。
我用以下的自然對話, 讓 Kai 以我原本已經寫好的一個專案當中的 GUI, 製作為成一個新的專案, 並把它當成這個新專案的 MainForm, 這樣就不會動到我原本寫好的專案, 再以這個 Form 裡面原本的程式碼做延伸, 把我原本沒有寫完整的程式碼補齊, 我給 Kai 的原文是這麼寫的:
<current project description>
My current project "keywordOnSite", which is a FMX project, design for Windows platform only.
In Form1, user input target keyword and click "Search" button, the event handler for BtnSearch button click event will use the keyword inputed in EdKeyword to search with Google site search.
After the Google search result page is rendered, which is fired by TWebBrowser OnDidFinished event, then inject JS_GOOGLE_EXTRACT to get a list with URL and title from the result page, and then add this list into sgResults.
And then user can click btnCheck button to navigate each url in sgResults with WebBrowserVerify, and while WebBrowserVerify fired OnDidFinished, the JS_COUNT_KEYWORD will add keyword as target to inject into WebBrowserVerify to search the keyword count in the DOM body, and update the count into the sgResults.
<expect task>
1. Create a new project, name the new project "keywordOnSiteAgent", which should be a FMX project. The Project can be placed in identical folder, the only concept is creating new file, not replace existing file.
2. Refering the implementation in keywordOnSite, the URL analysis feature, list the URL and title into a tempory list to saving the URL, and extend the feature to go through all result pages, collect all the Google search results into the tempoary list.
3. Base on 2, after the enumating to last page, and collected all result into tempory list, update the list into sgResults.
4. Base on 3, let WebBrowserVerify navigate all the urls shown in sgResults, inject Javascript to search the keyword count, and update the count into the row of the sgResults with the url.
5. The GUI can be designed identically to Form1, just avoid name duplicated with above project.
6. Compile the new project, and try to test it with keyword "PureOS".
是的, 我一開始還沒有很相信 Kai, 所以還加了一些 tag 語法在裡面, 但結果驗證是我多慮了, Kai 連同我需要插入到瀏覽器中執行的 Javascript 程式碼, 都幫我做的好好的, 我只把我想要的結果描述好, 交給 Kai, Kai 就完成了這個新的版本。
原先的版本, 是以 TWebBrowser (WebView2), 搭配 Edge 瀏覽器模式, 讓 Google 對我指定好的網域進行特定關鍵字搜尋.
搜尋結果頁出現的時候, 程式碼會分析這一頁的所有結果, 把 URL 跟 Title 收集起來, 輸出到 GUI 底下的一個 TStringGrid 當中, 再讓使用者點選 "Check" 按鈕, 用另一個 TWebBrowser 一一載入每一個 URL, 載入完成時, 再插入 Javascript, 搜尋 DOM 當中這次的關鍵字出現次數, 再更新到 TStringGrid 裡面對應的欄位裡。
初版的單頁功能正確, 但當時我還沒有時間改成先把所有分頁的結果一次收集好, 再逐一進行檢查。我自己評估自己做這件事情大約需要一個下午的時間。
透過 Kai 跟 ChatGPT 帳號的協助, 這個延伸新版的完成, 僅花了 5 分鐘.
那麼, 要把它變成一個Web Service, 又要多久?
前面這個功能完成了, 就等於是基礎功能完成了。我的思考中, 要讓 Openclaw 能使用它, 我可以把它弄成一個 Web service, 在 Delphi 裡面的 Indy 本來就有 TIdHTTPServer, 又是我使用了25年以上的元件, 萬一有問題我也可以自己處理.
所以我請 Kai 以這個版本為基礎, 做一個新的程式, 加入一個主畫面, 主畫面中放一個TIdHTTPServer元件, 我想讓openclaw 以WebHook 的方式呼叫它, 並且以 JSON 格式傳遞要搜尋的參數.
當一個搜尋的要求進線的時候, 就以前一個專案的 GUI 建立一個視窗 instance, 專司這個要求的所有搜尋處理, 這樣就可以同時處理多個要求.
當整個搜尋完成, 以 JSON 格式把 TStringGrid 的結果回傳給 openclaw, 讓 openclas 可以把這個結果回傳給對應的 Telegram 或者 Teams, What's app 對話.
我當時給 Kai 的對話全文如下:
With current version, please create a new FMX project, adopt current frmKeywordOnSiteAgent to a new form, you can inherit from TfrmKeywordOnSiteAgent or duplicate the GUI and unit as new copy.
Just name the new project KeywordOnSiteServer
I need the following new tasks:
1. Add a new form, hosting TIdHTTPServer as web interface, I need to let openclaw invoke this feature with openclaw standard webhook method, send keyword as parameter with JSON format.
2. While one request received with Restful API, an instance of TfrmKeywordOnSiteAgent will be created, and the web server instance send the keyword to the form instance, triggering the Google search, and then update sgResults, automatically start the checking procedure.
3. After the all the checking procedures are finished, the sgResults of the instance of TfrmKeywordOnSiteAgent will be coordinated as an array sent back to openclaw, and then destory the created instance at runtime.
4. And let openclaw can get the results for individual request, the request was received by openclaw through telegram or Teams dialog. The result should be arranged as a table sending back to the origin requester.
這個對話始於 2:27, 只花了 5 分鐘不到. Kai 做了以下的事情:
- 製作專案 (包含定義 JSON 格式)
- 編譯專案, 修正定義不合是的地方
- 執行專案, 以 CLI 發出 Curl 跟這個程式進行測試與結果驗證
- 產生 CURL 測試指令給我作為範例
- 告知我測試已經完成, 格式與回應都正確
curl -X POST http://127.0.0.1:8789/keyword-check ^
-H "Content-Type: application/json" ^
-d "{\"keyword\":\"Terminal\",\"channel\":\"telegram\",\"to\":\"CHAT_ID\"}"
我拿到了測試範例以後, 自己用 CMD 驗證了一下, 由於有強制全部驗證結果都完成才能回覆的規定, 大約又花了 10 分鐘左右, 確認整個功能正確。
一般要把 GUI 做成這種 Web invoke 的功能, 還需要多幾個 Thread 處理的作業, 我預計自己也得花上4-5小時才能弄完, Kai 則是 5 分鐘處理完。
程式人員們, 可以喝杯茶, 歇會了
如果你是靠寫特定程式的功能維生的程式設計師, 有了 Kai, Junie 這兩個工具, 至少寫 Flutter, Delphi, C++, Python, PHP 這幾個程式語言的 Programmer, 可以休息一下了, 各位不會沒有工作, 但各位的工作可以輕鬆一點了.
過去那些看了就想罵三字經的各種稅、會計、ERP的專案, 看了半天不知道二三十年到底在搞什麼邏輯的寫法, 不用再理會了, Kai 跟 Junie 可以讀懂, 可以幫你寫好、測試.
過去那些你想實現, 只能讓第三方元件、函式庫來處理, 自己要弄個跨平台、跨語言的版本就得經年累月辛苦到嘔心瀝血的東西, 有了 Kai, 有了 Junie, 可以把很多時間留給泡茶跟觀察了.
真正會讓我們沒有工作的, 可能是再過一兩年以後, 基於現在的 Codex 再進化幾個版本, 用講的就能幫你做完一堆事情的真正 AI Agent. Kai 跟 Junie 在程式上面幫了我們很多忙.
Codex 則是從電腦操作的層面, 真正讓你不用研究、設定、安裝、操作, 只要動動嘴, 就能完成大多數你想要的事情, 那才是我們該擔心、害怕的, 雖然怕也沒用, 那天很快就到來了。