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

Hermes Agent中多Profile實(shí)戰(zhàn)小結(jié)

  發(fā)布時間:2026-07-17 10:04:16   作者:Qiye   我要評論
本文主要介紹了Hermes Agent中多Profile實(shí)戰(zhàn),學(xué)會Profile機(jī)制,就能輕松創(chuàng)建多個獨(dú)立AI實(shí)例,徹底告別配置沖突和角色混亂,立即掌握創(chuàng)建、切換和隔離AI角色的完整方案,讓你的AI助理們各司其職、高效協(xié)作

折騰 Hermes 也有一段時間了,從一開始的單一 agent 用著挺爽,到后來發(fā)現(xiàn)需求越來越多,一個 agent 根本不夠用。

你想想看,你白天寫代碼需要一個 coding assistant,晚上想搞個研究 bot 幫你盯 arXiv 論文,周末還想弄個寫作助手幫你整理筆記。這三個場景的模型選擇、記憶體系、技能樹完全不一樣,硬塞到一個 agent 里,遲早會精神分裂。

Profile 機(jī)制就是為了解決這個問題而生的。

什么是 Profile

坦率的講,Profile 就是 Hermes 的多實(shí)例隔離方案。

每個 Profile 是一個完全獨(dú)立的 Hermes agent,有自己的 config.yaml、.env、SOUL.md、skills/、sessions/、memory、logs/cron jobs、gateway state,所有狀態(tài)全部隔離在各自的目錄里,互不干擾。

底層實(shí)現(xiàn)其實(shí)挺巧妙的。Hermes 代碼里有 119+ 個地方通過 get_hermes_home() 來解析路徑,Profile 機(jī)制通過設(shè)置 HERMES_HOME 環(huán)境變量,讓所有這些路徑自動指向?qū)?yīng) Profile 的目錄。

默認(rèn) Profile 就是 ~/.hermes 本身,自定義 Profile 在 ~/.hermes/profiles/<name>/。

完整的目錄結(jié)構(gòu)長這樣

~/.hermes/
├── config.yaml                    # 全局配置
├── .env                           # API Keys
├── hermes-agent/                  # 源碼
├── sessions/                      # Default profile sessions
├── skills/                        # Default profile skills
└── profiles/
    ├── coder/                      # Profile: 編程助手
    │   ├── config.yaml             # Profile 專屬配置
    │   ├── .env                    # Profile 專屬 API Keys
    │   ├── home/
    │   │   ├── .lark-cli/hermes/config.json   # Profile 專屬 lark-cli 配置
    │   │   └── ...
    │   ├── skills/
    │   └── sessions/
    ├── research/                   # Profile: 研究助手
    └── writer/                     # Profile: 寫作助手

每個 Profile 通過 ~/.hermes/config.yaml 中的 channels.feishu.accounts 綁定獨(dú)立的飛書應(yīng)用。這套設(shè)計(jì)讓多個 agent 能在一臺機(jī)器上安靜地各過各的。

創(chuàng)建 Profile 的四種姿勢

空白創(chuàng)建

最干凈的方式,從零開始配置

hermes profile create coder

這會創(chuàng)建一個空的 ~/.hermes/profiles/coder/ 目錄,你需要自己跑一遍 coder setup 來配置模型、API key 這些。

克隆配置

如果你已經(jīng)有一個調(diào)好的 Profile,想基于它的配置創(chuàng)建一個新的,但 skills、sessions、memory 這些不要

hermes profile create research --clone

這會把 ~/.hermes/config.yaml.env 復(fù)制過去,但其他狀態(tài)文件都是空的。適合「我想換個模型但其他配置差不多」的場景。

完整克隆

連 skills、memory、sessions 一起復(fù)制

hermes profile create backup --clone-all

這個我一般在做重大配置調(diào)整之前用,先完整克隆一份當(dāng)備份,改炸了還能回滾。

從指定 Profile 克隆

hermes profile create dev --clone-from coder

coder Profile 克隆配置到新的 dev Profile。適合你有多個 Profile,想基于某個特定 Profile 創(chuàng)建新實(shí)例的場景。

使用 Profile 的三種方式

命令別名

創(chuàng)建 Profile 的時候會自動生成一個命令別名

coder chat              # 等同于 hermes -p coder chat
coder gateway start     # 啟動 coder 的 gateway
coder config set model.default anthropic/claude-sonnet-4

這個別名是寫到 PATH 里的 wrapper script,用起來跟原生 hermes 命令沒區(qū)別。我自己最常用的就是這種方式,打字少。

-p 參數(shù)

不想用別名或者在腳本里動態(tài)指定 Profile

hermes -p coder chat
hermes -p research gateway start

適合在 CI/CD 或者自動化腳本里用,Profile 名字可以作為變量傳入。

Sticky Default

如果你某段時間主要用某個 Profile,可以把它設(shè)為默認(rèn)

hermes profile use coder

之后直接 hermes chat 就會用 coder Profile,不用再打 -p。想切回去就 hermes profile use default。

使用 cat ~/.hermes/active_profile 查看當(dāng)前活躍的 Profile。

默認(rèn) Profile 和自定義 Profile 的區(qū)別

