1. 白皮書(shū)
第五天的白皮書(shū)提供了一份 AI Agents 運(yùn)營(yíng)生命周期的全面技術(shù)指南。重點(diǎn)關(guān)注 Agent 的部署、擴(kuò)展與生產(chǎn)化落地。
搭建一個(gè) AI agent 原型只需要幾分鐘,甚至幾秒鐘就能完成。但要把這個(gè)看似精巧的演示版本,打磨成企業(yè)可信賴(lài)、能穩(wěn)定依賴(lài)的生產(chǎn)級(jí)系統(tǒng),真正的考驗(yàn)才剛剛開(kāi)始。這便是行業(yè)內(nèi)常說(shuō)的 “最后一公里” 生產(chǎn)鴻溝。我們?cè)谂c客戶(hù)的實(shí)際合作中發(fā)現(xiàn),推進(jìn) agent 落地的過(guò)程里,約 80% 的精力并非用于優(yōu)化 agent 的核心智能,而是投入到基礎(chǔ)設(shè)施搭建、安全防護(hù)強(qiáng)化與合規(guī)驗(yàn)證等工作中,唯有做好這些,才能確保 agent 可靠、安全地運(yùn)行。
Agent 具備自主交互能力、狀態(tài)持續(xù)性,且執(zhí)行路徑動(dòng)態(tài)可變 —— 這些特性使其運(yùn)營(yíng)復(fù)雜度遠(yuǎn)超傳統(tǒng)系統(tǒng),也因此帶來(lái)了三類(lèi)獨(dú)特的運(yùn)營(yíng)痛點(diǎn),需要針對(duì)性策略破解:
- 動(dòng)態(tài)工具編排(Dynamic Tool Orchestration):agent 會(huì)根據(jù)任務(wù)需求實(shí)時(shí)選擇、組合工具,形成獨(dú)特的 “執(zhí)行軌跡”。這意味著系統(tǒng)需要具備穩(wěn)健的版本管理、嚴(yán)格的權(quán)限控制與全面的可觀測(cè)性(observability),以應(yīng)對(duì) agent 每次運(yùn)行時(shí)截然不同的行為模式。
- 可擴(kuò)展?fàn)顟B(tài)管理(Scalable State Management):agent 能在多輪交互中保留 “記憶”,而如何在大規(guī)模場(chǎng)景下,安全且一致地管理會(huì)話(huà)與記憶數(shù)據(jù),是系統(tǒng)設(shè)計(jì)層面的復(fù)雜難題。
- 不可預(yù)測(cè)的成本與延遲(Unpredictable Cost & Latency):agent 獲取答案的路徑靈活多變,若缺乏智能預(yù)算管控與緩存機(jī)制,其運(yùn)行成本與響應(yīng)時(shí)間將難以預(yù)估和控制,可能給企業(yè)帶來(lái)隱性的資源浪費(fèi)。
要成功跨越這些障礙,搭建 Agent 生產(chǎn)化的堅(jiān)實(shí)基礎(chǔ),需依托三大核心支柱:自動(dòng)化評(píng)估(Automated Evaluation)、自動(dòng)化部署(CI/CD) 與 全面可觀測(cè)性(Comprehensive Observability)。
1.1. 人和流程
在談?wù)摿四敲炊嚓P(guān)于持續(xù)集成/持續(xù)部署、可觀測(cè)性和動(dòng)態(tài)流水線之后,為什么要把重點(diǎn)放在人員和流程上呢?因?yàn)槿绻麤](méi)有合適的團(tuán)隊(duì)來(lái)構(gòu)建、管理和治理,世界上最好的技術(shù)也會(huì)變得無(wú)效。

在傳統(tǒng)的 MLOps 環(huán)境中,這涉及到幾個(gè)關(guān)鍵團(tuán)隊(duì):
- 云平臺(tái)團(tuán)隊(duì):由云架構(gòu)師、管理員和安全專(zhuān)家組成,該團(tuán)隊(duì)負(fù)責(zé)管理基礎(chǔ)云基礎(chǔ)設(shè)施、安全性和訪問(wèn)控制。團(tuán)隊(duì)為工程師和服務(wù)賬戶(hù)授予最小權(quán)限角色,確保僅能訪問(wèn)必要的資源。
- 數(shù)據(jù)工程團(tuán)隊(duì):數(shù)據(jù)工程師和數(shù)據(jù)所有者構(gòu)建并維護(hù)數(shù)據(jù)管道,負(fù)責(zé)數(shù)據(jù)的攝入、準(zhǔn)備和質(zhì)量標(biāo)準(zhǔn)。
- 數(shù)據(jù)科學(xué)與MLOps團(tuán)隊(duì):該團(tuán)隊(duì)包括進(jìn)行模型試驗(yàn)和訓(xùn)練的數(shù)據(jù)科學(xué)家,以及利用CI/CD大規(guī)模自動(dòng)化端到端機(jī)器學(xué)習(xí)管道(例如預(yù)處理、訓(xùn)練、后處理)的機(jī)器學(xué)習(xí)工程師。MLOps工程師通過(guò)構(gòu)建和維護(hù)標(biāo)準(zhǔn)化的管道基礎(chǔ)設(shè)施來(lái)為團(tuán)隊(duì)提供支持。
- 機(jī)器學(xué)習(xí)治理:這一集中式職能(包括產(chǎn)品負(fù)責(zé)人和審計(jì)人員)負(fù)責(zé)監(jiān)督機(jī)器學(xué)習(xí)的生命周期,作為工件和指標(biāo)的存儲(chǔ)庫(kù),以確保合規(guī)性、透明度和問(wèn)責(zé)制。
生成式人工智能為這一領(lǐng)域增添了新的復(fù)雜性層面和專(zhuān)門(mén)角色:
- Prompt 工程師:雖然這個(gè)職位名稱(chēng)在行業(yè)中仍在演變,但這類(lèi)人員將編寫(xiě)提示詞的技術(shù)技能與深厚的領(lǐng)域?qū)I(yè)知識(shí)相結(jié)合。他們?yōu)槟P痛_定合適的問(wèn)題和預(yù)期答案,不過(guò)在實(shí)際中,這項(xiàng)工作可能由人工智能工程師、領(lǐng)域?qū)<一驅(qū)B殞?zhuān)家負(fù)責(zé),具體取決于組織的成熟度。
- AI 工程師:他們負(fù)責(zé)將生成式人工智能解決方案擴(kuò)展到生產(chǎn)環(huán)境,構(gòu)建強(qiáng)大的后端系統(tǒng),其中包含大規(guī)模評(píng)估、防護(hù)措施以及檢索增強(qiáng)生成/工具集成。
- DevOps/App 開(kāi)發(fā):這些開(kāi)發(fā)人員構(gòu)建與生成式人工智能后端集成的前端組件和用戶(hù)友好型界面。
組織的規(guī)模和結(jié)構(gòu)會(huì)影響這些角色;在小型公司中,個(gè)人可能身兼數(shù)職,而成熟的組織則會(huì)擁有更多專(zhuān)業(yè)化的團(tuán)隊(duì)。有效協(xié)調(diào)所有這些不同的角色,對(duì)于建立堅(jiān)實(shí)的運(yùn)營(yíng)基礎(chǔ)以及成功將傳統(tǒng)機(jī)器學(xué)習(xí)和生成式人工智能項(xiàng)目投入生產(chǎn)至關(guān)重要。

