会话日志分析工具Skill session-logs

会话日志分析工具是一个用于搜索和分析AI对话历史记录的技能,支持使用jq和rg命令行工具对JSONL格式的会话文件进行高效查询。主要功能包括:历史对话检索、会话成本统计、消息内容搜索、工具使用分析等。关键词:会话日志分析、对话历史查询、JSONL数据处理、AI对话管理、成本监控、命令行工具jq rg

DevOps 0 次安装 0 次浏览 更新于 2/24/2026

name: session-logs description: 使用jq搜索和分析你自己的会话日志(较早/父级对话)。 metadata: { “openclaw”: { “emoji”: “📜”, “requires”: { “bins”: [“jq”, “rg”] } } }

session-logs

搜索存储在会话JSONL文件中的完整对话历史记录。当用户引用较早/父级对话或询问之前说过什么时使用此技能。

触发条件

当用户询问之前的聊天记录、父级对话或不在内存文件中的历史上下文时使用此技能。

位置

会话日志位于:~/.openclaw/agents/<agentId>/sessions/(使用系统提示Runtime行中的agent=<id>值)。

  • sessions.json - 将会话键映射到会话ID的索引
  • <session-id>.jsonl - 每个会话的完整对话记录

结构

每个.jsonl文件包含以下消息:

  • type: “session”(元数据)或"message"
  • timestamp: ISO时间戳
  • message.role: “user”、“assistant"或"toolResult”
  • message.content[]: 文本、思考或工具调用(过滤type=="text"获取人类可读内容)
  • message.usage.cost.total: 每次响应的成本

常用查询

按日期和大小列出所有会话

for f in ~/.openclaw/agents/<agentId>/sessions/*.jsonl; do
  date=$(head -1 "$f" | jq -r '.timestamp' | cut -dT -f1)
  size=$(ls -lh "$f" | awk '{print $5}')
  echo "$date $size $(basename $f)"
done | sort -r

查找特定日期的会话

for f in ~/.openclaw/agents/<agentId>/sessions/*.jsonl; do
  head -1 "$f" | jq -r '.timestamp' | grep -q "2026-01-06" && echo "$f"
done

从会话中提取用户消息

jq -r 'select(.message.role == "user") | .message.content[]? | select(.type == "text") | .text' <session>.jsonl

在助手响应中搜索关键词

jq -r 'select(.message.role == "assistant") | .message.content[]? | select(.type == "text") | .text' <session>.jsonl | rg -i "keyword"

获取会话总成本

jq -s '[.[] | .message.usage.cost.total // 0] | add' <session>.jsonl

每日成本摘要

for f in ~/.openclaw/agents/<agentId>/sessions/*.jsonl; do
  date=$(head -1 "$f" | jq -r '.timestamp' | cut -dT -f1)
  cost=$(jq -s '[.[] | .message.usage.cost.total // 0] | add' "$f")
  echo "$date $cost"
done | awk '{a[$1]+=$2} END {for(d in a) print d, "$"a[d]}' | sort -r

统计会话中的消息和令牌数

jq -s '{
  messages: length,
  user: [.[] | select(.message.role == "user")] | length,
  assistant: [.[] | select(.message.role == "assistant")] | length,
  first: .[0].timestamp,
  last: .[-1].timestamp
}' <session>.jsonl

工具使用情况细分

jq -r '.message.content[]? | select(.type == "toolCall") | .name' <session>.jsonl | sort | uniq -c | sort -rn

在所有会话中搜索短语

rg -l "phrase" ~/.openclaw/agents/<agentId>/sessions/*.jsonl

提示

  • 会话是仅追加的JSONL(每行一个JSON对象)
  • 大型会话可能达到几MB - 使用head/tail进行采样
  • sessions.json索引将聊天提供者(discord、whatsapp等)映射到会话ID
  • 已删除的会话带有.deleted.<timestamp>后缀

快速纯文本提示(低噪音)

jq -r 'select(.type=="message") | .message.content[]? | select(.type=="text") | .text' ~/.openclaw/agents/<agentId>/sessions/<id>.jsonl | rg 'keyword'