說到這個,很多人剛接觸 Profile 機(jī)制會有個疑問,默認(rèn) Profile 和自定義 Profile 到底有啥區(qū)別?

其實(shí)吧,從技術(shù)實(shí)現(xiàn)上看,它們沒有本質(zhì)區(qū)別。都是同樣的目錄結(jié)構(gòu),同樣的配置文件格式,同樣的命令接口。

唯一的區(qū)別是路徑

  • 默認(rèn) Profile 是 ~/.hermes/
  • 自定義 Profile 是 ~/.hermes/profiles/<name>/

默認(rèn) Profile 就是你最初安裝 Hermes 時的 ~/.hermes 目錄,不需要遷移,現(xiàn)有安裝直接就能用。自定義 Profile 是后來創(chuàng)建的,放在 profiles/ 子目錄下。

另外一個小區(qū)別是服務(wù)命名

  • 默認(rèn) Profile 的 systemd 服務(wù)叫 hermes-gateway.service
  • 自定義 Profile 叫 hermes-gateway-<name>.service

這是為了向后兼容,早期版本只有默認(rèn) Profile,服務(wù)名沒有后綴。

但從我自己的使用體驗(yàn)來看,這兩者在功能上完全對等。你完全可以把默認(rèn) Profile 當(dāng)成一個「特殊的自定義 Profile」來理解。

多 Profile 的應(yīng)用場景

配置完了,來聊聊實(shí)際使用。我自己目前跑了三個 Profile,每個對應(yīng)不同的使用場景。

場景一,角色分離

這是最基礎(chǔ)的用法。不同 Profile 扮演不同角色

# 編程助手
hermes profile create coder
coder config set model.default anthropic/claude-sonnet-4
echo "你是一個專注的編程助手,擅長代碼審查和調(diào)試。" > ~/.hermes/profiles/coder/SOUL.md

# 研究助手
hermes profile create research
research config set model.default openai/gpt-4-turbo
echo "你是一個研究助手,擅長論文檢索和文獻(xiàn)綜述。" > ~/.hermes/profiles/research/SOUL.md

# 寫作助手
hermes profile create writer
writer config set model.default anthropic/claude-3-opus
echo "你是一個技術(shù)寫作助手,擅長把復(fù)雜概念講清楚。" > ~/.hermes/profiles/writer/SOUL.md

每個 Profile 有自己的 SOUL.md 來定義人格,有自己的 skills 來定義能力邊界。coder 裝了 debugging 和 development-workflow 技能,research 裝了 research-workflow 技能,writer 裝了 qiye-writer 技能。

互不干擾,各司其職。

場景二,項(xiàng)目隔離

如果你同時參與多個項(xiàng)目,每個項(xiàng)目有自己的技術(shù)棧和約定,可以用 Profile 來隔離

hermes profile create project-a
project-a config set terminal.cwd /path/to/project-a
project-a config set model.default anthropic/claude-sonnet-4

hermes profile create project-b
project-b config set terminal.cwd /path/to/project-b
project-b config set model.default openai/gpt-4-turbo

terminal.cwd 設(shè)置工作目錄,這樣每個 Profile 啟動后自動 cd 到對應(yīng)項(xiàng)目。配合項(xiàng)目根目錄的 AGENTS.mdCLAUDE.md,agent 會自動加載項(xiàng)目約定。

這個方案比在同一個 agent 里反復(fù)切換工作目錄要干凈得多。

場景三,模型對比

有時候你想對比不同模型在同一個任務(wù)上的表現(xiàn),可以創(chuàng)建多個 Profile,每個用不同的模型

hermes profile create test-claude
test-claude config set model.default anthropic/claude-sonnet-4

hermes profile create test-gpt4
test-gpt4 config set model.default openai/gpt-4-turbo

hermes profile create test-local
test-local config set model.default ollama/llama3
test-local config set model.base_url http://localhost:11434

然后給它們同樣的任務(wù),對比輸出質(zhì)量。我自己用這個方法來測試新模型,決定要不要把主力 Profile 切過去。

場景四,沙盒和生產(chǎn)

同一個配置,跑兩個實(shí)例,一個用于測試,一個用于生產(chǎn)

hermes profile create staging --clone production
staging config set model.default openai/gpt-4-turbo-preview
staging config set terminal.cwd /path/to/staging

staging 克隆了 production 的所有配置,但工作目錄和模型不同。你可以在 staging 里隨便折騰,確認(rèn)沒問題了再把配置同步到 production。

多 Profile 協(xié)作

單個 Profile 各自為戰(zhàn)已經(jīng)很強(qiáng)了,但 Hermes 還提供了多 Profile 協(xié)作的機(jī)制。

Kanban 工作隊(duì)列

這是 Hermes 的多 agent 協(xié)作核心。一個 SQLite 數(shù)據(jù)庫作為共享看板,多個 Profile 作為 worker 領(lǐng)取任務(wù)

# 初始化看板
hermes kanban init

# 創(chuàng)建任務(wù)
hermes kanban create "實(shí)現(xiàn)用戶登錄模塊" --assign coder

# 查看任務(wù)狀態(tài)
hermes kanban list