1.2. 走向生產(chǎn)
如何將所有這些專(zhuān)業(yè)人員的工作轉(zhuǎn)化為一個(gè)可信賴(lài)、可靠且面向用戶(hù)的系統(tǒng)呢?答案在于一套規(guī)范化的生產(chǎn)前流程,該流程建立在一個(gè)核心原則之上:評(píng)估門(mén)控部署(Evaluation-Gated Deployment):任何 Agent 版本在面向用戶(hù)之前,都必須先通過(guò)全面評(píng)估,以此證明其質(zhì)量與安全性。在生產(chǎn)前階段,我們用自動(dòng)化的確定性替代了人工操作的不確定性,這一階段主要由三大支柱構(gòu)成:
- 一是作為質(zhì)量關(guān)卡的嚴(yán)格評(píng)估流程;
- 二是保障該流程落地的自動(dòng)化 CI/CD 流水線;
- 三是降低生產(chǎn)上線最后一步風(fēng)險(xiǎn)的安全發(fā)布策略。
1.2.1. 作為質(zhì)量關(guān)卡的評(píng)估
傳統(tǒng)的軟件測(cè)試對(duì)于具有推理和適應(yīng)能力的系統(tǒng)來(lái)說(shuō)是不夠的,評(píng)估 Agent 與評(píng)估 LLM 也不同:不僅需要評(píng)估最終答案,還需要評(píng)估完成任務(wù)所采取的整個(gè)推理和行動(dòng)軌跡。一個(gè) Agent 可能通過(guò)了其工具的100項(xiàng)單元測(cè)試,但仍可能因選擇錯(cuò)誤的工具或生成幻覺(jué)性的響應(yīng)而徹底失敗。我們需要評(píng)估其行為質(zhì)量,而不僅僅是功能正確性。這個(gè)關(guān)卡主要可以通過(guò)兩種方式實(shí)現(xiàn):
- 人工 "Pre PR" 評(píng)估:在提交代碼拉取請(qǐng)求(PR)前,由 AI 工程師、Prompt 工程師或組織中負(fù)責(zé) Agent 行為的人員,在本地運(yùn)行評(píng)估套件,生成一份 “新 Agent 與生產(chǎn)基準(zhǔn)的性能對(duì)比報(bào)告”。這份報(bào)告必須作為 PR 描述的附件,成為人工審核的必備材料 —— 審核者(通常是另一位 AI 工程師或機(jī)器學(xué)習(xí)主管)不僅要檢查代碼本身,還要重點(diǎn)評(píng)估 Agent 的行為變化,比如是否存在護(hù)欄(guardrails)違規(guī)、是否能抵御提示注入漏洞,確保每一次變更都不會(huì)引發(fā)行為風(fēng)險(xiǎn)。
- 自動(dòng)化流水線內(nèi)關(guān)卡:將評(píng)估與 CI/CD 流水線深度綁定,用程序化規(guī)則保障一致性。由數(shù)據(jù)科學(xué)與 MLOps 團(tuán)隊(duì)搭建并維護(hù) “評(píng)估工具框架”,直接集成到 CI/CD 流程中:只要評(píng)估不通過(guò),部署流程會(huì)自動(dòng)阻斷,嚴(yán)格執(zhí)行機(jī)器學(xué)習(xí)治理團(tuán)隊(duì)制定的質(zhì)量標(biāo)準(zhǔn)。
無(wú)論選擇哪種方式,核心原則始終不變:沒(méi)有通過(guò)質(zhì)量檢查的 Agent,絕對(duì)不能進(jìn)入生產(chǎn)環(huán)境。
1.2.2. 自動(dòng)化CI/CD流水線
一個(gè)完整的 Agent 不僅包含源代碼,還涵蓋提示詞、工具定義與配置文件。這就引發(fā)了兩個(gè)關(guān)鍵問(wèn)題:如何確保修改提示詞后,工具性能不會(huì)受影響?如何在這些組件面向用戶(hù)前,充分測(cè)試它們之間的交互邏輯?想要解決這些問(wèn)題,搭建一套自動(dòng)化 CI/CD(持續(xù)集成 / 持續(xù)部署)流水線是核心方案。它絕非簡(jiǎn)單的自動(dòng)化腳本,而是能幫助團(tuán)隊(duì)協(xié)作管理復(fù)雜性、保障質(zhì)量的結(jié)構(gòu)化流程,通過(guò)分階段測(cè)試變更,在 Agent 發(fā)布前逐步建立可靠性信心。
一個(gè)穩(wěn)健的 CI/CD 流水線遵循 “漏斗式” 設(shè)計(jì)思路,核心是 “左移” 原則 —— 盡早、以最低成本捕獲錯(cuò)誤,同時(shí)將快速的合并前檢查與資源密集型的合并后部署清晰分離。具體而言,這套漸進(jìn)式工作流程分為三個(gè)關(guān)鍵階段:
- 合并前集成(CI):主要作用是為發(fā)起拉取請(qǐng)求(PR)的 AI 工程師或提示工程師提供快速反饋。該階段會(huì)自動(dòng)觸發(fā),充當(dāng)主分支的 “把關(guān)人”,運(yùn)行單元測(cè)試、代碼 lint 檢查、依賴(lài)項(xiàng)掃描等快速驗(yàn)證任務(wù)。尤為關(guān)鍵的是,這一階段是運(yùn)行提示工程師設(shè)計(jì)的 Agent 質(zhì)量評(píng)估套件的理想時(shí)機(jī) —— 能在變更合并前,針對(duì)關(guān)鍵場(chǎng)景即時(shí)反饋?zhàn)兏鼘?duì) Agent 性能的影響(是提升還是下降),從而避免問(wèn)題污染主分支。例如,使用 Agent Starter Pack(ASP)生成的 PR 檢查配置模板,就能借助 Cloud Build 實(shí)現(xiàn)該階段的落地。
- 合并后預(yù)發(fā)布環(huán)境驗(yàn)證(CD):當(dāng)變更通過(guò)所有 CI 檢查(包括性能評(píng)估)并完成合并后,工作重點(diǎn)會(huì)從代碼與性能正確性,轉(zhuǎn)向集成系統(tǒng)的運(yùn)維就緒性。通常由 MLOps 團(tuán)隊(duì)負(fù)責(zé)的 CD 流程,會(huì)將 Agent 打包并部署到 “預(yù)發(fā)布環(huán)境”(生產(chǎn)環(huán)境的高保真復(fù)制品)。在這里,會(huì)開(kāi)展更全面、資源消耗更大的測(cè)試,比如負(fù)載測(cè)試、針對(duì)遠(yuǎn)程服務(wù)的集成測(cè)試;同時(shí),這也是 “內(nèi)部試用(Dogfooding)” 的關(guān)鍵階段 —— 公司內(nèi)部人員可提前與 Agent 交互,提供定性反饋,確保 Agent 作為集成系統(tǒng),在類(lèi)生產(chǎn)環(huán)境下能可靠、高效運(yùn)行,之后才會(huì)進(jìn)入發(fā)布考量環(huán)節(jié)。而 ASP 中的預(yù)發(fā)布部署模板,就能為該階段的部署提供參考示例。
-
生產(chǎn)環(huán)境受控部署:在預(yù)發(fā)布環(huán)境完成全面驗(yàn)證后,便可推進(jìn)生產(chǎn)部署,但這一步幾乎不會(huì)完全自動(dòng)化,通常需要產(chǎn)品負(fù)責(zé)人最終簽字確認(rèn),確保 Human-in-the-Loop。獲得批準(zhǔn)后,在預(yù)發(fā)布環(huán)境中經(jīng)過(guò)測(cè)試驗(yàn)證的部署制品,會(huì)被正式推廣到生產(chǎn)環(huán)境。ASP 生成的生產(chǎn)部署模板,就演示了如何檢索驗(yàn)證后的制品,并在完善的安全保障下完成生產(chǎn)部署。
CI/CD流程的不同階段
要實(shí)現(xiàn)這一三相CI/CD工作流,需要強(qiáng)大的自動(dòng)化基礎(chǔ)設(shè)施和適當(dāng)?shù)拿荑€管理。這種自動(dòng)化由兩項(xiàng)關(guān)鍵技術(shù)提供支持:
- 基礎(chǔ)設(shè)施即代碼(IaC):像Terraform這樣的工具通過(guò)編程方式定義環(huán)境,確保環(huán)境具有一致性、可重復(fù)性且受版本控制。例如 template generated with Agent Starter Pack 提供了完整智能體基礎(chǔ)設(shè)施的Terraform配置,包括Vertex AI、Cloud Run和BigQuery資源。
- 自動(dòng)化測(cè)試框架:像Pytest這樣的框架會(huì)在每個(gè)階段執(zhí)行測(cè)試和評(píng)估,處理智能體特有的產(chǎn)物,如對(duì)話(huà)歷史、工具調(diào)用日志和動(dòng)態(tài)推理軌跡。
此外,像工具的API密鑰這類(lèi)敏感信息,應(yīng)當(dāng)使用Secret Manager之類(lèi)的服務(wù)進(jìn)行安全管理,并在運(yùn)行時(shí)注入智能體的環(huán)境中,而不是硬編碼到代碼倉(cāng)庫(kù)里。
1.2.3. 安全部署策略
因?qū)嶋H應(yīng)用中難免出現(xiàn)預(yù)生產(chǎn)檢查未覆蓋的問(wèn)題,需通過(guò) “逐步發(fā)布 + 監(jiān)控” 降低風(fēng)險(xiǎn),4 類(lèi)經(jīng)典策略如下:
- Canary:先面向 1% 用戶(hù)上線,監(jiān)控提示注入、異常工具調(diào)用,穩(wěn)定后擴(kuò)量,問(wèn)題可即時(shí)回滾
- Blue-Green: 維護(hù)兩套相同生產(chǎn)環(huán)境,藍(lán)環(huán)境承流、綠環(huán)境部署新版本,切換流量實(shí)現(xiàn)零停機(jī)
- A/B Testing:分兩組用戶(hù)用新舊版本,對(duì)比業(yè)務(wù)指標(biāo)(如任務(wù)完成率),數(shù)據(jù)驅(qū)動(dòng)發(fā)布決策
- Feature Flags:先部署新功能代碼,用開(kāi)關(guān)控制生效范圍,先對(duì)特定用戶(hù)測(cè)試
嚴(yán)格版本控制 —— 代碼、提示詞、模型端點(diǎn)、評(píng)估數(shù)據(jù)集等所有組件均需版本化,相當(dāng)于生產(chǎn) “undo 按鈕”,問(wèn)題可快速回滾到穩(wěn)定版本。
用 Agent Engine 或者 Cloud Run 部署 Agent,借助 Cloud Load Balancing 管理多版本流量;Agent Starter Pack 提供 GitOps 模板,部署對(duì)應(yīng) Git 提交、回滾對(duì)應(yīng) Git revert,倉(cāng)庫(kù)成為 “唯一真實(shí)來(lái)源”。
1.2.4. 從開(kāi)始就構(gòu)建安全性
安全部署策略能幫你規(guī)避漏洞與停機(jī)風(fēng)險(xiǎn),但 AI Agent 面臨一個(gè)獨(dú)特挑戰(zhàn):它們具備自主推理與行動(dòng)能力。即便 Agent 部署過(guò)程毫無(wú)問(wèn)題,若構(gòu)建時(shí)未采取恰當(dāng)?shù)陌踩c責(zé)任保障措施,仍可能造成危害。這就要求從項(xiàng)目啟動(dòng)之初,就將全面的治理策略嵌入流程,而非事后補(bǔ)充。
與遵循固定路徑的傳統(tǒng)軟件不同,Agent 擁有決策能力:它們會(huì)解讀模糊請(qǐng)求、調(diào)用多種工具,還能在不同會(huì)話(huà)間保留記憶。這種自主性帶來(lái)了三類(lèi)獨(dú)特風(fēng)險(xiǎn):
- 提示詞注入與惡意行為:惡意用戶(hù)可能誘導(dǎo) Agent 執(zhí)行非預(yù)期操作,或繞過(guò)安全限制。
- 數(shù)據(jù)泄露:Agent 可能在響應(yīng)內(nèi)容或工具使用過(guò)程中,無(wú)意間泄露敏感信息。
- 記憶中毒:存儲(chǔ)在 Agent 記憶中的虛假信息,會(huì)破壞后續(xù)所有交互的準(zhǔn)確性。
幸運(yùn)的是,谷歌的 Google's Secure AI Agents approach Google Secure
AI Framework (SAIF) 等工具,通過(guò)三層防御體系應(yīng)對(duì)這些挑戰(zhàn):
-
政策定義與系統(tǒng)指令(Agent 章程)
首先明確 Agent “應(yīng)做” 與 “不應(yīng)做” 的行為準(zhǔn)則,并將這些準(zhǔn)則轉(zhuǎn)化為 “系統(tǒng)指令(SI)”,作為 Agent 的核心行為綱領(lǐng)。 -
護(hù)欄、保障措施與過(guò)濾(執(zhí)行層)
這一層是硬性安全屏障,具體包括:- 輸入過(guò)濾:借助分類(lèi)器與 Perspective API 等服務(wù),在惡意輸入觸達(dá) Agent 前對(duì)其分析并攔截。
- 輸出過(guò)濾:Agent 生成響應(yīng)后,Vertex AI 內(nèi)置安全過(guò)濾器 1?會(huì)進(jìn)行最終檢查,排查有害內(nèi)容、個(gè)人身份信息(PII)或違規(guī)內(nèi)容,還可配置攔截含特定 PII、有毒語(yǔ)言等內(nèi)容的輸出。
- 人工介入(HITL)升級(jí):若 Agent 需執(zhí)行高風(fēng)險(xiǎn)操作或面對(duì)模糊請(qǐng)求,系統(tǒng)會(huì)暫停流程,將問(wèn)題升級(jí)至人工審核,待確認(rèn)后再推進(jìn)。
-
持續(xù)保障與測(cè)試
安全并非一次性設(shè)置,需持續(xù)評(píng)估與調(diào)整,關(guān)鍵措施包括:- 嚴(yán)格評(píng)估:模型或其安全系統(tǒng)若有任何變更,必須通過(guò) Vertex AI Evaluation,重新運(yùn)行完整的綜合評(píng)估流程。
- 專(zhuān)項(xiàng)負(fù)責(zé)任 AI(RAI)測(cè)試:通過(guò)創(chuàng)建專(zhuān)項(xiàng)數(shù)據(jù)集或使用模擬 Agent,針對(duì)特定風(fēng)險(xiǎn)開(kāi)展嚴(yán)格測(cè)試,包括中立視角(NPOV)評(píng)估與公平性(Parity)評(píng)估。
- 主動(dòng)紅隊(duì)測(cè)試:通過(guò)創(chuàng)新性人工測(cè)試與 AI 驅(qū)動(dòng)的角色模擬,主動(dòng)嘗試突破安全系統(tǒng),提前發(fā)現(xiàn)漏洞。
1.3. 生產(chǎn)中的運(yùn)營(yíng)
你的 Agent 已上線。現(xiàn)在重點(diǎn)從開(kāi)發(fā)轉(zhuǎn)向了一個(gè)截然不同的挑戰(zhàn):在它與數(shù)千用戶(hù)交互時(shí),確保系統(tǒng)可靠、經(jīng)濟(jì)且安全。傳統(tǒng)服務(wù)按照可預(yù)測(cè)的邏輯運(yùn)行。相比之下,Agent 是自主的行動(dòng)者。它能夠遵循意想不到的推理路徑,這意味著它可能會(huì)表現(xiàn)出突發(fā)行為,并且在沒(méi)有直接監(jiān)督的情況下累積成本。
管理這種自主性需要一種不同的運(yùn)營(yíng)模式。高效的團(tuán)隊(duì)不再采用靜態(tài)監(jiān)控,而是采用一個(gè)持續(xù)循環(huán):實(shí)時(shí)觀察系統(tǒng)行為,采取行動(dòng)以維持性能和安全性,并根據(jù)生產(chǎn)經(jīng)驗(yàn)改進(jìn)智能體。這個(gè)集成循環(huán)是在生產(chǎn)環(huán)境中成功運(yùn)營(yíng) Agent 的核心原則。
1.3.1. 觀察:Agent 的感知系統(tǒng)
要信任并管理一個(gè)自主 Agent,你首先必須了解它的運(yùn)行過(guò)程。可觀測(cè)性提供了這種關(guān)鍵的洞察力,充當(dāng)了后續(xù)“行動(dòng)”和“進(jìn)化”階段的感知系統(tǒng)。一套完善的可觀測(cè)性實(shí)踐建立在三大支柱之上,這些支柱協(xié)同工作,以全面呈現(xiàn)智能體的行為。
- Logs:詳細(xì)、真實(shí)記錄所發(fā)生情況的日記,記錄每一次工具調(diào)用、錯(cuò)誤和決策。
- Traces:連接各個(gè)日志的敘述,揭示智能體采取特定行動(dòng)的因果路徑。
- Metrics:匯總的成績(jī)單,總結(jié)大規(guī)模情況下的性能、成本和運(yùn)營(yíng)健康狀況,以展示系統(tǒng)的運(yùn)行情況。
通過(guò)實(shí)施這些支柱,我們從盲目操作轉(zhuǎn)變?yōu)閷?duì)智能體的行為擁有清晰、數(shù)據(jù)驅(qū)動(dòng)的認(rèn)知,這為在生產(chǎn)環(huán)境中有效管理智能體奠定了必要的基礎(chǔ)。
1.3.2. 行動(dòng):操作控制的杠桿
在 AI Agent 從原型落地生產(chǎn)的全流程中,“觀察(Observe)” 是獲取數(shù)據(jù)的基礎(chǔ),而 “執(zhí)行(Act)” 才是將數(shù)據(jù)轉(zhuǎn)化為系統(tǒng)穩(wěn)定性的關(guān)鍵?!?strong>執(zhí)行(Act)” 階段的核心是構(gòu)建系統(tǒng)的自動(dòng)化 “反應(yīng)機(jī)制”,實(shí)時(shí)維護(hù) Agent 在生產(chǎn)環(huán)境中的穩(wěn)定;這與后續(xù)將提及的 “進(jìn)化(Evolve)” 階段形成鮮明對(duì)比 —— 后者是通過(guò)學(xué)習(xí)行為、優(yōu)化系統(tǒng)的戰(zhàn)略性過(guò)程,而 “執(zhí)行” 更側(cè)重即時(shí)干預(yù)。
由于 Agent 具備自主決策能力,無(wú)法預(yù)先為所有可能結(jié)果編寫(xiě)程序,因此必須建立強(qiáng)有力的機(jī)制來(lái)引導(dǎo)其生產(chǎn)環(huán)境中的行為。這些操作手段主要分為兩大核心方向:管理系統(tǒng)健康(覆蓋性能、成本與規(guī)模)與管理安全風(fēng)險(xiǎn)。
1.3.2.1. 管理系統(tǒng)健康
不同于傳統(tǒng)微服務(wù),Agent 的工作負(fù)載兼具動(dòng)態(tài)性與狀態(tài)性,想要保障其穩(wěn)定運(yùn)行,需從架構(gòu)設(shè)計(jì)到目標(biāo)平衡層層布局:
-
規(guī)?;O(shè)計(jì)核心:解耦邏輯與狀態(tài)
這是 Agent 實(shí)現(xiàn)規(guī)?;幕A(chǔ)前提,只有將業(yè)務(wù)邏輯與運(yùn)行狀態(tài)分離,才能為后續(xù)擴(kuò)展掃清架構(gòu)障礙。-
水平擴(kuò)展:無(wú)狀態(tài)容器化 + 自動(dòng)擴(kuò)縮容
將 Agent 設(shè)計(jì)為無(wú)狀態(tài)的容器化服務(wù),借助外部狀態(tài)存儲(chǔ),讓任意實(shí)例都能處理任意請(qǐng)求。這種架構(gòu)可適配 Cloud Run、托管版 Vertex AI Agent Engine Runtime 等無(wú)服務(wù)器平臺(tái),實(shí)現(xiàn)流量波動(dòng)時(shí)的自動(dòng)擴(kuò)縮容。 -
異步處理:保障長(zhǎng)任務(wù)響應(yīng)性
針對(duì)數(shù)據(jù)分析等長(zhǎng)時(shí)間運(yùn)行的任務(wù),采用事件驅(qū)動(dòng)模式分流。例如在谷歌云平臺(tái)中,可將任務(wù)發(fā)布到 Pub/Sub,再觸發(fā) Cloud Run 服務(wù)進(jìn)行異步處理,既不影響 Agent 對(duì)用戶(hù)請(qǐng)求的實(shí)時(shí)響應(yīng),又能高效完成后臺(tái)復(fù)雜工作。 -
外部化狀態(tài)管理:LLM 無(wú)狀態(tài)的必然選擇
由于大語(yǔ)言模型(LLM)本身無(wú)狀態(tài),Agent 的記憶必須通過(guò)外部存儲(chǔ)持久化。此時(shí)有兩種架構(gòu)選擇:一是直接使用 Vertex AI Agent Engine 內(nèi)置的持久化會(huì)話(huà)與記憶服務(wù),快速落地;二是通過(guò) Cloud Run 靈活集成 AlloyDB、Cloud SQL 等數(shù)據(jù)庫(kù),適配自定義需求。
-
水平擴(kuò)展:無(wú)狀態(tài)容器化 + 自動(dòng)擴(kuò)縮容
-
平衡三大目標(biāo):速度、可靠性與成本的 “三角博弈”
規(guī)?;^(guò)程中,速度(延遲)、可靠性(故障處理)與成本常相互制約,需通過(guò)精細(xì)化設(shè)計(jì)找到平衡點(diǎn):- 速度優(yōu)化:通過(guò)并行處理減少等待時(shí)間,對(duì)高頻請(qǐng)求結(jié)果 “積極緩存”,日常簡(jiǎn)單任務(wù)使用更小、更高效的模型,降低響應(yīng)延遲;
- 可靠性保障:面對(duì)工具調(diào)用失敗等臨時(shí)故障,配置自動(dòng)重試機(jī)制(優(yōu)先采用指數(shù)退避策略,為服務(wù)恢復(fù)留足時(shí)間),同時(shí)設(shè)計(jì) “可安全重試(冪等)” 的工具,避免重復(fù)收費(fèi)等漏洞;
- 成本控制:縮短提示詞減少 token 消耗,簡(jiǎn)單任務(wù)用低成本模型替代高算力模型,將多個(gè)請(qǐng)求 “批量發(fā)送”,從細(xì)節(jié)處壓縮運(yùn)行成本。
1.3.2.1. 管理安全風(fēng)險(xiǎn)
Agent 的自主性也帶來(lái)了安全隱患,因此必須制定標(biāo)準(zhǔn)化的 “安全響應(yīng)手冊(cè)(Playbook)”,在威脅出現(xiàn)時(shí)按 “遏制 - 分類(lèi)處置 - 解決” 的清晰流程快速應(yīng)對(duì):
-
即時(shí)遏制,優(yōu)先止損
發(fā)現(xiàn)威脅后,首要目標(biāo)是阻止傷害擴(kuò)散。最常用的手段是 “斷路器”—— 通過(guò)功能標(biāo)志(Feature Flag)立即禁用受影響的工具,避免風(fēng)險(xiǎn)擴(kuò)大。 -
分類(lèi)處置,明確影響范圍
威脅得到遏制后,將可疑請(qǐng)求路由至 “人工介入(HITL)” 審核隊(duì)列,由工作人員排查漏洞的利用范圍與實(shí)際影響,為后續(xù)修復(fù)提供依據(jù)。 -
徹底解決,閉環(huán)安全漏洞
團(tuán)隊(duì)針對(duì)漏洞開(kāi)發(fā)修復(fù)方案(如更新輸入過(guò)濾器、優(yōu)化系統(tǒng)提示),并通過(guò)自動(dòng)化 CI/CD 流水線部署。確保修復(fù)經(jīng)過(guò)全面測(cè)試后,再?gòu)氐鬃钄嘣撀┒?,避免?wèn)題復(fù)發(fā)。
1.3.3. 進(jìn)化:從生產(chǎn)環(huán)境中學(xué)習(xí)
在 AI Agent 的生產(chǎn)運(yùn)維全流程中,“執(zhí)行(Act)” 階段負(fù)責(zé)即時(shí)的戰(zhàn)術(shù)性響應(yīng),而 “進(jìn)化(Evolve)” 階段則聚焦長(zhǎng)期的戰(zhàn)略性改進(jìn) —— 它以 “觀察(Observe)” 階段收集的行為模式與趨勢(shì)數(shù)據(jù)為起點(diǎn),核心是解決一個(gè)關(guān)鍵問(wèn)題:“如何從根源上修復(fù)問(wèn)題,讓它不再發(fā)生?”
這一階段標(biāo)志著運(yùn)維思路的轉(zhuǎn)變:從被動(dòng)應(yīng)對(duì)生產(chǎn)事故,轉(zhuǎn)向主動(dòng)提升 Agent 的智能度、效率與安全性。通過(guò)將 “觀察” 階段的原始數(shù)據(jù),轉(zhuǎn)化為 Agent 架構(gòu)、邏輯與行為層面的持久優(yōu)化,真正實(shí)現(xiàn) Agent 的持續(xù)成長(zhǎng)。
1.3.3.1. 進(jìn)化的核心引擎:自動(dòng)化 CI/CD 流水線
生產(chǎn)環(huán)境中的洞見(jiàn),只有快速落地才能體現(xiàn)價(jià)值。比如發(fā)現(xiàn) 30% 用戶(hù)在某任務(wù)中失敗,若團(tuán)隊(duì)需 6 個(gè)月才能部署修復(fù),這份洞見(jiàn)便毫無(wú)意義。而預(yù)生產(chǎn)階段搭建的自動(dòng)化 CI/CD 流水線,正是推動(dòng) Agent 快速演進(jìn)的核心引擎 —— 它能將 “觀察 - 改進(jìn)” 的循環(huán)周期從數(shù)周、數(shù)月壓縮至數(shù)小時(shí)、數(shù)天,成為運(yùn)營(yíng)閉環(huán)中最關(guān)鍵的組件。
當(dāng)識(shí)別到潛在改進(jìn)點(diǎn)(無(wú)論是優(yōu)化提示詞、新增工具,還是更新安全護(hù)欄),需遵循標(biāo)準(zhǔn)化自動(dòng)化流程落地:
- 提交變更:將改進(jìn)方案提交至版本控制倉(cāng)庫(kù),確保所有修改可追溯;
- 觸發(fā)自動(dòng)化:提交操作自動(dòng)觸發(fā) CI/CD 流水線,無(wú)需人工干預(yù);
- 嚴(yán)格驗(yàn)證:流水線針對(duì)更新后的數(shù)據(jù)集,運(yùn)行全套單元測(cè)試、安全掃描與 Agent 質(zhì)量評(píng)估套件,確保改進(jìn)不引入新問(wèn)題;
-
安全部署:驗(yàn)證通過(guò)后,通過(guò)金絲雀發(fā)布等安全策略將變更部署到生產(chǎn)環(huán)境。
這套流程徹底改變了傳統(tǒng)演進(jìn)模式 —— 將緩慢、高風(fēng)險(xiǎn)的手動(dòng)操作,轉(zhuǎn)化為快速、可重復(fù)、數(shù)據(jù)驅(qū)動(dòng)的標(biāo)準(zhǔn)化過(guò)程。
1.3.3.2. 演進(jìn)工作流:從洞見(jiàn)到落地的三步閉環(huán)
- 分析生產(chǎn)數(shù)據(jù):從生產(chǎn)日志中挖掘用戶(hù)行為趨勢(shì)、任務(wù)成功率、安全事件等關(guān)鍵信息,定位待改進(jìn)方向;
- 更新評(píng)估數(shù)據(jù)集:將生產(chǎn)環(huán)境中出現(xiàn)的失敗案例,轉(zhuǎn)化為新的測(cè)試用例,補(bǔ)充到 “黃金數(shù)據(jù)集” 中 —— 讓過(guò)去的問(wèn)題成為未來(lái)的防護(hù)盾;
- 優(yōu)化與部署:提交改進(jìn)方案(如優(yōu)化提示詞、新增工具、更新護(hù)欄),觸發(fā)自動(dòng)化流水線,完成從開(kāi)發(fā)到生產(chǎn)的落地。
通過(guò)這一閉環(huán),Agent 能在每一次用戶(hù)交互中積累經(jīng)驗(yàn),實(shí)現(xiàn)持續(xù)自我完善。
1.3.4. 不斷發(fā)展的安全性:生產(chǎn)反饋循環(huán)
安全不是一份靜態(tài)的清單,而是一個(gè)動(dòng)態(tài)、持續(xù)的適應(yīng)過(guò)程。生產(chǎn)環(huán)境是最終的測(cè)試場(chǎng),在那里收集的見(jiàn)解對(duì)于強(qiáng)化智能體抵御現(xiàn)實(shí)世界的威脅至關(guān)重要。
而實(shí)現(xiàn)安全動(dòng)態(tài)升級(jí)的關(guān)鍵,正是 “觀察→行動(dòng)→演進(jìn)(Observe→Act→Evolve)” 的閉環(huán)機(jī)制,這一機(jī)制是 Agent 整體進(jìn)化工作流在安全領(lǐng)域的直接延伸,具體落地分為三步:
- 觀察(Observe):依托監(jiān)控與日志系統(tǒng),實(shí)時(shí)捕捉新的威脅向量。比如發(fā)現(xiàn)能繞過(guò)現(xiàn)有過(guò)濾器的新型提示注入技術(shù),或是因意外交互導(dǎo)致輕微數(shù)據(jù)泄露的異常情況,這些都需要通過(guò)觀測(cè)體系及時(shí)察覺(jué)。
- 行動(dòng)(Act):一旦發(fā)現(xiàn)威脅,即時(shí)安全響應(yīng)團(tuán)隊(duì)需按照既定流程快速遏制風(fēng)險(xiǎn),避免威脅擴(kuò)散,為后續(xù)徹底修復(fù)爭(zhēng)取時(shí)間。
-
演進(jìn)(Evolve):這是構(gòu)建 Agent 長(zhǎng)期安全韌性的核心環(huán)節(jié),需將安全洞察深度融入開(kāi)發(fā)生命周期:
- 把新發(fā)現(xiàn)的威脅(如新型提示注入攻擊)轉(zhuǎn)化為永久測(cè)試用例,補(bǔ)充到評(píng)估套件中,讓后續(xù)版本不再重蹈覆轍;
- 由提示工程師或 AI 工程師優(yōu)化 Agent 的系統(tǒng)提示、輸入過(guò)濾器或工具使用政策,從技術(shù)層面阻斷新攻擊向量;
- 工程師提交這些安全改進(jìn),觸發(fā)完整 CI/CD 流水線,經(jīng)過(guò)新擴(kuò)展評(píng)估集的嚴(yán)格驗(yàn)證后,將更新后的 Agent 部署到生產(chǎn)環(huán)境,徹底修復(fù)漏洞。
這形成了一個(gè)強(qiáng)大的反饋循環(huán),每一次生產(chǎn)事件都會(huì)讓你的智能體更強(qiáng)大、更具韌性,將你的安全態(tài)勢(shì)從防御姿態(tài)轉(zhuǎn)變?yōu)槌掷m(xù)、主動(dòng)的改進(jìn)。
要了解更多關(guān)于負(fù)責(zé)任的人工智能以及保障人工智能智能體系統(tǒng)安全的信息,請(qǐng)參考白皮書(shū)《谷歌的安全人工智能智能體方法》
1.4. A2A - 可復(fù)用性和標(biāo)準(zhǔn)化
你在整個(gè)組織內(nèi)構(gòu)建了數(shù)十個(gè)專(zhuān)門(mén)的 Agents,但問(wèn)題在于:這些 Agents 無(wú)法互通,形成 “信息孤島”?!獰o(wú)論是因?yàn)樗鼈兪窃诓煌目蚣堋㈨?xiàng)目中創(chuàng)建的,還是完全在不同的云端創(chuàng)建的。
要解決此問(wèn)題,需依托兩套互補(bǔ)的標(biāo)準(zhǔn)化協(xié)議實(shí)現(xiàn) Agents 互操作性:
- MCP 協(xié)議:適用于無(wú)狀態(tài)的簡(jiǎn)單功能調(diào)用,如獲取天氣數(shù)據(jù)、查詢(xún)數(shù)據(jù)庫(kù),核心是執(zhí)行 “具體指令”;
- A2A 協(xié)議:針對(duì) Agents 間復(fù)雜、有狀態(tài)的協(xié)作場(chǎng)景,如 “分析上季度客戶(hù)流失并提出 3 個(gè)干預(yù)方案”,支持代理自主推理、規(guī)劃與行動(dòng),核心是達(dá)成 “復(fù)雜目標(biāo)”。
1.4.1. A2A協(xié)議:從概念到實(shí)現(xiàn)
A2A協(xié)議 旨在打破組織壁壘,實(shí)現(xiàn) Agents 之間的無(wú)縫協(xié)作。
合作的第一步是找到合適的 Agent 進(jìn)行委托——這通過(guò) Agent Cards 得以實(shí)現(xiàn),Agent Cards 是標(biāo)準(zhǔn)化的JSON規(guī)范,相當(dāng)于每個(gè) Agent 的名片。它會(huì)描述智能體的功能、安全要求、技能以及聯(lián)系方式(url),使生態(tài)系統(tǒng)中的任何其他 Agents 都能動(dòng)態(tài)發(fā)現(xiàn)它。以下是 Agent Card 的示例:
"name": "check_prime_agent",
"version": "1.0.0",
"description": "一款專(zhuān)門(mén)用于判斷數(shù)字是否為質(zhì)數(shù)的代理",
"capabilities": {},
"securitySchemes": {
"agent_oauth_2_0": {
"type": "oauth2"
}
},
"defaultInputModes": ["text/plain"],
"defaultOutputModes": ["application/json"],
"skills": [
{
"id": "prime_checking",
"name": "質(zhì)數(shù)判斷",
"description": "使用高效算法判斷數(shù)字是否為質(zhì)數(shù)",
"tags": ["mathematical", "computation", "prime"]
}
],
"url": "http://localhost:8001/a2a/check_prime_agent"
}
使用 Goolge ADK的 to_a2a 工具包裝現(xiàn)有 Agent 并將其暴露以進(jìn)行 A2A 通信:
# 示例:使用ADK通過(guò)A2A協(xié)議暴露代理
from google.adk.a2a.utils.agent_to_a2a import to_a2a
# 你的現(xiàn)有代理(此處為示例代理,實(shí)際需替換為你的業(yè)務(wù)代理)
root_agent = Agent(
name='hello_world_agent', # 代理名稱(chēng):"hello_world_agent"
)
# 將現(xiàn)有代理改造為A2A協(xié)議兼容版本
# 參數(shù)說(shuō)明:root_agent為待改造的現(xiàn)有代理,port=8001為A2A協(xié)議通信端口
a2a_app = to_a2a(root_agent, port=8001)
# 方式1:使用uvicorn服務(wù)啟動(dòng)A2A兼容代理(uvicorn為Python常用ASGI服務(wù)器)
# 啟動(dòng)命令:uvicorn agent:a2a_app --host localhost --port 8001
# 方式2:使用Agent Engine(Vertex AI提供的托管代理引擎)啟動(dòng)
# from vertexai.preview.reasoning_engines import A2aAgent
# from google.adk.a2a.executor.a2a_agent_executor import A2aAgentExecutor
# a2a_agent = A2aAgent(
# agent_executor_builder=lambda: A2aAgentExecutor(agent=root_agent)
# )
一旦某個(gè)智能體被公開(kāi),其他任何 Agents 都可以通過(guò)引用其 Agent Card 來(lái)使用它。例如,客服智能體現(xiàn)在可以查詢(xún)遠(yuǎn)程的產(chǎn)品目錄智能體,而無(wú)需了解其內(nèi)部運(yùn)作方式,使用 ADK 的RemoteA2aAgent 類(lèi)連接并使用遠(yuǎn)程 Agent:
# Example using ADK: Consuming a remote agent via A2A
from google.adk.agents.remote_a2a_agent import RemoteA2aAgent
prime_agent = RemoteA2aAgent(
name="prime_agent",
description="Agent that handles checking if numbers are prime.", agent_card="http://localhost:8001/a2a/check_prime_agent/ .well-known/agent-card.json"
)
在ADK Python的分層智能體結(jié)構(gòu)中,將遠(yuǎn)程A2A智能體(prime_agent)用作sub-agent:
# Example using ADK: Hierarchical agent composition
# ADK Local sub-agent for dice rolling
roll_agent = Agent(
name="roll_agent",
instruction="You are an expert at rolling dice."
)
# ADK Remote A2A agent for prime checking
prime_agent = RemoteA2aAgent(
name="prime_agent",
agent_card="http://localhost:8001/.well-known/agent-card.json"
)
# ADK Root orchestrator combining both
root_agent = Agent(
name="root_agent",
instruction="""Delegate rolling dice to roll_agent, prime checking
to prime_agent.""",
sub_agents=[roll_agent, prime_agent]
)
實(shí)現(xiàn) AI 代理自主協(xié)作需兩項(xiàng)核心技術(shù):一是分布式追蹤(含唯一追蹤 ID,用于跨代理調(diào)試與審計(jì)),二是強(qiáng)大狀態(tài)管理(靠持久層保障交互進(jìn)度與事務(wù)完整保存)。
協(xié)議選擇建議:跨團(tuán)隊(duì)正式集成用 A2A,單應(yīng)用內(nèi)緊耦合任務(wù)用輕量本地 sub-agents;新構(gòu)建的 Agent 應(yīng)原生支持這兩種協(xié)議,確保每個(gè)新組件都能立即被發(fā)現(xiàn)、互操作和重用,從而增加整個(gè)系統(tǒng)的價(jià)值。
1.4.2. A2A 與 MCP 如何協(xié)同工作

