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:
- 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 - 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ồn | Mô tả |
|---|---|
cli | CLI tương tác ( hermes hoặc hermes chat ) |
telegram | Sứ giả điện tín |
discord | Máy chủ bất hòa/DM |
slack | Không gian làm việc lười biếng |
whatsapp | Tin nhắn WhatsApp |
signal | Người đưa tin tín hiệu |
matrix | Phòng ma trận và DM |
mattermost | Kênh quan trọng nhất |
email | Email (IMAP/SMTP) |
sms | SMS qua Twilio |
dingtalk | Tin nhắn DingTalk |
feishu | Feishu/Người đưa tin Lark |
wecom | WeCom (WeChat Work) |
homeassistant | Trò chuyện tại nhà Trợ lý |
webhook | Webhook đến |
api-server | Yêu cầu máy chủ API |
acp | Tích hợp trình soạn thảo ACP |
cron | Công việc định kỳ theo lịch trình |
batch | Chạ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:
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
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 và -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
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
- FTS5 tìm kiếm các tin nhắn phù hợp được xếp hạng theo mức độ liên quan
- Nhóm kết quả theo phiên, chiếm N phiên duy nhất hàng đầu (mặc định 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
- Gửi đến mô hình tóm tắt nhanh để tóm tắt tập trung
- 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 định | Hành vi |
|---|---|---|
| Điện tín DM | agent:main:telegram:dm:<chat_id> | Một phiên cho mỗi cuộc trò chuyện DM |
| Bất hòa DM | agent:main:discord:dm:<chat_id> | Một phiên cho mỗi cuộc trò chuyện DM |
| WhatsApp DM | agent:main:whatsapp:dm:<chat_id> | Một phiên cho mỗi cuộc trò chuyện DM |
| Trò chuyện nhóm | agent: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óm | agent:main:<platform>:group:<chat_id>:<thread_id>:<user_id> | Mỗi người dùng trong chủ đề/chủ đề đó |
| Kênh | agent: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ẫn | Mô tả |
|---|---|---|
| Cơ sở dữ liệu SQLite | ~/.hermes/state.db | Tấ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
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.