coder Profile 會自動領(lǐng)取分配給它的任務(wù),完成后標(biāo)記為 done。你可以在看板上看到所有任務(wù)的狀態(tài)、進(jìn)度、評論。

這個機(jī)制適合把一個大任務(wù)拆解成多個子任務(wù),分配給不同的 Profile 并行處理。比如一個 Profile 負(fù)責(zé)后端 API,一個負(fù)責(zé)前端 UI,一個負(fù)責(zé)測試用例。

delegate_task 子 agent

如果你不想搞這么重,可以用 delegate_task 在當(dāng)前 Profile 里臨時 spawn 子 agent

# 在 coder Profile 的會話里
delegate_task(
    goal="實(shí)現(xiàn)用戶登錄的單元測試",
    context="后端 API 已經(jīng)完成,使用 pytest,測試文件在 tests/test_auth.py",
    toolsets=["terminal", "file"]
)

子 agent 有獨(dú)立的會話和終端,但共享父 agent 的進(jìn)程。適合臨時拆分一個子任務(wù),不需要長期運(yùn)行。

Profile Distributions

如果你調(diào)教出了一個很好用的 Profile,想分享給別人或者在多臺機(jī)器上同步,可以把它打包成 distribution

# 導(dǎo)出
hermes profile export coder  # 生成 coder.tar.gz

# 導(dǎo)入
hermes profile import coder.tar.gz

或者更進(jìn)一步,把 Profile 發(fā)布到 git 倉庫

hermes profile install github.com/you/research-bot --alias

別人一行命令就能安裝你的整個 agent 配置,包括 SOUL、skills、cron jobs、MCP 連接。credentials、memory、sessions 這些敏感數(shù)據(jù)不會打包,留在本地。

多 Profile 接入聊天平臺

這塊是我覺得 Hermes 設(shè)計(jì)得最優(yōu)雅的地方。

單 Profile 對應(yīng)單 Bot

每個 Profile 運(yùn)行自己的 gateway 進(jìn)程,有自己的 bot token

# coder Profile 的 .env
TELEGRAM_BOT_TOKEN=111111:AAA...

# research Profile 的 .env
TELEGRAM_BOT_TOKEN=222222:BBB...

啟動各自的 gateway

coder gateway start       # 啟動 coder 的 Telegram bot
research gateway start    # 啟動 research 的 Telegram bot

這樣你就有兩個獨(dú)立的 Telegram bot,一個負(fù)責(zé)編程,一個負(fù)責(zé)研究。用戶在 Telegram 里 @ 不同的 bot,消息會路由到對應(yīng)的 Profile。

飛書、Discord、Slack 這些平臺也是同樣的邏輯。每個 Profile 用自己的 bot token,運(yùn)行獨(dú)立的 gateway 進(jìn)程。

Token Lock 安全機(jī)制

如果你不小心讓兩個 Profile 用了同一個 bot token,第二個 gateway 會拒絕啟動,并報(bào)錯告訴你哪個 Profile 沖突了。

這個機(jī)制防止了消息路由混亂。坦率的講,我第一次配置的時候確實(shí)犯過這個錯,復(fù)制 .env 的時候忘了改 token,結(jié)果啟動第二個 gateway 的時候直接報(bào)錯。看到錯誤信息的那一刻我就知道,這個設(shè)計(jì)是真的貼心。

多 Profile 群聊

如果你想讓多個 Profile 在同一個群聊里協(xié)作,有幾種方案。

方案一,多 bot 同群

把多個 bot 拉到同一個群里,每個 bot 對應(yīng)一個 Profile

coder gateway start
research gateway start
writer gateway start

在 Telegram 群里 @coder 問編程問題,@research 問研究問題,@writer 讓它幫你潤色文章。每個 bot 只響應(yīng) @ 自己的消息。

方案二,單 bot + Profile 切換

如果不想搞這么多 bot,可以用一個 bot,通過命令切換 Profile

# 在 bot 的對話里
/profile coder    # 切換到 coder Profile
/profile research # 切換到 research Profile

但這個方案有個問題,切換 Profile 之后,之前的會話上下文就丟了。適合「我現(xiàn)在要用不同角色處理一個任務(wù)」的場景,不適合長期并行。

方案三,Kanban 協(xié)作群

創(chuàng)建一個專門的協(xié)作群,多個 bot 都在群里,通過 Kanban 看板協(xié)調(diào)任務(wù)

# 在群里發(fā)消息
@coder 實(shí)現(xiàn)登錄模塊
@research 調(diào)研 OAuth2 最佳實(shí)踐
@writer 整理成技術(shù)文檔

每個 bot 領(lǐng)取自己的任務(wù),完成后在看板上更新狀態(tài)。你可以在群里看到整個協(xié)作過程。

飛書接入實(shí)戰(zhàn)

說到飛書接入,我自己踩了不少坑,這里分享一下完整流程。

方式一,交互式配置(推薦)

不想手動編輯配置文件的話,Hermes 提供了交互式向?qū)?,一步步引?dǎo)你完成配置

hermes -p coder gateway setup