A2A 與 MCP 并非競(jìng)爭(zhēng)關(guān)系,而是適配不同抽象層級(jí)的互補(bǔ)協(xié)議,核心區(qū)別在于 AI Agent的交互對(duì)象。
- MCP 聚焦工具與資源交互
- A2A 則面向 Agent 間協(xié)作,服務(wù)于能推理、規(guī)劃、多工具調(diào)用且需維持狀態(tài)以實(shí)現(xiàn)復(fù)雜目標(biāo)的自主 Agents。
一個(gè)實(shí)用的類(lèi)比是一家由 AI agents 組成的汽車(chē)修理店:
- User-to-Agent:客戶(hù)與“商店經(jīng)理” Agent 溝通,描述一個(gè)大致問(wèn)題:“我的車(chē)發(fā)出咯咯聲?!?/li>
- Agent-to-Agent:商店經(jīng)理進(jìn)行多輪診斷對(duì)話(huà),然后再次使用 A2A 將任務(wù)委派給專(zhuān)門(mén)的“機(jī)械師” Agent。
-
Agent-to-Tool :機(jī)械師 Agent 現(xiàn)在需要執(zhí)行特定操作。它使用MCP調(diào)用其專(zhuān)用工具:在診斷掃描儀上運(yùn)行
scan_vehicle_for_error_codes(),通過(guò)get_repair_procedure()查詢(xún)維修手冊(cè)數(shù)據(jù)庫(kù),以及使用raise_platform()操作平臺(tái)升降機(jī)。 - Agent-to-Agent:在診斷問(wèn)題后,機(jī)械師 Agent 確定需要某個(gè)零件。它使用A2A與外部的“零件供應(yīng)商” Agent 進(jìn)行通信,以查詢(xún)可用性并下訂單。
在這個(gè)工作流程中,A2A促進(jìn)了客戶(hù)、店鋪 Agents 和外部供應(yīng)商之間更高層次、對(duì)話(huà)式且面向任務(wù)的交互。同時(shí),MCP提供了標(biāo)準(zhǔn)化的基礎(chǔ)架構(gòu),使機(jī)械 Agent 能夠可靠地使用其特定的結(jié)構(gòu)化工具來(lái)完成工作。
1.4.3. 注冊(cè)中心架構(gòu):何時(shí)以及如何構(gòu)建它們
當(dāng) tools 數(shù)量較少時(shí)(50),手動(dòng)管理尚能應(yīng)對(duì);可一旦規(guī)模突破閾值(5000 個(gè)且跨多團(tuán)隊(duì)),你就需要一個(gè)系統(tǒng)性的解決方案去發(fā)現(xiàn)他們并調(diào)用。
Tool Registry 使用類(lèi)似 MCP 的協(xié)議來(lái)編目所有資產(chǎn),從函數(shù)到API。你無(wú)需讓 Agents 訪問(wèn)數(shù)千種 tools ,而是創(chuàng)建精選列表,這會(huì)形成三種常見(jiàn)模式:
- 通用 Agents:可訪問(wèn)完整目錄,以速度和準(zhǔn)確性換取范圍。
- 專(zhuān)業(yè) Agents:使用預(yù)定義的子集以獲得更高性能。
- 動(dòng)態(tài) Agents:在運(yùn)行時(shí)查詢(xún)注冊(cè)表以適應(yīng)新工具。
Agent Registry 將相同的概念應(yīng)用于 agents,采用 A2A 的 AgentCards 等格式。它有助于團(tuán)隊(duì)發(fā)現(xiàn)和重用現(xiàn)有的 agents,減少重復(fù)工作。這也為 agents 之間的自動(dòng)委托奠定了基礎(chǔ),盡管這仍是一種新興模式。
1.5. 整合:Agent 運(yùn)維生命周期
現(xiàn)在我們可以將這些支柱整合為一個(gè)單一、連貫的架構(gòu)。生命周期始于開(kāi)發(fā)者的內(nèi)循環(huán)——這是一個(gè)快速進(jìn)行本地測(cè)試和原型設(shè)計(jì)以塑造智能體核心邏輯的階段。一旦一項(xiàng)變更準(zhǔn)備就緒,它就會(huì)進(jìn)入正式的預(yù)生產(chǎn)引擎,在那里,自動(dòng)化評(píng)估關(guān)卡會(huì)根據(jù)黃金數(shù)據(jù)集驗(yàn)證其質(zhì)量和安全性。之后,安全部署會(huì)將其發(fā)布到生產(chǎn)環(huán)境,在那里,全面的可觀測(cè)性會(huì)捕獲推動(dòng)持續(xù)進(jìn)化循環(huán)所需的真實(shí)世界數(shù)據(jù),將每一個(gè)洞見(jiàn)轉(zhuǎn)化為下一次改進(jìn)。
要全面了解 AI agents 的實(shí)際應(yīng)用操作,包括評(píng)估、工具管理、CI/CD標(biāo)準(zhǔn)化和有效的架構(gòu)設(shè)計(jì),請(qǐng)觀看:AgentOps: Operationalize AI Agents video

