360 Secure SkillHub
360 安全技能中心

对话读书助理

管理旅行档案生命周期(开始、结束、补充),记录文字、图片、语音、视频素材并整理时间线,按选定风格生成文学性游记,支持导出 Markdown、HTML 与 PDF;已结束旅行默认拒收新素材,需明确指定补充,依赖宿主平台的时间解析、地理定位、多模态描述与语音转写能力。

ludiansheng
ludiansheng
热度 35.62
最近更新 2026-05-11 17:41:17
分类:生活依赖:代码执行 / 读写文件 / 内部调用大模型应用场景:旅行 / 故事创作 / 笔记整理 / 文件转换 ...

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add reading-assistant-skill
Metadata
name
travelogue-weaver
version
1.0.0
description
智能旅行游记生成器,支持多媒体素材记录、自动时间线整理、文学性叙事生成与多格式导出;当用户需要开始一段旅行记录、结束当前旅行、记录旅途点滴、补充旅行素材、预览游记内容、生成完整游记或导出游记文件时自动触发使用
triggers
["开始旅行","结束旅行","记录旅行","生成游记","导出游记"]
dependency
{"python":["Pillow==10.2.0","markdown==3.5.2","jinja2==3.1.3","weasyprint==60.2"]}

Travelogue Weaver(旅行游记编织者)

任务目标

  • 本 Skill 用于:帮助旅行用户在游玩过程中轻松记录所见所闻,并自动生成完整旅行游记
  • 能力包含:旅行生命周期管理、多媒体素材记录、智能时间线整理、文学性叙事生成、多格式导出
  • 触发条件:用户表达"开始旅行"、"记录旅途"、"生成游记"、"结束旅行"等意图

平台能力依赖

本 Skill 依赖 OpenClaw 平台提供的以下能力:

能力 用途 使用场景
时间解析服务 从文本中提取日期时间 用户说"昨天下午"、"3号出发"等
地理位置解析 从文本中提取地名并转换为坐标 用户说"在洱海边"、"大理古城"等
多模态描述 对图片/视频生成文本描述 用户上传图片或视频时自动生成描述
语音转写 将语音消息转为文字 用户发送语音记录素材时
文件存储 存储用户上传的文件 保存图片、视频、音频文件

核心规则(重要)

旅行档案生命周期

严格遵循以下规则:

  1. 开始旅行 → 创建游记档案

    • 用户说:"开始北京旅游"、"开始记录云南之旅"等
    • 系统创建新的旅行记录,状态为 ongoing
    • 此时刻为游记档案的起点
  2. 结束旅行 → 封存档案,停止记录

    • 用户说:"结束北京旅行"、"旅行结束了"、"回家了"等
    • 系统将旅行状态改为 ended
    • 此时刻为游记档案的终点,不再接受新素材
  3. 素材记录 → 仅在旅行进行中

    • 只有状态为 ongoing 的旅行才能添加素材
    • 用户发送的任何内容(文字、图片、语音、视频)都会被记录到当前进行中的旅行
  4. 补充记录 → 需要用户明确指定

    • 对于已结束的旅行,默认不接受新素材
    • 只有当用户明确说:"补充到XX旅行中"、"往XX旅行里加一条"时,才允许添加
    • 添加时需指定具体的旅行名称或ID

意图识别优先级

1. 开始旅行 → 创建新档案
2. 结束旅行 → 封存当前档案
3. 补充记录 → 添加到指定档案(需明确意图)
4. 普通消息 → 记录到当前进行中的旅行(如有)

前置准备

  • 依赖说明:scripts 脚本所需的依赖包及版本
    Pillow==10.2.0
    markdown==3.5.2
    jinja2==3.1.3
    weasyprint==60.2
    
  • 数据存储初始化:Skill 使用本地文件存储旅行记录和素材
    mkdir -p travelogue_data/uploads
    

操作步骤

1. 开始旅程(创建游记档案)

触发条件:用户表达开始旅行的意图

  • 示例:"开始北京旅游"、"开始记录云南之旅"、"我要开始旅行了"
  • 关键词:开始、记录、旅游、旅行、出发