運(yùn)行后會進(jìn)入一個命令行交互界面,流程大概是這樣的

  1. 選擇接入渠道 — 列表里會有 Telegram、Discord、飛書、Slack 等選項(xiàng),選「飛書」
  2. 創(chuàng)建飛書應(yīng)用 — CLI 會生成一個二維碼或鏈接,用手機(jī)飛書掃碼,直接跳轉(zhuǎn)到飛書開放平臺的應(yīng)用創(chuàng)建頁面。這一步省去了你自己去開放平臺找入口、填表單的麻煩
  3. 自動獲取憑證 — 應(yīng)用創(chuàng)建完成后,App ID 和 App Secret 會自動回填到 CLI 里,不需要你手動復(fù)制粘貼
  4. 配置事件訂閱 — CLI 會提示你確認(rèn) webhook 回調(diào)地址,一般會自動生成本地監(jiān)聽地址。如果你用了反向代理或者 ngrok,在這里填公網(wǎng)可達(dá)的 URL
  5. 權(quán)限確認(rèn) — 飛書應(yīng)用需要開通消息收發(fā)等權(quán)限,CLI 會列出需要的權(quán)限清單,提醒你逐一開通
  6. 寫入配置 — 所有信息確認(rèn)后,CLI 自動把憑證寫入 ~/.hermes/profiles/coder/.env

整個過程基本不用碰配置文件,對新手很友好。配置完之后直接啟動

coder gateway start

方式二,手動編輯配置

如果你更喜歡掌控每一步,或者交互式向?qū)С隽藛栴},也可以手動配置。

首先你需要在飛書開放平臺創(chuàng)建一個應(yīng)用,獲取 App ID 和 App Secret。然后在 Hermes 里配置

# 編輯 Profile 的 .env
nano ~/.hermes/profiles/coder/.env

添加飛書的配置

FEISHU_APP_ID=cli_xxx
FEISHU_APP_SECRET=xxx
FEISHU_VERIFICATION_TOKEN=xxx
FEISHU_ENCRYPT_KEY=xxx

然后啟動 gateway

coder gateway start

Hermes 會自動處理飛書的事件訂閱和消息路由。你可以在飛書里 @ 這個 bot,它會用 coder Profile 的配置來響應(yīng)。

如果你想讓多個 Profile 接入飛書,每個 Profile 需要創(chuàng)建獨(dú)立的飛書應(yīng)用,獲取各自的 App ID 和 Secret。然后在各自的 .env 里配置,啟動各自的 gateway。

這塊需要注意的是,飛書的應(yīng)用審核比較嚴(yán)格,創(chuàng)建多個應(yīng)用可能會觸發(fā)審核。我自己的做法是先用一個應(yīng)用測試,確認(rèn)配置沒問題了再創(chuàng)建其他應(yīng)用。

飛書流式卡片插件

Hermes 默認(rèn)的飛書回復(fù)是純文本,想實(shí)現(xiàn)打字機(jī)效果的流式卡片,需要裝一個社區(qū)插件 hermes-feishu-streaming-card。

這玩意其實(shí)是一個獨(dú)立的 sidecar 服務(wù),跑在 Hermes 旁邊。Hermes 通過 hook 機(jī)制把回復(fù)內(nèi)容發(fā)給 sidecar,sidecar 負(fù)責(zé)在飛書里創(chuàng)建和更新卡片。架構(gòu)上解耦得很干凈。

安裝過程

# 克隆項(xiàng)目
git clone https://github.com/baileyh8/hermes-feishu-streaming-card.git ~/hermes-feishu-streaming-card

# 安裝到 Hermes Gateway 的 venv(必須,hook 需要能 import)
source ~/.hermes/hermes-agent/venv/bin/activate
pip install -e ~/hermes-feishu-streaming-card

安裝完了需要創(chuàng)建一個 sidecar 配置文件 ~/.hermes_feishu_card/config.yaml。多 Profile 模式下,每個 Profile 要獨(dú)立配置飛書憑據(jù)

server:
  host: 127.0.0.1
  port: 8765
profiles:
  coder:
    feishu:
      app_id: "cli_aaa0395b87f69cb0"
      app_secret: "真實(shí)appSecret"
      base_url: https://open.feishu.cn/open-apis
      timeout_seconds: 30
    bots:
      default: coder_bot
      items:
        coder_bot:
          name: 編程助手
          app_id: "cli_aaa0395b87f69cb0"
          app_secret: "真實(shí)appSecret"
          card:
            title: 編程助手
    bindings:
      fallback_bot: coder_bot
      chats: {}
    card:
      title: Hermes Coder
  research:
    feishu:
      app_id: "cli_aaa03591c679dcc8"
      app_secret: "真實(shí)appSecret"
      base_url: https://open.feishu.cn/open-apis
      timeout_seconds: 30
    bots:
      default: research_bot
      items:
        research_bot:
          name: 研究助手
          app_id: "cli_aaa03591c679dcc8"
          app_secret: "真實(shí)appSecret"
          card:
            title: 研究助手
    bindings:
      fallback_bot: research_bot
      chats: {}
    card:
      title: Hermes Research
card:
  title: Hermes Agent
  footer_fields:
    - duration
    - model
    - input_tokens
    - output_tokens
    - context