1.6. 總結(jié):用 AgentOps 跨越 AI 原型到生產(chǎn)的"最后一公里"
將 AI 原型落地為生產(chǎn)系統(tǒng),本質(zhì)是一場(chǎng)需要新運(yùn)營(yíng)規(guī)范 ——AgentOps 支撐的組織變革。多數(shù) AI 智能體項(xiàng)目折戟 “最后一公里”,根源并非技術(shù)不足,而是自主系統(tǒng)的運(yùn)營(yíng)復(fù)雜性被低估。
要彌合這一差距,需遵循清晰路徑:先以 “人員與流程” 筑牢治理根基;再靠 “評(píng)估控制部署” 的預(yù)生產(chǎn)策略,實(shí)現(xiàn)高風(fēng)險(xiǎn)發(fā)布自動(dòng)化;上線后,通過(guò) “觀察→行動(dòng)→進(jìn)化” 循環(huán),把每次用戶(hù)交互轉(zhuǎn)化為優(yōu)化洞見(jiàn)以備后續(xù)優(yōu)化;最后借互操作性協(xié)議,將孤立智能體打造成協(xié)作生態(tài),完成系統(tǒng)規(guī)模化。
至于落地路徑,可分階段推進(jìn):
- 起步階段聚焦基礎(chǔ),搭建首份評(píng)估數(shù)據(jù)集、部署 CI/CD 流水線、建立全面監(jiān)控,借助 “智能體入門(mén)包” 能快速啟動(dòng)(幾分鐘即可生成含基礎(chǔ)功能的生產(chǎn)級(jí)項(xiàng)目);
- 規(guī)模化階段則需升級(jí),一方面自動(dòng)化 “生產(chǎn)洞察→部署改進(jìn)” 的反饋循環(huán),另一方面以互操作性協(xié)議為標(biāo)準(zhǔn),構(gòu)建生態(tài)而非零散的點(diǎn)解決方案。
未來(lái),AI 發(fā)展的核心不僅是打造更優(yōu)的單個(gè)智能體,更是構(gòu)建能學(xué)習(xí)、會(huì)協(xié)作的復(fù)雜多智能體系統(tǒng) —— 而 AgentOps 正是實(shí)現(xiàn)這一目標(biāo)的關(guān)鍵基石。跨越 “最后一公里”,從來(lái)不是項(xiàng)目的終點(diǎn),而是創(chuàng)造 AI 價(jià)值的起點(diǎn)。
2. 代碼實(shí)驗(yàn)室
2.1. Agent2Agent
A2A協(xié)議在三種場(chǎng)景中特別有用:

