<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>Duuu 笔记</title><link>http://www.duuu.net/</link><description>Good Luck To You!</description><item><title>理开发OpenClaw小龙虾怎么查看版本号 OpenClaw小龙虾当前版本确认操作|Duuu笔记</title><link>http://www.duuu.net/post/846.html</link><description>&lt;p&gt;针对前端开发中常见问题的解答&lt;/p&gt;

&lt;p&gt;可通过 openclaw --version 命令直接查询版本；若失败，则用 npm list -g openclaw 查看全局安装版本；仍无效时，通过 npm config get prefix 定位 bin 目录并解析可执行文件中的版本信息。&lt;/p&gt;

&lt;p&gt;如果您已成功安装 OpenClaw 小龙虾但不确定当前运行的是哪个版本，可通过命令行直接查询其版本号。以下是确认当前版本的具体操作步骤：&lt;/p&gt;

&lt;p&gt;一、使用&lt;/p&gt;

&lt;p&gt;openclaw&lt;/p&gt;

&lt;p&gt;--version 命令查询&lt;/p&gt;

&lt;p&gt;该命令是 OpenClaw 官方提供的标准版本检查方式，适用于所有已正确配置环境变量的系统。若命令能正常执行并返回版本信息，则说明 OpenClaw 已全局可调用。&lt;/p&gt;

&lt;p&gt;1、打开终端（Windows 用户使用 PowerShell 或管理员权限的 CMD；macOS/Linux 用户使用默认终端）。&lt;/p&gt;

&lt;p&gt;2、输入指令：&lt;/p&gt;

&lt;p&gt;openclaw --version&lt;/p&gt;

&lt;p&gt;，然后按回车键。&lt;/p&gt;

&lt;p&gt;3、若安装与环境变量配置无误，终端将立即输出类似&lt;/p&gt;

&lt;p&gt;openclaw/3.13.0 darwin-arm64 node-v24.14.0&lt;/p&gt;

&lt;p&gt;的完整版本字符串。&lt;/p&gt;

&lt;p&gt;二、通过 npm list 检查已安装的全局包版本&lt;/p&gt;

&lt;p&gt;当 openclaw --version 报“未识别命令”时，通常表示系统未将 npm 全局 bin 目录加入 PATH，此时可绕过命令注册，直接从 npm 包管理层面确认安装版本。&lt;/p&gt;

&lt;p&gt;1、在终端中执行：&lt;/p&gt;

&lt;p&gt;npm list -g openclaw&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;Zeemo&lt;/p&gt;

&lt;p&gt;提供视频字幕、字幕制作和字幕翻译服务&lt;/p&gt;

&lt;p&gt;下载&lt;/p&gt;

&lt;p&gt;2、观察输出内容，查找形如&lt;/p&gt;

&lt;p&gt;└─ openclaw@3.13.0&lt;/p&gt;

&lt;p&gt;的行，其中 @ 后的数字即为当前安装版本号。&lt;/p&gt;

&lt;p&gt;3、若提示 “empty”，说明 openclaw 未以全局方式安装，需重新执行&lt;/p&gt;

&lt;p&gt;npm install -g openclaw@latest&lt;/p&gt;

&lt;p&gt;并确保无报错。&lt;/p&gt;

&lt;p&gt;三、检查 Node.js 环境下实际可执行文件路径中的版本标识&lt;/p&gt;

&lt;p&gt;部分用户因环境变量缺失导致 openclaw 命令不可用，但二进制文件实际存在。此方法通过定位可执行文件位置并解析其内部元数据来确认版本。&lt;/p&gt;

&lt;p&gt;1、先获取 npm 全局前缀路径：&lt;/p&gt;

&lt;p&gt;npm config get prefix&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;2、根据系统类型进入对应 bin 目录：Windows 下为&lt;/p&gt;

&lt;p&gt;%prefix%\node_modules\.bin\openclaw.cmd&lt;/p&gt;

&lt;p&gt;；macOS/Linux 下为&lt;/p&gt;

&lt;p&gt;$prefix/bin/openclaw&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;3、对 openclaw 可执行文件执行&lt;/p&gt;

&lt;p&gt;head -n 20&lt;/p&gt;

&lt;p&gt;（macOS/Linux）或用文本编辑器打开 .cmd 文件（Windows），查找包含&lt;/p&gt;

&lt;p&gt;version&lt;/p&gt;

&lt;p&gt;或&lt;/p&gt;

&lt;p&gt;package.json&lt;/p&gt;

&lt;p&gt;引用的注释行或内嵌 JSON 片段。&lt;/p&gt;</description><pubDate>Tue, 14 Apr 2026 06:34:05 +0800</pubDate></item><item><title>开发Minimax如何生成动物奔跑视频 Minimax动物肌肉感控制最佳践|Duuu笔记</title><link>http://www.duuu.net/post/845.html</link><description>&lt;p&gt;针对前端开发中常见问题的解答&lt;/p&gt;

&lt;p&gt;应启用海螺02物理引擎、注入生物运动学先验提示、调用MaxClaw多智能体协同渲染，并后处理注入实时肌电响应映射，以解决MiniMax生成动物奔跑视频时动作僵硬、肌肉形变失真及轨迹违逆生物力学的问题。&lt;/p&gt;

&lt;p&gt;如果您尝试使用MiniMax生成具有真实物理感的动物奔跑视频，但发现动作僵硬、肌肉形变失真或运动轨迹不符合生物力学规律，则问题可能出在模型对生物动态建模与肌肉驱动机制的理解不足。以下是实现高保真动物奔跑视频生成的具体方法：&lt;/p&gt;

&lt;p&gt;一、启用海螺02物理引擎模式&lt;/p&gt;

&lt;p&gt;海螺02模型内置专为生物运动优化的时空物理模拟模块，可同步计算骨骼位移、肌肉收缩张力与地面反作用力反馈，从而驱动自然的奔跑节奏与肢体摆动相位。该模式强制启用连续帧间的刚体约束与软组织形变耦合计算。&lt;/p&gt;

&lt;p&gt;1、在MiniMax Agent控制台中选择「视频生成」任务类型。&lt;/p&gt;

&lt;p&gt;2、点击「高级参数」展开面板，将「物理仿真精度」滑块拖至&lt;/p&gt;

&lt;p&gt;最高档（PhysX-3.0）&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;3、在提示词末尾追加指令：&lt;/p&gt;

&lt;p&gt;“启用海螺02肌肉驱动协议，按真实猫科动物步态周期（约1.2秒/周期）生成连续12帧以上奔跑序列”&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;二、注入生物运动学先验提示&lt;/p&gt;

&lt;p&gt;MiniMax M2.7模型支持通过结构化提示注入跨物种运动学知识库，包括关节角速度阈值、肌肉激活时序图谱与重心转移曲线，从而约束生成结果不偏离已知生物学规律。&lt;/p&gt;

&lt;p&gt;1、在文本提示框中输入基础描述，例如：“一只成年猎豹在干草原上高速奔跑，侧视角度”。&lt;/p&gt;

&lt;p&gt;2、另起一行添加生物约束块，格式为：&lt;/p&gt;

&lt;p&gt;[BIOMECH:猎豹_高速奔袭_阶段=推进期|髋关节屈曲角&gt;95°|腓肠肌激活峰值滞后踝关节背屈120ms|尾部角动量补偿±8.3rad/s²]&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;3、提交前确认模型版本下拉菜单中已选定&lt;/p&gt;

&lt;p&gt;M2.7-Animus&lt;/p&gt;

&lt;p&gt;子型号。&lt;/p&gt;

&lt;p&gt;Loomy&lt;/p&gt;

&lt;p&gt;科大讯飞发布的桌面级 AI 助理，比 OpenClaw 更易用、更安全！&lt;/p&gt;

&lt;p&gt;下载&lt;/p&gt;

&lt;p&gt;三、调用MaxClaw多智能体协同渲染&lt;/p&gt;

&lt;p&gt;MaxClaw模式允许拆分视频生成任务为“骨骼运动代理”、“肌肉形变代理”与“环境交互代理”，三者并行运算后融合输出，显著提升肌肉体积变化与皮肤滑动效果的真实度。&lt;/p&gt;

&lt;p&gt;1、在Agent工作流中新建任务，选择「Multi-Agent Video Synthesis」模板。&lt;/p&gt;

&lt;p&gt;2、为三个子代理分别配置角色：骨骼代理加载CMU哺乳动物运动捕捉数据集，肌肉代理绑定FEM（有限元）网格变形器，环境代理挂载沙地粒子溅射模型。&lt;/p&gt;

&lt;p&gt;3、设置同步锁帧点为&lt;/p&gt;

&lt;p&gt;每4帧触发一次跨代理状态校验&lt;/p&gt;

&lt;p&gt;，确保肌肉膨胀幅度与对应关节扭矩严格匹配。&lt;/p&gt;

