Chuyển tới nội dung chính

Phiên

Hermes Agent tự động lưu mọi cuộc trò chuyện dưới dạng phiên. Phiên cho phép tiếp tục cuộc trò chuyện, tìm kiếm giữa các phiên và quản lý toàn bộ lịch sử cuộc trò chuyện.

Phiên hoạt động như thế nào

Mọi cuộc trò chuyện — cho dù từ CLI, Telegram, Discord, Slack, WhatsApp, Signal, Matrix hay bất kỳ nền tảng nhắn tin nào khác — đều được lưu trữ dưới dạng một phiên có đầy đủ lịch sử tin nhắn. Các phiên được theo dõi trong hai hệ thống bổ sung:

  1. Cơ sở dữ liệu SQLite ( ~/.hermes/state.db ) — siêu dữ liệu phiên có cấu trúc với chức năng tìm kiếm toàn văn bản FTS5
  2. Bản ghi JSON ( ~/.hermes/sessions/ ) — bản ghi cuộc hội thoại thô bao gồm các lệnh gọi công cụ (cổng)

Cơ sở dữ liệu SQLite lưu trữ:

  • ID phiên, nền tảng nguồn, ID người dùng
  • Tiêu đề phiên (tên duy nhất, con người có thể đọc được)
  • Tên model và cấu hình
  • Ảnh chụp nhanh lời nhắc của hệ thống
  • Lịch sử tin nhắn đầy đủ (vai trò, nội dung, lệnh gọi công cụ, kết quả công cụ)
  • Số lượng mã thông báo (đầu vào/đầu ra)
  • Dấu thời gian (bắt đầu_lúc, kết thúc_lúc)
  • ID phiên gốc (để phân tách phiên kích hoạt nén)

Nguồn phiên

Mỗi phiên được gắn thẻ với nền tảng nguồn của nó:

NguồnMô tả
cliCLI tương tác ( hermes hoặc hermes chat )
telegramSứ giả điện tín
discordMáy chủ bất hòa/DM
slackKhông gian làm việc lười biếng
whatsappTin nhắn WhatsApp
signalNgười đưa tin tín hiệu
matrixPhòng ma trận và DM
mattermostKênh quan trọng nhất
emailEmail (IMAP/SMTP)
smsSMS qua Twilio
dingtalkTin nhắn DingTalk
feishuFeishu/Người đưa tin Lark
wecomWeCom (WeChat Work)
homeassistantTrò chuyện tại nhà Trợ lý
webhookWebhook đến
api-serverYêu cầu máy chủ API
acpTích hợp trình soạn thảo ACP
cronCông việc định kỳ theo lịch trình
batchChạy xử lý hàng loạt

Tiếp tục phiên CLI

Tiếp tục các cuộc trò chuyện trước đó từ CLI bằng cách sử dụng --continue hoặc --resume :

Tiếp tục phiên cuối cùng

# Resume the most recent CLI session
hermes --continue
hermes -c

# Or with the chat subcommand
hermes chat --continue
hermes chat -c

Thao tác này sẽ tra cứu phiên cli gần đây nhất từ cơ sở dữ liệu SQLite và tải toàn bộ lịch sử hội thoại của phiên đó.

Tiếp tục theo tên

Nếu bạn đã đặt tiêu đề cho phiên (xem Đặt tên phiên bên dưới), bạn có thể tiếp tục phiên đó theo tên:

# Resume a named session
hermes -c "my project"

# If there are lineage variants (my project, my project #2, my project #3),
# this automatically resumes the most recent one
hermes -c "my project"

# → resumes "my project #3"

Tiếp tục phiên cụ thể

# Resume a specific session by ID
hermes --resume 20250305_091523_a1b2c3d4
hermes -r 20250305_091523_a1b2c3d4

# Resume by title
hermes --resume "refactoring auth"

# Or with the chat subcommand
hermes chat --resume 20250305_091523_a1b2c3d4

ID phiên được hiển thị khi bạn thoát phiên CLI và có thể được tìm thấy bằng hermes sessions list .

Tóm tắt cuộc trò chuyện về sơ yếu lý lịch

Khi bạn tiếp tục phiên, Hermes hiển thị bản tóm tắt ngắn gọn về cuộc trò chuyện trước đó trong bảng điều khiển được tạo kiểu trước lời nhắc nhập:

Stylized preview of the Previous Conversation recap panel shown when resuming a Hermes session.

Chế độ tiếp tục hiển thị một bảng tóm tắt nhỏ gọn với các lượt truy cập gần đây của người dùng và trợ lý trước khi đưa bạn trở lại lời nhắc trực tiếp.

