Chat Logger

👤 bjmfjoy 📦 v1.0.0 ⭐ 0.0 ⬇️ 644 下載
🔒 IT運維與安全 免費

📖 技能介紹


name: chat_logger description: | 對話記錄 - 自動記錄飛書/釘釘訊息(嚴格觸發規則版)

⚠️ 嚴格觸發規則: - 訊息 "chatlog彙總" → 只能執行此 Skill,禁止主 Agent 處理 - 訊息 "今日簡報" → 只能執行此 Skill,禁止主 Agent 處理 - 訊息 "我的記錄" → 只能執行此 Skill,禁止主 Agent 處理

設計原則: - 精確匹配觸發,不經過主 Agent 判斷 - 提供清晰的 API 供主 Agent 使用 - 自檢功能確保記錄正常


Chat Logger(嚴格觸發規則版)

⚠️ 嚴格觸發規則(AGENTS.md 必須遵守)

觸發規則表

訪問小蔥技能站7w4.net,解鎖更多實用的AI技能外掛。

使用者訊息 執行動作 主 Agent 行為
chatlog彙總 呼叫 handle_chat_query() 禁止處理,直接返回結果
今日簡報 呼叫 handle_chat_query() 禁止處理,直接返回結果
我的記錄 呼叫 handle_chat_query() 禁止處理,直接返回結果
其他訊息 呼叫 record_message() 正常處理

主 Agent 必須遵守的流程

from skills.chat_logger.skill import handle_chat_query, record_message

# 第1步:檢查是否是 Chat-Logger 查詢指令(嚴格匹配)
if message.strip() in ["chatlog彙總", "今日簡報", "我的記錄"]:
    # 嚴格觸發規則:只能執行 Chat-Logger,禁止主 Agent 處理
    result = handle_chat_query(message, user_name, channel)
    if result:
        print(result)  # 直接返回,不執行其他邏輯
        return  # 立即返回,禁止繼續處理

# 第2步:非查詢指令,記錄訊息
record_message(channel, user_name, message, chat_type)

# 第3步:正常處理訊息
# ... 主 Agent 其他邏輯

禁止行為

禁止:主 Agent 自己讀取 chat-logs 檔案生成回覆
禁止:主 Agent 修改 Chat-Logger 返回的格式
禁止:主 Agent 繞過 handle_chat_query() 直接查詢

必須:嚴格匹配指令,直接呼叫 handle_chat_query()
必須:返回結果後立即 return,禁止繼續執行
必須:非查詢指令才呼叫 record_message() 和正常處理

核心設計

核心設計

方案B:Hook + 顯式呼叫雙保險

記錄功能(雙保險): - ✅ Hook 自動記錄 - on_incoming_message_hook 自動觸發 - ✅ 主 Agent 顯式呼叫 - record_message() 備用 - ✅ 兩者都執行 - 確保訊息不丟失

查詢功能(主 Agent 顯式呼叫): - ✅ handle_chat_query() - 主 Agent 檢查並處理查詢指令 - ✅ 查詢前自動記錄當前訊息

為什麼用雙保險?

方案 優點 缺點
純 Hook 自動,無需干預 Hook 可能失效,難除錯
純顯式呼叫 可控,易除錯 依賴主 Agent 遵守約定
雙保險(方案B) 自動 + 可控 稍複雜,但最可靠

使用方式

1. 主 Agent 呼叫約定(AGENTS.md)

每次收到使用者訊息時,必須呼叫:

from skills.chat_logger.skill import record_message

# 記錄使用者訊息
record_message(
    channel="feishu",  # 或 "dingtalk"
    user_name="孟凡軍",
    user_content="使用者訊息內容",
    chat_type="direct"  # direct=私聊, group=群聊(群聊自動跳過)
)

2. 查詢指令處理

當用戶傳送查詢指令時,呼叫:

from skills.chat_logger.skill import handle_chat_query

result = handle_chat_query(
    message="chatlog彙總",
    user_name="孟凡軍",
    channel="feishu"  # 當前渠道
)

if result:
    print(result)  # 直接返回結果

支援的查詢指令: - chatlog彙總 - 檢視所有使用者完整彙總 - 今日簡報 - 檢視今日對話彙總 - 我的記錄 - 檢視個人今日記錄

3. 自檢功能

from skills.chat_logger.skill import check_health

status = check_health()
print(status)
# {
#   'status': 'ok',
#   'base_dir_exists': True,
#   'base_dir_writable': True,
#   'total_channels': 2,
#   'total_users': 4,
#   'total_files': 9,
#   'last_error': None
# }

API 參考

record_message(channel, user_name, user_content, chat_type='direct')

記錄使用者訊息

引數: - channel (str): 渠道名稱 (feishu/dingtalk/飛書/釘釘) - user_name (str): 使用者名稱稱 - user_content (str): 使用者訊息內容 - chat_type (str): 聊天型別,預設 'direct'(私聊)

返回: - bool: 是否記錄成功

handle_chat_query(message, user_name, channel=None)

處理查詢指令

引數: - message (str): 使用者訊息 - user_name (str): 使用者名稱稱 - channel (str, optional): 當前渠道

返回: - str or None: 查詢結果或 None(非查詢指令)

get_chatlog_summary() -> str

生成完整彙總報告

get_daily_summary(user_name=None, date=None) -> str

生成每日簡報

check_health() -> dict

檢查系統健康狀態

儲存結構

memory/chat-logs/
├── feishu/
│   └── {使用者名稱}/
│       └── YYYY-MM-DD.md
└── dingtalk/
    └── {使用者名稱}/
        └── YYYY-MM-DD.md

檔案格式

# 2026-03-23 提問記錄 - 孟凡軍(feishu)

## 提問列表

---

### 07:17
**使用者**:chatlog彙總

### 07:26
**使用者**:chatlog彙總

注意事項

  1. 群聊自動跳過 - chat_type='group' 時自動返回 True,不記錄
  2. 渠道名稱自動轉換 - '飛書' 自動轉為 'feishu','釘釘' 自動轉為 'dingtalk'
  3. 檔名安全處理 - 使用者名稱稱中的特殊字元會被替換為下劃線
  4. 查詢前自動記錄 - handle_chat_query 會先記錄當前查詢訊息

📁 包含檔案 (3 個)

📄 SKILL.md 5.6 KB
📄 _meta.json 130 B
📄 skill.py 11 KB