&lt;p&gt;四、后处理注入实时肌电响应映射&lt;/p&gt;

&lt;p&gt;MiniMax桌面端提供本地后处理器，可将生成视频的每一帧骨骼姿态反向映射至生理学可信的肌电信号波形，并据此微调表层肌肉隆起强度与收缩延迟，弥补纯生成路径的细节损失。&lt;/p&gt;

&lt;p&gt;1、完成初始视频生成后，在结果页点击「Refine with EMG」按钮。&lt;/p&gt;

&lt;p&gt;2、选择目标物种预设（如“家猫_慢跑”或“非洲狮_冲刺”），系统自动加载对应肌群激活时序数据库。&lt;/p&gt;

&lt;p&gt;3、调整&lt;/p&gt;

&lt;p&gt;“表层肌纤维可见度”滑块至0.68–0.73区间&lt;/p&gt;

&lt;p&gt;，该范围经湘雅医院运动医学组实测验证，符合高速奔跑中股直肌与腓肠肌的光学显影强度。&lt;/p&gt;</description><pubDate>Sun, 12 Apr 2026 13:33:15 +0800</pubDate></item><item><title>开发 骡子快跑如何清理临时文件 骡子快跑磁盘空间管理|Duuu笔记</title><link>http://www.duuu.net/post/844.html</link><description>&lt;p&gt;汇总前端使用过程中的典型问题&lt;/p&gt;

&lt;p&gt;清理骡子快跑本地临时文件需分五步：一、清除浏览器缓存与存储；二、手动删除%localappdata%\Temp下含mulerun/agent标识的临时文件夹；三、清空%appdata%\MuleRun\logs中3天前日志及.dmp/.json文件；四、在浏览器设置中删除mulerun.ai域名的持久化存储；五、CLI用户可运行mulerun-cli cleanup命令自动化清理。&lt;/p&gt;

&lt;p&gt;如果您在使用&lt;/p&gt;

&lt;p&gt;骡子快跑&lt;/p&gt;

&lt;p&gt;（MuleRun）过程中发现本地磁盘空间被大量临时文件占用，可能是其云端虚拟机同步缓存、日志输出或Agent运行中间产物在本地留存所致。以下是针对骡子快跑环境的临时文件清理方法：&lt;/p&gt;

&lt;p&gt;一、清理骡子快跑浏览器缓存与本地存储&lt;/p&gt;

&lt;p&gt;骡子快跑通过浏览器访问，其前端界面及交互数据会写入浏览器的IndexedDB、Cache Storage和Local Storage，这些内容可能持续增长并占用数GB空间。&lt;/p&gt;

&lt;p&gt;1、在运行骡子快跑的浏览器中，按下&lt;/p&gt;

&lt;p&gt;Ctrl + Shift + Delete&lt;/p&gt;

&lt;p&gt;（Windows/Linux）或&lt;/p&gt;

&lt;p&gt;Cmd + Shift + Delete&lt;/p&gt;

&lt;p&gt;（macOS）打开清除浏览数据面板。&lt;/p&gt;

&lt;p&gt;2、时间范围选择“所有时间”。&lt;/p&gt;

&lt;p&gt;3、勾选&lt;/p&gt;

&lt;p&gt;缓存的图像和文件&lt;/p&gt;

&lt;p&gt;、&lt;/p&gt;

&lt;p&gt;Cookie及其他网站数据&lt;/p&gt;

&lt;p&gt;、&lt;/p&gt;

&lt;p&gt;网站图标&lt;/p&gt;

&lt;p&gt;、&lt;/p&gt;

&lt;p&gt;已保存的密码（可选）&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;4、点击“清除数据”，等待操作完成。&lt;/p&gt;

&lt;p&gt;二、删除骡子快跑专用临时目录（Windows）&lt;/p&gt;

&lt;p&gt;部分骡子快跑插件或本地代理组件会在系统临时路径下生成独立子文件夹，命名常含“&lt;/p&gt;

&lt;p&gt;mulerun&lt;/p&gt;

&lt;p&gt;”、“agent”或“computer-mode”等标识，需手动定位并清空。&lt;/p&gt;

&lt;p&gt;1、按下&lt;/p&gt;

&lt;p&gt;Win + R&lt;/p&gt;

&lt;p&gt;打开“运行”对话框，输入&lt;/p&gt;

&lt;p&gt;%localappdata%\Temp&lt;/p&gt;

&lt;p&gt;并回车。&lt;/p&gt;

&lt;p&gt;2、在打开的文件夹中，查找名称含&lt;/p&gt;

&lt;p&gt;mulerun&lt;/p&gt;

&lt;p&gt;、&lt;/p&gt;

&lt;p&gt;agent_cache&lt;/p&gt;

&lt;p&gt;、&lt;/p&gt;

&lt;p&gt;computer_mode_log&lt;/p&gt;

&lt;p&gt;的文件夹。&lt;/p&gt;

&lt;p&gt;3、右键单击目标文件夹，选择“属性”，确认其修改日期为近7日内且大小超过50MB。&lt;/p&gt;

&lt;p&gt;4、对该文件夹执行&lt;/p&gt;

&lt;p&gt;Shift + Delete&lt;/p&gt;

&lt;p&gt;永久删除；若提示权限不足，右键选择“以管理员身份运行文件资源管理器”后重试。&lt;/p&gt;

&lt;p&gt;三、清空骡子快跑日志与诊断文件&lt;/p&gt;

&lt;p&gt;骡子快跑在“超级智能体模式”或“计算机模式”运行时，会周期性生成诊断日志（.log）、内存快照（.dmp）及任务追踪文件（.json），默认保存于用户配置目录下，不随浏览器缓存清理而移除。&lt;/p&gt;

&lt;p&gt;1、打开文件资源管理器，在地址栏粘贴并跳转至：&lt;/p&gt;

&lt;p&gt;%appdata%\MuleRun\logs&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;2、检查该目录内所有&lt;/p&gt;

&lt;p&gt;.log&lt;/p&gt;

&lt;p&gt;文件的创建时间，仅保留最近3天内的日志。&lt;/p&gt;

&lt;p&gt;独响&lt;/p&gt;

&lt;p&gt;一个轻笔记+角色扮演的app&lt;/p&gt;

&lt;p&gt;下载&lt;/p&gt;

&lt;p&gt;3、全选其余&lt;/p&gt;

&lt;p&gt;.log&lt;/p&gt;

&lt;p&gt;、&lt;/p&gt;

&lt;p&gt;.dmp&lt;/p&gt;

&lt;p&gt;、&lt;/p&gt;

&lt;p&gt;.json&lt;/p&gt;

&lt;p&gt;文件，按&lt;/p&gt;

&lt;p&gt;Shift + Delete&lt;/p&gt;

&lt;p&gt;彻底删除。&lt;/p&gt;

&lt;p&gt;4、返回上一级目录&lt;/p&gt;

&lt;p&gt;%appdata%\MuleRun&lt;/p&gt;

&lt;p&gt;，检查是否存在&lt;/p&gt;

&lt;p&gt;cache&lt;/p&gt;

&lt;p&gt;或&lt;/p&gt;

&lt;p&gt;temp&lt;/p&gt;

&lt;p&gt;子文件夹，如有且非空，一并清空。&lt;/p&gt;

&lt;p&gt;四、禁用并重置骡子快跑本地持久化存储&lt;/p&gt;

&lt;p&gt;骡子快跑为维持长效记忆与上下文连续性，可能启用浏览器的Persistent Storage机制，导致本地分配的存储配额持续增长且不自动释放。&lt;/p&gt;

&lt;p&gt;1、在当前浏览器地址栏输入：&lt;/p&gt;

&lt;p&gt;chrome://settings/siteData&lt;/p&gt;

&lt;p&gt;（Chrome/Edge）或&lt;/p&gt;

&lt;p&gt;about:preferences#privacy&lt;/p&gt;

&lt;p&gt;→“Cookies and Site Data”→“Manage Data”（Firefox）。&lt;/p&gt;

&lt;p&gt;2、在搜索框中输入&lt;/p&gt;

&lt;p&gt;mulerun.ai&lt;/p&gt;

&lt;p&gt;或&lt;/p&gt;

&lt;p&gt;mulerun.com&lt;/p&gt;

&lt;p&gt;（根据实际访问域名）。&lt;/p&gt;

&lt;p&gt;3、找到对应条目后，点击右侧“删除”按钮，清除全部关联的存储数据。&lt;/p&gt;

&lt;p&gt;4、关闭并重新打开浏览器，访问骡子快跑首页，系统将重建最小化初始存储结构。&lt;/p&gt;

&lt;p&gt;五、通过命令行调用骡子快跑内置清理指令（仅限CLI版用户）&lt;/p&gt;