Tóm tắt:

  • Hiển thị tin nhắn của người dùng (màu vàng ) và câu trả lời trợ lý (màu xanh lá cây )
  • Cắt ngắn tin nhắn dài (300 ký tự cho người dùng, 200 ký tự / 3 dòng cho trợ lý)
  • Thu gọn các lệnh gọi công cụ thành số đếm có tên công cụ (ví dụ: [3 tool calls: terminal, web_search] )
  • Ẩn thông báo hệ thống, kết quả công cụ và lý luận nội bộ
  • Giới hạn ở 10 lần trao đổi gần đây nhất với chỉ báo "... N tin nhắn trước đó ..."
  • Sử dụng kiểu dáng mờ để phân biệt với cuộc trò chuyện đang diễn ra

Để tắt tính năng tóm tắt và giữ hành vi một dòng tối thiểu, hãy đặt trong ~/.hermes/config.yaml :

display:
resume_display: minimal

# default: full

mẹo

ID phiên tuân theo định dạng YYYYMMDD_HHMMSS_<8-char-hex> , ví dụ: 20250305_091523_a1b2c3d4 . Bạn có thể tiếp tục theo ID hoặc theo tiêu đề — cả hai đều hoạt động với -c-r .

Đặt tên phiên

Đặt tiêu đề cho các phiên mà con người có thể đọc được để bạn có thể tìm và tiếp tục chúng một cách dễ dàng.

Tiêu đề được tạo tự động

Hermes tự động tạo tiêu đề mô tả ngắn (3–7 từ) cho mỗi phiên sau lần trao đổi đầu tiên. Điều này chạy trong một luồng nền bằng cách sử dụng mô hình phụ trợ nhanh, do đó nó không tăng thêm độ trễ. Bạn sẽ thấy các tiêu đề được tạo tự động khi duyệt các phiên có hermes sessions list hoặc hermes sessions browse .

Tự động đặt tiêu đề chỉ kích hoạt một lần mỗi phiên và bị bỏ qua nếu bạn đã đặt tiêu đề theo cách thủ công.

Đặt tiêu đề theo cách thủ công

Sử dụng lệnh gạch chéo /title bên trong bất kỳ phiên trò chuyện nào (CLI hoặc cổng):

/title my research project

Tiêu đề được áp dụng ngay lập tức. Nếu phiên chưa được tạo trong cơ sở dữ liệu (ví dụ: bạn chạy /title trước khi gửi tin nhắn đầu tiên), phiên này sẽ được xếp hàng đợi và áp dụng sau khi phiên bắt đầu.

Bạn cũng có thể đổi tên các phiên hiện có từ dòng lệnh:

hermes sessions rename 20250305_091523_a1b2c3d4 "refactoring auth module"

Quy tắc tiêu đề

  • Duy nhất — không có hai phiên nào có thể có cùng tiêu đề
  • Tối đa 100 ký tự — giữ cho đầu ra của danh sách luôn rõ ràng
  • Đã vệ sinh — các ký tự điều khiển, ký tự có độ rộng bằng 0 và phần ghi đè RTL sẽ tự động bị loại bỏ
  • Unicode bình thường cũng được — biểu tượng cảm xúc, CJK, ký tự có dấu đều hoạt động

Tự động phân dòng khi nén

Khi ngữ cảnh của phiên được nén (thủ công thông qua /compress hoặc tự động), Hermes sẽ tạo phiên tiếp tục mới. Nếu bản gốc có tiêu đề thì phiên mới sẽ tự động có tiêu đề được đánh số:

"my project" → "my project #2" → "my project #3"

Khi bạn tiếp tục theo tên ( hermes -c "my project" ), nó sẽ tự động chọn phiên gần đây nhất trong dòng.

/title trong Nền tảng nhắn tin

Lệnh /title hoạt động trên tất cả các nền tảng cổng (Telegram, Discord, Slack, WhatsApp):

  • /title My Research — đặt tiêu đề phiên
  • /title — hiển thị tiêu đề hiện tại

Lệnh quản lý phiên

Hermes cung cấp đầy đủ các lệnh quản lý phiên thông qua hermes sessions :

Liệt kê các phiên

# List recent sessions (default: last 20)
hermes sessions list

# Filter by platform
hermes sessions list --source telegram

# Show more sessions
hermes sessions list --limit 50

Khi phiên có tiêu đề, đầu ra sẽ hiển thị tiêu đề, bản xem trước và dấu thời gian tương đối:

Title                  Preview                                  Last Active   ID
────────────────────────────────────────────────────────────────────────────────────────────────
refactoring auth Help me refactor the auth module please 2h ago 20250305_091523_a
my project #3 Can you check the test failures? yesterday 20250304_143022_e
— What's the weather in Las Vegas? 3d ago 20250303_101500_f