這里有個大坑需要注意。多 Profile 模式下,每個 Profile 的飛書憑據(jù)必須在 sidecar 配置里獨(dú)立設(shè)置,頂層的 FEISHU_APP_ID / FEISHU_APP_SECRET 環(huán)境變量會被直接忽略。我第一次配的時候沒注意這個,搞了半天卡片就是不出來,排查了一圈才發(fā)現(xiàn)憑據(jù)沒讀到。

配完了還需要開啟 Hermes 的流式編輯,在 ~/.hermes/config.yaml 里加

streaming:
  enabled: true
  transport: edit

然后診斷兼容性并安裝 hook

source ~/.hermes/hermes-agent/venv/bin/activate
# 診斷兼容性
python3 -m hermes_feishu_card.cli doctor \
  --config ~/.hermes_feishu_card/config.yaml \
  --hermes-dir ~/.hermes/hermes-agent \
  --explain
# 安裝 hook
python3 -m hermes_feishu_card.cli install \
  --hermes-dir ~/.hermes/hermes-agent \
  --yes

啟動 sidecar

python3 -m hermes_feishu_card.cli start --config ~/.hermes_feishu_card/config.yaml
python3 -m hermes_feishu_card.cli status

預(yù)期看到 status: runningrouting.bot_count 的數(shù)字,就說明跑起來了。

日常運(yùn)維就這幾個命令

# 查看狀態(tài)
python3 -m hermes_feishu_card.cli status --config ~/.hermes_feishu_card/config.yaml
# 停止
python3 -m hermes_feishu_card.cli stop --config ~/.hermes_feishu_card/config.yaml
# 重啟(修改配置后需要)
python3 -m hermes_feishu_card.cli stop --config ~/.hermes_feishu_card/config.yaml && \
python3 -m hermes_feishu_card.cli start --config ~/.hermes_feishu_card/config.yaml

關(guān)閉 Busy 通知

這個雖然是個小配置,但我覺得值得一提。

當(dāng) busy_input_mode 設(shè)為 steerqueue 的時候,Agent 正在忙,你又給它發(fā)了消息,它會回復(fù)一條通知

? Steered into current run (1 min elapsed, iteration 1/90). Your message arrives after the next tool call.

偶爾收到一次還行,頻繁交互的時候這條通知真的很煩。

關(guān)掉它很簡單,在 ~/.hermes/config.yamldisplay 節(jié)下面加一行

display:
  busy_ack_enabled: false

原理是 gateway/run.py 里檢查 HERMES_GATEWAY_BUSY_ACK_ENABLED 這個環(huán)境變量,設(shè)為 false 后跳過發(fā)送通知,但輸入仍然正常處理,steer、queue、interrupt 這些邏輯完全不受影響。

改了之后記得重啟 Gateway 才會生效。

Lark-CLI 用戶身份授權(quán)

這塊是比較重要的一個話題,跟飛書的日歷功能直接相關(guān)。

Hermes 內(nèi)置的 feishu_calendar_tool.py 用的是 tenant_access_token,也就是應(yīng)用身份來調(diào)用飛書 API。啥意思呢?就是它創(chuàng)建的日程只會出現(xiàn)在飛書應(yīng)用自己的日歷上,不會出現(xiàn)在你的個人日歷里。

這顯然不是我們想要的效果。你想讓 Agent 幫你創(chuàng)建日程,日程得在你自己的日歷上能看到才行。

解決方案是用 lark-cli 走 OAuth 用戶授權(quán),拿到 user_access_token

先把飛書憑據(jù)寫到對應(yīng) Profile 的 .env

echo 'FEISHU_APP_ID=cli_aaa0395b87f69cb0' >> ~/.hermes/profiles/coder/.env
echo 'FEISHU_APP_SECRET=真實(shí)appSecret' >> ~/.hermes/profiles/coder/.env

然后把 lark-cli 綁定到 Hermes Profile

# 檢查是否已綁定
lark-cli config show

# 綁定
lark-cli config bind --source hermes --identity user-default --force

幾個參數(shù)說一下。--source hermes 是自動從 HERMES_HOME 環(huán)境變量檢測配置來源,--identity user-default 是默認(rèn)使用用戶身份,這樣才能訪問個人日歷和云盤這些資源,--force 是確認(rèn)身份切換的風(fēng)險(xiǎn)。

綁定成功后會返回 ok: trueidentity: user-default。

接下來是發(fā)起 OAuth 授權(quán)

lark-cli auth login --domain calendar --no-wait --json

輸出里會有 verification_urldevice_code。可以生成二維碼方便手機(jī)掃碼

cd /tmp && lark-cli auth qrcode "驗(yàn)證鏈接" --output lark_auth_qr.png

讓用戶在手機(jī)飛書里掃碼授權(quán)。掃完之后

lark-cli auth login --device-code OaLxD_pLJum_l0D15GvZjXUw...

授權(quán)成功后會顯示用戶名和請求的 scopes

OK: 授權(quán)成功! 用戶: 用戶682480 (ou_0270e075d164d1807b696711f82fdddc)
本次請求 scopes: calendar:calendar.event:create calendar:calendar:read ...

lark-cli auth status 可以驗(yàn)證授權(quán)狀態(tài),確認(rèn) user 身份的 status: readytokenStatus: valid 就對了。

lark-cli calendar +agenda --as user 測試一下個人日程訪問,返回 ok: true, identity: user 就說明搞定了。