&lt;p&gt;若您安装了骡子快跑官方提供的命令行工具（mulerun-cli），可通过集成指令直接触发本地缓存与临时文件的标准化清理流程，避免误删关键配置。&lt;/p&gt;

&lt;p&gt;1、以管理员身份打开终端（Windows Terminal或PowerShell）。&lt;/p&gt;

&lt;p&gt;2、执行命令：&lt;/p&gt;

&lt;p&gt;mulerun-cli cleanup --scope=temp --force&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;3、等待输出显示&lt;/p&gt;

&lt;p&gt;Temporary files cleared: X items, Y MB freed&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;4、如需同时清理日志，追加参数：&lt;/p&gt;

&lt;p&gt;--include-logs&lt;/p&gt;

&lt;p&gt;，即运行：&lt;/p&gt;

&lt;p&gt;mulerun-cli cleanup --scope=temp --include-logs --force&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;</description><pubDate>Sun, 12 Apr 2026 04:08:29 +0800</pubDate></item><item><title>开发 为什么例子很重要？Fewshot Prompt 在内容风格迁移中的|Duuu笔记</title><link>http://www.duuu.net/post/843.html</link><description>&lt;p&gt;针对前端开发中常见问题的解答&lt;/p&gt;

&lt;p&gt;例子是Few-shot Prompt的核心驱动力，通过真实样本而非抽象指令锚定风格，如小红书体的短段落+emoji+第一人称+感叹标题+经验标签等隐形规则，3个高质量统一来源、角色、任务类型的样例远胜数量堆砌。&lt;/p&gt;

&lt;p&gt;例子是 Few-shot Prompt 的核心驱动力——它不靠抽象指令说“请模仿这种风格”，而是用真实样本告诉模型：“像这样写，就是对的。”在内容风格迁移中，风格本身难以精确定义（比如“知乎体”“小红书风”“政府公文感”），但人一眼能认出；模型没有语感，只能靠例子锚定模式。&lt;/p&gt;

&lt;p&gt;例子直接编码风格的隐形规则&lt;/p&gt;

&lt;p&gt;一段“小红书体”文案不只是语气词多，还包含：短段落+emoji点睛+第一人称叙事+感叹式标题+经验标签（如#学生党必备）。单靠文字描述很难穷举这些组合规律，但给3个优质样例，模型就能自动归纳出结构节奏、用词偏好和情感密度。比如输入：&lt;/p&gt;

&lt;p&gt;“救命！这碗酸辣粉让我连吃一周?｜打工人的续命碳水！”&lt;/p&gt;

&lt;p&gt;“谁懂啊！29块搞定全套护肤✨敏感肌亲测不翻车！”&lt;/p&gt;

&lt;p&gt;“按头安利这个冷泡茶?夏天喝它我直接清醒一整个下午！”&lt;/p&gt;

&lt;p&gt;模型会捕捉到“情绪动词+具象场景+符号强化+轻口语化结语”的稳定链路，比写“请活泼一点、加emoji、用感叹号”更可靠。&lt;/p&gt;

&lt;p&gt;例子质量比数量更重要&lt;/p&gt;

&lt;p&gt;3个精准样例，远胜10个混杂样本。常见误区是堆砌不同平台、不同语气的文本，结果让模型困惑。建议：&lt;/p&gt;

&lt;p&gt;统一来源：全部取自目标平台近期高互动原文（如小红书点赞＞5k的笔记）&lt;/p&gt;

&lt;p&gt;统一角色：都用“职场新人”视角，或都用“宝妈”身份，避免人设跳跃&lt;/p&gt;

&lt;p&gt;统一任务类型：若要迁移产品介绍，例子就全选产品介绍，不混入攻略或测评&lt;/p&gt;

&lt;p&gt;实测发现，当样例中混入1条偏正式的公众号风格，生成结果会出现语气割裂——前半句活泼，后半句突然端着，说明模型在“投票式拟合”，而非稳定复现。&lt;/p&gt;

&lt;p&gt;独响&lt;/p&gt;

&lt;p&gt;一个轻笔记+角色扮演的app&lt;/p&gt;

&lt;p&gt;下载&lt;/p&gt;

&lt;p&gt;例子要带“可迁移的最小单元”&lt;/p&gt;

&lt;p&gt;真正起作用的不是整段文字，而是其中可复用的风格片段。比如把“原来……真的……”（“原来早八人喝冰美式真的不会心悸！”）单独抽出来作为例子，比给整篇笔记更利于模型掌握反常识+证实感的表达逻辑。实战中可刻意构造“风格原子”：&lt;/p&gt;

&lt;p&gt;开头钩子：用“谁懂啊/救命/按头安利”启动情绪&lt;/p&gt;

&lt;p&gt;转折信号：“但没想到… / 结果发现… / 直到上周…”制造信息差&lt;/p&gt;

&lt;p&gt;收尾动作：“快去试→截图反馈→蹲评论区”引导互动&lt;/p&gt;

&lt;p&gt;这些微结构比全文更易泛化，迁移到新主题（如从美妆转到家居）时稳定性更高。&lt;/p&gt;

&lt;p&gt;例子需匹配目标受众的认知习惯&lt;/p&gt;

&lt;p&gt;风格迁移不是炫技，是让内容在特定人群中“自然得像本来就是这么写的”。比如面向Z世代做知识科普，例子中出现“DNA动了”“尊嘟假嘟”等圈层黑话，模型才会习得语境适配能力；若给的全是教科书式例句，即使语法完美，也会显得“隔”。关键判断标准是：&lt;/p&gt;

&lt;p&gt;普通人扫一眼，是否觉得“这确实像他们平台/人群发的东西”&lt;/p&gt;

&lt;p&gt;——不是你觉得像，是目标读者觉得像。&lt;/p&gt;

&lt;p&gt;不复杂但容易忽略：例子不是模板填充题里的“参考答案”，而是风格世界的地图坐标。给对坐标，模型才能自己走出路。&lt;/p&gt;</description><pubDate>Sun, 12 Apr 2026 03:03:19 +0800</pubDate></item><item><title>Python 装饰器高级用法实战指南</title><link>http://www.duuu.net/post/842.html</link><description>
## 简介

Python 装饰器（Decorators）是 Python 中最优雅的特性之一，它允许我们在不修改函数源代码的情况下，为函数添加额外的功能。本文将深入讲解装饰器的高级用法，通过实际案例展示如何将装饰器应用于生产环境。

## 一、装饰器基础回顾

装饰器本质上是一个接受函数作为参数并返回新函数的函数。使用 @ 符号可以简洁地应用装饰器。

&lt;p&gt;Python 的 functools.wraps 是编写装饰器的最佳实践，它能保留原函数的元信息（如 __name__、__doc__ 等），这对于调试和文档生成非常重要。&lt;/p&gt;

## 二、计时装饰器：性能监控利器

&lt;p&gt;在开发过程中，了解函数的执行时间对于性能优化至关重要。我们可以创建一个计时装饰器，自动测量并输出函数的执行耗时：&lt;/p&gt;

```python
import time
from functools import wraps

def timer(func):
    &quot;&quot;&quot;测量函数执行时间的装饰器&quot;&quot;&quot;
    @wraps(func)
    def wrapper(*args, **kwargs):
        start = time.perf_counter()
        result = func(*args, **kwargs)
        end = time.perf_counter()
        elapsed = (end - start) * 1000  # 转换为毫秒
        print(f&quot;⏱️  {func.__name__} 执行耗时: {elapsed:.2f}ms&quot;)
        return result
    return wrapper

@timer
def calculate_fibonacci(n):
    &quot;&quot;&quot;计算斐波那契数列&quot;&quot;&quot;
    if n &lt;= 1:
        return n
    return calculate_fibonacci(n-1) + calculate_fibonacci(n-2)
```

&lt;p&gt;使用 time.perf_counter() 而非 time.time()，因为它提供更高精度的计时，特别适合测量短时间间隔。计时装饰器可以快速帮助我们识别性能瓶颈，特别适用于算法优化和数据库查询监控。&lt;/p&gt;

## 三、重试装饰器：增强健壮性

&lt;p&gt;网络请求、数据库操作等不稳定的操作常常因为临时故障而失败。重试装饰器可以自动重试失败的函数调用，提高程序的健壮性：&lt;/p&gt;

```python
def retry(max_attempts=3, delay=1, exceptions=(Exception,)):
    &quot;&quot;&quot;失败时自动重试的装饰器&quot;&quot;&quot;
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            last_exception = None
            for attempt in range(max_attempts):
                try:
                    return func(*args, **kwargs)
                except exceptions as Exception:
                    last_exception = Exception
                    if attempt &lt; max_attempts - 1:
                        print(f&quot;❌ 尝试 {attempt + 1}/{max_attempts} 失败，{delay}秒后重试...&quot;)
                        time.sleep(delay)
            raise last_exception
        return wrapper
    return decorator

@retry(max_attempts=3, delay=1)
def fetch_data_with_retry(url):
    &quot;&quot;&quot;模拟可能失败的数据获取&quot;&quot;&quot;
    import random
    if random.random() &lt; 0.5:
        raise ConnectionError(&quot;网络连接失败&quot;)
    return {&quot;data&quot;: &quot;成功获取数据&quot;, &quot;url&quot;: url}
```

