幾乎所有開發者都在利用 AI 編碼工具,但是當你身處一個特定的細分領域時會發生什麼事呢?在這個領域,不僅 LLM 的知識水平較低,而且他們的知識可能基於通用知識,這對於你的細分領域來說是完全錯誤的。

這是我在開發 Power Platform Code Apps 時遇到的問題。 Code Apps 是完全基於 React 的應用,託管在 Power Platform 上。因此,它們擁有特定的 SDK 工具包和 CLI 命令。像 Opus 4.6 這樣的模型考慮到其小眾性,表現已經相當不錯了。但想像一下,如果你在這個小眾領域之上建立一個客製化的應用,情況會是怎麼樣的呢?我就是這麼做的,因為我不使用 React,所以我想要一個純 JavaScript 建構的應用程式(我知道我應該使用 React 和 TypeScript,但請記住,我有點另類)。這意味著根本沒有相關的訓練資料,甚至連文件都沒有。而且由於使用的是純 JavaScript,所有的訓練資料其實都在誤導 LLM(學習學習模型)。所以,這時我想建立自己的編碼代理。


一般來說,有三種方法可以獲得更客製化的模型。

  • 打造你自己的

  • 對現有模型進行微調或提煉(可選地使用強化學習)

  • 迅速的

你可以想像我選擇了哪條路,沒錯,就是最簡單的那一條。

  1. 提示概述

  2. 平台

  3. 執行

  4. 學習


  1. 提示概述

如果您已經了解這些內容,可以跳過,但我還是想快速概述完整的提示符號堆疊。

提示堆疊

提示訊息有很多層次,每個層次都更高更重要,你需要了解以下內容:

模型系統提示

這是最高級別,通常由模型所有者加入,主要涉及安全性和合法性等方面。它涵蓋以下內容:

  • 不要分享如何進行非法活動的方法

  • 不鼓勵有害行為

  • 不得洩漏有關該模型的機密資訊。

並非完整列表

應用程式系統提示

再往下一層,就是你所使用的應用程式所新增的功能。這涵蓋了應用程式提供的具體工具,以及應用程式設計者為了提升效能而發現的模式/機制。例如:

  • 此工具讀取本機資料夾

  • 此資源提供有關 x 的訊息

  • 使用命令列介面 (CLI) 時,請確保先驗證身分。

理論上的例子,因為這些都是嚴格保密的。

說明.md

說明文件是針對特定專案的說明,通常涵蓋以下內容:

  • 命名規則

  • 資料夾結構

  • 設計原則

  • 您希望在以下情況下運用哪些技能

  • LLM 獲得的任何學習成果(您可以設定代理自行更新文件)

這有助於確保專案的一致性,並使其更易於閱讀/維護。

技能.md

這些內容模糊了提示和情境之間的界線。它們是針對特定情況的具體指令/知識來源。透過將它們從指令中移除,學習語言模型(LLM)可以決定何時將其新增至指令(類似於動態情境/指令)。例如:

指令和技能由 Anthropic 建立,專為 Claude Code 設計,但其他工具和模型也可以使用它們,只是結果可能不太一致或缺乏層次性。

您的提示

最後,我們還有您發送的提示訊息以及任何其他上下文。

  1. 平台

我可以從幾個方面著手解決這個問題,但我考慮最多的是以下幾種:

  • CLI 包裝器

  • VS Code 擴充

  • GitHub Copilot 擴展

我使用 GitHub Copilot,所以你應該能理解我的選擇。憑藉我在 VS Code Extensions 方面的經驗,以及我喜歡使用代理混合編寫程式碼的事實,對我來說在那裡建置是合理的,儘管有一天我想嘗試 CLI 包裝器。

這裡先提一下,稍後你會發現,只要搭建一個完善的工作空間,涵蓋操作說明和技能,就能實現大部分功能,但這就沒意思了😎

在 VS Code 中建立程式有一些非常強大的優勢:

  • 內建 GitHub Copilot 身份驗證

  • 內建終端

  • 可以自訂使用者介面

  • 除了文字之外,還可以新增按鈕等功能。

  • 無託管/後端

  • 在 VS Code 市集免費分發

所以一旦確定了平台,下一步就是建置了。

  1. 實施

我的AI編碼代理相比簡單的GitHub Copilot將具有3個主要優勢。

  • 簡化的基於 UI 的 CLI 命令

  • 系統提示-專門設計用於確保LLM學員不會利用其JavaScript培訓偏離計畫。

  • 技能文件 - 所有從 CodeApp JS 實作過程中學到的經驗

簡化的基於 UI 的 CLI 命令

要讓程式碼應用程式正常運作,需要使用 Power Platform CLI,它能夠進行身份驗證、建立連線並部署到 Power Platform 環境。為了使開發更符合低程式碼規範並更易於使用,我希望能抽像出這些命令,並使其更加整合。

為此,我建立了一個基於按鈕按下的操作流程,如下所示:

  • 設定 CodeApp JS 文件

  • 已透過租用戶身分驗證

  • 已列出並選擇環境(同時更新設定檔)

  • 根據編寫的程式碼建立連接

  • 已部署的應用

系統提示和技能.md

這些是大部分值程式碼,我把它們放在一起,因為它們的建立方式相同,唯一的區別是始終使用系統提示和特定於任務的技能。

為了建立合適的提示和技能,我訓練了模型,我的意思是,我開發了很多應用程式。在這個過程中,我確保仔細閱讀程式碼的邏輯,並且每次遇到錯誤時,都會將解決方案寫入檔案中。