- 跨框架集成:ADK智能體與其他智能體框架通信
- 跨語(yǔ)言通信:Python智能體調(diào)用Java或Node.js智能體
- 跨組織邊界:你的內(nèi)部智能體與外部供應(yīng)商服務(wù)集成
我們將構(gòu)建一個(gè)電子商務(wù)系統(tǒng):
1. Product Catalog Agent :提供產(chǎn)品信息的外部供應(yīng)商服務(wù)
2. Customer Support Agent :你的內(nèi)部智能體,通過(guò)查詢(xún)產(chǎn)品數(shù)據(jù)為客戶(hù)提供幫助
┌──────────────────────┐ ┌──────────────────────┐
│ Customer Support │ ─A2A──? │ Product Catalog │
│ Agent (Consumer) │ │ Agent (Vendor) │
│ Your Company │ │ External Service │
│ (localhost:8000) │ │ (localhost:8001) │
└──────────────────────┘ └──────────────────────┘
系統(tǒng)架構(gòu)如下:

參考: A2A in LangGraph 我們用 LangGraph 復(fù)刻這個(gè)case:
Product Catalog Agent
#!/usr/bin/env python3
"""
LangGraph A2A - Product Catalog Agent (Server)
這是一個(gè)產(chǎn)品目錄代理,通過(guò)A2A協(xié)議暴露服務(wù)。
對(duì)應(yīng)Google ADK示例中的Product Catalog Agent。
技術(shù)要點(diǎn):
1. 使用 messages key 的狀態(tài)結(jié)構(gòu)來(lái)兼容A2A協(xié)議
2. 定義product lookup工具
3. 通過(guò) langgraph dev 或部署到生產(chǎn)環(huán)境來(lái)暴露A2A端點(diǎn)
"""
from __future__ import annotations
from pathlib import Path
from typing import Any, Dict, List, TypedDict, Annotated
import yaml
from langgraph.graph import StateGraph
from langgraph.graph.message import add_messages
from langchain_openai import ChatOpenAI
from langchain_core.messages import AIMessage, SystemMessage, BaseMessage
from langchain_core.tools import tool as tool_decorator
from langgraph.prebuilt import ToolNode
def get_product_info(product_name: str) -> str:
"""獲取產(chǎn)品信息
Args:
product_name: 產(chǎn)品名稱(chēng)(例如:"iPhone 15 Pro", "MacBook Pro")
Returns:
產(chǎn)品信息字符串
"""
# 模擬產(chǎn)品數(shù)據(jù)庫(kù) - 生產(chǎn)環(huán)境中應(yīng)該查詢(xún)真實(shí)數(shù)據(jù)庫(kù)
product_catalog = {
"iphone 15 pro": "iPhone 15 Pro, $999, 庫(kù)存不足 (8 units), 128GB, 鈦金色",
"samsung galaxy s24": "Samsung Galaxy S24, $799, 有貨 (31 units), 256GB, 幻影黑",
"dell xps 15": 'Dell XPS 15, $1,299, 有貨 (45 units), 15.6" 顯示屏, 16GB RAM, 512GB SSD',
"macbook pro 14": 'MacBook Pro 14", $1,999, 有貨 (22 units), M3 Pro 芯片, 18GB RAM, 512GB SSD',
"sony wh-1000xm5": "Sony WH-1000XM5 耳機(jī), $399, 有貨 (67 units), 降噪, 30小時(shí)續(xù)航",
"ipad air": 'iPad Air, $599, 有貨 (28 units), 10.9" 顯示屏, 64GB',
"lg ultrawide 34": 'LG UltraWide 34" 顯示器, $499, 缺貨, 預(yù)計(jì): 下周到貨',
}
product_lower = product_name.lower().strip()
if product_lower in product_catalog:
return f"產(chǎn)品: {product_catalog[product_lower]}"
else:
available = ", ".join([p.title() for p in product_catalog.keys()])
return f"抱歉,沒(méi)有 {product_name} 的信息??捎卯a(chǎn)品: {available}"
class State(TypedDict):
"""Product Catalog Agent的狀態(tài)結(jié)構(gòu)
重要:A2A協(xié)議要求狀態(tài)中必須包含 messages 字段
使用 Annotated 和 add_messages 來(lái)正確處理消息列表
"""
messages: Annotated[List[BaseMessage], add_messages]
@tool_decorator
def product_lookup(product_name: str) -> str:
"""查詢(xún)產(chǎn)品信息
Args:
product_name: 產(chǎn)品名稱(chēng)
"""
return get_product_info(product_name)
def call_model(state: State) -> Dict[str, Any]:
"""處理消息并使用LLM生成響應(yīng)
這個(gè)節(jié)點(diǎn)會(huì):
1. 讀取最新的用戶(hù)消息
2. 調(diào)用LLM(配置了產(chǎn)品查詢(xún)工具)
3. 返回響應(yīng)消息
"""
# 初始化OpenAI客戶(hù)端
config_path = Path(__file__).parent.parent.parent / "config.yaml"
with open(config_path, 'r', encoding='utf-8') as f:
config = yaml.safe_load(f)
# 初始化模型(從配置文件讀取模型配置)
llm = ChatOpenAI(
model=config['model'],
api_key=config['api_key'],
base_url=config['base_url'],
temperature=config['temperature']
)
# 綁定工具到LLM
tools = [product_lookup]
llm_with_tools = llm.bind_tools(tools)
# 構(gòu)建消息列表
system_message = SystemMessage(content="""你是一個(gè)產(chǎn)品目錄專(zhuān)家,來(lái)自外部供應(yīng)商。
當(dāng)用戶(hù)詢(xún)問(wèn)產(chǎn)品時(shí),使用 product_lookup 工具從目錄中獲取數(shù)據(jù)。
提供清晰、準(zhǔn)確的產(chǎn)品信息,包括價(jià)格、庫(kù)存和規(guī)格。
如果詢(xún)問(wèn)多個(gè)產(chǎn)品,逐個(gè)查詢(xún)。
保持專(zhuān)業(yè)和友好。""")
# state.messages 已經(jīng)是 BaseMessage 對(duì)象列表,直接使用
messages = [system_message] + list(state["messages"])
# 調(diào)用LLM
response = llm_with_tools.invoke(messages)
# 檢查是否需要調(diào)用工具
if response.tool_calls:
# 添加AI響應(yīng)到消息列表
messages.append(response)
# 使用 ToolNode 來(lái)處理工具調(diào)用
# ToolNode 會(huì)正確處理 Claude/Bedrock 的特殊格式要求
tool_node = ToolNode([product_lookup])
# 調(diào)用工具節(jié)點(diǎn)
tool_result = tool_node.invoke({"messages": messages})
# 將工具結(jié)果添加到消息列表
messages.extend(tool_result["messages"])
# 再次調(diào)用LLM生成最終響應(yīng)
final_response = llm.invoke(messages)
ai_content = final_response.content
else:
ai_content = response.content
# 創(chuàng)建響應(yīng)消息 (AIMessage 對(duì)象)
response_message = AIMessage(content=ai_content)
return {
"messages": [response_message] # add_messages 會(huì)自動(dòng)追加
}
def create_product_catalog_graph():
"""創(chuàng)建產(chǎn)品目錄代理圖
START → call_model → END
"""
workflow = StateGraph(State)
workflow.add_node("call_model", call_model)
workflow.add_edge("__start__", "call_model")
graph = workflow.compile()
return graph
graph = create_product_catalog_graph()
Customer Support Agent
#!/usr/bin/env python3
"""
LangGraph A2A - Customer Support Agent (Consumer)
這是一個(gè)客戶(hù)支持代理,通過(guò)A2A協(xié)議消費(fèi)Product Catalog Agent的服務(wù)。
對(duì)應(yīng)Google ADK示例中的Customer Support Agent。
技術(shù)要點(diǎn):
1. 使用 messages key 的狀態(tài)結(jié)構(gòu)來(lái)兼容A2A協(xié)議
2. 通過(guò)HTTP調(diào)用遠(yuǎn)程A2A端點(diǎn)來(lái)獲取產(chǎn)品信息
3. 實(shí)現(xiàn)與遠(yuǎn)程代理的通信邏輯
"""
from __future__ import annotations
import asyncio
import json
import uuid
from pathlib import Path
from typing import Any, Dict, List, TypedDict, Annotated
import aiohttp
import yaml
from langgraph.graph import StateGraph
from langgraph.graph.message import add_messages
from langchain_openai import ChatOpenAI
from langchain_core.messages import AIMessage, SystemMessage, BaseMessage
class State(TypedDict):
"""Customer Support Agent的狀態(tài)結(jié)構(gòu)"""
messages: Annotated[List[BaseMessage], add_messages]
async def call_product_catalog_agent(message: str, product_catalog_url: str) -> str:
"""通過(guò)A2A協(xié)議調(diào)用遠(yuǎn)程Product Catalog Agent
Args:
message: 要發(fā)送給產(chǎn)品目錄代理的消息
product_catalog_url: 產(chǎn)品目錄代理的A2A端點(diǎn)URL
Returns:
遠(yuǎn)程代理的響應(yīng)內(nèi)容
"""
# 構(gòu)建A2A協(xié)議消息
payload = {
"jsonrpc": "2.0",
"id": str(uuid.uuid4()),
"method": "message/send",
"params": {
"message": {
"role": "user",
"parts": [{"kind": "text", "text": message}]
},
"messageId": str(uuid.uuid4()),
"thread": {"threadId": str(uuid.uuid4())}
}
}
headers = {"Accept": "application/json", "Content-Type": "application/json"}
async with aiohttp.ClientSession() as session:
async with session.post(
product_catalog_url,
json=payload,
headers=headers,
timeout=aiohttp.ClientTimeout(total=30)
) as response:
response.raise_for_status()
result = await response.json()
# 從A2A響應(yīng)中提取文本
artifacts = result.get("result", {}).get("artifacts", [])
if artifacts and artifacts[0].get("parts"):
return artifacts[0]["parts"][0].get("text", "無(wú)響應(yīng)內(nèi)容")
return "無(wú)法解析響應(yīng)"
def call_model(state: State) -> Dict[str, Any]:
"""處理客戶(hù)消息并生成響應(yīng)
這個(gè)節(jié)點(diǎn)會(huì):
1. 讀取用戶(hù)消息
2. 判斷是否需要查詢(xún)產(chǎn)品信息
3. 如果需要,調(diào)用遠(yuǎn)程Product Catalog Agent(通過(guò)A2A)
4. 生成最終響應(yīng)
"""
# 初始化OpenAI客戶(hù)端
config_path = Path(__file__).parent.parent.parent / "config.yaml"
with open(config_path, 'r', encoding='utf-8') as f:
config = yaml.safe_load(f)
# 初始化模型(從配置文件讀取模型配置)
llm = ChatOpenAI(
model=config['model'],
api_key=config['api_key'],
base_url=config['base_url'],
temperature=config['temperature']
)
# 先不構(gòu)建 messages,等獲取產(chǎn)品信息后再構(gòu)建
system_prompt = """你是一個(gè)友好且專(zhuān)業(yè)的客戶(hù)支持代理。
當(dāng)客戶(hù)詢(xún)問(wèn)產(chǎn)品時(shí):
1. 判斷客戶(hù)是否在詢(xún)問(wèn)產(chǎn)品信息
2. 如果是,你需要調(diào)用遠(yuǎn)程產(chǎn)品目錄服務(wù)獲取信息
3. 提供清晰的答案,包括價(jià)格、庫(kù)存和規(guī)格
4. 如果產(chǎn)品缺貨,提及預(yù)計(jì)到貨時(shí)間
5. 保持友好和專(zhuān)業(yè)!
注意:你無(wú)法直接查詢(xún)產(chǎn)品信息,需要告訴用戶(hù)你將查詢(xún)產(chǎn)品目錄系統(tǒng)。"""
# 獲取最新的用戶(hù)消息
latest_message = state["messages"][-1]
user_content = latest_message.content
assistant_config_path = Path(__file__).parent / "assistant_config.json"
with open(assistant_config_path, 'r') as f:
assistant_config = json.load(f)
product_catalog_url = assistant_config["product_catalog"]["a2a_endpoint"]
# 在同步函數(shù)中運(yùn)行異步調(diào)用
try:
loop = asyncio.get_event_loop()
except RuntimeError:
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
print(f"XXXXA:{user_content}")
product_info = loop.run_until_complete(
call_product_catalog_agent(user_content, product_catalog_url)
)
print(f"XXXXB:{product_info}")
system_prompt = f"""{system_prompt}
產(chǎn)品目錄系統(tǒng)返回的信息:
{product_info}
請(qǐng)根據(jù)這些產(chǎn)品信息回答客戶(hù)的問(wèn)題。"""
messages = [SystemMessage(content=system_prompt)] + list(state["messages"])
response = llm.invoke(messages)
return {"messages": [response]}
def create_customer_support_graph():
"""創(chuàng)建客戶(hù)支持代理圖
START → call_model → END
"""
workflow = StateGraph(State)
workflow.add_node("call_model", call_model)
workflow.add_edge("__start__", "call_model")
graph = workflow.compile()
return graph
# 導(dǎo)出圖實(shí)例 - 供 langgraph.json 使用
graph = create_customer_support_graph()
langgraph.json
這個(gè)文件定義了 LangGraph 項(xiàng)目的配置,包括 graphs 和 assistants:
{
"$schema": "https://langgra.ph/schema.json",
"dependencies": ["."],
"graphs": {
"product_catalog_agent": "./a2a_product_catalog_agent.py:graph",
"customer_support_agent": "./a2a_customer_support_agent.py:graph"
},
"env": ".env",
"assistants": {
"product_catalog": {
"graph": "product_catalog_agent",
"name": "Product Catalog Agent",
"description": "產(chǎn)品目錄代理,提供產(chǎn)品信息查詢(xún)服務(wù)",
"config": {
"configurable": {}
}
},
"customer_support": {
"graph": "customer_support_agent",
"name": "Customer Support Agent",
"description": "客戶(hù)支持代理,通過(guò)A2A調(diào)用產(chǎn)品目錄服務(wù)",
"config": {
"configurable": {}
}
}
}
}
setup_assistants.py
這個(gè)腳本用于在 LangGraph 服務(wù)器上創(chuàng)建 assistant 實(shí)例,并保存到 assistant_config.json 文件中:
#!/usr/bin/env python3
"""
初始化 LangGraph Assistants
這個(gè)腳本會(huì):
1. 在兩個(gè) LangGraph 服務(wù)器上創(chuàng)建 assistants
2. 保存 assistant UUIDs 到配置文件
3. 更新測(cè)試腳本使用正確的 UUIDs
"""
import requests
import json
from pathlib import Path
def create_assistant(base_url: str, graph_id: str, name: str) -> dict:
"""創(chuàng)建一個(gè) assistant"""
url = f"{base_url}/assistants"
payload = {
"graph_id": graph_id,
"config": {"configurable": {}},
"metadata": {"description": f"{name} for A2A communication"},
"name": name
}
response = requests.post(url, json=payload)
if response.status_code == 200:
return response.json()
else:
print(f"? 創(chuàng)建 assistant 失敗: {response.status_code}")
print(response.text)
return None
def main():
# 服務(wù)器配置
servers = {
"product_catalog": {
"url": "http://localhost:2024",
"graph_id": "product_catalog_agent",
"name": "Product Catalog Agent"
},
"customer_support": {
"url": "http://localhost:2025",
"graph_id": "customer_support_agent",
"name": "Customer Support Agent"
}
}
assistant_ids = {}
# 創(chuàng)建 assistants
for key, config in servers.items():
print(f"\n?? 創(chuàng)建 {config['name']}...")
print(f"服務(wù): {config['url']}")
print(f"Graph ID: {config['graph_id']}")
assistant = create_assistant(
config['url'],
config['graph_id'],
config['name']
)
if assistant:
assistant_id = assistant['assistant_id']
assistant_ids[key] = {
"assistant_id": assistant_id,
"url": config['url'],
"a2a_endpoint": f"{config['url']}/a2a/{assistant_id}",
"agent_card": f"{config['url']}/.well-known/agent-card.json?assistant_id={assistant_id}"
}
print(f"Assistant ID: {assistant_id}")
print(f"A2A 端點(diǎn): {assistant_ids[key]['a2a_endpoint']}")
else:
print(f" ? 失敗")
return
# 保存配置
config_file = Path(__file__).parent / "assistant_config.json"
with open(config_file, 'w') as f:
json.dump(assistant_ids, f, indent=2)
if __name__ == "__main__":
main()
assistant_config.json
{
"product_catalog": {
"assistant_id": "459d773b-d85f-420e-bd28-c83ec8d00999",
"url": "http://localhost:2024",
"a2a_endpoint": "http://localhost:2024/a2a/459d773b-d85f-420e-bd28-c83ec8d00999",
"agent_card": "http://localhost:2024/.well-known/agent-card.json?assistant_id=459d773b-d85f-420e-bd28-c83ec8d00999"
},
"customer_support": {
"assistant_id": "447d850c-1b7b-4a6f-a87b-c2284c44488e",
"url": "http://localhost:2025",
"a2a_endpoint": "http://localhost:2025/a2a/447d850c-1b7b-4a6f-a87b-c2284c44488e",
"agent_card": "http://localhost:2025/.well-known/agent-card.json?assistant_id=447d850c-1b7b-4a6f-a87b-c2284c44488e"
}
}
服務(wù)啟動(dòng)方式
- 啟用兩個(gè) langgraph dev 用于模擬 Product 和 Customer
langgraph dev --port 2024
langgraph dev --port 2025 - 運(yùn)行 setup_assistants.py 腳本創(chuàng)建兩個(gè)
assistant_id并存儲(chǔ)
執(zhí)行測(cè)試
#!/usr/bin/env python3
"""
LangGraph A2A - Agent間通信測(cè)試腳本(使用配置文件)
這個(gè)腳本從 assistant_config.json 讀取正確的 assistant UUIDs
"""
import asyncio
import aiohttp
import json
import uuid
from pathlib import Path
from typing import Dict, Any
def load_assistant_config() -> Dict[str, Any]:
"""加載 assistant 配置"""
config_file = Path(__file__).parent / "assistant_config.json"
if not config_file.exists():
print("? 配置文件不存在,請(qǐng)先運(yùn)行: python setup_assistants.py")
exit(1)
with open(config_file, 'r') as f:
return json.load(f)
async def send_a2a_message(
session: aiohttp.ClientSession,
url: str,
message: str,
thread_id: str = None
) -> Dict[str, Any]:
"""通過(guò)A2A協(xié)議發(fā)送消息"""
if thread_id is None:
thread_id = str(uuid.uuid4())
payload = {
"jsonrpc": "2.0",
"id": str(uuid.uuid4()),
"method": "message/send",
"params": {
"message": {
"role": "user",
"parts": [{"kind": "text", "text": message}]
},
"messageId": str(uuid.uuid4()),
"thread": {"threadId": thread_id}
}
}
headers = {"Accept": "application/json", "Content-Type": "application/json"}
async with session.post(url, json=payload, headers=headers, timeout=aiohttp.ClientTimeout(total=60)) as response:
response.raise_for_status()
return await response.json()
def extract_response_text(result: Dict[str, Any]) -> str:
"""從A2A響應(yīng)中提取文本內(nèi)容"""
# 檢查是否有錯(cuò)誤
if "error" in result:
return f"錯(cuò)誤: {result['error'].get('message', '未知錯(cuò)誤')}"
# 提取 artifacts
artifacts = result.get("result", {}).get("artifacts", [])
if artifacts and artifacts[0].get("parts"):
return artifacts[0]["parts"][0].get("text", "無(wú)文本內(nèi)容")
return "無(wú)法解析響應(yīng)"
async def test_customer_support_with_a2a(config: Dict[str, Any]):
"""測(cè)試: 通過(guò) Customer Support Agent 進(jìn)行 A2A 通信
正確的流程:
用戶(hù) → Customer Support Agent → (A2A) → Product Catalog Agent → Customer Support → 用戶(hù)
"""
customer_support_url = config["customer_support"]["a2a_endpoint"]
async with aiohttp.ClientSession() as session:
test_queries = [
"我想了解一下 iPhone 15 Pro 的情況",
"MacBook Pro 14 有貨嗎??jī)r(jià)格多少?"
]
for i, query in enumerate(test_queries, 1):
print(f"?? 用戶(hù): {query}")
result = await send_a2a_message(session, customer_support_url, query)
response_text = extract_response_text(result)
print(f"?? 客服: {response_text}")
async def main():
"""主測(cè)試函數(shù)"""
config = load_assistant_config()
await test_customer_support_with_a2a(config)
if __name__ == "__main__":
asyncio.run(main())
運(yùn)行結(jié)果如下:
?? 用戶(hù): 我想了解一下 iPhone 15 Pro 的情況
?? 客服: 您好!我很樂(lè)意為您介紹 **iPhone 15 Pro** 的情況!??
根據(jù)我們產(chǎn)品目錄系統(tǒng)的最新信息:
?? **iPhone 15 Pro 產(chǎn)品詳情:**
- **價(jià)格:** $999
- **存儲(chǔ)容量:** 128GB
- **顏色:** 鈦金色
- **庫(kù)存狀態(tài):** ?? **庫(kù)存緊張**(目前僅剩 8 臺(tái))
? **溫馨提示:**
由于這款產(chǎn)品庫(kù)存較少,如果您有購(gòu)買(mǎi)意向,建議盡快下單以免錯(cuò)過(guò)哦!
?? **其他選擇:**
如果您需要了解:
- 其他存儲(chǔ)容量版本(256GB/512GB/1TB)
- 其他顏色選項(xiàng)
- 或者想了解 iPhone 15 Pro Max 等其他機(jī)型
請(qǐng)隨時(shí)告訴我,我會(huì)立即為您查詢(xún)!有任何問(wèn)題都?xì)g迎咨詢(xún)~ ??
=========================================
?? 用戶(hù): MacBook Pro 14 有貨嗎??jī)r(jià)格多少?
?? 客服: 您好!很高興為您服務(wù)!??
是的,**MacBook Pro 14" 目前有貨**!
**產(chǎn)品詳情:**
- ?? **價(jià)格:** $1,999
- ? **庫(kù)存狀態(tài):** 有貨(庫(kù)存充足,目前有22臺(tái))
- ?? **配置信息:**
- M3 Pro 芯片
- 18GB 內(nèi)存
- 512GB 固態(tài)硬盤(pán)
這款產(chǎn)品目前庫(kù)存充足,如果您有購(gòu)買(mǎi)意向,現(xiàn)在是個(gè)不錯(cuò)的時(shí)機(jī)!
請(qǐng)問(wèn)您還需要了解其他信息嗎?比如:
- 其他配置選項(xiàng)
- 配送方式
- 保修服務(wù)
- 或者其他產(chǎn)品信息
我隨時(shí)為您服務(wù)!??
參考文獻(xiàn):
5-Day AI Agents Intensive Course with Google
Prototype to Production
Day 5a - Agent2Agent Communication