执行流程:

  1. 检查是否已有进行中的旅行
    • 如果有,询问用户:"你已有进行中的旅行【XX】,是否要先结束它?"
    • 用户确认后才能创建新旅行
  2. 调用 scripts/trip_manager.py --action create 创建新的旅行记录
  3. 提取旅行名称、起始地点等信息
  4. 返回确认消息,告知用户档案已创建

参数提取:

  • trip_name: 旅行名称(必需,从用户消息中提取)
  • start_location: 起始地点(可选)
  • start_event: 开始事件描述(可选)

执行示例:

python scripts/trip_manager.py --action create \
  --name "北京旅游" \
  --start-location "北京"

智能体响应示例:

用户:"开始北京旅游"
智能体:"好的,已创建【北京旅游】的游记档案,开始时间为 2026-04-03 08:30。现在你可以随时发送文字、图片或语音来记录旅途点滴。"

2. 记录素材(仅在旅行进行中)

前提条件:必须有状态为 ongoing 的旅行

重要规则:

  • 如果当前没有进行中的旅行,提示用户:"你当前没有进行中的旅行。请先说'开始XX旅行'来创建游记档案。"
  • 如果用户发送素材但旅行已结束,提示用户:"【XX旅行】已结束。如需补充记录,请明确说'补充到XX旅行中'。"

2.1 文字素材

  • 用户发送纯文本消息
  • 智能体自动提取时间和地点信息
  • 调用 scripts/moment_manager.py --action add 添加素材

2.2 图片素材

  • 用户上传图片文件
  • 智能体使用多模态能力生成图片描述
  • 提取 EXIF 元数据(如果有)
  • 调用脚本添加素材

2.3 语音素材

  • 用户发送语音消息
  • 平台提供语音转写服务
  • 调用脚本添加素材

2.4 视频素材

  • 用户上传视频文件
  • 智能体提取关键帧并生成描述
  • 调用脚本添加素材

素材添加执行示例:

python scripts/moment_manager.py --action add \
  --trip-id <trip_id> \
  --type text \
  --content "风真大,但洱海蓝得不像话" \
  --location "洱海" \
  --timestamp "2026-04-03 15:30:00"

3. 结束旅程(封存游记档案)

触发条件:用户表达结束旅行的意图

  • 示例:"结束北京旅行"、"旅行结束了"、"回家了"、"行程结束了"
  • 关键词:结束、回家、行程结束、旅行结束

执行流程:

  1. 检查是否有进行中的旅行
    • 如果没有,提示用户:"你当前没有进行中的旅行。"
  2. 调用 scripts/trip_manager.py --action end 结束旅行
  3. 提取结束地点、结束感言等信息
  4. 更新旅行状态为 ended
  5. 重要:此后该旅行不再接受新素材

参数提取:

  • end_location: 结束地点
  • end_event: 结束感言

执行示例:

python scripts/trip_manager.py --action end \
  --end-location "北京" \
  --end-event "三天两夜,不虚此行"

智能体响应示例:

用户:"结束北京旅行"
智能体:"【北京旅游】已结束,档案封存于 2026-04-05 18:30。共记录了 12 条素材。需要我现在生成游记吗?或者你可以说'导出为PDF/HTML/Markdown'。"

4. 补充记录(明确指定)

触发条件:用户明确要求向已结束的旅行添加素材

  • 示例:"补充到北京旅行里"、"往云南之旅加一条"、"刚才忘记记录了,补充到XX旅行"
  • 关键词:补充、添加到、往...加

执行流程:

  1. 识别目标旅行(通过名称或ID)
  2. 检查目标旅行是否存在
  3. 调用脚本添加素材到指定旅行
  4. 重要:即使旅行已结束,也允许添加

参数提取:

  • trip_name: 目标旅行名称(从用户消息中识别)
  • 其他素材参数同普通添加流程

执行示例:

# 先根据名称查询 trip_id
python scripts/trip_manager.py --action list --status-filter ended

# 然后添加素材
python scripts/moment_manager.py --action add \
  --trip-id <trip_id> \
  --type text \
  --content "补充:刚才在天坛拍的照片忘记发了" \
  --location "天坛"