每個 Profile 還有自己獨(dú)立的 lark-cli 配置,路徑在 ~/.hermes/profiles/<profile>/home/.lark-cli/hermes/config.json。里面的關(guān)鍵是 defaultAs: user 這個字段,它確保 Profile 的 Agent 執(zhí)行 lark-cli 命令時默認(rèn)以用戶身份操作,日程就會創(chuàng)建到你的個人日歷上而不是應(yīng)用日歷。

說到這個,有個很實(shí)用的技巧。你可以在 coder Profile 的記憶體系里寫入工具使用規(guī)則

# ~/.hermes/profiles/coder/memories/MEMORY.md
用戶已配置飛書 CLI (lark-cli) 并使用 User 授權(quán)。
創(chuàng)建、查看、修改日程必須使用 `lark-cli calendar` 命令系列,而不是 `feishu_calendar_*` 工具。
默認(rèn)操作日歷應(yīng)為用戶個人日歷 (`primary`)。

Hermes 的記憶體系會在每次新會話開始時注入到系統(tǒng)提示中,Agent 會遵循里面記錄的規(guī)則。寫入這段話之后,coder Profile 的 Agent 后續(xù)就會自動選擇 lark-cli calendar 來操作日程。

這個思路其實(shí)可以推廣到所有需要「教」Profile 正確行為的場景。你通過 MEMORY.md 持久化地告訴 Agent 該用什么工具、該怎么用,比每次在對話里糾正要高效得多。

Bot 身份 vs User 身份

這塊容易搞混,我整理了一個對比表

維度Bot 身份 (tenant_access_token)User 身份 (user_access_token)
獲取方式appId + appSecretOAuth 用戶掃碼授權(quán)
消息收發(fā)? Gateway 收發(fā)飛書消息? 不適合用于消息收發(fā)
個人日歷? 只能看到 bot 自己的日歷? 可以查看和管理個人日歷
云盤/文檔? 只能訪問應(yīng)用相關(guān)資源? 可以訪問用戶個人資源
消息發(fā)送身份以應(yīng)用名義發(fā)送以用戶名義發(fā)送
適合場景機(jī)器人聊天、卡片更新操作個人資源(日程、文檔、云盤)

最佳實(shí)踐就是,Gateway 消息收發(fā)用 bot 身份,操作用戶個人資源用 user 身份。兩者各司其職,不要混著用。

持久化服務(wù)

如果你希望 gateway 在后臺持續(xù)運(yùn)行,重啟后自動恢復(fù),可以把它安裝為系統(tǒng)服務(wù)

coder gateway install       # 創(chuàng)建 systemd 服務(wù)
coder gateway start         # 啟動服務(wù)

每個 Profile 的服務(wù)名是獨(dú)立的

  • 默認(rèn) Profile 是 hermes-gateway.service
  • coder Profile 是 hermes-gateway-coder.service
  • research Profile 是 hermes-gateway-research.service

它們互不影響,可以獨(dú)立啟停。

在 WSL2 里用 systemd 需要注意,確保 /etc/wsl.conf 里配置了 systemd=true,否則服務(wù)會在 WSL 重啟后丟失。

批量管理

Profile 多了之后,逐個啟停很麻煩??梢詫憘€腳本來批量管理

#!/bin/sh
profiles="default coder research writer"

for profile in $profiles; do
    if [ "$profile" = "default" ]; then
        hermes gateway "$1"
    else
        hermes -p "$profile" gateway "$1"
    fi
done

保存為 hermes-gateways,加上執(zhí)行權(quán)限

chmod +x hermes-gateways
./hermes-gateways start    # 啟動所有 Profile
./hermes-gateways stop     # 停止所有 Profile
./hermes-gateways restart  # 重啟所有 Profile

我自己把這個腳本放在 ~/.local/bin/ 里,用起來很方便。

查看日志和狀態(tài)

多 Profile 運(yùn)行的時候,排查問題需要看日志。每個 Profile 的日志在自己的目錄下

# 默認(rèn) Profile
tail -f ~/.hermes/logs/gateway.log

# coder Profile
tail -f ~/.hermes/profiles/coder/logs/gateway.log

想同時看所有 Profile 的日志

tail -f ~/.hermes/logs/gateway.log ~/.hermes/profiles/*/logs/gateway.log

查看 Profile 狀態(tài)

hermes profile list    # 列出所有 Profile 及其狀態(tài)

這個命令會顯示每個 Profile 的模型、gateway 運(yùn)行狀態(tài)、最后活躍時間。

更新和維護(hù)

hermes update 會拉取最新代碼,并自動同步新 bundled skills 到所有 Profile

hermes update
# → Code updated (12 commits)
# → Skills synced: default (up to date), coder (+2 new), research (+2 new)

用戶修改過的 skills 不會被覆蓋,只有 bundled skills 會同步。

更新完之后重啟所有 gateway

./hermes-gateways restart

踩坑記錄

說到這個,我分享幾個自己踩過的坑。

坑一,工作目錄混淆

一開始我以為 Profile 目錄就是工作目錄,結(jié)果發(fā)現(xiàn) agent 執(zhí)行命令的時候還是在 ~ 下。后來才搞明白,Profile 目錄是 Hermes 的狀態(tài)目錄,工作目錄由 terminal.cwd 控制。

如果你希望某個 Profile 默認(rèn)在特定項(xiàng)目目錄下工作,需要顯式設(shè)置

coder config set terminal.cwd /absolute/path/to/project

注意必須是絕對路徑,cwd: "." 在 local backend 下表示「Hermes 啟動時的目錄」,不是 Profile 目錄。

坑二,Token 沖突

前面提到過,兩個 Profile 用了同一個 bot token,第二個 gateway 會拒絕啟動。排查方法

grep -H 'TELEGRAM_BOT_TOKEN\|DISCORD_BOT_TOKEN' \
    ~/.hermes/.env ~/.hermes/profiles/*/.env

