目标不是简单「录屏留档」,而是把多屏画面经多模态模型转成可机读的时间线(log/activity_*.json),供后续做工作节奏分析、复盘、以及若干主动服务(右下角建议、待办建议、工作汇报等)。
数据流简述:
main.py按间隔截图 → 调用火山方舟 Responses API(多模态) → 写入活动 JSON。- 其它脚本读取同一
log/目录,做文本汇总、主动建议、待办、飞书/HTML 汇报等(多数走方舟 文本 API)。
平台:代码针对 Windows(截图、托盘、注册表自启、鼠标坐标、全局快捷键等)。其它系统未适配。
- Python:3.10+
- 在项目根目录执行:
pip install -r requirements.txtrequirements.txt 当前包含:
| 包 | 用途 |
|---|---|
requests |
HTTP 调用方舟 API |
Pillow |
图像处理、托盘图标 |
pystray |
系统托盘 |
keyboard |
工作分析模块的全局快捷键(若缺失则热键不可用) |
sounddevice |
麦克风录制(WASAPI) |
numpy |
录音与波形 |
安装后,各脚本的依赖即齐全(麦克风录制不再需单独装包)。
各 GUI 共用同目录 integrations.json 中的 ark_api_key(界面可保存)。
- 优先级:环境变量
ARK_API_KEY优先于文件。 - 安全:勿将
integrations.json提交到公开仓库或随分发包泄露(仓库.gitignore已忽略该文件)。
API 端点与请求体形态可参考根目录 火山llm调用示例.md(curl 示例)。
| 文件 | 角色 |
|---|---|
main.py |
主程序:多显示器截图、方舟多模态分析、GUI、托盘、并发 LLM 队列、鼠标静止跳过等。 |
integrations_config.py |
集成配置库(不可直接当入口):读写 integrations.json,供各脚本导入。 |
proactive_coach_tray.py |
主动建议:随机间隔读日志摘要 → 文本模型 → 右下角 tk 弹窗;可写 notice.log。 |
proactive_todo_tray.py |
主动待办:定时结合活动摘要与待办清单,模型输出 JSON 建议,界面验收管理。 |
work_analysis_feishu_tray.py |
工作分析:快捷键或定时触发,拼接日志 → 分析;飞书 Webhook 或本地单文件 HTML。 |
summarize_logs.py |
日志汇总:activity_*.json →「时间 + 行为」纯文本(GUI / CLI)。 |
mic_recorder_tray.py |
麦克风长录:共享模式分段 WAV,与活动日志无依赖关系。 |
要点
- 截图:可勾选参与截图的显示器(多屏拼接);不选则等价于整桌「全屏」行为。支持显示器编号叠加层便于对齐。
- 模型:方舟 Responses,可选
lite/mini/pro(见代码内ARK_MODELS)。 - 异步:截图调度与 LLM 解耦,
ThreadPoolExecutor排队执行,不丢任务;界面显示队列长度。 - 鼠标静止:连续 N 次采样坐标相同则视为离开电脑,不截图、不调模型、不写日志(N 可配)。
- GUI:间隔、提示词、模型、显示器选择、鼠标静止周期、Token 汇总(来自日志内
usage)、方舟 Key、Windows 开机自启等。 - 托盘:关闭窗口为隐藏到托盘;可再打开或退出。
运行
python main.py配置 config.json(与脚本/exe 同目录)
| 字段 | 说明 |
|---|---|
interval_sec |
截图周期间隔(秒),默认 120,范围约 10~86400 |
mouse_idle_cycles |
连续多少次坐标相同则跳过本周期,默认 10 |
selected_monitor_indices |
参与截图的显示器下标(从 0 起);null 表示整桌全选 |
analysis_prompt |
发给模型的分析提示词(有最大长度限制) |
ark_model |
方舟模型 ID |
活动日志字段(示例):recorded_at、prompt、model、analysis、api_error、raw_response(含 usage)、鼠标采样相关、capture_selected_monitor_indices、llm_async 等;失败或未配置 Key 时 analysis 可能为 null 并带 api_error。
- 与
main.py共用log/(需先有活动 JSON)。 - 在配置的推送间隔与读取条数区间内随机取值,调用方舟文本模型;提示词必须含
{snippets}。 - 鼠标静止:每轮推送前采样,连续 N 次相同则跳过(默认
mouse_idle_cycles在代码中为 2,与主程序默认值不同,可在界面改)。 - 通知:主线程 tkinter 右下角无边框窗口;
notice.log每行一条 JSON。 - 配置:
proactive_coach_config.json
python proactive_coach_tray.py
pythonw proactive_coach_tray.pyproactive_coach_config.json 主要字段
| 字段 | 说明 |
|---|---|
prompt_template |
须含 {snippets} |
interval_min_sec / interval_max_sec |
两次推送间隔随机范围(秒) |
log_count_min / log_count_max |
每次随机读取最近几条日志的 analysis(1~50) |
model |
方舟文本模型 |
mouse_idle_cycles |
鼠标静止判定次数 |
- 默认约 10 分钟一轮,读取最近若干条活动摘要 + 当前待办 JSON,模型输出严格 JSON 建议(explicit / potential)。
- 提示词须同时含
{snippets}与{current_todos}。 - 配置:
proactive_todo_config.json;数据:proactive_todo_data.json。
python proactive_todo_tray.py
pythonw proactive_todo_tray.pyproactive_todo_config.json 主要字段
| 字段 | 说明 |
|---|---|
interval_sec |
同步间隔(秒),默认 600 |
log_count |
每次读取最近日志条数 |
model |
方舟文本模型 |
prompt_template |
待办生成模板 |
- 日志格式:与
summarize_logs.py相同,读activity_*.json拼成{logs}。 - 模式:① 飞书自定义机器人 Webhook;② 本地单文件 HTML(CSS/JS 内嵌),多套视觉预设(Y2K、现代简约、Fluent、深色开发风等)。
- 推理:可配置
thinking_mode(深度思考开关类选项)与reasoning_effort;飞书与 HTML 使用不同 HTTP 超时(HTML 更长)。 - 快捷键:默认
ctrl+shift+u,依赖keyboard库。 - 自动分析:可设间隔(分钟);若鼠标超过设定分钟未动可跳过本轮。
- 统计:Token 等写入
work_analysis_token_stats.json。
python work_analysis_feishu_tray.py
pythonw work_analysis_feishu_tray.pywork_analysis_feishu_config.json 默认值摘选
| 字段 | 说明 |
|---|---|
report_mode |
feishu 或 html_local(默认 html_local) |
html_style_preset |
HTML 风格预设键名 |
feishu_webhook_url / feishu_keyword |
飞书机器人 |
log_dir |
活动日志目录(默认同目录 log) |
use_dynamic_today / start_time / end_time |
时间范围 |
model / thinking_mode / reasoning_effort |
模型与推理 |
auto_analyze_enabled / auto_interval_minutes |
定时分析 |
mouse_idle_skip_minutes |
鼠标不动超过该分钟则跳过自动分析 |
hotkey |
全局快捷键 |
startup_enabled |
Windows 开机自启 |
将 activity_*.json 导出为「时间 + 行为」文本(含跳过/错误时的可读说明)。
- 无参数:GUI,可选日志目录、开始/结束时间、快捷预设(当日、近 3 日/1 周/半个月/两个月/四个月等)、导出路径。
--cli或-c:python summarize_logs.py --cli [日志目录] [输出.txt]- 两参数:
python summarize_logs.py <日志目录> [输出.txt],无时间过滤为全量。
python summarize_logs.py
python summarize_logs.py --cli
python summarize_logs.py D:\path\to\log D:\path\to\汇总.txt默认 CLI 输出可为同目录 activity_summary.txt。
- 16 kHz 单声道 WAV,分段落盘;可选设备、分段分钟数、输出目录;波形与托盘。
- 配置:
mic_recorder_config.json(如output_dir、device_index、segment_minutes);默认输出目录可为mic_recordings/。
python mic_recorder_tray.py
pythonw mic_recorder_tray.py| 路径 | 说明 |
|---|---|
log/activity_*.json |
主程序每条周期一条结构化记录 |
config.json |
主程序 |
integrations.json |
方舟 API Key(勿泄露) |
proactive_coach_config.json |
主动建议 |
proactive_todo_config.json / proactive_todo_data.json |
主动待办 |
work_analysis_feishu_config.json / work_analysis_token_stats.json |
工作分析与 Token 统计 |
notice.log |
主动建议每次推送一行 JSON |
mic_recorder_config.json / mic_recordings/ |
麦克风配置与录音文件 |
activity_summary.txt |
summarize_logs CLI 默认导出之一 |
安装 PyInstaller 后,可将各脚本打成独立 exe;运行时配置与日志目录一般为 exe 所在目录(代码中对 sys.frozen 已处理)。
pip install "pyinstaller>=6.0"具体 pyinstaller 命令需按入口脚本与图标需求自行编写;若你后续在仓库中加入 build_exe.bat 等脚本,以脚本说明为准。
由项目维护者自行补充。