Khi không có phiên nào có tiêu đề, định dạng đơn giản hơn sẽ được sử dụng:

Preview                                            Last Active   Src    ID
──────────────────────────────────────────────────────────────────────────────────────
Help me refactor the auth module please 2h ago cli 20250305_091523_a
What's the weather in Las Vegas? 3d ago tele 20250303_101500_f

Xuất phiên

# Export all sessions to a JSONL file
hermes sessions export backup.jsonl

# Export sessions from a specific platform
hermes sessions export telegram-history.jsonl --source telegram

# Export a single session
hermes sessions export session.jsonl --session-id 20250305_091523_a1b2c3d4

Các tệp đã xuất chứa một đối tượng JSON trên mỗi dòng với siêu dữ liệu phiên đầy đủ và tất cả thông báo.

Xóa phiên

# Delete a specific session (with confirmation)
hermes sessions delete 20250305_091523_a1b2c3d4

# Delete without confirmation
hermes sessions delete 20250305_091523_a1b2c3d4 --yes

Đổi tên phiên

# Set or change a session's title
hermes sessions rename 20250305_091523_a1b2c3d4 "debugging auth flow"

# Multi-word titles don't need quotes in the CLI
hermes sessions rename 20250305_091523_a1b2c3d4 debugging auth flow

Nếu tiêu đề đã được sử dụng bởi một phiên khác thì sẽ hiển thị lỗi.

Cắt tỉa các phiên cũ

# Delete ended sessions older than 90 days (default)
hermes sessions prune

# Custom age threshold
hermes sessions prune --older-than 30

# Only prune sessions from a specific platform
hermes sessions prune --source telegram --older-than 60

# Skip confirmation
hermes sessions prune --older-than 30 --yes

thông tin

Việc cắt bớt chỉ xóa các phiên đã kết thúc (các phiên đã được kết thúc rõ ràng hoặc tự động đặt lại). Các phiên hoạt động không bao giờ bị cắt bớt.

Thống kê phiên

hermes sessions stats

Đầu ra:

Total sessions: 142
Total messages: 3847
cli: 89 sessions
telegram: 38 sessions
discord: 15 sessions
Database size: 12.4 MB

Để phân tích sâu hơn — mức sử dụng mã thông báo, ước tính chi phí, phân tích công cụ và mẫu hoạt động — hãy sử dụng hermes insights .

Công cụ tìm kiếm phiên

Nhân viên hỗ trợ có công cụ session_search tích hợp sẵn để thực hiện tìm kiếm toàn văn bản trên tất cả các cuộc hội thoại trước đây bằng công cụ FTS5 của SQLite.

Cách thức hoạt động

  1. FTS5 tìm kiếm các tin nhắn phù hợp được xếp hạng theo mức độ liên quan
  2. Nhóm kết quả theo phiên, chiếm N phiên duy nhất hàng đầu (mặc định 3)
  3. Tải cuộc trò chuyện của mỗi phiên, cắt bớt còn ~100K ký tự tập trung vào các kết quả trùng khớp
  4. Gửi đến mô hình tóm tắt nhanh để tóm tắt tập trung
  5. Trả về bản tóm tắt mỗi phiên với siêu dữ liệu và bối cảnh xung quanh

Cú pháp truy vấn FTS5

Tìm kiếm hỗ trợ cú pháp truy vấn FTS5 tiêu chuẩn:

  • Từ khóa đơn giản: docker deployment
  • Cụm từ: "exact phrase"
  • Boolean: docker OR kubernetes , python NOT java
  • Tiền tố: deploy*

Khi nó được sử dụng

Tác nhân được nhắc sử dụng tìm kiếm phiên tự động:

"Khi người dùng tham chiếu nội dung nào đó từ cuộc trò chuyện trước đây hoặc bạn nghi ngờ có ngữ cảnh liên quan trước đó tồn tại, hãy sử dụng session_search để nhớ lại nội dung đó trước khi yêu cầu họ lặp lại."

Theo dõi phiên trên mỗi nền tảng

Phiên cổng

Trên nền tảng nhắn tin, các phiên được khóa bằng khóa phiên xác định được tạo từ nguồn tin nhắn:

Loại trò chuyệnĐịnh dạng khóa mặc địnhHành vi
Điện tín DMagent:main:telegram:dm:<chat_id>Một phiên cho mỗi cuộc trò chuyện DM
Bất hòa DMagent:main:discord:dm:<chat_id>Một phiên cho mỗi cuộc trò chuyện DM
WhatsApp DMagent:main:whatsapp:dm:<chat_id>Một phiên cho mỗi cuộc trò chuyện DM
Trò chuyện nhómagent:main:<platform>:group:<chat_id>:<user_id>Mỗi người dùng trong nhóm khi nền tảng hiển thị ID người dùng
Chủ đề/chủ đề nhómagent:main:<platform>:group:<chat_id>:<thread_id>:<user_id>Mỗi người dùng trong chủ đề/chủ đề đó
Kênhagent:main:<platform>:channel:<chat_id>:<user_id>Mỗi người dùng bên trong kênh khi nền tảng hiển thị ID người dùng