學習週期

從我的 GitHub Copilot 使用情況來看,你能猜出我哪些天是在測試/學習嗎? 😎

用法

這種方法耗時、枯燥、昂貴,但這樣做的目的是只犯一次錯誤。

這就是真正的秘訣,我所做的就是從經驗中學習,然後記錄下來,以便經紀人知道該做什麼和不該做什麼。

我認為這種訓練/學習過程是所有人工智慧開發(包括 Copilot Studio)的關鍵。你需要反覆測試,每次測試都對你的指令/提示進行微調。這種迭代方法可以提高你的學習邏輯模型(LLM)的結果和一致性。

  1. 經驗教訓

有幾件事確實讓我很困擾,其中最主要的是上下文/提示堆疊的處理。我發現,在我的個人 Copilot 許可證上使用代理時一切正常,但當我使用工作帳戶時,卻會收到「無選項」的錯誤提示,這是因為我的工作帳戶的上下文限制較低。這意味著我可以向代理程式發送的資料量更少,考慮到程式碼庫相對於完整應用程式而言非常小,這顯然是不理想的。

上下文限制問題很大程度上取決於您建立代理的方式。如果您還不了解,提示/上下文堆疊包含了您必須傳送給 LLM 的所有內容。 LLM 沒有記憶功能,因此您每次都必須傳送所有歷史記錄。而且,使用工具時,您實際上發送的不是單一請求,而是多個請求。這可能會導致堆疊非常龐大。以下範例展示了這一點:

上下文堆疊

如上所示,不僅所有系統提示等都被發送了,而且還發送了 5 次(這只是一個簡單的例子)。

但最糟糕的是發送給 LLM 的最後一條訊息,在這些來回通訊的最後,上下文堆疊可能會變得非常大。正如你所看到的,LLM 需要讀取檔案、編寫程式碼,而且還需要透過再次讀取來進行雙重檢查/測試。這就是為什麼即使是小型專案也會出現上下文溢出的情況。

有幾種方法可以解決這個問題(以及我在程式碼中發現的一些錯誤)。

首先也是最顯而易見的一點,就是將系統提示、instruction.md 和 skill.md 的內容精簡到最低限度。確保它們簡潔明了、避免重複、不要過於冗長。

接下來要確保只發送正確的資料。我之前遇到的一個問題是,每次都發送了所有的 skill.md 檔案。我嘗試讓擴充功能根據關鍵字選擇正確的文件,但這經常導致遺漏。最後,我向 LLM 傳遞了一個清單/描述,讓它決定要發送哪些文件。另外,要使用文件樹並保持其結構緊湊。文件樹可以讓 LLM 知道哪些文件是相關的,從而只發送正確的文件。你可以設定文件樹的寬度,但寬度越大,發送的文字就越多。

最後一種方法是處理上下文歷史記錄。正如我所說,每次都會發送所有先前的互動訊息,但如果能減少這些訊息呢?通常的做法是壓縮,也就是讓 LLM 匯總歷史記錄並使用它。這種方法確實有效,但可能會失去重要的上下文資訊。我嘗試的方法是將流程分解,然後刪除不必要的資訊。

我透過建立決策日誌檔案來實現這一點,LLM 使用該檔案儲存待辦事項清單和所有關鍵決策(在返回進行新的開發會話時也很有用)。然後,LLM 將專案分解為多個任務並逐一完成。每完成一項任務,它都會更新待辦事項列表,並刪除所有工具呼叫和推理過程,只保留結果。

凡事都有利弊,你不想移除太多上下文,尤其是如果你的大多數用戶都有更高的限制(新模型不斷突破輸入/輸出令牌限制的界限)。

我發現的另一個問題是模型,它對效能的影響非常大。使用 Opus 4.6/GPT 5.4 可以獲得很好的效果,但如果降級到自動或 GPT 4.1,效果就會非常糟糕。對此我能做的並不多,只能建議在設定中使用更好的模型,並參考一些文件,了解如何針對舊模型更好地提示/建立程式。

我遇到的另一個問題是 CLI 安裝重複。我的筆記型電腦上直接安裝了一個舊版本的 CLI,同時 Power Platform 擴充功能也安裝了一個更新的版本。這會導致擴充功能給 LLM 錯誤的 CLI(過時的版本)。雖然這種情況比較少見,但也說明了依賴外部相依性(例如 CLI 和 VS Code 擴充功能)的風險。對此我們能做的並不多,但這促使我進一步完善 UI,並讓 LLM 在出現問題時提示使用者使用按鈕。其實,程式碼是確定性的,所以盡可能地將功能遷移到傳統的程式碼和 UI 中。


由此可見,如果我都能建立自己的AI編碼代理,那麼任何人都可以。

如果您想試用該代理,可以點擊此處免費取得:https://marketplace.visualstudio.com/items?itemName=PowerDevBox.codeappjsplus;如果您想了解更多關於 CodeAppJS 的資訊或做出貢獻,請造訪 codeappjs.com。


https://powerdevbox.com/blogs/subscribe?tracker=aicodag 😎 訂閱 David Wyatt


原文出處:https://dev.to/wyattdave/how-to-create-your-own-ai-coding-agent-2h1o


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝5   💬6   ❤️3
426
🥈
我愛JS
📝2   💬7   ❤️2
206
🥉
💬1  
4
#4
Gigi
2
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
📢 贊助商廣告 · 我要刊登