最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

OpenClaw源碼解析路由的基本概念詳解

  發(fā)布時(shí)間:2026-06-03 10:12:19   作者:昵稱好難啊   我要評論
今天我們來學(xué)習(xí)路由的概念,通過路由的設(shè)置,我們能夠設(shè)置不同的agent來處理不同層級的消息,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧

上節(jié)課我們學(xué)習(xí)了通道的概念,openclaw能夠接受來自不同通道(平臺)的消息,然后統(tǒng)一封裝成InboundMessage的格式,然后再交給run_agent_turn進(jìn)行Agent的調(diào)用。今天我們來學(xué)習(xí)路由的概念,通過路由的設(shè)置,我們能夠設(shè)置不同的agent來處理不同層級的消息。

1. 概念解析

1.1. 路由表( BindingTable)

首先是Binding,負(fù)責(zé)綁定入站消息和agent對應(yīng)的規(guī)則,即每條規(guī)則定義了什么情況下由哪位agent響應(yīng),BingingTable在響應(yīng)入站消息時(shí),會(huì)按照tier從小到大的順序遍歷規(guī)則。

@dataclass
class Binding:
    agent_id: str
    tier: int           # 1-5, 越小越具體
    match_key: str      # "peer_id" | "guild_id" | "account_id" | "channel" | "default"
    match_value: str    # 例如 "telegram:12345", "discord", "*"
    priority: int = 0   # 同層內(nèi), 越大越優(yōu)先

參數(shù)說明:
agent_id: 目標(biāo)agent的唯一id

tier: 匹配的層級,數(shù)字是1-5, 越小越優(yōu)先

match_key: 匹配字段名,從peer_id, channel, default, guild_id和account_id中指定

match_value: 字段的匹配值

priority: 優(yōu)先級

比如有如下綁定規(guī)則:

bt = BindingTable()
bt.add(Binding(agent_id="luna", tier=5, match_key="default", match_value="*"))
bt.add(Binding(agent_id="sage", tier=4, match_key="channel", match_value="telegram"))
bt.add(Binding(agent_id="sage", tier=1, match_key="peer_id",
               match_value="discord:admin-001", priority=10))

則有如下解析規(guī)則:

bt.add(Binding(agent_id="luna", tier=5, match_key="default", match_value="*"))

如果前面1~4層都沒有任何匹配規(guī)則,則默認(rèn)使用luna作為響應(yīng)agent。

Binding(agent_id="sage", tier=4, match_key="channel", match_value="telegram")

通道級別匹配,如果入站消息是來自telegram的,并且前1~3層級沒有更加具體的規(guī)則時(shí),使用sage作為響應(yīng)agent

Binding(agent_id="sage", tier=1, match_key="peer_id", match_value="telegram:admin-001", priority=10)

peer級別的匹配,如果入站消息是用戶id為telegram:admin-001發(fā)出的,那么我們直接使用sage作為響應(yīng)的Agent。

1.2. 路由解析

下面是路由解析的匹配規(guī)則,可以看到,規(guī)則是按照tier進(jìn)行由小到大進(jìn)行匹配的。

def resolve(self, channel: str = "", account_id: str = "",
                guild_id: str = "", peer_id: str = "") -> tuple[str | None, Binding | None]:
    """遍歷第1-5層, 第一個(gè)匹配的獲勝。返回 (agent_id, matched_binding)。"""
    for b in self._bindings:
        if b.tier == 1 and b.match_key == "peer_id":
            if ":" in b.match_value:
                if b.match_value == f"{channel}:{peer_id}":
                    return b.agent_id, b
            elif b.match_value == peer_id:
                return b.agent_id, b
        elif b.tier == 2 and b.match_key == "guild_id" and b.match_value == guild_id:
            return b.agent_id, b
        elif b.tier == 3 and b.match_key == "account_id" and b.match_value == account_id:
            return b.agent_id, b
        elif b.tier == 4 and b.match_key == "channel" and b.match_value == channel:
            return b.agent_id, b
        elif b.tier == 5 and b.match_key == "default":
            return b.agent_id, b
    return None, None

1.3. 會(huì)話隔離

通過指定不同的dm_scope,達(dá)到不同粒度的私聊隔離。

其實(shí)就是創(chuàng)建和加載不同的session.json文件,再序列化成消息格式發(fā)送給llm

# ---------------------------------------------------------------------------
# 會(huì)話鍵構(gòu)建
# ---------------------------------------------------------------------------
# dm_scope 控制私聊隔離粒度:
#   main                      -> agent:{id}:main
#   per-peer                  -> agent:{id}:direct:{peer}
#   per-channel-peer          -> agent:{id}:{ch}:direct:{peer}
#   per-account-channel-peer  -> agent:{id}:{ch}:{acc}:direct:{peer}

def build_session_key(agent_id: str, channel: str = "", account_id: str = "",
                      peer_id: str = "", dm_scope: str = "per-peer") -> str:
    aid = normalize_agent_id(agent_id)
    ch = (channel or "unknown").strip().lower()
    acc = (account_id or "default").strip().lower()
    pid = (peer_id or "").strip().lower()
    if dm_scope == "per-account-channel-peer" and pid:
        return f"agent:{aid}:{ch}:{acc}:direct:{pid}"
    if dm_scope == "per-channel-peer" and pid:
        return f"agent:{aid}:{ch}:direct:{pid}"
    if dm_scope == "per-peer" and pid:
        return f"agent:{aid}:direct:{pid}"
    return f"agent:{aid}:main"

