
前阵子我给自己做了个“今日天气提醒”机器人每天早上8点准时把当天的温度、降水、风力以及“要不要带伞、怎么穿衣服”的结论推送到工作群。这个项目本身不大真正让我想写篇文章的是背后那套开发方式我几乎全程用Claude Code在命令行里完成了从需求梳理、代码编写、调试到部署的所有工作。整个过程让我直观体验到AI编程助手对开发工作流的重塑——不是说它替我写了多少行代码而是它改变了我和代码之间的对话方式。如果你也好奇Claude Code怎么用、能干什么或者只想快速做出一个有用的定时任务机器人这篇文章都值得看完。1. 先别急着写代码把需求拆到能直接交给AI的程度1.1 这个机器人到底要解决什么痛点每天早上查天气这个动作看起来很小但累积起来非常耗时打开天气App看实时温度再看预报心里换算一下体感想想要不要带伞翻一下风力最后还要纠结穿什么。这些信息分散在不同界面查完基本一分钟就过去了。如果遇到天气突变起晚了出门才发现下着雨更是狼狈。所以我的需求很明确每天早上定时获取指定城市的天气数据自动判断今天是否需要带伞、加衣、防风然后把结论推到工作群。群推送的好处是手机一定会响不需要额外装App家人同事看到也能搭句话。需求里还可以配置多个城市这样出差前看看目的地天气也方便。1.2 需求清单与交付标准在把任务交给AI之前我习惯先写成一条条可验收的需求。这一步非常重要因为无论你用的是Claude Code还是其他AI助手输入的需求越具体产出的代码越接近预期。我的清单是这样的支持通过环境变量配置城市、API Key、Webhook地址不放散到代码里每天执行一次时间可配默认早上8点采集内容当前温度、体感温度、天气现象、湿度、风速、最高/最低温提醒规则温度低于5度提醒保暖天气现象含雨雪提醒带伞风速大于8m/s提醒防风昼夜温差大于10度提醒叠穿推送渠道企业微信群机器人Webhook消息格式用纯文本运行环境Node.js只使用底层原生能力不引入重型框架写完这份清单我基本不需要再手动画流程图了AI能根据这些规则直接脑补出完整逻辑。实际经验是你给AI的任务描述越像“给新同事的交接文档”它产出的东西越靠谱。1.3 技术选型为什么是这些而不是那些天气数据源我对比过几个。OpenWeatherMap接口最简单注册就能拿Key免费额度对个人机器人完全够用全球城市都覆盖和风天气的中文文案和国内城市数据做得更细但接口字段相对多一些高德天气则适合本来就在用高德开放平台的场景。我最后选了OpenWeatherMap理由很直接个人项目最重要的是快速跑通接口的URL短、字段稳定、文档清晰让AI生成代码时也不容易出现歧义。推送渠道的选择也讲究。邮件最简单但手机推送不即时Telegram Bot我直接放弃因为要额外维护客户端同事也不一定装了App企业微信群机器人和钉钉机器人都是填一个Webhook地址就能推送手机端必达零部署成本。如果你不想用群也可以考虑PushDeer或Server酱这类免费推送服务原理都一样就是给一个可POST的URL。提示如果只是“今天有没有雨”这种提醒实时天气接口就够用但如果想提前一晚知道明天天气就需要用预报类接口比如One Call API或5日预报别用错了数据源。2. Claude Code到底强在哪我对它的理解2.1 它不是一个聊天窗口而是长在终端里的编程搭档Claude Code是Anthropic推出的AI编程命令行工具形式上就是一个终端命令claude。但它跟你在网页聊天框里让AI写段代码完全不一样它默认就能读取当前目录下的整个项目可以自己打开文件、修改代码、执行shell命令、跑测试还能在Git提交前帮你过一遍改动。换句话说它不只是“给代码建议”而是可以直接把事情做完。这个定位上的差异对开发工作流的改变是根本性的。以前我写工具脚本要自己在编辑器里折腾半天现在在项目目录里敲一下claude把需求说清楚它会自己创建文件夹、初始化package.json、写代码、装依赖甚至跑一遍给你看结果。我只需要在关键节点上叫停、review、修改需求。2.2 和传统AI编程助手的区别很多人用过IDE里的代码补全插件或者网页端的AI对话。Claude Code和它们最大的区别有三点。第一它具备完整的Agent能力。它不只是生成一段代码片段而是能像人一样做任务拆解先读取项目结构再逐个文件修改遇到报错自己去看日志、查原因、修复。这个“能自己动手”的能力让它从“代码生成器”变成了“可协作的工程师”。第二它拥有很长的上下文窗口。在一个规模不小的项目里连续对话一两个小时它依然记得之前的决定。我实测过让Claude Code帮我重构一个小型服务整个过程涉及十几个文件的修改对话跨度很长它始终没丢上下文。如果是普通聊天框早就忘光前面的指令了。第三它支持规则与技能沉淀。项目根目录的CLAUDE.md相当于“团队协作规范”Claude Code每次启动都会读取你可以把代码风格、禁用第三方库、测试要求写进去。如果你经常做某类任务还可以把经验做成Skills技能包让AI在同类任务里自动调用。这些机制非常符合工程团队的长期协作逻辑。2.3 谁适合用Claude Code如果你已经有编程基础尤其是习惯用终端的人适应成本很低装上就能用。如果你只是会写一点Python或脚本Claude Code也能帮你完成很多脚手架工作通过“提需求”代替“逐行写代码”。但如果你完全没学过编程连文件路径、环境变量、命令行这些概念都不清楚我建议还是先补点基础否则遇到报错时你很难判断AI给出的修复方案是否合理。AI编程助手不是魔法它帮你把“从0到1”的时间缩短但“验证、决策、兜底”这件事最后还是得靠人。3. 安装配置实操从零到能跑起来3.1 前置依赖准备安装Claude Code之前机器上需要有Node.js。它目前是作为一个npm全局包来分发的版本要求Node 18以上。我自己用的是Node 20 LTS如果你之前装过旧版本建议先升级。在Ubuntu这类Linux系统上我强烈建议用nvm来管理Node版本。直接用apt安装的Node版本往往偏旧而且全局npm包装到系统目录时经常遇到权限问题。nvm装好之后node、npm、npx都在用户目录里后面安装全局包不容易踩EACCES的坑。Windows用户建议启用WSL在WSL里走同样的流程CLI体验会更稳定。3.2 安装步骤与验证安装命令只有一条npm install -g anthropic-ai/claude-code安装完成后先确认版本claude --version能看到版本号说明装好了。首次运行需要认证推荐直接用环境变量设置API Keyexport ANTHROPIC_API_KEY你的APIKey然后运行claude如果是第一次进入它会要求你同意交互协议之后就可以直接用自然语言下指令了。验证一下能不能正常工作可以输入一句最简单的需求请用一句话说明你的身份和当前目录结构。看到它正确回答说明整个链路已经通了。这里有两个细节第一我习惯把API Key写入用户目录下的.bashrc或.zshrc而不是每次手动export省得终端一关就失效第二安装后的配置和日志默认存放在~/.claude目录如果遇到异常可以看看里面的日志来定位问题。如果你偏爱图形界面也可以下载官方桌面版配合使用但核心交互依然在CLI里。3.3 VS Code集成配置虽然Claude Code本身是命令行工具但在VS Code里用顺手效率会再上一个台阶。官方推荐的做法是安装VS Code的Claude Code扩展直接在VS Code内置终端里启动claude。这样做的好处是AI能直接看到你的工作区文件你也能边看编辑器边和AI交互。安装方式很简单打开VS Code的扩展面板搜索“Claude Code”找到官方扩展安装即可。装完之后在项目根目录打开VS Code用快捷键调出内置终端输入claude回车。这样每次对话都不用手动描述项目背景Claude Code会自动读取工作区上下文。有一点要提醒如果你需要Claude Code读写工作区里的文件必须在项目目录下启动它而不是在任意目录下启动。在错误位置启动它会读不到项目文件生成的代码也容易放错地方。3.4 在Ubuntu下的安装要点Ubuntu的安装流程和上面基本一致但有三个坑值得单独说出来。第一不要用sudo npm install -g。很多教程让你加sudo但Claude Code安装后会尝试写配置文件sudo安装的包权限不足时反而会在运行时出现各种奇怪问题。正确做法是先用nvm装Node再正常全局安装。第二终端里command not found: claude大概率是npm的bin目录不在PATH里。用nvm装node后把nvm初始化脚本写入.bashrc重新打开终端即可。第三如果你所在网络环境下安装npm包速度很慢可以给npm配置镜像源比如npm config set registry https://registry.npmmirror.com改完镜像源后重新安装速度会有明显改善。如果你在公司内网环境也可以用内部npm镜像原理一样。4. 天气机器人完整开发过程每一个关键决策4.1 天气数据源与API Key申请最终选用OpenWeatherMap后第一步是注册账号并创建API Key。打开官网注册登录后在API Keys页面新建一个Key免费版就够用。个人机器人每天才调用两三次配额完全不是瓶颈。Key创建后建议立即复制存好放到环境变量里不要写进代码。申请完可以先在终端里用一条curl验证接口是否通curl https://api.openweathermap.org/data/2.5/weather?qShanghaiappid你的KEYunitsmetriclangzh_cn能返回JSON就说明数据源没问题。这个习惯建议保留先把外部依赖验证通过再让AI写业务代码否则后面排查时容易分不清到底是代码bug还是接口key的问题。4.2 用Claude Code生成核心代码首先创建项目目录mkdir weather-bot cd weather-bot然后启动claude把需求粘贴进去。这里给出我的完整prompt模板帮我在当前目录创建一个天气提醒机器人项目使用Node.js原生能力。 要求 1. 通过环境变量读取 WEATHER_API_KEY、CITY、WEBHOOK_URL 2. 调用OpenWeatherMap的实时天气接口返回城市当前温度、体感温度、天气现象、湿度、风速、最高最低温 3. 根据以下规则生成提醒建议温度低于5度提醒保暖天气现象含雨或雪提醒带伞风速大于8m/s提醒防风昼夜温差大于10度提醒叠穿 4. 将提醒文案通过POST JSON的方式发送到WEBHOOK_URL使用企业微信群机器人文本消息格式 5. 只输出核心代码文件index.js和README.md 先给出你的实现方案等我确认后再写代码。这里有个操作心得我特意加了“先给出实现方案等我确认后再写代码”这句话。因为对于这种需求AI直接开写通常会选它自己最熟悉的依赖和结构不一定符合你的预期。先让它出方案我确认数据源、推送格式、目录结构都没问题再放行写代码省得后期大改。Claude Code收到指令后会先列出方案确认后很快就把index.js写出来了。核心逻辑大致是这样的const apiKey process.env.WEATHER_API_KEY; const city process.env.CITY || Shanghai; const webhookUrl process.env.WEBHOOK_URL; async function getWeather() { const url https://api.openweathermap.org/data/2.5/weather?q${encodeURIComponent(city)}appid${apiKey}unitsmetriclangzh_cn; const res await fetch(url); if (!res.ok) throw new Error(天气接口请求失败HTTP ${res.status}); return res.json(); } function buildAdvice(data) { const tips []; if (data.main.temp 5) tips.push(气温较低注意保暖); if (data.weather[0].description.includes(雨) || data.weather[0].description.includes(雪)) tips.push(有降水记得带伞); if (data.wind.speed 8) tips.push(风力较大注意防风); if (data.main.temp_max - data.main.temp_min 10) tips.push(昼夜温差大建议叠穿); return tips.length ? tips.join() : 天气不错正常出门; } async function sendMessage(text) { const body { msgtype: text, text: { content: text } }; const res await fetch(webhookUrl, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify(body), }); if (!res.ok) throw new Error(消息推送失败HTTP ${res.status}); } (async () { try { const data await getWeather(); const text [ 【今日天气】${city}, 当前温度${data.main.temp.toFixed(1)}°C体感 ${data.main.feels_like.toFixed(1)}°C, 天气${data.weather[0].description}, 湿度${data.main.humidity}%, 风力${data.wind.speed}m/s, 建议${buildAdvice(data)}, ].join(\n); await sendMessage(text); console.log(推送成功); } catch (err) { console.error(执行失败, err.message); process.exit(1); } })();这份代码生成得相当干净没有引入axios、dotenv之类的外部包只用Node 18以上的原生fetch直接跑就能用。这里提醒一下如果环境变量没配置脚本不会报错而是直接取默认值容易在刚部署时误以为“机器人不工作”。最好在代码开头加一行校验if (!apiKey || !webhookUrl) { throw new Error(缺少必要的环境变量WEATHER_API_KEY 或 WEBHOOK_URL); }这种细节我一般不会主动提但可以让Claude Code顺手补上它完全听得懂。4.3 提醒逻辑与参数调优提醒规则看起来简单但阈值的选择其实有讲究。5度、8m/s、10度温差这些数字不是拍脑袋定的要结合城市气候来调。我在上海5度以下确实感觉冻手但如果你在东北可能零下10度才是“需要保暖”的信号。这些规则写成常量放到文件顶部后续改起来就方便。还要考虑数据的准确性。OpenWeatherMap实时接口返回的是“当前观测值”不是整日预报。早晨8点运行时拿到的温度和“今天最高/最低温”可能差别不小。所以我在提醒文案里会把当前温度和建议分开让读到消息的人自己有判断。如果你的场景是“昨晚提前通知明天天气”那就必须换预报接口规则也要按整日最高最低温来写。4.4 定时任务配置本地定时我选择crontab最简单也最稳定。编辑当前用户的定时任务crontab -e加入一行5 8 * * * cd /home/你的用户名/weather-bot /usr/bin/node index.js run.log 21四个值得注意的地方第一cron执行环境和你终端环境不一样PATH经常不带node路径所以node要用绝对路径可以用which node查出来第二环境变量在cron里默认不加载所以API Key这些要么写成全局环境变量要么建议在脚本里读取一个.env文件第三日志重定向一定要加否则出错了你根本不知道第四用分钟偏移5而不是整点避开大家的整点并发不是必需的但实践下来更稳。如果你不想依赖家里的电脑一直开机也可以把同样的代码部署到云服务器或云函数用定时触发器调用。比如放在云函数上每月成本几乎可以忽略机器人就能7x24稳定运行。原理完全一样只是运行宿主不同。4.5 用Claude Code调试和迭代这个机器人从写完到跑顺其实还经历了一轮调试。第一次手动执行时推送消息迟迟没到我把报错信息复制给Claude Code它一眼看出是企业微信机器人的内容格式问题群机器人要求text字段内容不能被过滤规则拦截。调整文案后再执行就收到了。后续改需求也很简单比如我说“再加一个功能每天下午6点再推一次改成下午的短文案”Claude Code会直接在现有代码上改不会推倒重来。这就是长上下文带来的好处你不用反复解释项目背景。5. 我踩过的那些坑问题排查实录5.1 安装与启动类问题我整理了一个速查表基本上能覆盖本地开发阶段遇到的大多数问题。现象可能原因处理方式command not found: claudenpm全局bin目录不在PATH用nvm重装Node确认nvm脚本已加载EACCES权限错误npm全局目录无写入权限不推荐sudo改用nvm安装Nodeclaude启动后一直转圈网络不通或认证未完成确认API Key设置确认网络状态看官方文档排障认证成功但请求返回403Key权限或配额问题登录控制台检查Key状态与额度Node版本不满足系统Node过旧用nvm安装Node 18及以上这里我想多说一句不要一上来就怀疑工具坏了。Claude Code报错信息通常很具体把信息原样贴回去问它比自己在网上乱搜效率高得多。5.2 运行与API问题天气机器人在实际运行中最常见的两类问题一类是天气接口返回非200另一类是推送收不到。天气接口返回401基本就是API Key无效检查是否复制了完整字符串注意别把空格带进去。返回404通常是城市名拼写问题比如St Petersburg和Saint Petersburg就差很多。返回429是超出免费额度OpenWeatherMap免费版每分钟有频率限制个人机器人不会触发但如果调试时循环请求就容易撞上。推送收不到先手动跑一次脚本看输出。如果脚本显示推送成功但群里没消息大概率是消息内容触发了群的过滤规则。企业微信机器人还有一个限制每个机器人每分钟最多20条消息。调试时不要高频连发否则会被限流一段时间。5.3 使用效率与成本类问题用Claude Code这类工具还要留意token消耗。一次大型任务的对话可能产生很多往返上下文越长费用越高。我的做法有两个一是把简单琐碎的小任务交给它时明确要求“不要解释直接改”二是在需要深入思考的任务前使用思考等级命令比如/think xhigh让它在复杂问题上多花推理简单问题上不浪费。如果对话太长也可以使用上下文压缩功能把历史对话摘要后再继续能显著降低后续token消耗。另外Claude Code还支持通过环境变量开启提示词缓存比如设置enable_prompt_caching_1h相关的开关长期运行同一项目时能明显降低重复输入带来的费用开销。这个功能官方文档里有详细说明建议长期使用者配置一下。如果你自己维护了多个模型端点还可以通过环境变量ANTHROPIC_BASE_URL和ANTHROPIC_AUTH_TOKEN指向兼容的API服务。市场上也有ccswitch这类工具用来切换不同端点本质就是改环境变量。这个机制很适合团队内部做模型路由但配置前务必确认服务端点本身是合规可用的。6. 它如何重塑了我的日常开发工作流6.1 从“写代码”到“表达需求”开发工作流这个词做流程引擎的同事可能第一反应是Camunda那种工作流引擎节点、网关、流程编排。但Claude Code带来的“工作流重塑”是另一条线——它改变的是开发者每天“想清楚、做出来、改对”这个过程本身的方式。过去写一个工具脚本我要自己定义函数、查API文档、处理边界。现在多数时候我只需要把需求表达清楚Claude Code负责把需求翻译成代码。表达需求也是一种能力能准确描述输入输出、约束条件、异常处理的人用AI的效率远高于只会说“帮我写个机器人”的人。这段时间我明显感觉到自己花在“需求建模”上的时间变多了但花在“敲代码”上的时间变少了。6.2 人机协作的最佳节奏我不建议把整个项目扔给Claude Code然后去睡觉尤其业务逻辑复杂时。我的节奏是大目标拆成多个可验证的小任务每完成一个就自己review一遍确认没有偏离需求后再继续。这种“小步快跑人工验收”的节奏能兼顾效率和安全。还有一个细节让Claude Code主动解释它做了哪些改动。每次大改后我会让它用git diff总结差异。它给我列出的改动清单往往比我自己翻diff更快看到风险点。代码提交前我也会让它帮忙检查一遍是否存在明显的边界遗漏比如空值、非法输入、超时等。6.3 技能沉淀把经验变成团队资产Claude Code的Skills机制是我最近用得最多的地方。你可以把某个领域的经验写成一个技能文件放在.claude/skills目录下AI在遇到相关任务时会自动加载。比如我写了一个“Node服务脚手架”技能它包含了项目结构规范、日志规范、环境变量约定。之后再让我搭新服务AI会自动按这套规范执行而我只需要检查输出。手动安装GitHub上的技能包也很简单把仓库里的技能目录复制到项目的.claude/skills下重启claude即生效。这种做法特别适合团队项目根目录的CLAUDE.md相当于AI版的团队Wiki每个人都能在AI协作时共享统一的规范。甚至有朋友用Claude Code辅助STM32这类嵌入式开发把芯片手册要点写进技能包让AI直接生成驱动代码。工具的边界远比我们想象中宽。这套配置我现在已经跑了好几个月群里的天气提醒一天都没断过。我个人在使用Claude Code时最大的体会是它不会取代你写代码但真的会逼你把需求想得更清楚也会把你从大量重复劳动里解放出来。如果你也要做类似的定时提醒机器人建议先从小需求开始把Claude Code当成一个能看懂项目的老同事而不是一个自动写码机。最后一个小技巧把巡检命令加进crontab时记得配上日志轮转不然run.log长年累月会越来越大。这个项目扩展空间也很大比如接入多城市切换、对接日历、甚至用预报模型做穿衣指数都是很好的后续方向。