&lt;p&gt;这个重试装饰器支持配置最大尝试次数、重试间隔和需要捕获的异常类型。通过参数化设计，我们可以灵活地根据不同场景调整重试策略。例如，对于数据库连接失败，可以设置较长的延迟时间；对于 API 限流，可以使用指数退避策略。&lt;/p&gt;

## 四、缓存装饰器：提升重复计算效率

&lt;p&gt;对于计算密集型或 I/O 密集型的函数，如果相同的输入经常重复出现，可以使用缓存装饰器来存储计算结果，避免重复计算：&lt;/p&gt;

```python
def cache(func):
    &quot;&quot;&quot;简单的函数结果缓存&quot;&quot;&quot;
    cache_dict = {}
    
    @wraps(func)
    def wrapper(*args, **kwargs):
        # 创建缓存键
        key = str(args) + str(sorted(kwargs.items()))
        
        if key in cache_dict:
            print(f&quot;📦 从缓存读取: {func.__name__}({args}, {kwargs})&quot;)
            return cache_dict[key]
        
        result = func(*args, **kwargs)
        cache_dict[key] = result
        return result
    
    # 添加清除缓存的方法
    wrapper.clear_cache = cache_dict.clear
    return wrapper

@cache
def expensive_computation(x, y):
    &quot;&quot;&quot;模拟耗时计算&quot;&quot;&quot;
    print(f&quot;💻 执行耗时计算: {x} + {y}&quot;)
    time.sleep(0.1)
    return x + y
```

&lt;p&gt;缓存装饰器通过将函数参数转换为缓存键，来存储和检索计算结果。对于纯函数（相同输入总是产生相同输出），缓存可以显著提升性能。在生产环境中，可以考虑使用 LRU 缓存策略来限制内存使用，或者使用 Redis 等外部存储实现分布式缓存。&lt;/p&gt;

## 五、日志装饰器：追踪函数调用

&lt;p&gt;在调试和监控生产环境时，记录函数调用和返回值非常重要。日志装饰器可以自动记录函数的输入输出：&lt;/p&gt;

```python
import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

def log_calls(level=logging.INFO):
    &quot;&quot;&quot;记录函数调用的装饰器&quot;&quot;&quot;
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            logger.log(level, f&quot;调用 {func.__name__} (args={args}, kwargs={kwargs})&quot;)
            result = func(*args, **kwargs)
            logger.log(level, f&quot;{func.__name__} 返回: {result}&quot;)
            return result
        return wrapper
    return decorator

@log_calls(level=logging.DEBUG)
def process_item(item_id, status):
    &quot;&quot;&quot;处理项目&quot;&quot;&quot;
    return f&quot;已处理项目 {item_id}，状态: {status}&quot;
```

&lt;p&gt;日志装饰器支持不同的日志级别，可以根据需要记录详细信息（DEBUG）或仅记录关键操作（INFO、WARNING）。在微服务架构中，结合请求 ID 和链路追踪，日志装饰器可以帮助我们快速定位问题。&lt;/p&gt;

## 六、类型验证装饰器：参数校验

&lt;p&gt;Python 是动态类型语言，这虽然带来了灵活性，但也可能导致类型错误。类型验证装饰器可以在函数调用前检查参数类型：&lt;/p&gt;

```python
def validate_types(**type_hints):
    &quot;&quot;&quot;验证参数类型的装饰器&quot;&quot;&quot;
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            # 获取函数签名
            import inspect
            sig = inspect.signature(func)
            bound_args = sig.bind(*args, **kwargs)
            bound_args.apply_defaults()
            
            # 验证类型
            for param_name, expected_type in type_hints.items():
                if param_name in bound_args.arguments:
                    value = bound_args.arguments[param_name]
                    if not isinstance(value, expected_type):
                        raise TypeError(
                            f&quot;参数 '{param_name}' 应为 {expected_type.__name__}，&quot;
                            f&quot;但得到 {type(value).__name__}&quot;
                        )
            
            return func(*args, **kwargs)
        return wrapper
    return decorator

@validate_types(name=str, age=int, active=bool)
def register_user(name, age, active):
    &quot;&quot;&quot;注册用户&quot;&quot;&quot;
    return {&quot;name&quot;: name, &quot;age&quot;: age, &quot;active&quot;: active}
```

&lt;p&gt;类型验证装饰器利用 Python 的 inspect 模块获取函数签名，从而支持关键字参数和默认值。这在处理 API 请求参数时特别有用，可以在数据进入业务逻辑前进行类型检查，避免后续处理中的类型错误。&lt;/p&gt;

## 七、装饰器组合应用

&lt;p&gt;装饰器的真正威力体现在组合使用上。我们可以将多个装饰器叠加应用到一个函数上：&lt;/p&gt;

```python
@timer
@retry(max_attempts=2)
@cache
def complex_operation(data):
    &quot;&quot;&quot;复杂的业务操作&quot;&quot;&quot;
    # 模拟耗时操作
    time.sleep(0.05)
    return sum(data)
```

&lt;p&gt;在这个例子中，complex_operation 函数同时具备计时、重试和缓存功能。装饰器的执行顺序是从下往上，即 cache 先执行，然后 retry，最后 timer。这种组合方式让我们能够以声明式的方式为函数添加多个横切关注点（Cross-Cutting Concerns）。&lt;/p&gt;

## 八、最佳实践与注意事项

&lt;p&gt;在编写和使用装饰器时，有几个重要的最佳实践需要注意：&lt;/p&gt;

&lt;p&gt;1. 始终使用 functools.wraps：这能保留原函数的元信息，包括函数名、文档字符串、参数注解等。这对于调试、文档生成和序列化非常重要。&lt;/p&gt;

&lt;p&gt;2. 保持装饰器的幂等性：一个好的装饰器应该可以多次应用而不会产生副作用。例如，重复应用 @timer 不应该导致计时功能重复执行。&lt;/p&gt;

&lt;p&gt;3. 考虑装饰器的性能开销：装饰器本身会增加函数调用的开销。对于高频调用的性能敏感函数，需要权衡装饰器带来的功能和性能损失。&lt;/p&gt;

&lt;p&gt;4. 正确处理异常：装饰器应该适当地处理或传播异常。重试装饰器捕获特定异常，而日志装饰器则应该记录异常信息。&lt;/p&gt;

&lt;p&gt;5. 支持参数化：通过工厂函数创建可配置的装饰器，如 retry(max_attempts=3)，可以提高装饰器的灵活性和复用性。&lt;/p&gt;

## 九、总结

&lt;p&gt;Python 装饰器是实现横切关注点的优雅方案，它让我们能够将业务逻辑与辅助功能（如计时、重试、缓存、日志、验证）分离。通过本文介绍的高级用法，我们可以编写更加清晰、可维护和健壮的代码。&lt;/p&gt;

&lt;p&gt;在实际项目中，装饰器特别适用于 AOP（面向切面编程）场景，如权限检查、事务管理、性能监控等。掌握装饰器的高级用法，将极大提升你的 Python 编程能力和代码质量。&lt;/p&gt;</description><pubDate>Sat, 11 Apr 2026 21:34:29 +0800</pubDate></item><item><title>开发什么是令并行化？教你如何过多路请求缩短任务链的总耗时最佳践|Duuu笔记</title><link>http://www.duuu.net/post/841.html</link><description>&lt;p&gt;汇总前端使用过程中的典型问题&lt;/p&gt;

&lt;p&gt;任务链总耗时可通过并行化压缩：一、识别分离可并行请求段；二、用线程池并发发HTTP请求；三、用CompletableFuture异步编排；四、用并行流处理独立批量请求；五、在Dify等平台配置并行节点。&lt;/p&gt;

&lt;p&gt;当一个任务链由多个独立或部分依赖的请求组成时，若仍采用串行方式依次发起请求，整体耗时将等于各请求耗时之和。而实际中，多个请求之间常无数据依赖或控制依赖，具备并发执行条件。指令并行化在此语境下可类比为对请求序列进行并行调度，从而压缩关键路径长度。以下是缩短任务链总耗时的具体方法：&lt;/p&gt;

&lt;p&gt;一、识别并分离可并行请求段&lt;/p&gt;

&lt;p&gt;在任务链中，并非所有请求都必须严格串行；只有存在数据依赖或状态依赖的请求才需保持先后顺序。通过分析接口间输入输出关系与业务逻辑约束，可明确哪些请求可安全并发执行，这是实施并行化的前提。&lt;/p&gt;

