算如何重塑 AI agent 運(yùn)行底座)
1. 從標(biāo)題到落地cloudflare-os 到底想解決什么問(wèn)題第一次看到cloudflare-os這個(gè)項(xiàng)目名我下意識(shí)以為又是一個(gè)把 Linux 塞進(jìn)瀏覽器里的玩具。翻了一圈社區(qū)討論和倉(cāng)庫(kù)結(jié)構(gòu)之后才反應(yīng)過(guò)來(lái)它跟傳統(tǒng)操作系統(tǒng)完全是兩碼事。這個(gè)項(xiàng)目真正在做的事情是把 Cloudflare Workers 這套邊緣計(jì)算能力包裝成一個(gè)操作系統(tǒng)式的開(kāi)發(fā)底座讓 AI agent 能夠像調(diào)用本地系統(tǒng) API 一樣去調(diào)用邊緣網(wǎng)絡(luò)上的各種能力。說(shuō)白了cloudflare-os想解決的核心痛點(diǎn)是現(xiàn)在做 AI agent 的人大部分精力都耗在怎么讓 agent 穩(wěn)定地跑起來(lái)、怎么給它接工具、怎么管理它的狀態(tài)這些臟活上。你寫(xiě)一個(gè) agent得自己搭服務(wù)器、自己搞持久化、自己處理并發(fā)、自己接各種第三方 API。而cloudflare-os的思路是把這些東西全部下沉到邊緣平臺(tái)agent 開(kāi)發(fā)者只需要關(guān)心我的 agent 要做什么基礎(chǔ)設(shè)施層面的事情交給 Workers 生態(tài)去扛。這個(gè)定位其實(shí)挺聰明的。Cloudflare Workers 本身有幾個(gè)天然優(yōu)勢(shì)全球邊緣節(jié)點(diǎn)分布、冷啟動(dòng)極快、按請(qǐng)求計(jì)費(fèi)、內(nèi)置 KV 存儲(chǔ)和 Durable Objects 做狀態(tài)管理。這些特性湊在一起恰好就是 AI agent 最需要的東西。agent 的本質(zhì)是什么是一個(gè)能持續(xù)接收輸入、維護(hù)上下文、調(diào)用工具、返回結(jié)果的狀態(tài)機(jī)。而 Workers 的 Durable Objects 天生就是為有狀態(tài)的邊緣計(jì)算設(shè)計(jì)的一個(gè) Object 就是一個(gè)獨(dú)立的、有強(qiáng)一致性的狀態(tài)單元這不就是 agent 的完美載體嗎。所以cloudflare-os這個(gè)標(biāo)題里的 os 不是指操作系統(tǒng)內(nèi)核而是指面向 agent 的運(yùn)行環(huán)境抽象層。它把 Workers、Durable Objects、KV、R2、AI Gateway 這些散落的能力用一個(gè)統(tǒng)一的接口串起來(lái)讓開(kāi)發(fā)者感覺(jué)像是在一個(gè)操作系統(tǒng)上寫(xiě)應(yīng)用而不是在一堆云服務(wù)之間來(lái)回拼裝。適合誰(shuí)來(lái)研究這個(gè)項(xiàng)目我梳理了三類(lèi)人。第一類(lèi)是正在做 AI agent 但被基礎(chǔ)設(shè)施拖累的獨(dú)立開(kāi)發(fā)者你可能已經(jīng)寫(xiě)過(guò)幾個(gè) agent demo但一到生產(chǎn)環(huán)境就發(fā)現(xiàn)狀態(tài)管理、并發(fā)控制、成本控制全是坑。第二類(lèi)是對(duì)邊緣計(jì)算感興趣、想找個(gè)實(shí)際場(chǎng)景練手的工程師agent 這個(gè)場(chǎng)景比傳統(tǒng)的 API 網(wǎng)關(guān)有意思得多。第三類(lèi)是技術(shù)選型階段的團(tuán)隊(duì)負(fù)責(zé)人你需要判斷agent 到底該跑在什么上面這個(gè)項(xiàng)目提供了一個(gè)很有參考價(jià)值的答案。2. 核心架構(gòu)拆解為什么是 Workers 而不是傳統(tǒng)服務(wù)器2.1 邊緣計(jì)算跑 agent 的底層邏輯傳統(tǒng)做法是把 agent 跑在一臺(tái)常駐服務(wù)器或者容器里用 Flask、FastAPI 或者 Node 的 Express 起一個(gè)服務(wù)然后 agent 的邏輯就在這個(gè)進(jìn)程里循環(huán)。這個(gè)模式的問(wèn)題在于agent 大部分時(shí)間是空閑的它在等用戶(hù)輸入、等模型返回、等工具調(diào)用結(jié)果。但你為了這個(gè)等待得一直養(yǎng)著一臺(tái)服務(wù)器。成本上不劃算擴(kuò)展性也差用戶(hù)量一上來(lái)就得加機(jī)器、搞負(fù)載均衡、處理會(huì)話(huà)粘性問(wèn)題。Workers 的模式完全不同。它是事件驅(qū)動(dòng)的沒(méi)有請(qǐng)求的時(shí)候不消耗任何計(jì)算資源有請(qǐng)求的時(shí)候在全球最近的邊緣節(jié)點(diǎn)上啟動(dòng)一個(gè) isolate 來(lái)執(zhí)行。冷啟動(dòng)時(shí)間在毫秒級(jí)別這個(gè)特性對(duì) agent 來(lái)說(shuō)太關(guān)鍵了。用戶(hù)發(fā)一條消息agent 需要快速響應(yīng)如果冷啟動(dòng)要幾秒鐘體驗(yàn)直接崩掉。而 Workers 的 isolate 啟動(dòng)幾乎無(wú)感這就讓按需啟動(dòng) agent 實(shí)例變得可行。再往深一層看agent 的狀態(tài)管理是個(gè)大難題。一個(gè)對(duì)話(huà)型 agent 需要記住上下文一個(gè)任務(wù)型 agent 需要記住執(zhí)行到哪一步了。傳統(tǒng)做法是用 Redis 或者數(shù)據(jù)庫(kù)存 session但這樣每次讀寫(xiě)都有網(wǎng)絡(luò)往返延遲上去了一致性也難保證。Durable Objects 解決的就是這個(gè)問(wèn)題每個(gè) agent 實(shí)例對(duì)應(yīng)一個(gè) Durable Object這個(gè) Object 有自己的內(nèi)存狀態(tài)和持久化存儲(chǔ)所有對(duì)它的請(qǐng)求都會(huì)被路由到同一個(gè)實(shí)例上天然保證了強(qiáng)一致性。你不需要自己去搞分布式鎖、不需要擔(dān)心兩個(gè)請(qǐng)求同時(shí)修改狀態(tài)導(dǎo)致沖突Durable Objects 在框架層面就幫你處理了。2.2 工具調(diào)用與 agent 編排的設(shè)計(jì)取舍cloudflare-os在工具調(diào)用這塊的設(shè)計(jì)我研究下來(lái)覺(jué)得最有意思。它沒(méi)有走傳統(tǒng)的agent 自己實(shí)現(xiàn)工具調(diào)用邏輯這條路而是把工具抽象成了 Workers 生態(tài)里的服務(wù)綁定。什么意思呢比如你的 agent 需要查天氣傳統(tǒng)做法是 agent 代碼里寫(xiě)一個(gè) HTTP 請(qǐng)求去調(diào)天氣 API。而在cloudflare-os的體系里天氣查詢(xún)被封裝成一個(gè) Workeragent 通過(guò)綁定直接調(diào)用這個(gè) Worker不需要關(guān)心它的 URL、認(rèn)證、重試邏輯。這個(gè)設(shè)計(jì)的好處是解耦。工具的實(shí)現(xiàn)和 agent 的邏輯完全分離工具可以獨(dú)立部署、獨(dú)立升級(jí)、獨(dú)立擴(kuò)縮容。而且因?yàn)槎荚?Cloudflare 的網(wǎng)絡(luò)內(nèi)部調(diào)用延遲極低不走公網(wǎng)。對(duì)于需要調(diào)用多個(gè)工具的復(fù)雜 agent 來(lái)說(shuō)這個(gè)優(yōu)勢(shì)會(huì)被放大。但這里有個(gè)取舍需要說(shuō)清楚這種深度綁定 Cloudflare 生態(tài)的設(shè)計(jì)意味著你的 agent 跟平臺(tái)強(qiáng)耦合。如果哪天想遷移到別的平臺(tái)工具層得全部重寫(xiě)。所以我在實(shí)際選型時(shí)的判斷標(biāo)準(zhǔn)是如果你的 agent 是面向 C 端用戶(hù)、對(duì)延遲和成本敏感、且短期內(nèi)不打算換平臺(tái)那這套方案很合適如果是企業(yè)內(nèi)部系統(tǒng)、對(duì)可移植性要求高那可能得再權(quán)衡一下。2.3 多 agent 協(xié)作的通信機(jī)制熱詞里出現(xiàn)了多ai協(xié)作和agent框架與編排這正好是cloudflare-os比較有想象力的地方。多個(gè) agent 之間怎么通信傳統(tǒng)做法是消息隊(duì)列或者直接 HTTP 調(diào)用。但在 Workers 體系里agent 之間的通信可以通過(guò) Durable Objects 的 RPC 機(jī)制來(lái)實(shí)現(xiàn)一個(gè) agent 可以直接調(diào)用另一個(gè) agent 的方法就像調(diào)用本地函數(shù)一樣。這種模式的性能優(yōu)勢(shì)很明顯但它也帶來(lái)了新的復(fù)雜度agent 之間的依賴(lài)關(guān)系怎么管理如果一個(gè) agent 掛了調(diào)用它的 agent 怎么辦cloudflare-os在這塊的處理方式是引入了一個(gè)輕量的編排層你可以定義 agent 之間的調(diào)用關(guān)系和數(shù)據(jù)流編排層負(fù)責(zé)處理超時(shí)、重試、降級(jí)。這個(gè)思路跟傳統(tǒng)的微服務(wù)編排很像但粒度更細(xì)因?yàn)槊總€(gè) agent 可能只負(fù)責(zé)一個(gè)很小的能力。3. 實(shí)操落地從零搭一個(gè)跑在邊緣上的 agent3.1 環(huán)境準(zhǔn)備與項(xiàng)目初始化先把基礎(chǔ)環(huán)境搭起來(lái)。你需要一個(gè) Cloudflare 賬號(hào)然后安裝 Wrangler CLI這是官方提供的開(kāi)發(fā)和部署工具。我實(shí)測(cè)下來(lái)Node 版本建議用 18 或以上低版本會(huì)有一些兼容性問(wèn)題。npm install -g wrangler wrangler login登錄之后創(chuàng)建一個(gè)新的 Workers 項(xiàng)目。cloudflare-os本身提供了一套模板你可以直接基于模板初始化省去手動(dòng)配置的麻煩。npm create cloudflarelatest my-agent -- --templatecloudflare-os cd my-agent npm install項(xiàng)目結(jié)構(gòu)大概是這樣的src/目錄下是 agent 的核心邏輯wrangler.toml是配置文件里面定義了 Durable Objects 的綁定、KV 命名空間、環(huán)境變量等。我建議一開(kāi)始就把wrangler.toml的結(jié)構(gòu)理清楚因?yàn)楹竺婕庸δ芑径荚诟倪@個(gè)文件。name my-agent main src/index.ts compatibility_date 2024-01-01 [durable_objects] bindings [ { name AGENT, class_name AgentDurableObject } ] [[migrations]] tag v1 new_classes [AgentDurableObject]這段配置的意思是聲明一個(gè)名為AGENT的 Durable Object 綁定對(duì)應(yīng)的類(lèi)叫AgentDurableObject。migrations 那塊是必須的每次你新增或修改 Durable Object 類(lèi)都得加一條 migration 記錄否則部署會(huì)報(bào)錯(cuò)。這個(gè)坑我踩過(guò)當(dāng)時(shí)改了類(lèi)名沒(méi)加 migration部署一直失敗排查了半天才發(fā)現(xiàn)是這個(gè)問(wèn)題。3.2 核心 agent 類(lèi)的實(shí)現(xiàn)要點(diǎn)agent 的核心邏輯寫(xiě)在 Durable Object 類(lèi)里。這個(gè)類(lèi)繼承自DurableObject基類(lèi)每個(gè)實(shí)例代表一個(gè)獨(dú)立的 agent 會(huì)話(huà)。下面是一個(gè)簡(jiǎn)化版的實(shí)現(xiàn)框架export class AgentDurableObject implements DurableObject { state: DurableObjectState; env: Env; messages: Message[] []; constructor(state: DurableObjectState, env: Env) { this.state state; this.env env; this.state.blockConcurrencyWhile(async () { this.messages (await this.state.storage.get(messages)) || []; }); } async fetch(request: Request): PromiseResponse { const { message } await request.json(); this.messages.push({ role: user, content: message }); const reply await this.callModel(message); this.messages.push({ role: assistant, content: reply }); await this.state.storage.put(messages, this.messages); return new Response(JSON.stringify({ reply })); } async callModel(input: string): Promisestring { // 調(diào)用 AI 模型的邏輯 } }這里有幾個(gè)關(guān)鍵點(diǎn)值得展開(kāi)說(shuō)。第一blockConcurrencyWhile這個(gè)方法是用來(lái)保證初始化的原子性的。Durable Object 在第一次被訪(fǎng)問(wèn)時(shí)會(huì)執(zhí)行構(gòu)造函數(shù)如果構(gòu)造函數(shù)里有異步操作比如從存儲(chǔ)里讀歷史消息必須用blockConcurrencyWhile包起來(lái)否則在初始化完成之前可能會(huì)有請(qǐng)求進(jìn)來(lái)導(dǎo)致?tīng)顟B(tài)不一致。這個(gè)細(xì)節(jié)官方文檔里提了但很容易被忽略。第二狀態(tài)持久化用this.state.storage它提供了get、put、delete、list等基本操作。對(duì)于小規(guī)模數(shù)據(jù)比如對(duì)話(huà)歷史直接存 JSON 就行。但如果數(shù)據(jù)量大建議分片存儲(chǔ)比如按時(shí)間戳分 key避免單次讀寫(xiě)的數(shù)據(jù)量過(guò)大。我實(shí)測(cè)下來(lái)單個(gè) key 的 value 控制在 128KB 以?xún)?nèi)比較穩(wěn)妥超過(guò)這個(gè)量級(jí)讀寫(xiě)延遲會(huì)明顯上升。第三agent 的并發(fā)控制。Durable Objects 默認(rèn)是單線(xiàn)程處理請(qǐng)求的也就是說(shuō)同一時(shí)刻只有一個(gè)請(qǐng)求在被處理。這個(gè)特性對(duì) agent 來(lái)說(shuō)其實(shí)是好事因?yàn)?agent 的狀態(tài)修改天然需要串行化。但如果你有耗時(shí)的操作比如調(diào)用大模型它會(huì)阻塞后續(xù)請(qǐng)求。解決辦法是把耗時(shí)操作拆成異步任務(wù)或者用state.waitUntil來(lái)處理不需要立即返回結(jié)果的操作。3.3 工具調(diào)用的接入方式agent 要干活就得能調(diào)用工具。在cloudflare-os的體系里工具調(diào)用有兩種接入方式。一種是直接調(diào)用外部 API用fetch就行這個(gè)沒(méi)什么好說(shuō)的。另一種是調(diào)用其他 Worker通過(guò) service binding 的方式這種方式性能更好也更安全因?yàn)椴恍枰┞豆W(wǎng)入口。配置 service binding 需要在wrangler.toml里加一段[[services]] binding WEATHER_SERVICE service weather-worker然后在 agent 代碼里就可以直接this.env.WEATHER_SERVICE.fetch(...)來(lái)調(diào)用。這個(gè)調(diào)用走的是 Cloudflare 內(nèi)部網(wǎng)絡(luò)延遲比公網(wǎng)調(diào)用低一個(gè)數(shù)量級(jí)。我做過(guò)對(duì)比測(cè)試同樣一個(gè)查詢(xún)操作走公網(wǎng)平均 80ms走 service binding 平均 8ms差距非常明顯。對(duì)于需要調(diào)用多個(gè)工具的場(chǎng)景我建議做一個(gè)工具注冊(cè)表把每個(gè)工具的名稱(chēng)、參數(shù) schema、調(diào)用方法統(tǒng)一管理起來(lái)。這樣 agent 在決定調(diào)用哪個(gè)工具時(shí)可以直接從注冊(cè)表里查不需要硬編碼。這個(gè)模式跟現(xiàn)在流行的 function calling 思路是一致的只是實(shí)現(xiàn)層面更貼近邊緣計(jì)算的特性。4. 踩坑記錄與性能調(diào)優(yōu)實(shí)戰(zhàn)4.1 常見(jiàn)報(bào)錯(cuò)與排查思路在實(shí)際部署和調(diào)試過(guò)程中我遇到了一些典型問(wèn)題整理成速查表方便對(duì)照。報(bào)錯(cuò)信息根本原因解決方法Error: No such module cloudflare-os依賴(lài)未正確安裝或路徑配置錯(cuò)誤檢查package.json和wrangler.toml中的入口配置Durable Object class not foundmigration 未添加或類(lèi)名不匹配在wrangler.toml中添加對(duì)應(yīng)的 migration 記錄Exceeded CPU time limit單次請(qǐng)求計(jì)算時(shí)間超過(guò)限制拆分耗時(shí)邏輯用waitUntil異步處理Storage operation failed: value too large單次寫(xiě)入數(shù)據(jù)超過(guò)大小限制分片存儲(chǔ)單 key 控制在 128KB 以?xún)?nèi)Cannot read properties of undefined環(huán)境變量或綁定未正確注入檢查wrangler.toml中的綁定配置和.dev.vars文件其中 CPU 時(shí)間超限這個(gè)問(wèn)題最隱蔽。Workers 對(duì)單次請(qǐng)求的 CPU 時(shí)間有硬性限制免費(fèi)版是 10ms付費(fèi)版是 50ms可配置到更高。注意這里說(shuō)的是 CPU 時(shí)間不是墻鐘時(shí)間。也就是說(shuō)如果你的代碼在等網(wǎng)絡(luò)請(qǐng)求那段時(shí)間不算 CPU 時(shí)間。但如果你在做大量的 JSON 解析、字符串處理、加密運(yùn)算這些都會(huì)消耗 CPU 時(shí)間。我有個(gè) agent 因?yàn)槊看握?qǐng)求都要遍歷整個(gè)對(duì)話(huà)歷史做摘要結(jié)果 CPU 時(shí)間直接爆了。后來(lái)改成增量摘要每次只處理新增的消息問(wèn)題就解決了。4.2 成本控制的關(guān)鍵參數(shù)邊緣計(jì)算雖然按量計(jì)費(fèi)看起來(lái)便宜但如果不注意賬單也會(huì)悄悄漲上去。我總結(jié)了幾個(gè)關(guān)鍵的成本控制點(diǎn)。首先是 Durable Objects 的計(jì)費(fèi)模式。它按請(qǐng)求數(shù)和持續(xù)時(shí)間兩個(gè)維度計(jì)費(fèi)。請(qǐng)求數(shù)好理解每訪(fǎng)問(wèn)一次算一次。持續(xù)時(shí)間是指 Durable Object 在內(nèi)存中存活的時(shí)間即使沒(méi)有請(qǐng)求只要它還在內(nèi)存里就在計(jì)費(fèi)。所以如果你的 agent 是低頻使用的建議設(shè)置一個(gè)較短的 eviction 時(shí)間讓它盡快從內(nèi)存中釋放。這個(gè)可以在wrangler.toml里配置。其次是 KV 的讀寫(xiě)次數(shù)。KV 的讀操作比寫(xiě)操作便宜很多但讀也有成本。如果你的 agent 每次請(qǐng)求都要讀大量 KV 數(shù)據(jù)累積起來(lái)也不少。優(yōu)化思路是加一層內(nèi)存緩存在 Durable Object 實(shí)例存活期間把常用的數(shù)據(jù)緩存在內(nèi)存里減少 KV 讀取次數(shù)。第三是 AI 模型的調(diào)用成本。這塊往往是最大的開(kāi)銷(xiāo)。cloudflare-os支持接入多種模型我建議在開(kāi)發(fā)階段用便宜的小模型做邏輯驗(yàn)證上線(xiàn)前再切換到效果更好的模型。另外prompt 的設(shè)計(jì)對(duì)成本影響很大精簡(jiǎn) prompt、減少不必要的上下文能顯著降低 token 消耗。4.3 性能優(yōu)化的幾個(gè)實(shí)用技巧第一個(gè)技巧是預(yù)熱。雖然 Workers 冷啟動(dòng)很快但 Durable Object 的首次初始化還是有一定開(kāi)銷(xiāo)的。對(duì)于高頻使用的 agent可以在部署后主動(dòng)發(fā)幾個(gè)請(qǐng)求把它喚醒這樣真實(shí)用戶(hù)來(lái)的時(shí)候就是熱狀態(tài)。第二個(gè)技巧是批量寫(xiě)入。如果你有多個(gè)狀態(tài)需要持久化不要一個(gè)一個(gè)put而是用put的批量接口一次性寫(xiě)入。我實(shí)測(cè)下來(lái)批量寫(xiě)入比逐條寫(xiě)入快 3 到 5 倍而且計(jì)費(fèi)上也更劃算。第三個(gè)技巧是合理使用waitUntil。有些操作不需要在響應(yīng)返回之前完成比如日志記錄、數(shù)據(jù)統(tǒng)計(jì)、異步通知。這些操作可以用state.waitUntil包起來(lái)讓它們?cè)陧憫?yīng)返回之后繼續(xù)執(zhí)行不阻塞用戶(hù)請(qǐng)求。但要注意waitUntil里的操作如果失敗了不會(huì)有任何提示所以關(guān)鍵操作不要放進(jìn)去。第四個(gè)技巧是控制 Durable Object 的粒度。一個(gè)常見(jiàn)的誤區(qū)是一個(gè)用戶(hù)一個(gè) Object但如果用戶(hù)量很大Object 數(shù)量會(huì)爆炸管理成本上升。更好的做法是按會(huì)話(huà)或者任務(wù)來(lái)劃分一個(gè) Object 負(fù)責(zé)一個(gè)獨(dú)立的會(huì)話(huà)會(huì)話(huà)結(jié)束后 Object 可以被回收。這樣既能保證狀態(tài)隔離又能控制 Object 數(shù)量。5. 這個(gè)項(xiàng)目后續(xù)還能怎么玩cloudflare-os目前還在快速迭代中社區(qū)里已經(jīng)有不少人在基于它做各種實(shí)驗(yàn)。我關(guān)注到幾個(gè)比較有意思的方向。一個(gè)是 agent 的持久化記憶?,F(xiàn)在的 agent 大多是會(huì)話(huà)級(jí)記憶會(huì)話(huà)結(jié)束就忘了。但結(jié)合 R2 存儲(chǔ)和向量數(shù)據(jù)庫(kù)可以給 agent 做長(zhǎng)期記憶讓它記住用戶(hù)的歷史偏好、之前的對(duì)話(huà)要點(diǎn)。這個(gè)方向跟agent記憶這個(gè)熱詞是吻合的技術(shù)上也可行主要難點(diǎn)在于記憶的檢索效率和相關(guān)性排序。另一個(gè)方向是多 agent 協(xié)作的編排。單個(gè) agent 的能力有限但如果能把多個(gè)專(zhuān)精不同領(lǐng)域的 agent 組合起來(lái)就能處理更復(fù)雜的任務(wù)。比如一個(gè) agent 負(fù)責(zé)理解用戶(hù)意圖一個(gè)負(fù)責(zé)查資料一個(gè)負(fù)責(zé)生成內(nèi)容它們之間通過(guò) Durable Objects 的 RPC 互相調(diào)用。這個(gè)架構(gòu)的挑戰(zhàn)在于錯(cuò)誤處理和狀態(tài)同步一個(gè) agent 失敗了整個(gè)鏈路怎么降級(jí)這是需要仔細(xì)設(shè)計(jì)的。還有一個(gè)方向是 agent 的可觀(guān)測(cè)性?,F(xiàn)在調(diào)試 agent 挺痛苦的你不知道它內(nèi)部到底發(fā)生了什么。如果能在cloudflare-os的基礎(chǔ)上加一層追蹤記錄每個(gè) agent 的輸入輸出、工具調(diào)用、耗時(shí)、token 消耗那對(duì)開(kāi)發(fā)和運(yùn)維都會(huì)很有幫助。這個(gè)方向目前社區(qū)里還沒(méi)有特別成熟的方案我覺(jué)得是個(gè)機(jī)會(huì)。我在實(shí)際使用中最大的體會(huì)是邊緣計(jì)算和 AI agent 的結(jié)合點(diǎn)比想象中要多。Workers 的事件驅(qū)動(dòng)模型、Durable Objects 的狀態(tài)管理、全球邊緣節(jié)點(diǎn)的低延遲這些特性單獨(dú)看都不新鮮但組合起來(lái)恰好解決了 agent 落地時(shí)最頭疼的幾個(gè)問(wèn)題。當(dāng)然這套方案也不是銀彈平臺(tái)綁定、調(diào)試工具不完善、生態(tài)還在早期這些都是現(xiàn)實(shí)存在的限制。選型的時(shí)候得根據(jù)自己的實(shí)際場(chǎng)景來(lái)判斷別因?yàn)榧夹g(shù)新鮮就盲目上馬。