Khi Hermes không thể nhận được mã định danh người tham gia cho cuộc trò chuyện được chia sẻ, cuộc trò chuyện đó sẽ quay trở lại một phiên chia sẻ cho phòng đó.

Phiên nhóm chia sẻ và nhóm biệt lập

Theo mặc định, Hermes sử dụng group_sessions_per_user: true trong config.yaml . Điều đó có nghĩa là:

  • Alice và Bob đều có thể nói chuyện với Hermes trên cùng một kênh Discord mà không cần chia sẻ lịch sử bản ghi
  • tác vụ nặng về công cụ của một người dùng không làm ô nhiễm cửa sổ ngữ cảnh của người dùng khác
  • việc xử lý ngắt cũng được duy trì cho mỗi người dùng vì khóa tác nhân đang chạy khớp với khóa phiên bị cô lập

Thay vào đó, nếu bạn muốn một "bộ não phòng" được chia sẻ, hãy đặt:

group_sessions_per_user: false

Điều đó sẽ hoàn nguyên các nhóm/kênh về một phiên chia sẻ duy nhất cho mỗi phòng, giúp duy trì bối cảnh trò chuyện được chia sẻ nhưng cũng chia sẻ chi phí mã thông báo, trạng thái gián đoạn và sự phát triển của bối cảnh.

Chính sách đặt lại phiênPhiên cổng được tự động đặt lại dựa trên các chính sách có thể định cấu hình:

  • nhàn rỗi — đặt lại sau N phút không hoạt động
  • hàng ngày — đặt lại vào một giờ cụ thể mỗi ngày
  • cả hai — đặt lại theo điều kiện nào đến trước (nhàn rỗi hoặc hàng ngày)
  • không — không bao giờ tự động đặt lại

Trước khi một phiên được tự động đặt lại, nhân viên sẽ được phép lưu bất kỳ kỷ niệm hoặc kỹ năng quan trọng nào từ cuộc trò chuyện.

Các phiên có quy trình nền đang hoạt động không bao giờ được tự động đặt lại, bất kể chính sách.

Vị trí lưu trữ

Cái gìĐường dẫnMô tả
Cơ sở dữ liệu SQLite~/.hermes/state.dbTất cả siêu dữ liệu phiên + tin nhắn với FTS5
Bảng điểm cổng~/.hermes/sessions/Bản ghi JSONL mỗi phiên + chỉ mục Session.json
Chỉ số cổng~/.hermes/sessions/sessions.jsonÁnh xạ khóa phiên tới ID phiên hoạt động

Cơ sở dữ liệu SQLite sử dụng chế độ WAL cho các trình đọc đồng thời và một trình ghi duy nhất, rất phù hợp với kiến ​​trúc đa nền tảng của cổng.

Lược đồ cơ sở dữ liệu

Các bảng khóa trong state.db :

  • sessions — siêu dữ liệu phiên (id, nguồn, user_id, model, tiêu đề, dấu thời gian, số lượng mã thông báo). Tiêu đề có một chỉ mục duy nhất (cho phép tiêu đề NULL, chỉ tiêu đề không NULL phải là duy nhất).
  • tin nhắn — toàn bộ lịch sử tin nhắn (vai trò, nội dung, tool_calls, tool_name, token_count)
  • messages_fts — Bảng ảo FTS5 để tìm kiếm toàn văn trên nội dung tin nhắn

Hết hạn phiên và dọn dẹp

Tự động dọn dẹp

  • Phiên cổng tự động đặt lại dựa trên chính sách đặt lại đã định cấu hình
  • Trước khi đặt lại, tác nhân lưu ký ức và kỹ năng từ phiên hết hạn
  • Phiên kết thúc vẫn còn trong cơ sở dữ liệu cho đến khi được cắt tỉa

Dọn dẹp thủ công

# Prune sessions older than 90 days
hermes sessions prune

# Delete a specific session
hermes sessions delete <session_id>

# Export before pruning (backup)
hermes sessions export backup.jsonl
hermes sessions prune --older-than 30 --yes

mẹo

Cơ sở dữ liệu phát triển chậm (điển hình: 10-15 MB cho hàng trăm phiên). Việc cắt bớt chủ yếu hữu ích trong việc loại bỏ các cuộc hội thoại cũ mà bạn không còn cần để thu hồi tìm kiếm.