2. 流程設(shè)計(jì)

下面是代碼的流程圖,可以看到有兩個(gè)輸入,一個(gè)是cli,另一個(gè)是websocket客戶端。

如果指定了force_agent,那么直接使用該agent進(jìn)行回答,否則將進(jìn)行路由表解析。通過查詢BindingTable,獲得響應(yīng)的agent,然后使用build_session_key生成sk,決定不同的用戶/通道的消息是否共享同一個(gè)對話歷史。

到此這篇關(guān)于OpenClaw源碼解析路由的基本概念詳解的文章就介紹到這了,更多相關(guān)OpenClaw路由內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!

相關(guān)文章

  • OpenClaw離線模式報(bào)錯(cuò):資源加載失敗、任務(wù)無法執(zhí)行的修復(fù)教程

    本文詳細(xì)解析了OpenClaw在離線模式下常見的資源加載失敗”和任務(wù)無法執(zhí)行錯(cuò)誤成原因,并提供了從基礎(chǔ)排查到高級優(yōu)化的全面修復(fù)方案,文章還涵蓋預(yù)防措施與最佳實(shí)踐,幫助用戶
    2026-05-29
  • Windows 11操作系統(tǒng)安裝OpenClaw的完整教程

    OpenClaw是一款開源AI執(zhí)行框架,支持多渠道通信、文件管理、任務(wù)自動(dòng)化等功能,本文詳細(xì)介紹了其安裝步驟,包括環(huán)境準(zhǔn)備、安裝方式及常見問題解決方法,并附帶安裝驗(yàn)證與測試方
    2026-05-27
  • OpenClaw的Token消耗該怎么計(jì)算詳解(附實(shí)操優(yōu)化方案)

    OpenClaw本身沒有內(nèi)置大模型,它的所有思考、指令執(zhí)行、文件讀取、結(jié)果生成,都依賴調(diào)用外部大模型API,而每一次API交互,都會(huì)按Token計(jì)費(fèi),這篇文章主要介紹了OpenClaw的Token
    2026-05-25
  • Windows下OpenClaw安裝對接ollama的GLM-4.7-Flash模型

    本文介紹了在GPU平臺上自動(dòng)化部署ollama中GLM-4.7-Flash鏡像,實(shí)現(xiàn)高效AI自動(dòng)化辦公,該輕量級模型特別適合Windows用戶處理本地文件整理、數(shù)據(jù)收集等重復(fù)性任務(wù),具有一定的
    2026-05-25
  • OpenClaw安裝與配置指南之如何使用自定義模型提供商

    OpenClaw 是 2026 年初爆火的開源本地 AI 智能體框架,這篇文章主要為大家詳細(xì)介紹了OpenClaw安裝與配置指南,以及如何使用自定義模型提供商,有需要的小伙伴可以參考一下
    2026-05-22
  • OpenClaw .NET兼容性目錄指南(CompatibilityCatalog)

    這篇文章給大家介紹OpenClaw.NET兼容性目錄指南(CompatibilityCatalog),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2026-05-22
  • OpenClaw開發(fā)自定義Skills的實(shí)戰(zhàn)指南

    為 OpenClaw開發(fā)自定義 Skills,就像是給它裝上能按你心意干活的新“手腳”,這個(gè)過程比你想象的要簡單,只要遵循一定的規(guī)范和流程,即便是新手也能在短時(shí)間內(nèi)開發(fā)出第一個(gè)
    2026-05-20
  • OpenClaw Gateway 卡死假死問題完整診斷與預(yù)防方案解析

    這篇文章給大家介紹OpenClaw Gateway 卡死假死問題完整診斷與預(yù)防方案解析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2026-05-20
  • 本地部署OpenClaw(龍蝦)的全攻略

    在2026年的AI智能體浪潮中,OpenClaw無疑是GitHub上最受關(guān)注的開源項(xiàng)目之一,GitHub星標(biāo)已超過30.9萬顆,登頂多個(gè)開源榜單,本文給大家介紹了本地部署OpenClaw(龍蝦)的全攻
    2026-05-19
  • OpenClaw Skills 安裝與配置指南

    本文介紹了OpenClawSkills的概念、獲取途徑、安裝方式、推薦Skills及配置方法,通過ClawHub官網(wǎng)、GitHub倉庫等獲取Skills,使用ClawHubCLI或OpenClawCLI安裝,文章還提供了安
    2026-05-18

最新評論

旌德县| 阳东县| 平谷区| 怀仁县| 龙陵县| 汤原县| 湟中县| 商河县| 迁西县| 名山县| 明溪县| 枣强县| 油尖旺区| 沙坪坝区| 金溪县| 玛沁县| 钦州市| 磐安县| 平和县| 西畴县| 清丰县| 北海市| 金溪县| 达孜县| 祥云县| 石城县| 抚松县| 哈巴河县| 乐业县| 云霄县| 田林县| 元朗区| 内黄县| 万盛区| 兴城市| 金山区| 五河县| 定南县| 虹口区| 乌鲁木齐县| 松桃|