&lt;p&gt;1、梳理任务链中每个请求的输入来源与输出用途，标注其是否依赖前序请求的返回结果。&lt;/p&gt;

&lt;p&gt;2、绘制依赖图，将无直接依赖的请求归入同一并行组。&lt;/p&gt;

&lt;p&gt;3、确认各并行组内请求是否共享资源（如令牌、会话ID、限流配额），避免因资源争用导致隐式串行化。&lt;/p&gt;

&lt;p&gt;二、使用线程池并发发起HTTP请求&lt;/p&gt;

&lt;p&gt;线程池提供可控的并发能力与资源复用机制，适用于中等规模、IO密集型的多路请求场景，能有效规避频繁创建销毁线程的开销。&lt;/p&gt;

&lt;p&gt;1、初始化固定大小的线程池，例如&lt;/p&gt;

&lt;p&gt;Executors.newFixedThreadPool(8)&lt;/p&gt;

&lt;p&gt;，数量依据目标服务吞吐能力与本地CPU核心数权衡设定。&lt;/p&gt;

&lt;p&gt;2、为每个请求封装为&lt;/p&gt;

&lt;p&gt;Callable&lt;Response&gt;&lt;/p&gt;

&lt;p&gt;任务，确保异常可捕获、结果可聚合。&lt;/p&gt;

&lt;p&gt;3、调用&lt;/p&gt;

&lt;p&gt;executor.invokeAll(tasks, timeout, TimeUnit.SECONDS)&lt;/p&gt;

&lt;p&gt;批量提交并设置统一超时，防止单个慢请求拖垮整体。&lt;/p&gt;

&lt;p&gt;三、采用CompletableFuture组合异步请求&lt;/p&gt;

&lt;p&gt;CompletableFuture支持声明式编排，允许显式定义请求间的先后、并行、汇聚关系，尤其适合含条件分支与结果合并的复杂链路。&lt;/p&gt;

&lt;p&gt;1、将每个HTTP请求包装为返回&lt;/p&gt;

&lt;p&gt;CompletableFuture&lt;Response&gt;&lt;/p&gt;

&lt;p&gt;的方法，内部使用异步HTTP客户端（如OkHttp的enqueue或Apache HttpClient的FutureRequestExecutionService）。&lt;/p&gt;

&lt;p&gt;HyperWrite&lt;/p&gt;

&lt;p&gt;AI写作助手帮助你创作内容更自信&lt;/p&gt;

&lt;p&gt;下载&lt;/p&gt;

&lt;p&gt;2、对无依赖请求使用&lt;/p&gt;

&lt;p&gt;CompletableFuture.allOf(f1, f2, f3)&lt;/p&gt;

&lt;p&gt;并行触发，并用&lt;/p&gt;

&lt;p&gt;thenCombine&lt;/p&gt;

&lt;p&gt;或&lt;/p&gt;

&lt;p&gt;thenAcceptBoth&lt;/p&gt;

&lt;p&gt;合并结果。&lt;/p&gt;

&lt;p&gt;3、对有依赖的请求链，用&lt;/p&gt;

&lt;p&gt;thenCompose&lt;/p&gt;

&lt;p&gt;实现结果驱动的后续请求，避免阻塞等待。&lt;/p&gt;

&lt;p&gt;四、利用并行流简化集合级请求分发&lt;/p&gt;

&lt;p&gt;Java 8并行流适用于请求参数已全部就绪、且各请求完全独立的批量场景，语法简洁，底层自动使用ForkJoinPool，但不可控超时与异常传播较弱。&lt;/p&gt;

&lt;p&gt;1、将请求参数列表（如URL列表、DTO列表）转为Stream：&lt;/p&gt;

&lt;p&gt;requests.stream()&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;2、立即调用&lt;/p&gt;

&lt;p&gt;parallel()&lt;/p&gt;

&lt;p&gt;启用并行执行模式。&lt;/p&gt;

&lt;p&gt;3、使用&lt;/p&gt;

&lt;p&gt;map(request -&gt; httpExecutor.execute(request))&lt;/p&gt;

&lt;p&gt;发起并发请求，再通过&lt;/p&gt;

&lt;p&gt;collect(Collectors.toList())&lt;/p&gt;

&lt;p&gt;汇总响应。&lt;/p&gt;

&lt;p&gt;五、在Dify等低代码工作流平台中配置并行节点&lt;/p&gt;

&lt;p&gt;Dify通过可视化节点依赖配置实现执行策略编排，无需编写并发代码即可将原本串行的任务链改造为混合执行模式，适用于AI服务编排等高抽象层级场景。&lt;/p&gt;

&lt;p&gt;1、进入工作流编辑界面，选中多个无直接依赖关系的节点（如“文件解析”与“API信息补全”）。&lt;/p&gt;

&lt;p&gt;2、在节点属性面板中将它们的&lt;/p&gt;

&lt;p&gt;depends_on&lt;/p&gt;

&lt;p&gt;字段均设为空数组或共同前置节点ID。&lt;/p&gt;

&lt;p&gt;3、保存后验证执行日志，确认这些节点在运行时被调度至同一时间窗口启动，且整体链路耗时下降至最长单节点耗时级别。&lt;/p&gt;</description><pubDate>Sat, 11 Apr 2026 10:32:56 +0800</pubDate></item><item><title>理OpenClaw兼容Orca模型吗 OpenClaw使Orca2的配置教程教程|Duuu笔记</title><link>http://www.duuu.net/post/840.html</link><description>&lt;p&gt;汇总AI使用过程中的典型问题&lt;/p&gt;

&lt;p&gt;Orca-2模型在OpenClawAI中需通过Ollama本地接入、OpenAI兼容代理转发或源码级provider注入三种方式适配，分别适用于离线调用、协议兼容和深度定制场景。&lt;/p&gt;

&lt;p&gt;如果您尝试在OpenClawAI中调用Orca系列模型，但发现无法正常加载或响应异常，则可能是由于Orca-2未被默认集成且其API接口规范与OpenClaw预设的provider结构不匹配。以下是适配Orca-2模型的多种配置方法：&lt;/p&gt;

&lt;p&gt;一、通过Ollama本地运行Orca-2并接入OpenClaw&lt;/p&gt;

&lt;p&gt;此方法适用于MacOS、Linux及WSL2环境，利用Ollama作为本地模型服务中间层，绕过云端API依赖，实现Orca-2的离线调用。Ollama已原生支持Orca-2（orca-2:7b、orca-2:13b等量化版本），无需额外转换。&lt;/p&gt;

&lt;p&gt;1、确认Ollama已安装并运行：执行&lt;/p&gt;

&lt;p&gt;ollama serve&lt;/p&gt;

&lt;p&gt;确保服务后台常驻，端口默认为&lt;/p&gt;

&lt;p&gt;http://127.0.0.1:11434&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;2、拉取Orca-2模型：在终端中运行&lt;/p&gt;

&lt;p&gt;ollama pull orca-2:7b&lt;/p&gt;

&lt;p&gt;（推荐Q4_K_M量化版，内存占用约4.2GiB）。&lt;/p&gt;

&lt;p&gt;3、验证模型可用性：执行&lt;/p&gt;

&lt;p&gt;ollama run orca-2:7b&lt;/p&gt;

&lt;p&gt;，输入测试提示词，确认能返回合理响应后按&lt;/p&gt;

&lt;p&gt;Ctrl+D&lt;/p&gt;

&lt;p&gt;退出。&lt;/p&gt;

&lt;p&gt;4、编辑OpenClaw配置文件：&lt;/p&gt;

&lt;p&gt;Windows路径为C:Users\.&lt;/p&gt;

&lt;p&gt;openclaw&lt;/p&gt;

&lt;p&gt;openclaw.json；macOS/Linux路径为~/.openclaw/openclaw.json&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;5、在配置文件&lt;/p&gt;

&lt;p&gt;models.providers&lt;/p&gt;

&lt;p&gt;节点下新增&lt;/p&gt;

&lt;p&gt;ollama&lt;/p&gt;

&lt;p&gt;条目，内容如下：&lt;/p&gt;

