OpenClaw本地部署实战:中文免费版AI专利助手搭建指南

📅 2026/6/21 13:59:40
OpenClaw本地部署实战:中文免费版AI专利助手搭建指南
1. 项目概述这不是又一个“一键部署”的幻觉而是真正能跑起来的 OpenClaw AI 助手本地化实践OpenClaw AI 助手这个名字最近在技术圈和专利从业者群里频繁刷屏。它不是某个大厂刚发布的 SaaS 服务也不是需要订阅才能解锁全部功能的云平台而是一个定位清晰、目标务实的开源智能体框架——核心使命是辅助专利相关工作流从技术方案理解、权利要求拆解、对比文件检索提示到说明书撰写建议甚至初步的新颖性/创造性分析逻辑链生成。所谓“龙虾智能体”其实是社区对 OpenClaw 的戏称源于其 logo 设计与“claw”爪的视觉联想久而久之“龙虾”就成了这个工具在中文用户圈里的亲切代号。我从去年底开始跟踪它的 GitHub 仓库经历了从 v0.3 到 v0.8 的完整迭代也踩过不少坑。今天这篇教程不讲虚的不堆概念只说你打开终端、敲下命令后到底会发生什么、为什么这么发生、哪一步卡住了该看哪里、以及那些官方文档里绝不会写的“实操心法”。它面向三类人一是想把 AI 辅助真正嵌入日常专利工作的代理人或企业IPR需要稳定、可控、数据不出域二是技术背景不深但动手意愿强的法律科技爱好者希望用最小学习成本获得一个可交互的AI助手三是正在评估各类AI Agent框架的开发者想看看 OpenClaw 在本地轻量级部署场景下的真实水位。它不承诺“秒装成功”但保证每一步都有据可查、每个报错都有对应解法、每个配置项都解释清楚背后的设计意图。2. 整体设计思路与方案选型为什么放弃 Docker Compose 直接上裸机部署很多人看到“本地部署”四个字第一反应就是拉个 Docker 镜像docker-compose up -d一气呵成。OpenClaw 官方确实提供了docker-compose.yml文件但我在实际给三家律所做技术验证时发现这套方案在中文环境下的首次成功率不足40%。问题不在于代码而在于它默认依赖的底层组件组合——特别是向量数据库 Chroma 和模型运行时 Ollama——在国产硬件尤其是带NPU的笔记本和国内网络环境下存在三重隐性冲突第一Chroma 的默认 SQLite 后端在并发写入时容易触发文件锁而 OpenClaw 的技能Skill执行链天然包含多线程调用第二Ollama 拉取模型时若遇到国内镜像源同步延迟会静默失败并回退到极慢的直连模式导致整个docker-compose build卡死在Building web阶段长达数小时第三也是最关键的一点官方 Docker 镜像将所有配置硬编码进容器环境变量一旦你需要接入飞书、微信或自建知识库修改配置就必须重建镜像这对非DevOps人员来说无异于重学一门课。因此我最终放弃了“开箱即用”的幻觉选择了分层裸机部署底层用原生 Python 环境管理依赖中间层用uv比 pip 更快更安全的Python包管理器隔离虚拟环境上层用systemdLinux或launchdmacOS做进程守护。这个选择牺牲了部署速度但换来了三样东西一是配置完全透明所有.env文件、config.yaml都在你眼皮底下二是调试路径极短出错直接tail -f日志文件不用进容器再docker exec三是扩展性极强后续要加一个 PDF 解析 Skill 或对接企业内网检索系统改两行代码、重启服务即可。这就像盖房子Docker 是预制板房搭得快但改不了结构裸机部署是砖混结构前期砌墙慢但十年后你想加个阁楼、换个窗户都是动动手的事。下面所有步骤都基于这个“宁可慢一点也要稳一点、透一点”的原则展开。2.1 核心组件职责解耦谁干谁的活边界必须划清OpenClaw 不是一个单体应用而是一个由四个核心角色协同工作的智能体系统。理解它们各自的“岗位职责”和“协作接口”是避免后续配置混乱的前提。我把它们比作一家小型专利事务所的四人团队Agent Core智能体核心相当于事务所的“合伙人”。它不直接干活但负责统筹全局接收用户输入比如“帮我分析这个锂电池负极材料的权利要求1是否具备创造性”拆解任务需要查哪些IPC分类号需要调用哪个Skill需要调用哪个大模型协调资源并组装最终回复。它的代码主体在openclaw/agent/目录下启动命令是python -m openclaw.agent.main。Skill Registry技能注册中心相当于事务所的“业务部经理”。它不执行具体操作但知道事务所里每个人每个Skill擅长什么、联系方式API端点是什么、什么时候该叫谁来干活。所有外部能力——比如调用知网API查文献、调用国家知识产权局公开数据库、甚至调用你本地写的一个Excel公式计算器——都必须在这里注册。注册方式不是改代码而是编辑skills/registry.yaml文件声明技能名称、描述、输入输出格式、以及执行它的命令或HTTP地址。这是OpenClaw最强大的扩展点也是新手最容易忽略的配置项。Model Runtime模型运行时相当于事务所的“外聘专家库”。OpenClaw本身不内置大模型它只提供一个标准接口类似“专家预约系统”告诉Core“我现在需要一个能做文本推理的专家请按这个规格context_length4096, temperature0.3给我调一个”。真正的模型如 Qwen2-7B、DeepSeek-Coder-33B由 Ollama 或 vLLM 托管。这意味着你可以今天用Qwen明天换成DeepSeek只要它们都符合OpenClaw定义的OpenAI兼容API规范Agent Core完全无感。这也是为什么教程里要单独花大篇幅讲Ollama的配置——它不是OpenClaw的一部分但却是OpenClaw能“活”起来的氧气。Vector Store向量数据库相当于事务所的“案例档案室”。它不参与决策但负责存储和快速检索所有历史案例、法规条文、技术术语的语义向量。当用户问“请参考《专利审查指南》第二部分第四章关于‘创造性’的规定”Agent Core 就会向这个“档案室”发起一个语义搜索请求而不是全文扫描PDF。Chroma 是官方默认选项但它的轻量级特性也意味着如果你要导入超过5000份PDF专利文件就必须手动切换到 PostgreSQL 后端否则搜索延迟会从200ms飙升到8秒以上。这个切换点我会在实操环节详细说明。这四者之间通过明确的协议通信Core 与 Skill 之间是本地进程间调用subprocess或 HTTPCore 与 Model Runtime 之间是标准的 OpenAI REST APICore 与 Vector Store 之间是 Chroma 的 Python SDK。这种清晰的分层让任何一个模块出问题都不会导致整个系统崩溃排查时也能精准定位到“是专家库没响应还是档案室查不到资料”。2.2 中文免费版的关键改造点绕过所有付费墙与网络陷阱标题里强调“中文免费版本地部署”这绝不是营销话术而是有实实在在的技术动作。官方原始版本在三个关键节点设置了“隐形门槛”模型下载源劫持openclaw/config/default.yaml中的model_provider默认指向https://api.openclaw.ai/v1这是一个需要API Key的云服务。我们将其彻底替换为本地Ollama的地址http://localhost:11434/v1并确保所有model_name字段如qwen2:7b都与你本地ollama list输出的名称严格一致。这里有个极易被忽略的细节Ollama 拉取模型时如果名称里带:latest标签它会自动更新可能导致某天早上你的AI助手突然“变笨”了。我的做法是在default.yaml里写死精确版本比如qwen2:7b-instruct-fp16并在部署脚本里加入ollama pull qwen2:7b-instruct-fp16的强制校验步骤。技能市场Skill Market的CDN阻断官方前端会尝试从https://cdn.openclaw.ai/skills/加载预置Skill的元数据。在国内这个CDN经常超时或返回403。解决方案是在skills/registry.yaml里将所有source_url字段例如- source_url: https://cdn.openclaw.ai/skills/patent_search.yaml全部注释掉并手动将这些YAML文件的内容复制到本地skills/目录下改为local_path: ./skills/patent_search.yaml。这样Skill注册就完全离线化启动速度从平均12秒降到1.3秒。前端静态资源代理OpenClaw 的Web UI是用React构建的生产环境打包后需要一个HTTP服务器如 Nginx来托管。官方Docker镜像里集成了一个精简版Nginx但它默认监听0.0.0.0:8080且没有配置Gzip压缩和缓存头导致首次加载3MB的JS包要等15秒。我的方案是用npx serve -s -l 8080 dist/dist/是你npm run build后的产物目录替代Nginx它自带智能缓存和压缩实测首屏时间压到2.1秒。更重要的是serve是纯Node.js进程配置文件只有两行出了问题ps aux | grep serve一眼就能看到不像Nginx的配置语法一个分号漏了都能让你调试半小时。这三个改造点就是“中文免费版”的全部技术内涵。它不增加新功能但移除了所有可能让你在部署中途放弃的摩擦点。接下来的所有步骤都将围绕这三点展开。3. 核心细节解析与实操要点环境准备、依赖安装与配置文件逐行解读部署的成败90%取决于环境准备阶段。这不是简单的“pip install -r requirements.txt”而是一场对系统底层细节的精密校准。以下所有命令均以 Ubuntu 22.04 LTSWSL2为基准macOS 用户请将apt替换为brewWindows 用户请确保已启用 WSL2 并使用 Ubuntu 发行版。切记不要用 Windows 原生 CMD 或 PowerShell 运行任何 Python 相关命令那只会给你带来无尽的路径错误和编码噩梦。3.1 系统级依赖为什么必须用uv而不是pipPython 生态的依赖管理是本地部署里最隐蔽的雷区。pip的依赖解析器pip resolver在处理 OpenClaw 复杂的依赖树它同时依赖langchain,chromadb,ollama,fastapi等多个顶级库时极易陷入“依赖地狱”A 库要求pydantic2.0B 库要求pydantic2.0pip会反复尝试、回退、失败最后给你一个长达200行的错误日志核心信息却藏在第187行“Cannot satisfy requirement pydantic!1.9.,!1.9.1.,!1.9.2.,!1.9.3.,!1.9.4.,!1.9.5.,!1.9.6.,!1.9.7.,!1.9.8.,!1.9.9.,!1.9.10.,!1.9.11.,!1.9.12.,!1.9.13.,!1.9.14.,!1.9.15.,!1.9.16.,!1.9.17.,!1.9.18.,!1.9.19.,!1.9.20.,!1.9.21.,!1.9.22.,!1.9.23.,!1.9.24.,!1.9.25.,!1.9.26.,!1.9.27.,!1.9.28.,!1.9.29.,!1.9.30.,!1.9.31.,!1.9.32.,!1.9.33.,!1.9.34.,!1.9.35.,!1.9.36.,!1.9.37.,!1.9.38.,!1.9.39.,!1.9.40.,!1.9.41.,!1.9.42.,!1.9.43.,!1.9.44.,!1.9.45.,!1.9.46.,!1.9.47.,!1.9.48.,!1.9.49.,!1.9.50.,!1.9.51.,!1.9.52.,!1.9.53.,!1.9.54.,!1.9.55.,!1.9.56.,!1.9.57.,!1.9.58.,!1.9.59.,!1.9.60.,!1.9.61.,!1.9.62.,!1.9.63.,!1.9.64.,!1.9.65.,!1.9.66.,!1.9.67.,!1.9.68.,!1.9.69.,!1.9.70.,!1.9.71.,!1.9.72.,!1.9.73.,!1.9.74.,!1.9.75.,!1.9.76.,!1.9.77.,!1.9.78.,!1.9.79.,!1.9.80.,!1.9.81.,!1.9.82.,!1.9.83.,!1.9.84.,!1.9.85.,!1.9.86.,!1.9.87.,!1.9.88.,!1.9.89.,!1.9.90.,!1.9.91.,!1.9.92.,!1.9.93.,!1.9.94.,!1.9.95.,!1.9.96.,!1.9.97.,!1.9.98.,!1.9.99.,!1.9.100.*,2.0。这根本不是人能读的。uvUltra-Violet是 Rust 编写的下一代 Python 包管理器它的解析器是确定性的能在毫秒级给出唯一解且安装速度是pip的10倍以上。安装uv只需一行curl -LsSf https://astral.sh/uv/install.sh | sh然后将uv加入你的 shell 配置~/.bashrc或~/.zshrcexport PATH$HOME/.local/bin:$PATH执行source ~/.bashrc生效。验证uv --version应输出uv 0.2.x。提示uv的virtualenv创建速度极快。创建 OpenClaw 专用环境的命令是uv venv .venv它比python -m venv .venv快5倍且生成的环境更干净没有pip自带的冗余包。3.2 关键配置文件config.yaml逐行深度解析OpenClaw 的灵魂不在代码里而在config.yaml这个文件中。它决定了你的AI助手是“聪明”还是“智障”。下面是我经过27次迭代后一份稳定、高效、专为中文专利场景优化的config.yaml样本并附上每一行的“为什么”# config.yaml # --- 全局设置 --- app: name: OpenClaw AI 助手 (中文免费版) version: v0.8.3 # 这个version必须与你git clone的tag严格一致否则Skill加载会失败 # --- 模型运行时设置 --- model_provider: type: ollama # 必须是ollama不能是openai或azure base_url: http://localhost:11434/v1 # Ollama的API地址注意是v1不是/v1/chat/completions model_name: qwen2:7b-instruct-fp16 # 名称必须与ollama list输出完全一致包括大小写和连字符 # 关键参数temperature控制随机性0.1适合专利这种需要严谨性的场景 # top_p控制多样性0.95是平衡点max_tokens设为2048避免长回复截断 parameters: temperature: 0.1 top_p: 0.95 max_tokens: 2048 # --- 向量数据库设置 --- vector_store: type: chroma # 目前只支持chroma # 这里是重点默认的./chroma_db路径在WSL2里可能因权限问题无法写入 # 我们强制指定一个绝对路径并确保父目录存在且可写 path: /home/your_username/openclaw_data/chroma_db # 如果你有大量专利文档1000份必须开启persist_directory # 否则每次重启都会丢失所有向量化数据 persist_directory: true # --- 技能注册中心设置 --- skill_registry: # registry.yaml是技能清单必须存在且格式正确 config_file: ./skills/registry.yaml # 这个cache_dir是性能关键它会缓存所有Skill的元数据和代码 # 如果不设每次调用Skill都要重新解析YAML延迟翻倍 cache_dir: /home/your_username/openclaw_data/skill_cache # --- Web服务设置 --- web: host: 0.0.0.0 # 绑定到所有网卡方便手机或平板访问 port: 8080 # 静态资源路径必须指向你npm build后的dist目录 static_files_dir: ./dist # 这个secret_key是CSRF防护的核心必须是32位以上的随机字符串 # 生成命令openssl rand -hex 32 secret_key: a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6a7b8c9d0e1f2 # --- 日志设置 --- logging: level: INFO # DEBUG级别会产生海量日志首次部署建议用INFO file: /home/your_username/openclaw_data/logs/openclaw.log # 必须设置rotation否则日志文件会无限增长撑爆磁盘 rotation: 10 MB这份配置里有三个“生死攸关”的细节base_url的末尾斜杠http://localhost:11434/v1和http://localhost:11434/v1/是两个完全不同的URL。OpenClaw 的 HTTP 客户端会自动拼接/chat/completions所以前者会变成http://localhost:11434/v1/chat/completions正确后者会变成http://localhost:11434/v1//chat/completions错误404。这个斜杠就是你看到Connection refused还是Response 200的分水岭。path和cache_dir的绝对路径在 WSL2 或 macOS 上相对路径./chroma_db可能被解析为 Windows 主机上的路径导致权限拒绝。必须用pwd命令确认当前工作目录然后用realpath生成绝对路径。我习惯在项目根目录下执行mkdir -p /home/$(whoami)/openclaw_data/{chroma_db,skill_cache,logs}然后在config.yaml里填入这个绝对路径。secret_key的生成这个密钥用于加密 session cookie。如果用一个固定字符串比如my_secret你的 Web 会话会被轻易伪造任何人都能冒充你调用 Skill。openssl rand -hex 32是工业级标准生成的密钥不可预测。把它写进config.yaml后立刻chmod 600 config.yaml防止其他用户读取。3.3 技能Skill的本地化改造从“能用”到“好用”OpenClaw 的 Skill是它区别于普通聊天机器人的核心。官方提供的patent_searchSkill目标是调用国家知识产权局的公开API。但现实是这个API有严格的频率限制每分钟5次且返回的XML格式极其难解析。我花了三天时间把它彻底重写为一个“本地优先”的版本核心逻辑是先查你本地的专利PDF库查不到再走网络。改造步骤如下创建本地知识库索引将你所有的.pdf专利文件比如~/patents/目录下用pymupdffitz库提取文本然后用sentence-transformers模型all-MiniLM-L6-v2向量化存入 Chroma。这个过程只需执行一次# index_patents.py from langchain_community.document_loaders import PyMuPDFLoader from langchain_community.vectorstores import Chroma from langchain_community.embeddings import HuggingFaceEmbeddings import os # 加载所有PDF docs [] for pdf in os.listdir(~/patents): if pdf.endswith(.pdf): loader PyMuPDFLoader(f~/patents/{pdf}) docs.extend(loader.load()) # 向量化并存入Chroma embeddings HuggingFaceEmbeddings(model_nameall-MiniLM-L6-v2) vectorstore Chroma.from_documents( documentsdocs, embeddingembeddings, persist_directory/home/your_username/openclaw_data/chroma_db ) vectorstore.persist()重写patent_search.yaml在skills/目录下新建patent_search_local.yaml内容如下name: patent_search_local description: 在本地专利库中搜索相关技术方案 input_schema: query: str # 用户的搜索关键词如“固态电解质” output_schema: results: list[dict] # 返回的专利列表每个元素含title, abstract, patent_id # 关键这里不再调用远程API而是执行一个本地Python脚本 command: python ./skills/scripts/search_local.py {query}编写search_local.py这个脚本是真正的“大脑”# ./skills/scripts/search_local.py import sys import json from langchain_community.vectorstores import Chroma from langchain_community.embeddings import HuggingFaceEmbeddings if len(sys.argv) 2: print(json.dumps({error: Missing query})) exit(1) query sys.argv[1] # 从本地Chroma DB加载 embeddings HuggingFaceEmbeddings(model_nameall-MiniLM-L6-v2) vectorstore Chroma( persist_directory/home/your_username/openclaw_data/chroma_db, embedding_functionembeddings ) # 语义搜索返回top 3 results vectorstore.similarity_search(query, k3) output [] for doc in results: output.append({ title: doc.metadata.get(title, 未知标题), abstract: doc.page_content[:200] ..., # 截取摘要前200字 patent_id: doc.metadata.get(source, 未知编号) }) print(json.dumps({results: output}))更新registry.yaml将原来的patent_search条目注释掉添加新的- name: patent_search_local local_path: ./skills/patent_search_local.yaml这样改造后你的AI助手在回答“请找几个关于钠离子电池正极材料的专利”时会瞬间从你本地硬盘里找出最相关的3份PDF并给出摘要。这才是真正“本地部署”的价值——数据主权在你响应速度在你隐私安全在你。4. 实操过程与核心环节实现从克隆代码到启动服务的完整流水线现在让我们把前面所有理论变成终端里一行行可执行的命令。整个过程分为五个阶段每个阶段都有明确的成功标志。请务必按顺序执行不要跳步。4.1 阶段一环境初始化与代码获取耗时约3分钟打开你的终端确保是 WSL2 的 Ubuntu 或 macOS 的 iTerm2执行以下命令# 1. 创建专属工作目录 mkdir -p ~/openclaw cd ~/openclaw # 2. 克隆官方仓库注意必须用--depth 1否则会下载所有历史浪费2GB空间 git clone --depth 1 https://github.com/openclaw-ai/openclaw.git . # 3. 创建并激活 uv 虚拟环境 uv venv .venv source .venv/bin/activate # 4. 安装核心依赖注意这里用uv不是pip uv pip install -r requirements.txt # 5. 安装前端构建依赖Node.js # Ubuntu用户 sudo apt update sudo apt install -y nodejs npm # macOS用户 brew install node # 6. 构建前端这一步会生成dist/目录是Web UI的根基 cd frontend npm ci npm run build cd ..成功标志ls -l dist/应该列出index.html,main.js,styles.css等文件总大小约3MB。如果npm run build报错大概率是 Node.js 版本太低必须 18.0执行nvm install 18 nvm use 18即可。4.2 阶段二Ollama 模型运行时部署耗时约15-30分钟取决于网速这是整个流程中最耗时但也最关键的一步。Ollama 是 OpenClaw 的“肺”没有它AI 就是具尸体。# 1. 下载并安装 Ollama官方一键脚本 curl -fsSL https://ollama.com/install.sh | sh # 2. 启动 Ollama 服务后台运行 ollama serve # 3. 拉取推荐的中文模型Qwen2-7B-InstructFP16精度平衡速度与效果 # 注意这里用的是国内镜像源比官方源快10倍 OLLAMA_BASE_URLhttps://mirrors.ollama.ai ollama pull qwen2:7b-instruct-fp16 # 4. 验证模型是否就绪 ollama list # 输出应包含qwen2:7b-instruct-fp16 latest 4.2 GB ...实操心得OLLAMA_BASE_URL环境变量是加速神器。官方源https://registry.ollama.ai在国内经常超时而https://mirrors.ollama.ai是清华TUNA镜像站维护的稳定可靠。如果你的网络环境极差可以先在浏览器里打开https://mirrors.ollama.ai/library/qwen2/blobs/sha256-xxxx手动下载qwen2:7b-instruct-fp16的manifest.json和layer.tar文件然后用ollama create命令从本地文件创建模型。但这属于“核弹级”操作99%的用户不需要。4.3 阶段三配置文件定制与技能准备耗时约5分钟这一步就是把你前面学到的config.yaml知识变成真实的文件。# 1. 复制默认配置模板 cp config/default.yaml config.yaml # 2. 用你喜欢的编辑器nano/vim/code打开 config.yaml nano config.yaml # 将上面“3.2节”里那份完整的配置逐行粘贴进去特别注意修改 # - path: /home/your_username/openclaw_data/chroma_db 把 your_username 换成你自己的 # - cache_dir: /home/your_username/openclaw_data/skill_cache # - secret_key: 用 openssl rand -hex 32 生成的新密钥 # 3. 创建技能目录结构 mkdir -p skills/{scripts,registry} # 4. 将我们前面写的两个文件放入对应位置 # 将 search_local.py 放入 skills/scripts/ # 将 patent_search_local.yaml 放入 skills/registry/ # 5. 更新主 registry.yaml echo - name: \patent_search_local\ skills/registry.yaml echo local_path: \./skills/registry.yaml\ skills/registry.yaml注意事项config.yaml的缩进是 YAML 的生命线。它用空格不用 Tab。如果缩进错了OpenClaw 启动时会报YAMLError: while parsing a block mapping错误信息里根本不会告诉你哪一行错了。我的经验是用 VS Code 打开config.yaml右下角会显示当前缩进是Spaces: 2确保所有层级都用2个空格。4.4 阶段四启动与验证耗时约1分钟所有前置工作完成后启动就是一句话# 确保你在项目根目录 ~/openclaw # 激活虚拟环境 source .venv/bin/activate # 启动 OpenClaw Agent Core python -m openclaw.agent.main成功标志终端会输出类似这样的日志INFO: Uvicorn running on http://0.0.0.0:8080 (Press CTRLC to quit) INFO: Started reloader process [12345] using statreload INFO: Started server process [12346] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Chroma database initialized at /home/your_username/openclaw_data/chroma_db INFO: Skill patent_search_local registered successfully.此时打开你的浏览器访问http://localhost:8080。你应该能看到一个简洁的聊天界面顶部写着“OpenClaw AI 助手 (中文免费版)”。输入“你好”它应该能回复“你好我是你的专利AI助手请问有什么可以帮您”。终极验证在聊天框里输入“请用中文总结一下专利CN123456789A的权利要求1”然后观察终端日志。你应该能看到Executing skill: patent_search_local with args: {query: CN123456789A}接着是Skill execution completed最后是 AI 生成的总结。如果日志里出现Error executing skill那就说明search_local.py的路径或权限有问题检查chmod x skills/scripts/search_local.py。4.5 阶段五进程守护与开机自启耗时约2分钟让服务在后台稳定运行是生产环境的标配。Linux (systemd)# 创建服务文件 sudo tee /etc/systemd/system/openclaw.service EOF [Unit] DescriptionOpenClaw AI Assistant Afternetwork.target [Service] Typesimple User$(whoami) WorkingDirectory/home/$(whoami)/openclaw ExecStart/home/$(whoami)/openclaw/.venv/bin/python -m openclaw.agent.main Restartalways RestartSec10 EnvironmentPATH/home/$(whoami)/openclaw/.venv/bin:/usr/local/bin:/usr/bin:/bin [Install] WantedBymulti-user.target EOF # 重载配置并启动 sudo systemctl daemon-reload sudo systemctl enable openclaw sudo systemctl start openclaw # 查看状态 sudo systemctl status openclawmacOS (launchd)# 创建plist文件 mkdir -p ~/Library/LaunchAgents cat ~/Library/LaunchAgents/com.openclaw.agent.plist EOF ?xml version1.0 encodingUTF-8? !DOCTYPE plist PUBLIC -//Apple//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd plist version1.0 dict keyLabel/key stringcom.openclaw.agent/string keyProgramArguments/key array string/Users/$(whoami)/openclaw/.venv/bin/python/string string-m/string stringopenclaw.agent.main/string /array keyRunAtLoad/key true/ keyKeepAlive/key true/ keyWorkingDirectory/key string/Users/$(whoami)/openclaw/string /dict /plist EOF # 加载并启动 launchctl load ~/Library