智能体响应示例:

用户:"补充到北京旅行:刚才在天坛拍的照片忘记发了"
智能体:"已补充到【北京旅游】游记中。"

5. 查询旅行状态

触发条件:用户询问旅行记录情况

  • 示例:"我的旅行记录怎么样了"、"现在记录了多少条"

执行示例:

python scripts/trip_manager.py --action status

智能体响应示例:

用户:"我的旅行记录怎么样了"
智能体:"你当前正在进行【北京旅游】,已记录 12 条素材(8 段文字、3 张图片、1 段语音)。旅行始于 2026-04-03,已持续 2 天。"

6. 生成游记

旅行结束后,可生成完整游记:

执行流程:

  1. 调用 scripts/moment_manager.py --action list 获取所有素材
  2. 智能体根据素材按时间线整理内容
  3. 根据用户选择的风格(文艺/幽默/简洁/详细)生成叙事
  4. 生成游记标题、章节结构、每日高光时刻等

详细流程参考:references/narrative_guide.md

7. 导出游记

根据用户需求导出为不同格式:

# 导出 Markdown
python scripts/export_generator.py --trip-id <trip_id> \
  --format markdown \
  --output ./travelogue.md

# 导出 HTML
python scripts/export_generator.py --trip-id <trip_id> \
  --format html \
  --output ./travelogue.html

# 导出 PDF
python scripts/export_generator.py --trip-id <trip_id> \
  --format pdf \
  --output ./travelogue.pdf

资源索引

注意事项

旅行档案管理

  • 严格的生命周期:开始 → 进行中 → 结束 → 封存
  • 自动拒绝:已结束的旅行默认不接受新素材
  • 明确意图:补充记录需要用户明确指定目标旅行
  • 单一进行中:同一时间只能有一个进行中的旅行

智能体职责

  • 准确识别用户意图(开始/结束/补充/普通记录)
  • 在用户发送素材时,检查旅行状态
  • 对不符合规则的操作给出清晰提示

数据安全

  • 旅行记录和素材存储在本地文件中
  • 所有素材自动关联到对应旅行,按时间戳排序
  • 游记风格可随时调整,重新生成即可

使用示例

示例 1:标准流程

用户:"开始北京旅游"
智能体:"好的,已创建【北京旅游】的游记档案,开始时间为 2026-04-03 08:30。现在你可以随时发送文字、图片或语音来记录旅途点滴。"

用户:[上传照片] "故宫真的太大了"
智能体:"收到!故宫的照片已保存到【北京旅游】游记中。"

用户:"晚上吃了烤鸭,味道不错"
智能体:"记下了,听起来很美味。"

用户:"结束北京旅行"
智能体:"【北京旅游】已结束,档案封存于 2026-04-03 20:30。共记录了 5 条素材。需要我现在生成游记吗?"

用户:"生成游记"
智能体:[生成游记预览] "游记已生成,需要导出吗?"

示例 2:错误处理

用户:[直接发送照片] "这是颐和园"
智能体:"你当前没有进行中的旅行。请先说'开始XX旅行'来创建游记档案。"

用户:"开始北京旅游"
智能体:"好的,已创建【北京旅游】的游记档案..."

用户:[发送素材] ...

用户:"结束北京旅行"
智能体:"【北京旅游】已结束,档案封存。"

用户:[发送照片] "这是长城"
智能体:"【北京旅游】已结束。如需补充记录,请明确说'补充到北京旅游:这是长城'。"

用户:"补充到北京旅游:这是长城"
智能体:"已补充到【北京旅游】游记中。"

示例 3:多旅行管理

用户:"开始云南之旅"
智能体:"好的,已创建【云南之旅】的游记档案..."

用户:[记录素材] ...

用户:"结束云南之旅"
智能体:"【云南之旅】已结束,档案封存。"

用户:"开始西藏旅游"
智能体:"好的,已创建【西藏旅游】的游记档案..."

用户:[记录素材] ...

用户:"我的旅行记录怎么样了"
智能体:"你当前正在进行【西藏旅游】,已记录 8 条素材。你还有 1 个已结束的旅行:【云南之旅】。"