作的智能體觸達層架構(gòu)全解析)
做了幾年大模型應(yīng)用我越來越覺得單個Agent就像單兵作戰(zhàn)能力再強也有視野盲區(qū)。真正要把AI落地到復雜業(yè)務(wù)里一群Agent怎么互相找到、怎么安全對話、怎么把活兒分清楚就成了繞不開的難題。最近我從零跑通了一個叫Agent-Reach的項目核心就是解決這類“智能體觸達”問題。你可以把它理解成Agent世界的DNS加API網(wǎng)關(guān)每個Agent只需要在Reach上注冊自己的能力和地址其他Agent就能通過語義描述找到它、調(diào)用它、監(jiān)控它整個過程對調(diào)用方完全透明。這篇文章把我從需求拆解到架構(gòu)設(shè)計到踩坑修復的完整經(jīng)歷寫出來尤其適合正在從單體Agent走向多Agent協(xié)作或者想把Agent能力平臺化的團隊參考。1. 先搞清楚Agent-Reach到底解決什么問題1.1 單體Agent是夠用但Agent一旦規(guī)?;腿兞宋易钤缱龅腁gent都是單體形態(tài)一個Agent里面堆工具、堆提示詞、堆上下文管理。這種模式在小范圍DEMO里非常順手但當你把手伸向真實業(yè)務(wù)單體Agent馬上會撞上三堵墻。第一堵墻是上下文墻。Agent的上下文窗口再大也是有限的工具調(diào)用鏈一長中間結(jié)果和任務(wù)狀態(tài)全擠在同一個上下文里經(jīng)常觸發(fā)截斷而且每次截斷都伴隨推理質(zhì)量下降。有一次我讓一個Agent同時處理訂單查詢、庫存校驗、物流追蹤三件事結(jié)果三條工具記錄在上下文里互相覆蓋最后它把物流狀態(tài)和庫存數(shù)字搞混了生成的結(jié)論完全不可用。第二堵墻是專業(yè)性墻。一個Agent要能做好所有事意味著它的提示詞體系要容納各種領(lǐng)域的知識。結(jié)果就是各行都不精比如你讓它寫代碼它能寫讓它做財務(wù)對賬它也硬著頭皮上但專業(yè)性和準確率都讓人捏一把汗??蛻糁魂P(guān)心結(jié)果我才不管這個Agent是不是全能反正錯了就是產(chǎn)品爛。第三堵墻是故障隔離墻。單體Agent一個模塊出問題整個鏈路跟著掛排查起來全靠翻日志碰運氣。尤其當Agent被嵌入業(yè)務(wù)流程后它的單點故障會逐級放大。所以很自然的想法是拆把專業(yè)領(lǐng)域拆成一個一個獨立的Agent每個Agent只做自己最擅長的事。但拆完就立刻遇到新麻煩——這些Agent之間怎么通信A怎么知道B能干什么C怎么判斷該把請求轉(zhuǎn)發(fā)給誰調(diào)用失敗是重試還是放棄權(quán)限怎么隔離這些問題沒有一個標準答案我當時的第一個反應(yīng)是自己寫一套調(diào)度協(xié)議但寫了兩天我就意識到我真正缺的不是調(diào)度而是“觸達”。1.2 觸達層和調(diào)度層根本不是一回事很多同行一上來就去做編排引擎搞DAG、搞狀態(tài)機、搞任務(wù)分解。我的判斷是編排是上層決策觸達是底層連接沒有觸達層的支撐編排就是空轉(zhuǎn)。Agent-Reach的定位非常明確它是一個觸達層。意味著它不替業(yè)務(wù)Agent做決策不告訴某個Agent“你下一步該調(diào)用誰”它只保證三件事第一每個Agent的能力可以被準確發(fā)現(xiàn)第二每個請求可以被送到正確的能力端點第三Agent可以隨時上下線而不影響外部調(diào)用體驗。打個比方調(diào)度層是大腦告訴身體先邁左腳還是右腳觸達層是神經(jīng)保證大腦的信號能準確傳到對應(yīng)的肌肉。沒有神經(jīng)大腦再聰明也走不了路。Agent-Reach做的事就是“通路”它把Agent和Agent之間的連接從硬編碼的互相調(diào)用變成了基于能力描述動態(tài)匹配的通路。這帶來幾個直接好處一個是弱耦合Agent之間不需要知道彼此的物理地址只認能力標識另一個是可觀測所有請求都經(jīng)過觸達層流量、耗時、成功率一清二楚還有一個是灰度方便能力不變的情況下背后實現(xiàn)Agent隨便換調(diào)用方毫無感知。1.3 Agent-Reach的適用邊界剛做完的時候我一度很興奮想著把這個東西推到所有項目里后來被現(xiàn)實教育了。Agent-Reach適合的場景有三個特征多Agent、跨服務(wù)、能力動態(tài)變化。如果只有兩三個Agent且都是你本地寫死的那直接函數(shù)調(diào)用就夠了上觸達層純屬增加復雜度。但如果你的Agent數(shù)量超過五個或者Agent分布在不同的服務(wù)、不同的團隊維護甚至未來要接入第三方Agent那Agent-Reach這種觸達層就跑不掉。我目前的經(jīng)驗是可以不用但架構(gòu)里必須預留這個位置否則后期演進成本極高。2. 從零搭建Agent觸達層六個模塊一個都不能少2.1 整體架構(gòu)演進思路我第一版Agent-Reach只做了兩件事Agent能力注冊加請求轉(zhuǎn)發(fā)。跑了兩輪測試之后發(fā)現(xiàn)遠遠不夠缺目錄管理、缺心跳檢測、缺語義匹配、缺鑒權(quán)、缺鏈路追蹤。所以第二版重新梳理成六個核心模塊能力目錄Catalog管理Agent的能力元數(shù)據(jù)解決“誰有什么能力”的問題。注冊中心Registry管理Agent實例的上下線和健康狀態(tài)解決“誰還活著”的問題。語義路由Semantic Router根據(jù)請求意圖匹配可用能力解決“該找誰”的問題。請求代理Proxy負責實際轉(zhuǎn)發(fā)和負載均衡解決“怎么送過去”的問題。安全鑒權(quán)Auth做身份認證和權(quán)限校驗解決“誰有資格調(diào)用”的問題。鏈路監(jiān)控Monitor記錄全鏈路的調(diào)用日志和指標解決“出了事后怎么查”的問題。這六個模塊相互獨立但邏輯上是串聯(lián)關(guān)系注冊中心保證目錄里有活著的能力語義路由從活著的能力里找出匹配目標代理把請求送出去鑒權(quán)在路由和代理兩個階段各攔一道監(jiān)控則從請求進來一直記錄到響應(yīng)返回。2.2 目錄模型能力描述比接口定義更重要Agent-Reach最核心的設(shè)計鮮有人提就是能力描述模型。傳統(tǒng)微服務(wù)用OpenAPI描述接口但Agent的能力本質(zhì)上是自然語言驅(qū)動的。我自己設(shè)計了一套簡化版的能力描述Schema核心字段如下{ agent_id: agent-inventory, name: 庫存查詢Agent, version: 1.2.0, capabilities: [ { capability_id: inventory.query, name: 庫存查詢, description: 根據(jù)SKU或商品ID查詢當前庫存數(shù)量、可用庫存和在途庫存, input_schema: { sku_id: string, warehouse_id: string, optional }, output_schema: { sku_id: string, available: integer, total: integer, in_transit: integer }, semantic_tags: [庫存, 倉儲, SKU, 可用量], timeout_ms: 2000, rate_limit: { qps: 50, burst: 100 } } ], endpoint: internal://inventory-agent:8080/invoke, auth_scope: inventory:read }這個模型里最重要的不是字段格式而是兩個設(shè)計取舍。一個是語義標簽傳統(tǒng)接口找不到“查一下還剩多少貨”這種表達但語義標簽可以建立自然語言到能力的映射。另一個是超時和限流的聲明這決定了路由層能不能做出合理決策比如同一個能力被兩個Agent提供一個聲明超時兩秒一個聲明超時五秒對外服務(wù)時我會優(yōu)先路由給超時短的。2.3 注冊與發(fā)現(xiàn)的實現(xiàn)細節(jié)注冊中心我最初想用現(xiàn)成的服務(wù)注冊組件后來發(fā)現(xiàn)它們在心跳上報和目錄推送上是夠用了但缺少和語義路由的聯(lián)動。所以我直接用分布式KV存儲自己寫了一套輕量注冊邏輯核心流程三步第一步是Agent啟動時向Agent-Reach發(fā)送注冊請求帶上自己的能力描述JSONAgent-Reach會把能力描述寫入目錄同時給Agent生成一個租約租約到期時間默認按心跳間隔乘三倍計算。第二步是Agent每隔十五秒發(fā)一次心跳續(xù)約相當于告訴Agent-Reach“我還活著”。如果連續(xù)三次心跳沒收到Agent-Reach就把這個Agent標記為不健康并摘除它名下的能力路由。這個三倍的取值是按照網(wǎng)絡(luò)波動容忍度設(shè)計的短了容易誤殺長了故障恢復慢。第三步是消費端并不主動拉取目錄而是在Agent-Reach內(nèi)部維護一個能力路由表的實時緩存。任何Agent注冊狀態(tài)變化都會觸發(fā)路由表增量更新保證查詢匹配拿到的一定是最新數(shù)據(jù)。這樣做的原因是消費端Agent本身就不該關(guān)心目錄的物理細節(jié)它只管發(fā)請求剩下的事交給觸達層。2.4 語義路由讓Agent找到“對的那個人”Agent之間互相調(diào)用時調(diào)用方發(fā)來的請求常常是一段自然語言描述比如“我需要知道這個商品明天能不能發(fā)到上?!?。Agent-Reach要做的就是把這句話翻譯成一個可執(zhí)行的能力調(diào)用。我的做法分三步意圖解析、能力預篩、候選排序。意圖解析會在Agent-Reach內(nèi)部完成把自然語言里的目的提煉成結(jié)構(gòu)化訴求能力預篩根據(jù)語義標簽和描述做一次粗粒度過濾把完全無關(guān)的Agent直接剔除候選排序把剩余候選按匹配度、健康度、負載情況綜合排序選出最優(yōu)目標。排序分數(shù)的計算公式如下score 0.4 * semantic_similarity 0.3 * capability_coverage 0.2 * reliability_score 0.1 * load_factor語義相似度用向量化方式計算能力覆蓋率計算候選Agent的能力參數(shù)中有多少覆蓋了請求所需參數(shù)可靠性得分來自最近五分鐘的成功率負載因子則是耦合近一分鐘平均請求量做的平滑歸一。四個因子缺一不可單純靠語義匹配很容易選出一個“意思最像但實際負載爆炸”的Agent。2.5 請求代理與降級策略路由選完目標之后請求就進入代理層。代理層本質(zhì)是一個透明的HTTP轉(zhuǎn)發(fā)通道但它比普通網(wǎng)關(guān)多做了一件事維護一個候選列表。也就是路由層選出的不是唯一的Agent而是排好序的Top N代理默認發(fā)往第一位失敗時自動嘗試第二位。我做代理時踩過一個大坑就是超時時間設(shè)置。最開始圖省事統(tǒng)一設(shè)成五秒結(jié)果上游Agent平均響應(yīng)只要八百毫秒但偶爾會讓人等滿五秒才返回整個鏈路一卡就是五秒。后來我改成動態(tài)超時默認取該Agent歷史P95延遲的一點五倍同時設(shè)置不超過能力聲明里timeout_ms的硬上限。這個改動讓長尾請求的等待時間大幅收縮整體成功率反而提升了。3. 實操把Agent-Reach跑通的完整過程3.1 環(huán)境準備與最小實現(xiàn)路徑我建議你從最小可用閉環(huán)開始不要一上來六個模塊全做。我第二版重構(gòu)時最失誤的地方就是想著一步到位結(jié)果浪費了兩周在權(quán)限模型上核心鏈路反而一直沒測。正確的路徑應(yīng)該是能力目錄、注冊中心、請求代理三件套跑通再補語義路由再補鑒權(quán)和監(jiān)控。環(huán)境上我沒有用特別重的框架選了一個相對輕量的技術(shù)棧Python的服務(wù)端加一個關(guān)系型數(shù)據(jù)庫存目錄元數(shù)據(jù)分布式KV作為注冊和心跳存儲消息隊列做請求異步回放。整個Agent-Reach本身是無狀態(tài)的所以可以水平擴展但最初的單機部署也完全夠用。3.2 能力注冊的代碼實操注冊接口是整個系統(tǒng)的入口Agent上線的第一步就是把能力描述推上來。我寫的這個注冊接口雖然很短但有幾個細節(jié)被反復修改過def register_agent(agent_info: AgentInfo): # 檢查agent_info中的schema是否合法 validate_capability_schema(agent_info.capabilities) # 為每個capability生成全局唯一的capability_id for cap in agent_info.capabilities: cap.capability_id generate_capability_id(agent_info.agent_id, cap.name) # 寫入目錄存儲 catalog.save(agent_info) # 為agent創(chuàng)建租約lease_duration 3 * heartbeat_interval lease_duration 3 * agent_info.heartbeat_interval registry.create_lease(agent_info.agent_id, lease_duration) # 觸發(fā)路由表增量更新 router.rebuild_routes_by_agent(agent_info.agent_id)兩個容易踩坑的點一個是不做schema校驗直接入庫后來因為某個Agent漏了必填參數(shù)字段路由層解析請求時崩潰排查了整整半天。另一個是沒有觸達路由更新只把能力寫進目錄結(jié)果注冊成功后請求還是找不到新Agent原因是路由表是獨立緩存所以注冊完成后必須主動觸發(fā)增量更新這一步不能省。3.3 心跳漏判的調(diào)參實操心跳機制看著簡單調(diào)參卻折磨人。最初心跳間隔設(shè)成三十秒租約九十秒結(jié)果有個Agent因為GC停頓八秒就把連續(xù)三次心跳全錯過了Agent-Reach直接把它摘除??蓪嶋H上這個Agent只是暫停了一下業(yè)務(wù)恢復后完全正常。這讓我明白一個原則心跳參數(shù)不是越靈敏越好關(guān)鍵要看Agent的“暫停容忍度”。在線服務(wù)一般心跳間隔可以設(shè)在五到十五秒離線批處理Agent則可以放寬到六十秒。摘除閾值建議保持在三次漏判小于三次容易被網(wǎng)絡(luò)抖動誤傷大于三次會讓故障發(fā)現(xiàn)太慢。另外還有一個細節(jié)Agent收到摘除通知后要自動重新注冊而不是原地報錯。你想想摘除往往是因為網(wǎng)絡(luò)抖動網(wǎng)絡(luò)恢復后Agent還在禁賽狀態(tài)那就太傻了。自動恢復機制讓Agent從“被摘除”狀態(tài)變成“注冊中”狀態(tài)重新續(xù)約后路由表會在幾個毫秒內(nèi)恢復對它的可見性。3.4 語義路由調(diào)通的完整過程語義路由是Agent-Reach里我迭代最久的部分。第一版只做了基于關(guān)鍵詞的硬匹配比如請求中包含“庫存”兩個字就路由到庫存Agent。效果嘛簡單場景能用稍微變個說法就掛了?!皞}庫還有多少貨”這種表達沒有“庫存”兩字就完全匹配不到。后來切換成向量匹配先把請求做向量化再和能力描述向量做余弦相似度計算同時保留關(guān)鍵詞匹配作為兜底問題才真正解決。調(diào)優(yōu)過程中我還有一個體會路由的候選數(shù)量不要貪多。最開始每次選出Top 10讓代理層自由選擇但很多候選Agent能力描述相似度極高真實能力差異不大白白增加檢索耗時。后來把預篩階段做嚴按相關(guān)性閾值過濾只保留Top 3實測檢索延遲從一百二十毫秒降到三十毫秒路由準確率沒有變差。還有一個必須說的坑路由層做語義匹配時不能只靠描述還得看輸入輸出Schema的兼容性。比如請求方要求返回“可售庫存”“鎖定庫存”兩個字段但候選Agent只輸出“可用庫存”這屬于能力不匹配不能因為描述像就路由過去。我在預篩階段加了一個字段覆蓋檢查解決了一大批線上誤路由問題。3.5 全鏈路壓測數(shù)量一多就露餡所有功能單測通過之后我做了一次全鏈路壓測場景是五個Agent同時注冊每個Agent每秒接受二十個請求。結(jié)果讓我有點意外系統(tǒng)性能沒有成為瓶頸真正暴露的問題集中在注冊風暴和路由緩存一致性上。壓測開始時有三個Agent同時冷啟動它們在同一秒內(nèi)向Agent-Reach發(fā)起注冊直接導致目錄存儲的寫入隊列擁塞有一個Agent注冊請求超時。這個問題的解法是在注冊入口加一個輕度限流按Agent維度控制注冊頻率同時把寫目錄和寫KV兩階段合并在一個事務(wù)里避免部分寫入成功部分失敗導致臟數(shù)據(jù)。另一個問題是路由緩沖的一致性。壓測中有一次我突然殺掉一個Agent進程明明心跳已經(jīng)過期但路由表里還殘留著它的路由條目請求打過去就直接超時。經(jīng)過排查發(fā)現(xiàn)路由緩存有過期時間但不是由心跳過期時間觸發(fā)的。修復方式是讓心跳過期事件直接發(fā)送一個移除指令給路由緩存而不等緩存自己過期同時代理層保留最近請求失敗記錄連續(xù)失敗三次就主動觸發(fā)一次路由下線。4. 實戰(zhàn)中的臟活累活踩過的坑和補救方案4.1 最容易被忽略的Agent身份認證Agent之間的調(diào)用和人類用戶操作完全不同。人類用戶可以用賬號密碼身份認證但Agent是機器身份如果按人類用戶那套做效率極低也容易讓Agent之間互相拿到不該拿的權(quán)限。我在Agent-Reach里引入了一套機器身份令牌的方案。每個Agent注冊時分配一對密鑰Agent調(diào)用別的Agent時必須根據(jù)目標能力和自身身份生成一個帶簽名的調(diào)用憑證。這背后做的事其實和微服務(wù)的service-to-service認證差不多但簡化了不少目的是快不用每步都去找鑒權(quán)服務(wù)。設(shè)計上有個取舍鑒權(quán)粒度放到“Agent 能力點”級別而不是傳統(tǒng)的角色權(quán)限。好處是權(quán)限邊界和業(yè)務(wù)能力邊界一致比如庫存Agent可以被訂單Agent調(diào)用“查詢能力”但不能讓它調(diào)用“庫存調(diào)整能力”。有了能力點級別權(quán)限之后出了安全事故能快速定位到具體能力和調(diào)用源不用推翻重查。4.2 鏈路追蹤沒有的話你會想哭Agent之間的調(diào)用鏈路往往跨了好幾個服務(wù)一旦某環(huán)出問題沒有全鏈路標識根本沒法排查。我剛開始沒做鏈路追蹤只靠日志里的request_id碰運氣結(jié)果有一次一個請求被路由到錯誤Agent日志散落在三個服務(wù)里我對著時間戳手工拼鏈路花了兩個小時才定位到是語義路由里的Schema匹配寫反了。后來我痛定思痛在Agent-Reach請求入口生成一個trace_id隨著HTTP頭傳遞到下游Agent所有日志和監(jiān)控指標都必須攜帶這個trace_id。監(jiān)控模塊記錄的是完整調(diào)用樹哪個Agent發(fā)的、路由選中的是哪個、代理實際轉(zhuǎn)發(fā)到哪、耗時多少、響應(yīng)碼是什么。有一次接到線上反饋說“某個Agent偶爾報錯”我查監(jiān)控發(fā)現(xiàn)一條請求鏈路上出現(xiàn)了兩個相同capability_id的Agent原來是新舊版本同時在線路由把一半流量送給了老版本。這種問題沒有鏈路追蹤幾乎不可能從業(yè)務(wù)反饋中推斷出來。4.3 降級策略路由失敗后該怎么辦代理層降級是我壓測之后補上的功能。最初代理轉(zhuǎn)發(fā)失敗后直接返回錯誤給調(diào)用方調(diào)用方再自己重試結(jié)果導致調(diào)用方代碼里充斥著重試邏輯而且重試沒有退避策略失敗時反而加重了Agent的負載?,F(xiàn)在的降級邏輯長這樣代理按路由結(jié)果依次嘗試Top 3候選Agent每個候選的超時時間都由自身歷史表現(xiàn)動態(tài)計算如果Top 3全部失敗代理把請求放入一個輕量隊列做一次延遲重試延遲時間采用指數(shù)退避加抖動如果延遲重試還是失敗則返回一個標準錯誤結(jié)構(gòu)包含失敗原因和候選列表快照。有一個很重要的認知改變降級不是等到真出故障才設(shè)計而是要在每日的請求流量里“灰度一部分失敗”來驗證降級路徑是否真的生效。我會定期通過配置中心把某個Agent的流量百分比調(diào)成異常模式人為觸發(fā)降級全鏈路觀察行為是否符合預期。那種“平時不用故障時才發(fā)現(xiàn)不能用”的降級方案不值一文。4.4 能力目錄漂移最隱蔽的數(shù)據(jù)一致性問題能力目錄的本質(zhì)是Agent能力的元數(shù)據(jù)Agent代碼更新了能力描述卻還掛在舊版本上這是最常見的數(shù)據(jù)漂移問題。有一段時間我排查一個線上故障發(fā)現(xiàn)庫存Agent支持了新的查詢維度但目錄模型還是舊Schema原因就是Agent發(fā)布流程里漏了調(diào)用注冊接口的步驟。解決方案說來也簡單發(fā)布流程強制“先注冊、后切流”。Agent新版本的發(fā)布腳本必須在完成能力注冊并確認路由生效后才把線上流量切過來切流完成后還要做一次目錄與真實Agent能力清單的對比掃描。這樣可以做到不讓能力目錄成為孤立信息源。5. 常見問題速查與避坑清單很多讀者會問Agent-Reach這類項目有沒有通用的落地模板我的回答是架構(gòu)能抄細節(jié)不能抄尤其是故障相關(guān)的問題每個團隊都有自己的坑。下面這個速查表是我目前最常用的一套你可以直接拿去對照排查。常見問題典型現(xiàn)象排查思路解決方案Agent注冊超時新Agent上線后請求仍然報“能力不存在”檢查Agent是否完成注冊、租約是否建立、路由表是否增量更新注冊入口限流注冊路由更新保證原子性心跳誤判正常Agent突然被摘除請求大量失敗查看心跳間隔與摘除閾值設(shè)置排查網(wǎng)絡(luò)抖動調(diào)高摘除閾值到3次漏判實現(xiàn)摘除后自動重注冊路由錯配請求被送到語義相似但不匹配的Agent檢查語義相似度得分和Schema字段覆蓋情況字段覆蓋檢查加入預篩階段匹配度閾值調(diào)嚴調(diào)用全部失敗某能力的所有候選Agent都返回錯誤查看鏈路追蹤確認候選列表是否包含不健康節(jié)點心跳過期事件實時觸發(fā)路由緩存移除老版本和新版本同時接流量同樣請求時而成功時而行為不一致檢查路由緩存中是否存在同一capability_id多version目錄版本控制切流前強制注冊新版本并灰度驗證上游Agent響應(yīng)慢調(diào)用方等待時間過長檢查代理超時是否設(shè)置合理Agent自身GC暫停是否頻繁動態(tài)超時取P95硬上限取能力聲明的timeout_ms鑒權(quán)配置遺漏某Agent能調(diào)用本不該調(diào)用的能力查看調(diào)用憑證中scope字段定義能力點級鑒權(quán)權(quán)限配置和Agent發(fā)布同步走發(fā)布流程避坑清單里我再補幾個原則性的東西。第一個配置文件該用環(huán)境變量分離就用環(huán)境變量分離Agent-Reach的鑒權(quán)密鑰如果硬編碼在代碼里換秘鑰需要整包發(fā)版安全性和靈活度都很差換成環(huán)境變量之后滾動更新秘鑰只需要重啟進程。第二個所有Agent的endpoint不要用公網(wǎng)地址統(tǒng)一走內(nèi)部服務(wù)發(fā)現(xiàn)這樣在容器環(huán)境里Agent的物理IP怎么變都不影響路由。第三個監(jiān)控的告警閾值不能拍腦袋先用幾天流量打底觀察P95和成功率分布之后再設(shè)定比正常基線高一截的告警閾值否則就會天天誤報沒人信告警了。最后一個很值得說的經(jīng)驗是Agent-Reach這類基礎(chǔ)組件一定要做“逃生艙門”。所謂逃生艙門就是當觸達層本身故障時業(yè)務(wù)上如何降級。我這邊留的是一個配置開關(guān)緊急時可以關(guān)掉語義路由讓調(diào)用方直連Agent的endpoint。這聽著像是功能后退但保證了“觸達層掛了也不能讓業(yè)務(wù)整體掛掉”。這是我被真實故障教育過的教訓有一次語義路由的向量模型服務(wù)單點故障整個Agent網(wǎng)絡(luò)全部癱瘓如果沒有逃生門那天我就得通宵復盤了。整個Agent-Reach實操下來我最大的感受是智能體的架構(gòu)難點從來不在“智能”而在“連接”。模型能力再強Agent之間不能準確觸達彼此的能力整個系統(tǒng)就是一堆信息孤島。Agent-Reach這個名字起得也直白Reach就是“觸達”這個項目就是把觸達這件事做穩(wěn)、做快、做可控。至于以后多Agent網(wǎng)絡(luò)會成長成什么樣我的判斷是觸達層會越來越像基礎(chǔ)設(shè)施和現(xiàn)在微服務(wù)里的注冊中心、API網(wǎng)關(guān)一樣成為上層智能應(yīng)用的地基。