ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

用Trae搭一个自动截屏+AI大模型分析折线图的定时推送小工具,TaoToken统一Key接入实战

用Trae搭一个自动截屏+AI大模型分析折线图的定时推送小工具,TaoToken统一Key接入实战 1. 从「手动盯盘截图」到「定时自动分析」的真实需求先说清楚这个工具到底解决什么问题你有一个折线图股票走势、游戏数据曲线、服务器监控面板、销量趋势都算需要每隔一段时间看一眼、判断趋势但人不可能一直盯着屏幕。自动截屏 AI 大模型分析折线图 定时推送就是把「看屏幕」这件事交给程序到点自动截指定区域把图片丢给多模态大模型让它输出趋势判断再把结论推送到你手机上。适合谁用做量化观察的散户、盯游戏内经济曲线的玩家、看服务器 QPS 曲线的运维、盯电商销量图的运营。技术门槛不高但有几个坑必须提前说清楚——不是所有模型都能读图deepseek-r1这类纯文本推理模型喂图片会直接报错必须选带视觉能力的多模态模型比如llava、qwen2.5-vl、minicpm-v。这一点我在第一次搭的时候踩过截图传过去模型回一句「我无法查看图片」白等十分钟。这篇用 Trae 作为开发载体它本质是个能读写本地文件、跑终端命令的 AI IDE把整个链路拆成可复制的四块截图脚本、定时任务、模型接入配置、推送验证。模型接入这块用 TaoToken 统一 Key好处是本地 Ollama 和云端多模态模型可以走同一套settings.json配置切换模型只改一个字段不用在代码里到处改 URL 和密钥。2. TaoToken 前置准备统一 Key 与 settings.json 结构TaoToken 在这里扮演的角色是「模型调用的统一入口」——你不需要为每个云端模型单独记一套 base_url 和 key把模型名、接口地址、密钥集中写进一个配置文件脚本读配置就行。官网地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 根地址是 https://taotoken.net/api 这个不加 UTM直接填进配置。先去控制台把 Key 建出来入口在 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 创建完在 API Keys 页面复制页面是 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。Key 只显示一次复制后先存到本地临时文件别直接贴聊天窗口。配置文件我放在项目根目录命名settings.json结构设计成「一个默认 provider 多个模型条目」这样脚本里只认active_model字段{ active_model: qwen-vl-cloud, models: { qwen-vl-cloud: { provider: taotoken, base_url: https://taotoken.net/api, api_key: sk-你的TaoToken密钥, model: qwen2.5-vl-72b-instruct, max_tokens: 1024, temperature: 0.3 }, llava-local: { provider: ollama, base_url: http://127.0.0.1:11434, api_key: , model: llava:7b, max_tokens: 1024, temperature: 0.3 } } }注意api_key千万别提交到 Git。在项目里加一行.gitignore写入settings.json或者用环境变量TAOTOKEN_KEY覆盖读取脚本里做一层os.environ.get兜底。本地 Ollama 那条不需要 key但要求你本机已经ollama pull llava:7b拉过模型并且ollama serve在跑。云端那条走 TaoToken模型名按平台文档里支持的视觉模型填别自己编。3. 可复制配置截图脚本骨架 定时任务截图用 Python 的mssPillow比pyautogui快且不依赖窗口焦点。先装依赖pip install mss pillow requests schedule截图脚本capture.py骨架核心是「读配置 → 截指定区域 → 存文件 → 调模型 → 写结果」import json, os, time, base64, requests from datetime import datetime import mss from PIL import Image CONFIG_PATH settings.json SHOT_DIR screenshots RESULT_DIR results os.makedirs(SHOT_DIR, exist_okTrue) os.makedirs(RESULT_DIR, exist_okTrue) def load_config(): with open(CONFIG_PATH, r, encodingutf-8) as f: cfg json.load(f) active cfg[active_model] return cfg[models][active] def grab(region): # region {left:100,top:200,width:800,height:500} with mss.mss() as sct: img sct.grab(region) path os.path.join(SHOT_DIR, f{datetime.now():%Y%m%d_%H%M%S}.png) Image.frombytes(RGB, img.size, img.rgb).save(path) return path def to_b64(path): with open(path, rb) as f: return base64.b64encode(f.read()).decode() def analyze(cfg, img_path, prompt): b64 to_b64(img_path) if cfg[provider] ollama: url f{cfg[base_url]}/api/chat payload { model: cfg[model], messages: [{role: user, content: prompt, images: [b64]}], stream: False } r requests.post(url, jsonpayload, timeout180) return r.json()[message][content] else: url f{cfg[base_url]}/v1/chat/completions headers {Authorization: fBearer {cfg[api_key]}} payload { model: cfg[model], max_tokens: cfg[max_tokens], temperature: cfg[temperature], messages: [{ role: user, content: [ {type: text, text: prompt}, {type: image_url, image_url: {url: fdata:image/png;base64,{b64}}} ] }] } r requests.post(url, headersheaders, jsonpayload, timeout180) return r.json()[choices][0][message][content] PROMPT 你是折线图分析助手。请输出 1. 当前趋势方向上涨/下跌/盘整 2. 近期高点与低点位置 3. 是否存在明显支撑或阻力 4. 一句话结论与风险提示 只输出结论不要复述图片内容。 def run_once(region): cfg load_config() img grab(region) text analyze(cfg, img, PROMPT) out os.path.join(RESULT_DIR, os.path.basename(img).replace(.png, .txt)) with open(out, w, encodingutf-8) as f: f.write(text) print(f[{datetime.now():%H:%M:%S}] {text[:80]}...) return text if __name__ __main__: REGION {left: 100, top: 200, width: 900, height: 520} run_once(REGION)区域坐标怎么定先用系统截图工具量一下折线图左上角和右下角left/top是左上角坐标width/height是宽高。多屏的话mss的monitors[1]是主屏跨屏要自己算偏移。定时任务两种做法。Windows 用任务计划程序命令行参数填schtasks /create /tn ChartAI /tr python D:\chart-ai\capture.py /sc minute /mo 30 /fLinux/macOS 用 crontab每 30 分钟跑一次*/30 * * * * cd /home/user/chart-ai /usr/bin/python3 capture.py logs/cron.log 21注意cron 环境变量和交互式 shell 不一样python3建议写绝对路径否则经常报 command not found。4. 验证请求确认推送链路真的跑通别急着上定时任务先手动跑一次python capture.py看三件事第一screenshots/目录有没有生成 PNG打开确认截的是折线图区域而不是整个桌面。第二results/目录有没有对应 txt内容是不是模型返回的分析而不是报错。第三终端有没有打印结论。如果走 TaoToken 云端可以先用 curl 单独验证 Key 和模型名对不对curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer sk-你的密钥 \ -H Content-Type: application/json \ -d {model:qwen2.5-vl-72b-instruct,messages:[{role:user,content:ping}],max_tokens:16}返回里有choices字段说明 Key 和模型名都通。如果返回 401是 Key 错了返回 404 或 model not found是模型名写错去 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 查支持的模型列表。本地 Ollama 验证更简单ollama list curl http://127.0.0.1:11434/api/tagsollama list里能看到llava:7b才算拉成功。如果curl连不上 11434说明ollama serve没起来Windows 下重装一次 Ollama 通常会自动注册后台服务。推送环节如果你要推到微信/钉钉/飞书在run_once末尾加一段 webhook POST 就行把text塞进消息体。验证推送是否成功看 webhook 返回的errcode是不是 0别只看脚本没报错就以为推成功了。5. 本篇常见错排查报错一model does not support image input。你选的模型是纯文本模型。deepseek-r1、qwen2.5-coder都不支持读图换成llava、qwen2.5-vl、minicpm-v这类视觉模型。这是最高频的坑。报错二截图全黑或截到桌面。区域坐标写错了或者目标窗口被最小化。mss截的是屏幕像素窗口最小化后屏幕上没有内容自然截不到。定时任务跑之前确保目标窗口可见。报错三Connection refused 127.0.0.1:11434。Ollama 服务没启动。Windows 下打开任务管理器看有没有ollama.exe没有就手动跑一次ollama serve或者重装。报错四云端返回 429。触发限流把定时间隔从 5 分钟拉到 15 分钟以上或者在脚本里加指数退避重试。报错五base64 图片太大导致请求超时。截图区域别选太大900x520 这种量级足够。如果图很大先用 Pillow 压缩到宽度 1024 再编码。报错六cron 跑了但没结果。九成是工作目录不对cd到项目目录再执行或者脚本里所有路径都改成绝对路径。6. 后续怎么扩展从单图分析到长期编码任务跑通单次截图分析后下一步通常是两件事一是把分析结果存成时间序列做趋势对比二是让模型基于历史结论做连续判断。后者对模型的上下文长度和调用稳定性要求更高如果你打算长期挂着跑、甚至接进 Agent 工作流可以看下 Coding Plan 的额度方案入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 适合高频调用的场景。想先在网页里手动试不同视觉模型对同一张折线图的输出差异用模型对话页面最快https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite 。把截图拖进去换模型对比结论选定后再写进settings.json的active_model。接入细节和参数说明都在文档里https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。如果你用 Claude Code 这类终端 Agent 做开发Anthropic 兼容接入的配置参考 https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaude-codeutm_campaignrewrite 把 base_url 指向 TaoToken 就能统一走一套 Key。最后给个实用建议定时任务先设 30 分钟跑一周观察logs/里的失败率稳定后再缩到 10 分钟。截图区域固定后别再动窗口布局否则坐标全废。模型提示词里明确要求「只输出结论」能省掉大量无用的复述文字推送消息也更清爽。
返回列表