网淘吧来吧,欢迎您!

phoenixclaw技能使用说明

2026-03-29 新闻来源:网淘吧 围观:13
电脑广告
手机广告

PhoenixClaw:零标签被动日志记录

PhoenixClaw运用语义智能,自动提炼日常对话为有意义的反思。

自动识别值得记录的时刻、模式和成长机遇。

phoenixclaw

🛠️ 核心工作流程

[!critical]强制要求:完整执行工作流程无论调用方式如何,必须完整执行此9步工作流程:

  • 定时任务执行(每晚10点)
  • 手动调用(“显示我的日志”、“生成今日日志”等)
  • 重新生成请求(“重新生成我的日志”、“更新今日条目”)

切勿跳过任何步骤。部分执行会导致:

  • 图像缺失(未扫描会话日志)
  • 财务数据缺失(未触发账本插件)
  • 日志不完整(插件未执行)

PhoenixClaw遵循结构化流程,以确保一致性和深度:

  1. 用户配置:检查~/.phoenixclaw/config.yaml文件是否存在。如果缺失,则启动定义在references/user-config.md中的新用户引导流程。
  2. 上下文检索:
    • 扫描记忆文件(新增):读取memory/YYYY-MM-DD.mdmemory/YYYY-MM-DD-*.md文件,以获取手动记录的每日反思。这些文件包含用户通过“记一下”等指令明确要求AI记住的个人想法、情感和背景信息。关键:切勿跳过这些文件——它们包含会话日志可能遗漏的、用户明确的反思内容。
    • 扫描会话日志:调用memory_get获取当日的记忆,然后关键:扫描所有原始会话日志,并按消息时间戳进行筛选。会话文件通常被分割成多个文件。请勿按会话文件对图像进行分类修改时间
      # Read all session logs from ALL known OpenClaw locations, then filter by per-message timestamp
      # Use timezone-aware epoch range to avoid UTC/local-day mismatches.
      TARGET_DAY="$(date +%Y-%m-%d)"
      TARGET_TZ="${TARGET_TZ:-Asia/Shanghai}"
      read START_EPOCH END_EPOCH < <(
        python3 - <<'PY' "$TARGET_DAY" "$TARGET_TZ"
      

from datetime import datetime, timedelta from zoneinfo import ZoneInfo import sys

day, tz = sys.argv[1], sys.argv[2] start = datetime.strptime(day, "%Y-%m-%d").replace(tzinfo=ZoneInfo(tz)) end = start + timedelta(days=1) print(int(start.timestamp()), int(end.timestamp())) PY )

  # Recursively scan all session directories (multi-agent architecture support)
  for dir in "$HOME/.openclaw/sessions" \
             "$HOME/.openclaw/agents" \
             "$HOME/.openclaw/cron/runs" \
             "$HOME/.agent/sessions"; do
    [ -d "$dir" ] || continue
    find "$dir" -type f -name "*.jsonl" -print0
  done |
    xargs -0 jq -cr --argjson start "$START_EPOCH" --argjson end "$END_EPOCH" '
      (.timestamp // .created_at // empty) as $ts
      | ($ts | split(".")[0] + "Z" | fromdateiso8601?) as $epoch
      | select($epoch != null and $epoch >= $start and $epoch < $end)
    '
  ```
  Read **all matching files** regardless of their numeric naming (e.g., file_22, file_23 may be earlier in name but still contain today's messages).
- **EXTRACT IMAGES FROM SESSION LOGS**: Session logs contain `type: "image"` entries with file paths. You MUST:
  1. Find all image entries (e.g., `"type":"image"`)
  2. Keep only entries where message `timestamp` is in the target date range
  3. Extract the `file_path` or `url` fields
  4. Copy files into `assets/YYYY-MM-DD/`
  5. Rename with descriptive names when possible
- **Why session logs are mandatory**: `memory_get` returns **text only**. Image metadata, photo references, and media attachments are **only available in session logs**. Skipping session logs = missing all photos.
- **Activity signal quality**: Do not treat heartbeat/cron system noise as user activity. Extract user/assistant conversational content and media events first, then classify moments.
- **FILTER HEARTBEAT MESSAGES (CRITICAL)**: Session logs contain system heartbeat messages that MUST be excluded from journaling. When scanning messages, SKIP any message matching these criteria:
  1. **User heartbeat prompts**: Messages containing "Read HEARTBEAT.md" AND "reply HEARTBEAT_OK"
  2. **Assistant heartbeat responses**: Messages containing ONLY "HEARTBEAT_OK" (with optional leading/trailing whitespace)
  3. **Cron system messages**: Messages with role "system" or "cron" containing job execution summaries (e.g., "Cron job completed", "A cron job")
  
  Example jq filter to exclude heartbeats:
  ```jq
  # Exclude heartbeat messages
  | select(
      (.message.content? | type == "array" and 
        (.message.content | map(.text?) | join("") | 
          test("Read HEARTBEAT\.md"; "i") | not))
      and
      (.message.content? | type == "array" and 
        (.message.content | map(.text?) | join("") | 
          test("^\\s*HEARTBEAT_OK\\s*$"; "i") | not))
    )
  ```
- **Edge case - Midnight boundary**: For late-night activity that spans midnight, expand the **timestamp** range to include spillover windows (for example, previous day 23:00-24:00) and still filter per-message by `timestamp`.
  • 合并来源:结合来自记忆文件和会话日志的内容。记忆文件记录明确的用户反思;会话日志记录对话流程和媒体信息。使用两者来构建完整的上下文。
  • 回退方案:如果记忆内容稀疏,则从会话日志重建上下文,然后更新记忆以便后续运行使用增强的记忆。通过memory_search(如果嵌入不可用则跳过此步骤)
  1. 时刻识别:识别“值得记录”的内容:关键决策、情绪转变、里程碑事件或共享的媒体。关于照片处理,请参阅references/media-handling.md。此步骤生成moments插件所依赖的数据结构。图像处理(关键):

    • 对于每张提取的图像,通过视觉分析生成描述性替代文本
    • 对图像进行分类(食物、自拍、截图、文档等)

    过滤财务截图(新增): 支付截图(微信支付、支付宝等)不应包含在日记叙述中。这些是工具性图片,而非生活瞬间。

    检测标准(满足任意一项即可):

    1. OCR关键词: "支付成功", "支付完成", "微信支付", "支付宝", "订单号", "交易单号", "¥" + 金额
    2. 上下文线索: 发送图片时,附近文本包含"记账", "支付", "付款", "转账"
    3. 视觉模式: 标准支付应用界面布局(微信绿色、支付宝蓝色)

    处理规则:

    • 标记为finance_screenshot类型

    • 如果账本插件已启用,则路由至该插件进行交易记录

    • 从日记主叙事中排除除非明确描述为生活时刻的一部分(例如,"今天请朋友吃饭"并附有支付截图)

    • 切勿在日记的日常图片部分包含原始支付截图

    • 将图片与时刻匹配(例如,早餐照片 → 早餐时刻)

    • 将图片元数据与时刻一同存储,以便日记嵌入

  2. 模式识别:检测重复出现的主题、情绪波动和能量水平。利用references/skill-recommendations.md将这些映射到成长机会

  3. 插件执行:在声明的钩子点执行所有已注册的插件。完整的插件生命周期请参见references/plugin-protocol.md

    • 预分析
    • → 对话分析前时刻后分析
    • 账本和其他主要插件在此处执行→ 在检测到模式后
    • 日志生成→ 插件注入自定义部分
    • 日志生成后→ 日志完成后
  4. 日志生成:使用assets/daily-template.md将一天的事件合成为一个美观的Markdown文件。遵循references/visual-design.md中的视觉指南。包含所有插件生成的部分,并按照它们声明的section_order

    • 位置进行排列。仅嵌入精选图片
    • ,而非所有图片。优先突出亮点和重要时刻。将财务相关截图(如收据、发票、交易凭证)路由至分类账
    • 部分。使用references/media-handling.md
    • 基于文件系统真实情况生成图片链接:计算图片路径相对于当前日记文件目录的位置。绝不输出绝对路径。
    • 不要硬编码路径深度../../../):根据daily_file_pathimage_path动态计算。
    • 使用复制的文件名作为真实来源:如果资源文件是image_124917_2.jpg,链接必须引用该确切文件名。
  5. 时间线集成:如果发生重大事件,将其追加到timeline.md中的主索引,使用来自assets/timeline-template.mdreferences/obsidian-format.md.

  6. 成长地图:更新growth-map.md(基于assets/growth-map-template.md),如果检测到新的行为模式或技能兴趣。

  7. 档案演进:更新长期用户档案(profile.md),以反映关于价值观、目标和人格特质的最新观察。参见references/profile-evolution.mdassets/profile-template.md

⏰ 定时任务与被动运行

PhoenixClaw 设计为无需用户干预即可运行。它利用 OpenClaw 内置的 cron 系统,在每天当地时间晚上 10:00(0 22 * * *)触发其分析。

  • 设置详情可在references/cron-setup.md中找到。
  • 模式:主要为被动模式。AI会主动总结当天的活动,无需用户询问。

滚动日志窗口(新功能)

为解决22:00-24:00时段内容丢失的问题,PhoenixClaw现已支持滚动日志窗口机制:

问题:固定的24小时窗口(00:00-22:00)在22:00生成日志时,会遗漏22:00-24:00的内容。

解决方案scripts/rolling-journal.js会扫描从上次日志时间 → 当前时间的内容,而非固定的每日时间边界。

功能特性

  • 可配置的生成时间(默认:22:00,可通过~/.phoenixclaw/config.yaml自定义)
  • 滚动窗口:即使生成时间变化,也不会丢失内容
  • 向后兼容现有的late-night-supplement.js

配置(~/.phoenixclaw/config.yaml):

schedule:
  hour: 22        # Journal generation time
  minute: 0
  rolling_window: true   # Enable rolling window (recommended)

使用:

# Default: generate from last journal to now
node scripts/rolling-journal.js

# Specific date
node scripts/rolling-journal.js 2026-02-12

💬 显式触发

虽然设计上是被动触发的,但用户可以使用以下短语直接与 PhoenixClaw 互动:

  • "显示我今天/昨天的日记。"
  • "我今天完成了什么?"
  • "分析我过去一周的情绪模式。"
  • "生成我的周度/月度总结。"
  • "我的个人目标进展如何?"
  • "重新生成我的日记。"/"重新生成日记"

[!警告]手动调用 = 完整流程当用户请求生成/重新生成日记时,您必须执行完整的 9 步核心工作流(如上所述)。这确保了:

  • 照片会被包含在内(通过会话日志扫描)
  • 账本插件运行(通过后时刻分析钩子)
  • 所有插件执行(在各自的钩子点)

需要避免的常见错误:

  • ❌ 仅调用memory_get(会遗漏照片)
  • ❌ 跳过时刻识别(插件永远不会触发)
  • ❌ 直接生成日志而不包含插件部分

📚 文档参考

参考文件 (references/)

  • 用户配置.md:初始入门和持久化设置。
  • 定时任务设置.md:夜间自动化的技术配置。
  • 插件协议.md:插件架构、钩子点和集成协议。
  • media-handling.md: 从照片和富媒体中提取意义的策略。
  • session-day-audit.js: 用于验证会话日志中目标日信息覆盖率的诊断工具。
  • visual-design.md: 针对可读性和美观性的布局原则。
  • obsidian-format.md: 确保与 Obsidian 及其他 PKM 工具的兼容性。
  • profile-evolution.md: 系统如何维护长期用户身份。
  • skill-recommendations.md: 基于日志洞察推荐新技能的逻辑。

Assets (assets/)

  • daily-template.md: 每日日志条目的蓝图。
  • weekly-template.md: 高层级每周总结的蓝图。
  • profile-template.md: 用户配置文件的结构。profile.md持久身份文件。
  • timeline-template.md:用于构建timeline.md时间顺序索引的结构。
  • growth-map-template.md:用于构建growth-map.md主题索引的结构。

免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏
文章底部电脑广告
手机广告位-内容正文底部

相关文章

您是本站第326357名访客 今日有221篇新文章/评论