让AI一直干活别停

原文来自 Datawhale 的 Easy-Vibe 教程:如何让 Claude Code 长长时间工作 之前一直在用 Claude Code 写代码,但有一个很烦的问题——它干着干着就停了。你让它重构一个模块,它改了两个文件就跟你说"搞定了",其实还有一堆没改。或者你让它跑测试,跑到一半报错了,它就卡在那里不动了,也不说重试一下。 总之,最近看到了 Datawhale 的 vibe coding 教程里有一节专门讲这个,讲得挺系统的,我这里也记录一下大概,顺便加点自己的理解。 核心问题:AI 不知道自己没干完 这个其实是所有 AI 编程工具的通病。人判断"干完了没"靠的是客观标准——测试跑通了没、功能能用不、代码质量行不行。但 AI 靠的是"感觉"——它觉得自己输出的差不多了,就停下来了。 所以解决方案的核心思路就是:别让 AI 自己判断什么时候停,让外部系统来检查。 具体来说就是三个问题: 真的完成了吗? 满足客观验收标准吗? 有没有漏掉什么? 如果答案都是"没有",就把任务重新丢给它,继续干。 方法一:While True 循环(最朴素) 五行代码搞定: 1 2 3 4 #!/bin/bash while true; do cat PROMPT.md | claude done 逻辑很简单——从 PROMPT.md 读任务,丢给 Claude,Claude 干完了退出,循环又把它拉起来继续干。Ctrl+C 手动停。 可以,简单粗暴。但问题也很明显——它不知道啥时候该停,你忘了关它就一直循环,API 账单蹭蹭涨。 加个安全版本的话,限制最大迭代次数就行: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!/bin/bash MAX_ITERATIONS=50 iteration=0 while true; do iteration=$((iteration + 1)) echo "=== 迭代 $iteration/$MAX_ITERATIONS ===" cat PROMPT.md | claude if [ $iteration -ge $MAX_ITERATIONS ]; then echo "达到最大迭代次数,停止" break fi sleep 5 done 方法二:Ralph Wiggum 插件(推荐) 这个是正经方案。Ralph Wiggum 是 Anthropic 官方的插件,核心机制叫 Stop Hook——Claude 想退出的时候,Hook 会拦截,检查输出里有没有你设定的完成标记。没有就重新注入任务让它继续干,有了才放它走。 ...

May 11, 2026 · 3 min · 445 words · Ray

OpenClaw 二吃

安装 OpenClaw 我也不知道啥情况,总之是三巨头各种折腾然后似乎被 openai 收入麾下了,我在第一次使用龙虾到现在他名字都换了两次了。所以把之前的清空配置,再重新安装。 Install | OpenClaw | The AI That Actually Does Things 这里我使用他的 sh 脚本访问不到,于是使用 pnpm 安装,然后 onboard 这次多了不少配置,我们选择 vLLM 并且输入我对应的信息 这次有飞书可以选择了 配置飞书 参考文档 Feishu - OpenClaw 在权限页面,批量导入以下权限 [json] 显示已折叠代码(23 行) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 { "scopes": { "tenant": [ "aily:file:read", "aily:file:write", "application:application.app_message_stats.overview:readonly", "application:application:self_manage", "application:bot.menu:write", "contact:user.employee_id:readonly", "corehr:file:download", "event:ip_list", "im:chat.access_event.bot_p2p_chat:read", "im:chat.members:bot_access", "im:message", "im:message.group_at_msg:readonly", "im:message.p2p_msg:readonly", "im:message:readonly", "im:message:send_as_bot", "im:resource" ], "user": ["aily:file:read", "aily:file:write", "im:chat.access_event.bot_p2p_chat:read"] } } ...

February 25, 2026 · 1 min · 105 words · Ray

Qwen3.5-35B-A3B浅尝

Qwen3.5-35B-A3B Info Qwen3.5 系列终于发布了小杯模型,对应的在阿里云提供 API,Qwen3.5-Plus 即 Qwen3.5-397B-A17B,Qwen3.5-Flash 即 Qwen3.5-35B-A3B。 前面几天对于 Qwen3.5-Plus 的表现,网友评论都是不错、那么这个小杯表现如何是我们比较关注的,毕竟一点资源就能跑起来了。 Qwen3.5 Usage Guide - vLLM Recipes Qwen/Qwen3.5-35B-A3B · Hugging Face 服务器信息: 显示已折叠代码(29 行) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 【CPU 信息】 CPU 型号: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz CPU 核心数: 32 【系统版本】 操作系统: Ubuntu 版本: 22.04.5 LTS (Jammy Jellyfish) 内核版本: 5.15.0-168-generic 【GPU 信息】 NVIDIA GPU 检测到: GPU 0: NVIDIA GeForce RTX 3090 显存: 24576 MiB 驱动版本: 580.126.09 GPU 1: NVIDIA GeForce RTX 3090 显存: 24576 MiB 驱动版本: 580.126.09 GPU 2: NVIDIA GeForce RTX 3090 显存: 24576 MiB 驱动版本: 580.126.09 GPU 3: NVIDIA GeForce RTX 3090 显存: 24576 MiB 驱动版本: 580.126.09 GPU 4: NVIDIA GeForce RTX 3090 显存: 24576 MiB 驱动版本: 580.126.09 CUDA 版本: 13.0 部署 按照官方文档 安装最新的 vLLM,使用 vLLM 部署qwen3.5-35b-a3b,(我习惯使用 vLLM,好用、性能也很好) ...