這個命令會列出所有 Profile 的 token,一眼就能看出哪個重復(fù)了。

坑三,WSL2 下服務(wù)丟失

WSL2 重啟后 systemd 服務(wù)沒了。原因是 /etc/wsl.conf 里沒有配置 systemd=true

解決方法

sudo nano /etc/wsl.conf

添加

[boot]
systemd=true

然后在 PowerShell 里重啟 WSL

wsl --shutdown

重新進(jìn)入 WSL 后,systemd 服務(wù)就會自動恢復(fù)。

坑四,invalid_client 授權(quán)失敗

OAuth 授權(quán)的時候遇到 invalid_client: The client secret is invalid 錯誤,折騰了好一陣。

根因是 lark-cli config bind 的時候把 appSecret 存進(jìn)了 keychain。如果你 bind 的時候 appSecret 是個占位符,比如 YOUR_SCHEDULE_APP_SECRET,后來在 Profile 的 .env 里改了真實(shí)值,keychain 里的并不會自動更新。

解決方法是把舊的清掉重新來一遍

# 1. 確認(rèn) Profile 的 .env 里是真實(shí)的 appSecret
grep FEISHU_APP_SECRET ~/.hermes/profiles/coder/.env

# 2. 清除舊配置
lark-cli config remove

# 3. 重新綁定
lark-cli config bind --source hermes --identity user-default --force

# 4. 重新發(fā)起 OAuth
lark-cli auth login --domain calendar --no-wait --json

坑五,日程創(chuàng)建了但日歷里看不到

Agent 調(diào)用 feishu_calendar_create_event 返回成功了,但用戶個人日歷里就是沒有那條日程。

這個問題前面其實(shí)已經(jīng)說過了,內(nèi)置工具用的是應(yīng)用身份,日程被創(chuàng)建到了飛書應(yīng)用的日歷上。短期方案是讓 Agent 用 lark-cli calendar +create --as user 代替內(nèi)置工具,長期方案是改造 feishu_calendar_tool.py 支持 OAuth user_access_token,不過這個工作量比較大。

坑六,流式卡片不更新

遇到卡片沒有流式更新的時候,按這個順序排查

# 1. 檢查 streaming 配置
grep -A2 "streaming:" ~/.hermes/config.yaml
# 應(yīng)為 enabled: true, transport: edit

# 2. 檢查 doctor 狀態(tài)
python3 -m hermes_feishu_card.cli doctor --hermes-dir ~/.hermes/hermes-agent --explain

# 3. 檢查 sidecar 狀態(tài)
python3 -m hermes_feishu_card.cli status --config ~/.hermes_feishu_card/config.yaml

# 4. 檢查 hook 策略
# doctor 應(yīng)顯示 hook_strategy: gateway_run_013_plus

大部分情況下是 sidecar 沒啟動或者 streaming 配置沒寫對。

快速參考

最后整理一份命令速查表,方便日常使用

# 流式卡片 Sidecar
python3 -m hermes_feishu_card.cli start  --config ~/.hermes_feishu_card/config.yaml
python3 -m hermes_feishu_card.cli stop   --config ~/.hermes_feishu_card/config.yaml
python3 -m hermes_feishu_card.cli status --config ~/.hermes_feishu_card/config.yaml

# Lark-CLI
lark-cli config bind --source hermes --identity user-default --force
lark-cli auth login --domain calendar --no-wait --json
lark-cli auth login --device-code <device_code>
lark-cli auth status
lark-cli calendar +agenda --as user

# Profile 專屬路徑
~/.hermes/profiles/<name>/.env
~/.hermes/profiles/<name>/config.yaml
~/.hermes/profiles/<name>/home/.lark-cli/hermes/config.json

# 全局配置
~/.hermes/config.yaml

總結(jié)

回過頭來看,Hermes 的 Profile 機(jī)制設(shè)計(jì)得真的很優(yōu)雅。

它不是簡單地在同一個 agent 里加個「角色切換」功能,而是從底層就做了完全隔離。每個 Profile 是一個獨(dú)立的 agent,有自己的狀態(tài)、配置、記憶、技能樹。這種設(shè)計(jì)雖然占用更多磁盤空間,但換來了真正的隔離性和靈活性。

多 Profile 協(xié)作的 Kanban 機(jī)制也很有想象力。把任務(wù)拆解、分配、追蹤這些項(xiàng)目管理概念引入到 AI agent 體系里,讓多個 agent 能像一個團(tuán)隊(duì)一樣協(xié)作。