&lt;p&gt;&quot;ollama&quot;: {&lt;/p&gt;

&lt;p&gt;&quot;baseUrl&quot;: &quot;http://127.0.0.1:11434/v1&quot;,&lt;/p&gt;

&lt;p&gt;&quot;api&quot;: &quot;open&lt;/p&gt;

&lt;p&gt;ai&lt;/p&gt;

&lt;p&gt;-completions&quot;,&lt;/p&gt;

&lt;p&gt;&quot;models&quot;: [&lt;/p&gt;

&lt;p&gt;{&quot;id&quot;: &quot;orca-2:7b&quot;, &quot;name&quot;: &quot;orca-2:7b&quot;}&lt;/p&gt;

&lt;p&gt;]&lt;/p&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;6、在&lt;/p&gt;

&lt;p&gt;agents.defaults.model.primary&lt;/p&gt;

&lt;p&gt;中设为&lt;/p&gt;

&lt;p&gt;&quot;ollama/orca-2:7b&quot;&lt;/p&gt;

&lt;p&gt;，保存文件。&lt;/p&gt;

&lt;p&gt;二、手动配置OpenAI兼容接口代理转发Orca-2&lt;/p&gt;

&lt;p&gt;此方法适用于需复用OpenClaw对OpenAI格式严格校验逻辑的场景，通过轻量HTTP代理将OpenClaw发出的OpenAI-style请求重写为Ollama原生请求，避免修改OpenClaw源码。&lt;/p&gt;

&lt;p&gt;1、安装&lt;/p&gt;

&lt;p&gt;ollama-proxy&lt;/p&gt;

&lt;p&gt;工具：执行&lt;/p&gt;

&lt;p&gt;npm install -g ollama-proxy&lt;/p&gt;

&lt;p&gt;（需Node.js v22+）。&lt;/p&gt;

&lt;p&gt;2、启动代理服务：运行&lt;/p&gt;

&lt;p&gt;ollama-proxy --ollama-url http://127.0.0.1:11434 --port 8000 --model orca-2:7b&lt;/p&gt;

&lt;p&gt;，服务监听于&lt;/p&gt;

&lt;p&gt;http://127.0.0.1:8000&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;Uizard&lt;/p&gt;

&lt;p&gt;设计界 ChatGPT！利用AI生成多屏的UI界面&lt;/p&gt;

&lt;p&gt;下载&lt;/p&gt;

&lt;p&gt;3、修改OpenClaw配置中&lt;/p&gt;

&lt;p&gt;models.providers.openai&lt;/p&gt;

&lt;p&gt;的&lt;/p&gt;

&lt;p&gt;baseUrl&lt;/p&gt;

&lt;p&gt;为&lt;/p&gt;

&lt;p&gt;&quot;http://127.0.0.1:8000/v1&quot;&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;4、将&lt;/p&gt;

&lt;p&gt;agents.defaults.model.primary&lt;/p&gt;

&lt;p&gt;设为&lt;/p&gt;

&lt;p&gt;&quot;openai/orca-2:7b&quot;&lt;/p&gt;

&lt;p&gt;，注意此处ID仅为逻辑标识，实际由代理路由到Orca-2。&lt;/p&gt;

&lt;p&gt;5、&lt;/p&gt;

&lt;p&gt;关键验证步骤：执行openclaw healthcheck，确认model probe返回status: &quot;ready&quot;且provider: &quot;openai&quot;&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;三、直接修改OpenClaw源码注入Orca-2 provider（开发者模式）&lt;/p&gt;

&lt;p&gt;此方法适用于需要深度定制推理参数（如temperature、num_ctx、repeat_penalty）或启用Orca-2专属功能（如long-context attention patch）的高级用户，要求具备TypeScript基础及pnpm构建能力。&lt;/p&gt;

&lt;p&gt;1、克隆OpenClaw主仓库：运行&lt;/p&gt;

&lt;p&gt;git clone https://github.com/736773174/openclaw.git&lt;/p&gt;

&lt;p&gt;，检出最新稳定分支&lt;/p&gt;

&lt;p&gt;v2.4.0&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;2、进入&lt;/p&gt;

&lt;p&gt;src/models/providers/&lt;/p&gt;

&lt;p&gt;目录，新建&lt;/p&gt;

&lt;p&gt;orca.ts&lt;/p&gt;

&lt;p&gt;文件，实现&lt;/p&gt;

&lt;p&gt;OrcaProvider&lt;/p&gt;

&lt;p&gt;类，继承&lt;/p&gt;

&lt;p&gt;BaseProvider&lt;/p&gt;

&lt;p&gt;并覆盖&lt;/p&gt;

&lt;p&gt;buildUrl&lt;/p&gt;

&lt;p&gt;与&lt;/p&gt;

&lt;p&gt;buildPayload&lt;/p&gt;

&lt;p&gt;方法。&lt;/p&gt;

&lt;p&gt;3、在&lt;/p&gt;

&lt;p&gt;src/models/providers/index.ts&lt;/p&gt;

&lt;p&gt;中注册该provider：&lt;/p&gt;

&lt;p&gt;export * from './orca';&lt;/p&gt;

&lt;p&gt;并加入&lt;/p&gt;

&lt;p&gt;providerMap&lt;/p&gt;

&lt;p&gt;映射表。&lt;/p&gt;

&lt;p&gt;4、在&lt;/p&gt;

&lt;p&gt;src/config/schema.ts&lt;/p&gt;

&lt;p&gt;的&lt;/p&gt;

&lt;p&gt;ProviderConfig&lt;/p&gt;

&lt;p&gt;联合类型中添加&lt;/p&gt;

&lt;p&gt;'orca'&lt;/p&gt;

&lt;p&gt;字面量类型。&lt;/p&gt;

&lt;p&gt;5、重新构建项目：执行&lt;/p&gt;

&lt;p&gt;pnpm build&lt;/p&gt;

&lt;p&gt;，生成产物位于&lt;/p&gt;

&lt;p&gt;dist/&lt;/p&gt;

&lt;p&gt;目录。&lt;/p&gt;

&lt;p&gt;6、&lt;/p&gt;

&lt;p&gt;配置生效关键：将构建后的dist目录软链接至全局node_modules/openclaw/dist，或使用pnpm link本地绑定&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;</description><pubDate>Sat, 11 Apr 2026 06:03:05 +0800</pubDate></item><item><title>OpenClaw支持模型微调结果加载吗 OpenClaw自定义权重使|Duuu笔记</title><link>http://www.duuu.net/post/839.html</link><description>&lt;p&gt;AI开发疑难问题解析与解决方案&lt;/p&gt;

&lt;p&gt;微调权重需存于~/.openclaw/skills/子目录并符合HF格式，通过SOUL.md的model字段或config.yaml的model_path指定路径，支持本地加载或OpenRouter/Cloudflare网关接入，最后用debug日志和推理测试验证生效。&lt;/p&gt;

&lt;p&gt;如果您已对OpenClawAI所依赖的大语言模型完成微调（如通过LoRA、QLoRA等方式生成适配权重），但启动后未生效或提示模型加载失败，则可能是由于权重路径未正确注册、格式不兼容或配置未指向自定义参数。以下是将微调结果成功加载至OpenClawAI的具体操作步骤：&lt;/p&gt;

&lt;p&gt;一、确认微调权重格式与存放位置&lt;/p&gt;

&lt;p&gt;OpenClawAI仅支持加载符合Hugging Face Transformers标准结构的微调权重，包括完整模型（full fine-tune）和LoRA/QLoRA适配器两种类型。权重必须存放在&lt;/p&gt;

&lt;p&gt;~/.openclaw/skills/&lt;/p&gt;

&lt;p&gt;目录下独立子文件夹中，并包含&lt;/p&gt;

&lt;p&gt;config.json&lt;/p&gt;

&lt;p&gt;、&lt;/p&gt;

&lt;p&gt;pytorch_model.bin&lt;/p&gt;

&lt;p&gt;（或&lt;/p&gt;

&lt;p&gt;adapter_model.bin&lt;/p&gt;

&lt;p&gt;）及&lt;/p&gt;

&lt;p&gt;tokenizer_config.json&lt;/p&gt;

&lt;p&gt;等必要文件。&lt;/p&gt;

&lt;p&gt;1、创建专属权重目录：&lt;/p&gt;

&lt;p&gt;mkdir -p ~/.&lt;/p&gt;

&lt;p&gt;openclaw&lt;/p&gt;

&lt;p&gt;/skills/my_lora_v1&lt;/p&gt;

&lt;p&gt;2、将微调输出的全部文件复制进该目录，确保无遗漏；&lt;/p&gt;

&lt;p&gt;3、检查目录内是否存在&lt;/p&gt;

&lt;p&gt;adapter_config.json&lt;/p&gt;

&lt;p&gt;（LoRA专用）或&lt;/p&gt;

&lt;p&gt;config.json&lt;/p&gt;

&lt;p&gt;（全量微调），缺失则无法识别；&lt;/p&gt;

&lt;p&gt;4、验证tokenizer文件完整性：&lt;/p&gt;

&lt;p&gt;ls ~/.openclaw/skills/my_lora_v1/tokenizer*&lt;/p&gt;

&lt;p&gt;应返回至少&lt;/p&gt;

&lt;p&gt;tokenizer.json&lt;/p&gt;

&lt;p&gt;与&lt;/p&gt;

&lt;p&gt;tokenizer_config.json&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;二、修改SOUL.md注入模型路径声明&lt;/p&gt;

&lt;p&gt;SOUL.md是OpenClawAI人格配置核心文件，其中&lt;/p&gt;

&lt;p&gt;model&lt;/p&gt;

&lt;p&gt;字段可显式指定加载路径。系统启动时优先读取该路径，覆盖默认模型设置。路径支持绝对路径与相对路径，但必须以&lt;/p&gt;

&lt;p&gt;file://&lt;/p&gt;

&lt;p&gt;前缀标识本地权重。&lt;/p&gt;

&lt;p&gt;1、打开&lt;/p&gt;

&lt;p&gt;~/.openclaw/workspace/SOUL.md&lt;/p&gt;

&lt;p&gt;；&lt;/p&gt;

&lt;p&gt;2、在任意空白行插入新字段：&lt;/p&gt;

&lt;p&gt;model: file:///home/username/.openclaw/skills/my_lora_v1&lt;/p&gt;

&lt;p&gt;（请将&lt;/p&gt;

&lt;p&gt;username&lt;/p&gt;

&lt;p&gt;替换为实际用户名）；&lt;/p&gt;

&lt;p&gt;3、保存文件，确保无语法错误（禁止中文冒号、多余空格或缩进不一致）；&lt;/p&gt;

&lt;p&gt;4、确认SOUL.md顶部未被注释符&lt;/p&gt;

&lt;p&gt;#&lt;/p&gt;

&lt;p&gt;整段屏蔽，否则字段不生效。&lt;/p&gt;

&lt;p&gt;三、通过config.yaml全局覆盖模型加载行为&lt;/p&gt;

&lt;p&gt;当需对所有智能体实例统一启用同一套微调权重时，应优先修改全局配置文件config.yaml。该方式绕过SOUL.md单体限制，适用于多AGENTS场景或批量部署环境。&lt;/p&gt;

&lt;p&gt;1、编辑&lt;/p&gt;

&lt;p&gt;~/.openclaw/config.yaml&lt;/p&gt;

&lt;p&gt;；&lt;/p&gt;

&lt;p&gt;2、定位到&lt;/p&gt;

&lt;p&gt;llm:&lt;/p&gt;

&lt;p&gt;节点下，添加或修改&lt;/p&gt;

&lt;p&gt;model_path:&lt;/p&gt;

&lt;p&gt;字段：&lt;/p&gt;

&lt;p&gt;model_path: &quot;/home/username/.openclaw/skills/my_lora_v1&quot;&lt;/p&gt;

&lt;p&gt;；&lt;/p&gt;

&lt;p&gt;白瓜AI&lt;/p&gt;

&lt;p&gt;白瓜AI，一个免费图文AI创作工具，支持 AI 仿写，图文生成，敏感词检测，图片去水印等等。&lt;/p&gt;

&lt;p&gt;下载&lt;/p&gt;

&lt;p&gt;3、确保&lt;/p&gt;

&lt;p&gt;llm:&lt;/p&gt;

&lt;p&gt;缩进层级与同级字段（如&lt;/p&gt;

&lt;p&gt;provider:&lt;/p&gt;

&lt;p&gt;）一致，YAML对空格敏感；&lt;/p&gt;

&lt;p&gt;4、若原配置含&lt;/p&gt;

&lt;p&gt;model_id:&lt;/p&gt;

&lt;p&gt;（如&lt;/p&gt;

&lt;p&gt;claude-sonnet-4-5&lt;/p&gt;

&lt;p&gt;），需将其注释或删除，避免冲突。&lt;/p&gt;

&lt;p&gt;四、使用OpenRouter或Cloudflare AI Gateway间接加载微调模型&lt;/p&gt;

&lt;p&gt;OpenClawAI原生支持OpenRouter与Cloudflare AI Gateway作为模型路由层。若微调权重已托管至兼容平台（如Hugging Face Spaces + Inference Endpoints），可通过网关URL方式接入，无需本地存储模型文件。&lt;/p&gt;

&lt;p&gt;1、部署微调模型至HF Space，启用Inference API并获取可用Endpoint URL；&lt;/p&gt;

&lt;p&gt;2、在config.yaml中设置：&lt;/p&gt;

&lt;p&gt;provider: openrouter&lt;/p&gt;

&lt;p&gt;或&lt;/p&gt;

&lt;p&gt;provider: cloudflare-&lt;/p&gt;

&lt;p&gt;ai&lt;/p&gt;

&lt;p&gt;-gateway&lt;/p&gt;

&lt;p&gt;；&lt;/p&gt;

&lt;p&gt;3、对应添加&lt;/p&gt;

&lt;p&gt;api_base:&lt;/p&gt;

&lt;p&gt;字段，值为HF Endpoint地址（如&lt;/p&gt;

&lt;p&gt;https://xxxx.hf.space/v1&lt;/p&gt;

&lt;p&gt;）；&lt;/p&gt;

&lt;p&gt;4、设置&lt;/p&gt;

&lt;p&gt;model_id:&lt;/p&gt;

&lt;p&gt;为该Endpoint上注册的模型别名（如&lt;/p&gt;

&lt;p&gt;my-lora-finetuned&lt;/p&gt;

&lt;p&gt;），OpenClaw将按此标识发起请求。&lt;/p&gt;

&lt;p&gt;五、验证权重是否实际加载&lt;/p&gt;

&lt;p&gt;仅靠配置写入无法确认微调效果，必须通过运行时日志与推理响应双重验证。OpenClawAI在初始化LLM时会打印模型加载路径与参数量摘要，是判断权重是否载入的关键依据。&lt;/p&gt;

&lt;p&gt;1、启动OpenClaw时添加调试标志：&lt;/p&gt;

&lt;p&gt;openclaw run --log-level debug&lt;/p&gt;

&lt;p&gt;；&lt;/p&gt;

&lt;p&gt;2、在启动日志中搜索关键词&lt;/p&gt;

&lt;p&gt;loading model from&lt;/p&gt;

&lt;p&gt;，确认输出路径与您的微调目录一致；&lt;/p&gt;

&lt;p&gt;3、发送测试指令：“请用法律文书风格重写以下句子”，观察输出是否呈现微调目标领域特征；&lt;/p&gt;

&lt;p&gt;4、若日志显示&lt;/p&gt;

&lt;p&gt;using default model&lt;/p&gt;

&lt;p&gt;或路径指向&lt;/p&gt;

&lt;p&gt;~/.cache/huggingface&lt;/p&gt;

&lt;p&gt;，说明配置未生效，需回溯前四步检查。&lt;/p&gt;</description><pubDate>Fri, 10 Apr 2026 23:02:46 +0800</pubDate></item><item><title>理开发MuleRun怎么调节假日倒计时 MuleRun促销活动节奏控制|Duuu笔记</title><link>http://www.duuu.net/post/838.html</link><description>&lt;p&gt;前端开发疑难问题解析与解决方案&lt;/p&gt;

&lt;p&gt;需借助MuleRun的Agent网络与自进化能力，结合内置时间感知Agent、第三方节假日API、Bot重启机制及本地倒计时工具四种方式实现节假日倒计时功能。&lt;/p&gt;

&lt;p&gt;如果您希望在MuleRun中实现节假日倒计时功能，并用于促销活动节奏控制，则需借助其Agent网络与自进化能力，结合外部数据源或预设规则触发响应。以下是具体操作路径：&lt;/p&gt;

&lt;p&gt;一、使用内置时间感知Agent配置节日节点&lt;/p&gt;

&lt;p&gt;MuleRun支持通过自然语言定义时间敏感型任务，系统可自动识别法定节假日并绑定倒计时逻辑。该方式无需编码，依赖平台对中文日期表达式的语义解析能力。&lt;/p&gt;

&lt;p&gt;1、进入MuleRun主界面，点击左上角“+新建Agent”按钮。&lt;/p&gt;

&lt;p&gt;2、在描述框中输入类似语句：&lt;/p&gt;

&lt;p&gt;“在春节前7天开始推送年货节优惠提醒，持续至除夕当日；倒计时数字需实时显示在通知栏”&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;3、提交后，系统将自动调用日历服务校验春节日期，并生成带时间戳的执行链路。&lt;/p&gt;

&lt;p&gt;4、确认Agent启用状态为“运行中”，检查右下角提示是否显示“已同步国家法定节假日数据库”。&lt;/p&gt;

&lt;p&gt;二、接入第三方节假日API构建动态倒计时&lt;/p&gt;

&lt;p&gt;当需要精确控制多地区、多类型假期（如调休日、电商大促日）时，可手动挂载外部API作为数据源，由MuleRun Agent周期性拉取并更新倒计时变量。&lt;/p&gt;

&lt;p&gt;1、前往“设置→开发者选项→外部服务连接”，点击“添加HTTP数据源”。&lt;/p&gt;

&lt;p&gt;2、填入公开节假日API地址，例如：&lt;/p&gt;

&lt;p&gt;https://api.apihubs.cn/holiday/v1?year=2026&lt;/p&gt;

&lt;p&gt;，并勾选“自动刷新（每24小时）”。&lt;/p&gt;

&lt;p&gt;3、在Agent编辑页使用变量语法引用返回值，如{{holiday.data.spring_festival.countdown_days}}。&lt;/p&gt;

&lt;p&gt;4、将该变量嵌入消息模板或UI组件中，选择“实时渲染”模式以确保数字秒级更新。&lt;/p&gt;

&lt;p&gt;FormX&lt;/p&gt;

&lt;p&gt;AI自动从表格和文档中提取数据&lt;/p&gt;

&lt;p&gt;下载&lt;/p&gt;

&lt;p&gt;三、通过Bot重启机制重置促销阶段参数&lt;/p&gt;

&lt;p&gt;针对跨时段促销活动（如618预热期→爆发期→返场期），可利用MuleRun内置的Bot生命周期管理功能，在关键时间节点自动切换策略模块。&lt;/p&gt;

&lt;p&gt;1、在“自动化流”面板中创建分支节点，条件设置为：&lt;/p&gt;

&lt;p&gt;“当前日期 == 京东618预售开启日（2026-05-24）”&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;2、为该分支配置动作：“重启当前Bot实例”，并指定加载预置的“预售期响应包”。&lt;/p&gt;

&lt;p&gt;3、上传ZIP格式策略包，内含倒计时样式、话术库、跳转链接等资源文件。&lt;/p&gt;

&lt;p&gt;4、保存后，系统将在匹配时刻自动卸载旧模块、加载新模块，并重置所有关联倒计时器。&lt;/p&gt;

&lt;p&gt;四、利用本地离线倒计时工具协同触发MuleRun动作&lt;/p&gt;

&lt;p&gt;对于强调隐私或断网环境下的促销节奏控制，可搭配本地运行的倒计时工具（如Count+ Down），通过系统级事件桥接方式唤醒MuleRun任务。&lt;/p&gt;

&lt;p&gt;1、在Windows中安装Count+ Down，创建名为“双11开抢倒计时”的任务，设定结束时间为2026-11-11 00:00:00。&lt;/p&gt;

&lt;p&gt;2、在“高级设置”中启用“倒计时结束时执行命令”，填写：&lt;/p&gt;

&lt;p&gt;curl -X POST https://api.&lt;/p&gt;

&lt;p&gt;mulerun&lt;/p&gt;

&lt;p&gt;.ai/v1/trigger?event=double11_launch&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;3、确保MuleRun账户已开通Webhook接收权限，并在“事件中心”绑定该event ID对应的动作序列。&lt;/p&gt;

&lt;p&gt;4、测试时点击Count+ Down的“立即触发”按钮，观察MuleRun后台是否生成对应执行日志。&lt;/p&gt;</description><pubDate>Fri, 10 Apr 2026 22:32:48 +0800</pubDate></item><item><title>WorkBuddy 怎么批量生成素材 WorkBuddy 自媒体素材批量生成教程进阶案例|Duuu笔记</title><link>http://www.duuu.net/post/837.html</link><description>&lt;p&gt;AIFAQ：常见问题与解决方法&lt;/p&gt;

&lt;p&gt;WorkBuddy AI可批量生成多平台适配素材：一、预设并导入多尺寸模板；二、绑定图集与模板启动批量裁切；三、启用AI主体识别锚点保障关键内容；四、按平台自动命名归类输出；五、调用多模型生成差异化文案。&lt;/p&gt;

&lt;p&gt;如果您需要为多个平台或多个发布周期一次性产出大量适配尺寸、风格与命名规则的自媒体素材，WorkBuddy AI可基于原始图像与预设策略自动完成批量生成任务。以下是实现该目标的具体操作路径：&lt;/p&gt;

&lt;p&gt;一、预设多尺寸模板并绑定平台规范&lt;/p&gt;

&lt;p&gt;WorkBuddy支持将主流平台封面标准（如微信公众号900×500px、小红书1242×1560px、抖音1080×1920px、B站700×394px）以结构化方式保存为可复用模板，确保每次批量任务均严格遵循各平台技术要求。&lt;/p&gt;

&lt;p&gt;1、打开WorkBuddy主界面，点击左侧导航栏中的“模板管理”模块。&lt;/p&gt;

&lt;p&gt;2、在模板编辑区点击“新建尺寸模板”按钮，依次输入名称、宽度、高度、单位（px），并勾选“启用裁切对齐”选项。&lt;/p&gt;

&lt;p&gt;3、完成全部尺寸配置后，点击“导出为模板文件”，保存为&lt;/p&gt;

&lt;p&gt;workbuddy-templates.json&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;二、加载原始图集与模板启动批量任务&lt;/p&gt;

&lt;p&gt;通过批量任务模块，可将一组高清原始图与多个尺寸模板一次性绑定，系统自动为每张原图生成全部目标尺寸的裁切结果，避免逐张手动调整与导出。&lt;/p&gt;

&lt;p&gt;1、进入“批量任务”面板，点击“新建任务”按钮。&lt;/p&gt;

&lt;p&gt;2、在“源图像”区域点击“添加文件夹”，选择存放原始封面图的本地目录（仅支持JPG/PNG格式）。&lt;/p&gt;

&lt;p&gt;3、在“输出模板”区域点击“导入模板文件”，选择此前保存的&lt;/p&gt;

&lt;p&gt;workbuddy-templates.json&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;4、确认任务参数无误后，点击“启动批量处理”，状态栏将实时显示各子任务进度。&lt;/p&gt;

&lt;p&gt;三、启用AI主体识别锚点保障关键内容完整性&lt;/p&gt;

&lt;p&gt;针对人物、LOGO、文字等核心视觉元素易被常规居中裁切截断的问题，WorkBuddy提供AI驱动的智能锚点定位能力，自动识别图像视觉重心，并以此为基准进行比例适配裁切。&lt;/p&gt;

&lt;p&gt;1、在批量任务设置页展开“高级裁切选项”面板。&lt;/p&gt;

&lt;p&gt;2、开启“启用AI主体识别”开关，并将“锚点优先级”设为&lt;/p&gt;

&lt;p&gt;人脸&gt;文字&gt;显著区域&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;3、点击“预览单张效果”，查看系统在各尺寸下生成的锚点热力图与裁切框位置。&lt;/p&gt;

&lt;p&gt;四、按平台标识自动命名与归类输出&lt;/p&gt;

&lt;p&gt;为消除人工整理环节，WorkBuddy允许为每种模板单独配置文件名前缀与保存子目录，输出时自动按平台标识创建对应文件夹并写入带标识的文件名，确保素材即产即用。&lt;/p&gt;

&lt;p&gt;1、在“输出模板”区域，选中某一条已导入的模板，点击右侧“编辑”图标。&lt;/p&gt;

&lt;p&gt;2、在弹出面板中填写“文件名前缀”，例如&lt;/p&gt;

&lt;p&gt;xhs_&lt;/p&gt;

&lt;p&gt;（小红书）、&lt;/p&gt;

&lt;p&gt;dy_&lt;/p&gt;

&lt;p&gt;（抖音）。&lt;/p&gt;

&lt;p&gt;3、在“保存路径”字段中指定子目录，例如&lt;/p&gt;

&lt;p&gt;./output/xiaohongshu/&lt;/p&gt;

&lt;p&gt;或&lt;/p&gt;

&lt;p&gt;./output/douyin/&lt;/p&gt;

&lt;p&gt;。&lt;/p&gt;

&lt;p&gt;4、全部配置完成后，批量任务执行完毕时，所有输出文件将按平台自动分区存放且命名规范统一。&lt;/p&gt;

&lt;p&gt;五、调用多模型协同生成差异化文案与视觉提示&lt;/p&gt;

&lt;p&gt;WorkBuddy支持在批量图像生成的同时，为每张图注入匹配平台调性的标题、描述及封面文案，通过切换内置模型激发不同表达风格，满足A/B测试或多版本分发需求。&lt;/p&gt;

&lt;p&gt;1、在批量任务设置页底部，展开“AI文案增强”面板。&lt;/p&gt;

&lt;p&gt;2、开启“为每张图生成配套文案”开关，并选择模型：例如&lt;/p&gt;

&lt;p&gt;Qwen-VL增强版&lt;/p&gt;

&lt;p&gt;用于图文强关联描述，&lt;/p&gt;

&lt;p&gt;GLM-4-Flash&lt;/p&gt;

&lt;p&gt;用于高信息密度短文案。&lt;/p&gt;

&lt;p&gt;3、在“文案模板”栏输入占位符指令，例如：“小红书风格，开头用感叹句钩子，结尾带互动提问，字数≤30”。&lt;/p&gt;

&lt;p&gt;4、任务执行后，系统将在输出目录中同步生成同名TXT文件，内含为该图定制的标题、正文摘要与封面文案建议。&lt;/p&gt;</description><pubDate>Fri, 10 Apr 2026 21:02:45 +0800</pubDate></item></channel></rss>