February 25, 2026 · 1 min · 190 words · Ray

ClawdBot 在 树莓派上

截止到写这篇文章,ClawdBot 已经火出圈了,被 Anthropic 告了一手后现在已经改名 Moltbot,🦞龙虾 bot。 之前在我自己的服务器上安装过,但是看到很多 skills 的配置比较繁琐(我连敲代码都很少配置外部能力。)实在是没有精力搞,所以也没觉得很牛。但是最近翻出公司的老树莓派就不一样了。废物必须利用,折腾永垂不朽。 安装 🦞bot 的作者是推崇 一键安装的,所以他们为这个努力了不少,那么理论上我应该也可以诶 curl -fsSL https://clawd.bot/install.sh | bash,果然一路畅通无阻 这其中唯一的坑就是 minimax 的官方配置是 海外的站、而我使用的账号是国内版、所以需要修改一下 baseurl、这里当时忘记截图了,总之根据官方文档改一下 json 就行 使用 写文时想到使用飞书、此时尚未有人做适配,我也为了浅尝就不折腾太多了,配置 tg bot 试试, 效果图: 叫上同事进来试了一下,没想到还真的能用。功能一切正常,简单试了一下,模型能力挺重要的,如果没有定时提醒之类的能力,agent 还是比较鸡肋,但是如果未来接入飞书、配合适当的 skills、做好持久 memory,那么个人秘书就在眼前了。 唯一的缺点是每次运行都在持续消耗 money。

January 28, 2026 · 1 min · 37 words · Updated: February 25, 2026 · Ray

浅尝AI帮我分析股票

之前看到多次那种AI虚拟盘炒股大战了,今天又刷到个股市分析的项目,忍不住了,搞一个下来玩玩 以下记录折腾过程而已 GitHub - ZhuLinsen/daily_stock_analysis: LLM驱动的 A/H股智能分析器,多数据源行情 + 实时新闻 + Gemini 决策仪表盘 + 多渠道推送,零成本,纯白嫖,定时运行 我就不搞actions了,反正有服务器 第一步先拉仓库下来 配环境 随后我最近在学uv,让uv接管依赖管理。直接 uv add -r requirements.txt 然按照作者的环境配置指南,配上gemini的连接方式,由于没看到在哪里自定义gemini的调用方式,进代码一看,发现作者使用的是google.generativeai包,该包已被弃用,虽然还能用,但是我改成了使用 google.genai analyzer.py 中 _init_model 方法更新成如下 [python] 显示已折叠代码(58 行) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 def _init_model(self) -> None: """ 初始化 Gemini 模型 配置: - 使用 gemini-3-flash-preview 或 gemini-2.5-flash 模型 - 不启用 Google Search(使用外部 Tavily/SerpAPI 搜索) - 支持自定义 endpoint(通过 GEMINI_API_ENDPOINT 环境变量) Note: 使用新的 google.genai 包(旧的 google.generativeai 已弃用) """ try: from google import genai from google.genai import types # 从配置获取参数 config = get_config() model_name = config.gemini_model fallback_model = config.gemini_model_fallback # 构建客户端配置 client_kwargs = { 'api_key': self._api_key, } # 配置自定义 endpoint(如果设置) if config.gemini_api_endpoint: logger.info(f"使用自定义 Gemini Endpoint: {config.gemini_api_endpoint}") client_kwargs['http_options'] = { 'baseUrl': config.gemini_api_endpoint, # 注意:参数名是 baseUrl,不是 api_endpoint } # 如果配置了 API 版本,也添加进去 if config.gemini_api_version: client_kwargs['http_options']['apiVersion'] = config.gemini_api_version # 注意:参数名是 apiVersion # 创建 Gemini 客户端 self._genai_client = genai.Client(**client_kwargs) # 尝试初始化主模型 try: # 新版 API 不再使用 GenerativeModel,而是直接通过 client.models.generate_content # 这里我们只需要记录模型名称 self._current_model_name = model_name self._using_fallback = False self._model = self._genai_client # 保存客户端引用 logger.info(f"Gemini 模型初始化成功 (模型: {model_name})") except Exception as model_error: # 尝试备选模型 logger.warning(f"主模型 {model_name} 初始化失败: {model_error},将尝试备选模型 {fallback_model}") self._current_model_name = fallback_model self._using_fallback = True self._model = self._genai_client logger.info(f"Gemini 备选模型配置完成 (模型: {fallback_model})") except Exception as e: logger.error(f"Gemini 模型初始化失败: {e}") self._model = None self._genai_client = None config加上 ...

January 24, 2026 · 2 min · 282 words · Ray