我開發 AI Agent 專案踩過的 5 個坑

大家好,我是雙越。[wangEditor](https://link.juejin.cn?target=https%3A%2F%2Fwww.wangeditor.com%2F) 作者,前百度、滴滴 資深前端工程師,慕課網金牌講師,PMP,[前端面試派](https://link.juejin.cn?target=https%3A%2F%2Fwww.mianshipai.com%2F) 作者。

開始

我正在開發一個 AI Agent 專案 智語 一個 AI Agent 個人助理,類似於 Openclaw 小龍蝦。
包括 tools skills memory context permission subagent session command hook MCP-server ... 等 Agent 基礎能力。
你可以和它聊天、讓它讀寫文件、配置 Skills、設定排程任務、使用 MCP server 傳送訊息...
如果你也想和我一起從 0 開發一個 AI Agent,可以私訊我~

image.png

本文分享一下我在開發過程中遇到的一些實際問題,和注意事項,供大家參考。

急於完善 Chat 功能

初學 Agent 開發的同學,尤其是著急做出一個 demo 或者專案,就會過於看重 Chat 聊天功能。
於是,剛開始接入 LLM 介面,成功送出第一個請求,然後就開始考慮完善 Chat 功能。
其實在 Agent 開發中,Chat 功能並不重要,甚至 Chat 都不是 Agent 專案的一部分,它更多的是 UI 前端部分的功能。
我之前分享過一篇文章《別再把 AI Agent 當作聊天機器人了》裡面講過 Agent 和 Chat 的幾個主要區別,初學者要學會區分。

正確的做法是,按照 Agent 的架構設計來做,Chat 作為獨立的模組和 Agent 解耦。例如 智語 專案的功能模組如下,Agent 包含這些模組,但不能包含 Chat

image.png

Skills 配置在程式碼庫中

我一開始設計 Skills 功能的時候,沒有考慮到最後發佈、安裝,使用者使用的真實場景。
我就把 Skills 放在程式碼庫中了,而且在 build 時候,還把這些 Skills 資料夾複製到 dist 目錄下。

image.png

後來發現這樣不行,使用者安裝使用,如果要安裝新 skill,是不會考慮程式碼庫的。
我應該像 OpenClaw 小龍蝦一樣,開闢自己的工作空間目錄 ~/.zhitalk,所以配置都放在這裡。
現在 Skills 也存放在工作空間,分兩個目錄:

  • 安裝的第三方 skill 放在 .agents/skills 目錄
  • 使用者自己建立的 skill 放在 skills 目錄

image.png

同理,MCP Server 和 Hooks 的配置,現在也都放在工作空間目錄的設定檔中 ~/.zhitalk/zhitalk.json

image.png

使用 markdown 檔案儲存記憶

記得最早接觸 Openclaw 小龍蝦的時候,它是使用一個 memory.md 來儲存使用者記憶的。
所以我最早開始設計 智語 專案的時候,也想用這種方式,用一個 markdown 記憶檔案。
但我很快發現這種方式有問題,它會把所有的記憶都混合在一起,而且隨著使用越來越難以管理。

記憶應該分層,不同層級管理不同的記憶,分開管理

  • short-term memory 短期記憶,只在本次 session
  • long-term memory 長期記憶,跨 session
  • profile 個人資訊,全域生效

對於長期記憶,應該使用 sqlite 結構化儲存,這樣才便於增刪改查。

image.png

無腦壓縮 Context

每次呼叫 AI 請求時 Context 如果多了,會出現各種問題,我在之前的部落格中分享很多次了。
一個成熟的 Agent 應該有 Context 壓縮能力,否則隨著聊天記錄增多,Context 會越來越大。
很多初學者壓縮 Context 的方法就是簡單粗暴的:截取前 xx 條。
這樣做雖然高效,但會丟失掉很多之前的資訊,影響 short-term memory 短期記憶。

我為 智語 專案設計了 4 層 Context 壓縮機制,再配合記憶功能,內容幾乎沒有缺失。

  1. 壓縮 tool 輸出,persist tool output
  2. 壓縮 tool message
  3. 超過 80% 壓縮整個
  4. 超過 300 條 message 再截取

你可以呼叫 /compact 命令手動壓縮,也可以等待 Context 使用超過 80% 自動壓縮

image.png

權限打擾使用者

我們都知道 Agent 需要考慮權限和安全,尤其是 tool 呼叫的時候,不能讓 LLM 隨意發揮。
初學者對於權限的設計可能就是不斷地:找使用者確認。凡是不確定的就丟給使用者。
這是一種很不負責任的設計方式,也會因為頻繁打擾使用者而降低使用者體驗。

智語 專案中有非常詳細的權限設計,總結下來大概有三種類型,盡量減少打擾使用者

  • 危險的操作直接拒絕,不打擾使用者
  • 安全的操作直接通過,也不打擾使用者
  • 其他操作,無法判斷安全風險的,會交給使用者確認

image.png

總結

以上就是我開發 智語 專案遇到過的幾個問題,是真實體驗和記錄,不是 AI 生成的。
如果你也需要開發 AI Agent 可以參考本文,不要重複踩坑。
我會繼續分享 AI Agent、AI 程式設計相關的內容,歡迎按讚追蹤~


原文出處:https://juejin.cn/post/7653660327263666176


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

共有 0 則留言


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