接入聊天平臺這塊,單 Profile 對應(yīng)單 bot 的設(shè)計(jì)很直觀,多 Profile 群聊的方案也很靈活。你可以根據(jù)自己的需求選擇最合適的方案。飛書接入雖然坑不少,但趟過去之后體驗(yàn)是真的好,尤其是流式卡片加上用戶身份授權(quán)都配好之后,Agent 幫你管理日程的感覺就很順暢了。

如果你也在折騰 AI agent,強(qiáng)烈推薦試試 Profile 機(jī)制。它能讓你的 agent 體系從「單兵作戰(zhàn)」升級到「團(tuán)隊(duì)協(xié)作」,打開很多新的可能性。

到此這篇關(guān)于Hermes Agent中多Profile實(shí)戰(zhàn)小結(jié)的文章就介紹到這了,更多相關(guān)Hermes Agent 多Profile 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!

相關(guān)文章

  • Hermes Agent 全棧安裝、配置與Web端架構(gòu)深度解析(官方命令版·最終優(yōu)化)

    本文給大家介紹Hermes Agent 全棧安裝、配置與Web端架構(gòu)深度解析,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2026-07-16
  • 深入理解Hermes Agent Skill 機(jī)制

    本文主要介紹了深入理解Hermes Agent Skill 機(jī)制,包含發(fā)現(xiàn)索引→觸發(fā)加載→預(yù)處理→Prompt注入→LLM響應(yīng)五個階段,下面就詳細(xì)了解這五種階段,感興趣的可以了解一下
    2026-07-16
  • Hermes Agent 命令行界面

    Hermes Agent 的 CLI 并非一個簡單的命令行包裝器,而是一個完整的終端用戶界面,掌握 CLI 的全部交互細(xì)節(jié),你才能讓智能體在終端里真正"跑起來",本文主要介紹
    2026-07-15
  • Hermes Agent 上下文壓縮機(jī)制分析

    Hermes Agent開發(fā)了一套智能上下文壓縮系統(tǒng),專門解決長對話場景下的上下文窗口限制問題,本文就來詳細(xì)的介紹一下Hermes Agent 上下文壓縮機(jī)制,感興趣的 可以了解一下
    2026-07-15
  • Hermes Agent桌面版安裝部署完全指南(2026年最新)

    本文是一份超詳細(xì)HermesAgent桌面版安裝部署指南,手把手帶你搞定Windows、macOS、Linux全平臺安裝,點(diǎn)擊獲取極速配置技巧、核心功能拆解與WevView2報(bào)錯解決方案,別錯過讓Age
    2026-07-14
  • Hermes Agent常用操作和命令使用速查手冊

    想要一個能直接在終端里聊天的AI助手嗎,HermesAgent本地命令行工具可以幫你連接多種大模型、執(zhí)行終端命令、分析文件,甚至寫代碼,立即掌握核心命令和配置技巧,提升你的工作
    2026-07-13
  • 在Hermes Agent里搭建全中文 Honcho 記憶系統(tǒng)踩過的坑

    我的Hermes Agent配置了多個 profile,記憶系統(tǒng)選擇了基于 Honcho,但是Honcho的提示詞是英文的,它的API服務(wù)也是英文環(huán)境,我需要全中文流程,下面就來介紹一下搭建全中文 Ho
    2026-07-13
  • Hermes Agent 架構(gòu)設(shè)計(jì)與目錄結(jié)構(gòu)解析

    Hermes Agent 是由 Nous Research 推出的開源自進(jìn)化 AI 智能體框架,其核心架構(gòu)采用分層模塊化設(shè)計(jì),強(qiáng)調(diào)“執(zhí)行—提煉—沉淀—自省”的閉環(huán)學(xué)習(xí)機(jī)制,以下從總體架構(gòu)、核心
    2026-07-08
  • Hermes Agent 從部署到項(xiàng)目實(shí)戰(zhàn)完整操作指南

    本文詳細(xì)介紹了龍蝦桌面助手Hermes 客戶端從安裝到配置,以及常用的場景演示,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,
    2026-07-07
  • Hermes Agent中安裝踩坑記錄及解決方案

    從環(huán)境準(zhǔn)備到網(wǎng)關(guān)啟動,Hermes Agent的安裝每一步都可能報(bào)錯,本文將手把手幫你解決WSL2安裝失敗、Node.js版本沖突、API 502錯誤等核心問題,讓你少走彎路,快速搞定開發(fā)環(huán)境
    2026-07-07

最新評論

正镶白旗| 原阳县| 东乌珠穆沁旗| 灌云县| 南汇区| 玛曲县| 龙口市| 洪江市| 樟树市| 湾仔区| 彭水| 武邑县| 西城区| 靖远县| 孝义市| 阳曲县| 潞西市| 高唐县| 高密市| 来凤县| 扶沟县| 普陀区| 宣化县| 泸州市| 克东县| 敖汉旗| 大安市| 华蓥市| 三都| 汝州市| 辉南县| 云阳县| 泗洪县| 余庆县| 林西县| 荆州市| 佳木斯市| 上蔡县| 信阳市| 瑞安市| 游戏|