OpenClaw+Qwen3.5-9B:极简命令行工具开发实战

1. 为什么选择这个技术组合?

上周我需要快速开发一个批量重命名图片的小工具,但实在不想从头写代码。在尝试了各种方案后,我发现OpenClaw+Qwen3.5-9B的组合意外地好用——只需要用自然语言描述需求,就能生成可执行的命令行工具。

这个组合的核心优势在于:

  • OpenClaw的脚本执行能力可以直接运行生成的代码
  • Qwen3.5-9B优秀的代码生成质量减少了调试时间
  • 整个开发流程完全在本地完成,不涉及敏感数据外传

2. 环境准备与基础配置

2.1 安装OpenClaw

我使用的是macOS系统,安装过程非常简单:

curl -fsSL https://openclaw.ai/install.sh | bash
openclaw onboard --install-daemon

在配置向导中选择:

  • Mode: Advanced(需要自定义模型)
  • Provider: Qwen
  • Default model: qwen3-9b(确保选择9B版本)

2.2 配置本地Qwen3.5-9B模型

由于我需要频繁调用模型生成代码,选择在本地部署Qwen3.5-9B:

{
  "models": {
    "providers": {
      "local-qwen": {
        "baseUrl": "http://localhost:8000/v1",
        "api": "openai-completions",
        "models": [
          {
            "id": "qwen3-9b",
            "name": "Local Qwen3.5-9B",
            "contextWindow": 128000
          }
        ]
      }
    }
  }
}

配置完成后记得重启网关:

openclaw gateway restart

3. 开发第一个命令行工具

3.1 从需求到实现

我需要一个能将目录下所有.jpg文件按"日期_序号"格式重命名的工具。通过OpenClaw控制台直接输入:

"请生成一个Python脚本,递归扫描当前目录下的所有.jpg文件,将它们重命名为'年-月-日_序号.jpg'格式,保持原始文件扩展名"

几秒钟后,OpenClaw返回了完整的Python脚本:

import os
from datetime import datetime

def rename_images():
    date_str = datetime.now().strftime("%Y-%m-%d")
    counter = 1
    for root, _, files in os.walk("."):
        for file in files:
            if file.lower().endswith(".jpg"):
                new_name = f"{date_str}_{counter}.jpg"
                src = os.path.join(root, file)
                dst = os.path.join(root, new_name)
                os.rename(src, dst)
                print(f"Renamed {file} to {new_name}")
                counter += 1

if __name__ == "__main__":
    rename_images()

3.2 测试与迭代

第一次生成的代码有些小问题:

  1. 没有处理文件名冲突
  2. 递归扫描时路径处理不够健壮

我继续用自然语言反馈:"如果目标文件名已存在,请在文件名后添加(1)、(2)这样的后缀"

OpenClaw立即给出了改进版本:

def rename_images():
    # ...原有代码...
    for file in files:
        if file.lower().endswith(".jpg"):
            new_name = f"{date_str}_{counter}.jpg"
            dst = os.path.join(root, new_name)
            # 处理文件名冲突
            suffix = 1
            while os.path.exists(dst):
                new_name = f"{date_str}_{counter}({suffix}).jpg"
                dst = os.path.join(root, new_name)
                suffix += 1
            # ...后续代码...

4. 进阶开发技巧

4.1 添加命令行参数

为了让工具更实用,我要求添加参数支持:

"请修改脚本,使其可以通过命令行参数指定:

  1. 要处理的文件扩展名(默认为.jpg)
  2. 是否递归扫描子目录(默认为是)"

生成的代码使用了argparse模块:

import argparse

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("-e", "--ext", default=".jpg", help="文件扩展名")
    parser.add_argument("-r", "--recursive", action="store_true", help="是否递归扫描")
    args = parser.parse_args()
    
    if args.recursive:
        # 递归处理逻辑
    else:
        # 仅处理当前目录

4.2 打包成可执行文件

为了让同事也能使用这个工具,我询问:"如何将这个Python脚本打包成macOS可执行文件?"

OpenClaw给出了使用PyInstaller的方案:

pip install pyinstaller
pyinstaller --onefile rename_images.py

还贴心地提醒我:"如果脚本依赖其他资源文件,需要使用--add-data参数"

5. 实际使用效果与优化

经过一周的实际使用,这个工具帮我处理了3000多张图片。期间发现几个可以优化的点:

  1. 性能优化:处理大量文件时内存占用过高
    • 解决方案:改用生成器逐文件处理
  2. 错误处理:遇到权限问题会直接崩溃
    • 解决方案:添加try-catch块
  3. 日志记录:需要记录重命名映射关系
    • 解决方案:生成CSV格式的日志文件

每次发现问题,我都能通过自然语言描述快速获得改进方案,整个过程就像有个经验丰富的开发者在随时待命。

6. 开发模式的新思考

这种开发方式改变了我的工作流程:

  1. 原型设计阶段:用自然语言快速验证想法可行性
  2. 实现阶段:通过对话迭代完善功能细节
  3. 维护阶段:遇到问题直接描述症状获取修复方案

最大的收获是:不需要在琐碎的语法细节上浪费时间,可以专注于解决实际问题。对于日常开发中那些"小而有用"的工具,这种方式的效率至少提升了3倍。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