Agentic AI的核心不在LLM選型也不在提示詞技巧。真正決定一個Agent能否在無人值守的情況下穩定工作的是它背后的系統設計。
本文就總結了構建AI系統時真正繞不開的10個基礎概念
![]()
1、MCP:通用插件系統
![]()
假設你需要Agent讀取Gmail、更新Notion、查詢數據庫。按傳統做法,每個服務都要單獨寫集成代碼,解析Gmail的API、搞定Notion的鑒權、再寫一套SQL連接邏輯。三個系統,三套代碼,三份維護成本。
MCP(Model Context Protocol)用一種統一協議解決了這個問題。可以把它理解成AI世界的USB-C:不管連什么設備,接口只有一個。
你部署若干MCP服務器,每個服務器對外暴露工具,并附帶清晰的功能描述和輸入參數說明。Agent連上服務器后自動發現可用工具。
舉個例子:某個MCP服務器暴露了send_email函數,描述是"向指定地址發送帶主題和正文的郵件"。Agent把它列入工具清單。用戶說"把報告發給xxx",Agent就帶著正確參數調用這個函數。第二天你加了個search_github服務器,Agent自動發現、自動使用。不需要改任何代碼。
2、推理循環:思考、行動、觀察、重復
![]()
多數開發者把LLM當函數用,輸入問題輸出答案然后就結束了。但現實中的任務不是一錘子買賣,需要根據中間結果不斷調整策略。
推理循環才是Agent真正解題的方式。
Agent先想該做什么,然后執行,再觀察結果,接著重新評估:剛才的做法管用嗎?下一步試什么?如此往復,直到任務完成。
比如你讓Agent查競爭對手的定價。它先想到去看對方官網,結果拿到一個404。它注意到頁面不存在,于是換個思路,轉去主頁找入口。從主頁定位到定價鏈接,點進去,提取數據。每一步都建立在上一步的反饋之上。第一條路走不通,Agent沒有直接報錯退出,而是自己繞了過去。
3、記憶:短期與長期上下文
![]()
短期記憶負責維持當前會話的上下文。用戶提到"之前說的那個文檔",Agent能回溯對話找到具體是哪份。長期記憶則跨越會話邊界,持久化存儲用戶偏好、歷史決策、習得的信息。有了長期記憶,Agent會讓人覺得"它記得我",而不是每次都像跟陌生人打交道。
來看一個場景:用戶說過"我習慣把會開在上午10點之前"。這條偏好被寫入長期記憶,關聯到用戶ID。一周后用戶說"幫我跟Sarah約個會",Agent檢索記憶,發現早會偏好,直接推薦上午9點的空檔,而不是隨機塞一個下午的時間。沒有記憶系統的話用戶每次都得重復說明自己的習慣。煩。
4、護欄:執行前的安全校驗
![]()
Agent準備刪文件,LLM非常確定這就是用戶的意思。可萬一判斷錯了呢?萬一它刪的是生產庫而不是測試數據呢?
護欄就是在操作真正執行前跑的一道驗證。檢查權限、校驗參數合理性、掃描輸出里有沒有敏感信息。本質上是一層安全網,在錯誤造成實際損害之前把它攔下來。
用戶說"清理一下舊的測試數據"。Agent理解成刪50,000條數據庫記錄。護欄介入:這個用戶有刪除權限嗎?"舊測試數據"對應5萬條記錄,合理嗎?系統把這標記為可疑操作,彈出確認。一問才知道,用戶說的是50條,不是50,000條。一場事故就這么被擋住了。
5、工具發現:運行時自動獲取新能力
![]()
把工具列表硬編碼進Agent,下個月加了Jira集成,就得改代碼、重新部署、全量回歸測試。脆弱并且不可擴展。
工具發現的思路完全不同:工具自帶描述文檔,Agent在運行時讀取這些描述,自動學會怎么調用。
假設你在生產環境部署了一個新的日歷MCP服務器,暴露了create_event和list_events兩個函數,附帶功能說明。下次有人說"幫我約個團隊會議",Agent在可用工具列表里看到日歷相關的接口,讀一下描述就知道怎么用了。Agent代碼完全沒動。新能力是它自己"發現"的。
6、錯誤恢復:體面地失敗
![]()
API會超時,服務會宕機,用戶會給模棱兩可的指令,Agent一定會撞上錯誤。關鍵在于它是直接掛掉,還是能聰明地處理。
錯誤恢復的核心是分類和應對。網絡超時?重試。信息缺失?反問用戶。鑒權失敗?寫日志,給出明確的錯誤說明。
Agent試著發一封郵件,SMTP服務器超時了。它沒崩等2秒重試,還是不行,等4秒再試,第三次通了。用戶全程毫無感知。換一種情況:超時一直沒好。三次重試都失敗后,Agent告訴用戶——"郵件服務暫時掛了,草稿已保存,10分鐘后自動重發。"出了什么問題、接下來怎么辦,交代得清清楚楚。
7、人共介入:知道什么時候該停下來問人
![]()
人工介入不等于事事都要審批。它的精髓在于區分風險等級:高風險操作走審批流程,低風險操作該自動就自動。
社交媒體Agent日常起草帖子、自動發布,處理常規內容沒問題。但當它準備回復一條關于產品缺陷的客戶投訴時,它停了下來,給你發通知:"這條回復我寫好了,要發嗎?"你看了看,改了一處措辭,點確認。Agent發出去。該自動的自動,該人審的人審,你不用盯著每一條操作,但關鍵節點上你還是拿著方向盤。
8、上下文工程:喂給Agent對的信息
![]()
LLM夠聰明工具也到位了,但Agent的決策就是很離譜。為什么?信息沒給對。
上下文工程解決的就是這個問題——在每次決策前,把相關信息組裝好送進去。不只是對話歷史,還包括記憶中的用戶偏好、當前系統狀態、時間日期之類的環境變量。
用戶問:"明天的戶外會議要不要改期?"如果上下文里只有這句話,Agent只能瞎猜。但如果上下文里還包括明天的天氣預報(70%概率下雨)、日歷上標注的戶外團建活動、用戶以前遇到下雨就改期的習慣、以及當前空閑的室內會議室,Agent就能給出一個靠譜的建議——挪到B會議室,理由充分。信息差決定了輸出質量。
9、狀態管理:跟蹤多步任務的進度
![]()
用戶不會只問一個簡單問題就完事。他們會提出需要幾小時甚至幾天才能完成的多步驟項目。Agent必須知道自己做到哪了。
狀態管理就是跟蹤每個任務處于什么階段——已規劃、進行中、等待輸入、已完成。沒有這層機制,稍微復雜點的需求Agent就搞不定。
用戶說"調研排名前5的競品,做一張對比表格"。Agent拆成子任務:第一步,確定競品名單(進行中);第二步,逐個調研(等第一步的結果);第三步,生成表格(等第二步的結果)。干到一半需要用戶確認"你最關心哪些指標",Agent就把這個子任務標成等待狀態,拋出問題,轉去做別的事。用戶回復后,它從中斷的地方精確恢復。沒有狀態管理的話?Agent丟失上下文,只能從頭來過。
10、運行時編排:管理執行環境
![]()
Agent不是跑一次就結束的腳本。它是一個長期運行的系統,要響應事件、并行處理任務、扛住重啟、還得在資源限制內運轉。
運行時編排就是這套基礎設施。Agent怎么監聽多個輸入源?怎么優雅關閉?怎么讓外部看到它在干什么?怎么防止某個任務把資源全吃光?這些都是編排層要解決的問題。
一個典型場景:Agent同時監聽Slack消息、定時任務和Webhook回調。事件隊列把每條消息分發給對應的處理器——用戶發的緊急Slack消息即時響應,定時報告在后臺跑。部署新版本時,關閉處理器先把所有進行中的任務狀態存盤。資源限制確保單個任務不會跑超過5分鐘、發起超過50次API調用。出了問題,分布式追蹤能精確復現整個執行鏈路。
何時使用每個概念
從零開始?先搞定MCP和工具發現。地基打好了后面加功能才不會出錯。最怕一上來就硬編碼集成,回頭全是技術債。
測試過了但生產環境翻車?上護欄和錯誤恢復。執行前校驗,瞬態故障自動重試。生產環境的邊界情況永遠比你想的多。
Agent記性差、表現蠢?加記憶。短期記憶給對話,長期記憶存事實。再配合上下文工程確保決策時信息是完整的。
任務卡住跑不動?看看推理循環和狀態管理。復雜需求要拆成可追蹤的子任務,計劃走不通時Agent得有能力自己調整。
擔心安全問題?護欄加人在回路中。起步階段保守一些,隨著對Agent能力邊界摸清楚了,再逐步放權。
提示詞寫得不錯但Agent還是做出錯誤決策?問題多半出在上下文工程。檢查一下Agent在做決定時到底看到了哪些信息——用戶偏好、系統狀態、環境變量,是不是漏了什么。把注入的上下文記錄下來方便排查。
部署和監控頭疼?運行時編排該補上了。事件處理、優雅關閉、可觀測性、資源限制。看不見的問題沒法修。
需要快速接入大量外部服務?MCP服務器。一個協議打通所有工具,別再給每個新服務手寫集成代碼了。
API賬單蹭蹭往上漲?加資源限制。每個任務的執行時間和API調用次數都該有上限。寧可快速失敗,也別把預算悄悄燒光。
用戶不信任Agent?高風險操作走人工審批,其他場景靠錯誤恢復兜底。透明度是信任的前提——告訴用戶Agent在干什么、為什么這么干。
https://avoid.overfit.cn/post/4ed56ec4bdcb4f67b50578bee3f0429b
by Divy Yadav
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.