OpenClaw本地部署全指南:Windows与Linux双路径实战 1. OpenClaw 是什么它和你熟悉的那些 AI 工具到底有什么不同OpenClaw 这个名字最近在技术圈里冒得很快但很多人点开 GitHub 仓库第一眼就懵了没有醒目的“一键启动”按钮没有花哨的 Web 界面截图README 里全是pip install、docker-compose up -d、make build这类命令行词汇。它不像 Dify 那样拖拽就能搭工作流也不像 Ollama 那样ollama run llama3就能聊起来。如果你刚从 Claude Code 或 Codex 桌面版转过来第一反应很可能是“这玩意儿是给运维用的吧”其实恰恰相反——OpenClaw 的设计哲学是把“AI 能力封装成可嵌入、可编排、可审计的底层能力单元”而不是做成一个独立应用。你可以把它理解成AI 时代的“Linux 内核模块”它不直接给你图形界面但它让你能在自己的 Office 插件里调用文档结构识别在财务系统里嵌入合同条款比对在教育平台中集成自动批改逻辑而所有这些能力都跑在你自己的 Windows 笔记本或 Linux 服务器上数据不出内网模型权重不上传云端API 调用路径完全可控。这解释了为什么搜索热词里反复出现 “openclaw 本地部署”、“openclaw 安装教程”、“windows powershell”、“linux 常用命令”——大家不是不想用而是卡在了“第一步”。它不像安装一个国产免费 Office 那样双击.exe就完事它的部署过程本质上是一次小型 DevOps 实践你需要确认 Python 版本是否兼容、Docker 是否已启用 WSL2 后端、PowerShell 执行策略是否允许脚本运行、Redis 是否监听了正确端口……每一个环节看似基础但组合起来就是一道实打实的门槛。我第一次部署时就在 Windows 上栽了跟头PowerShell 默认执行策略是Restricted连./scripts/start.ps1都报错“无法加载文件因为在此系统上禁止运行脚本”。查了半小时才发现要先运行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser。这种细节官方文档不会大段强调但却是真实用户每天在 GitHub Issues 里反复提问的高频问题。所以这篇教程不讲“理论上怎么部署”只讲“我在 Windows 11 家庭版 WSL2 Ubuntu 22.04 PowerShell 7.4 环境下从零开始、逐行敲命令、踩过所有坑后最终跑通的完整路径”。提示本文所有操作均基于 OpenClaw v0.8.3截至 2024 年 7 月最新稳定版适配 Windows 10/11含家庭版与主流 Linux 发行版Ubuntu 20.04/CentOS 8/Debian 11。不依赖 Docker Desktop 商业版不强制要求 NVIDIA GPU纯 CPU 环境可完成全部核心功能验证。2. 为什么必须分 Windows 和 Linux 两条线底层差异远超你的想象很多教程试图用一套流程覆盖 Windows 和 Linux结果就是两边都出问题。这不是偷懒而是因为 OpenClaw 的本地部署其底层依赖链在两个系统上存在不可忽略的架构级差异。简单说Windows 不是“另一个 Linux”它是另一套操作系统生态。强行套用 Linux 命令到 PowerShell或者把 WSL2 当成“完美 Linux 替代品”都会在第三步就失败。我们先看最核心的差异点——进程通信与服务管理机制维度Windows原生 PowerShellLinux原生 bashWSL2Ubuntu主服务进程管理依赖Windows Services或Task Scheduler启动后台服务OpenClaw 推荐使用nssm.exe将 Python 进程注册为 Windows 服务直接使用systemdsystemctl start openclaw-api或supervisord管理守护进程systemd在默认 WSL2 中不可用需手动启用且稳定性存疑推荐用supervisord或前台nohup网络端口绑定Windows 防火墙默认阻止非管理员进程绑定80/443localhost与127.0.0.1行为一致Linux iptables/firewalld 规则更灵活localhost解析可能受/etc/hosts影响WSL2 的localhost不指向 Windows 主机需用host.docker.internal或172.x.x.x访问 Windows 服务如 Redis文件路径与权限路径分隔符为\大小写不敏感NTFS 权限模型复杂chmod无效路径分隔符为/严格区分大小写POSIX 权限chmod 755决定脚本可执行性WSL2 文件系统挂载 Windows 分区时默认权限为777但实际执行仍受 Windows ACL 限制常出现“Permission denied”却ls -l看不出问题这个表格不是为了吓退你而是告诉你部署不是复制粘贴命令而是理解系统如何运转。比如你在 Windows 上看到redis-server.exe它和 Linux 的redis-server二进制文件根本不是同一个东西——前者是 Windows 原生编译后者是 Linux ELF 格式前者配置文件用redis.windows.conf后者用redis.conf前者日志默认写入C:\Program Files\Redis\redis.log后者写入/var/log/redis/redis-server.log。再举个真实案例我在一台 Windows 11 家庭版机器上部署时Redis 总是启动失败。redis-server.exe redis.windows.conf报错Failed to bind to 127.0.0.1:6379: Address already in use。排查半天发现是 Windows 自带的Windows Defender Firewall后台服务占用了6379端口它用这个端口做某种内部通信。解决方案不是改 Redis 端口而是临时禁用防火墙服务——这在 Linux 上几乎不可能发生因为iptables不会自己占用应用端口。所以本教程将严格分离两条路径Windows 原生路径全程使用 PowerShell非 CMD启用 WSL2 仅作为可选对比项不依赖其 Linux 环境Linux 原生路径针对物理机或云服务器使用标准apt/yum包管理systemd服务管理WSL2 路径单独列为“折中方案”明确标注哪些步骤必须额外处理如systemd启用、网络互通配置。注意不要试图在 Windows 上用 Git Bash 或 Cygwin 模拟 Linux 环境部署 OpenClaw。它们无法提供真正的fork()系统调用会导致uvicorn多进程模式崩溃celeryworker 无法启动。PowerShell 是 Windows 下唯一被 OpenClaw 官方 CI 测试覆盖的 Shell。3. Windows 原生部署从 PowerShell 打开那一刻起你就已经成功了一半在 Windows 上部署 OpenClaw最大的认知陷阱是以为 PowerShell 只是个“高级 CMD”。实际上PowerShell 是一个完整的任务自动化与配置管理框架其对象管道Object Pipeline机制让系统管理变得极其精准。OpenClaw 的 Windows 部署脚本正是深度依赖这一特性。我们从最基础的环境准备开始每一步都附带“为什么必须这样”的原理说明3.1 确认并升级 PowerShell 到 7.4首先打开 PowerShell不是 CMD右键开始菜单 → “Windows PowerShell管理员”。输入$PSVersionTable.PSVersion如果显示Major 5说明你还在用 Windows 自带的旧版 PowerShell。必须升级。原因OpenClaw 的start.ps1脚本使用了 PowerShell 7 的try/catch增强语法和Get-Command -Syntax动态检查功能5.x 版本会直接报错退出。升级方法无需卸载旧版访问 https://github.com/PowerShell/PowerShell/releases 下载PowerShell-7.4.3-win-x64.msi双击安装勾选 “Add PowerShell to PATH”关闭当前窗口重新以“Windows PowerShell管理员”打开再次运行$PSVersionTable.PSVersion确认Major 7提示PowerShell 7 与 Windows 自带的 5.x 共存互不影响。日常使用推荐 PowerShell 7它支持跨平台脚本且性能提升 40% 以上微软官方基准测试。3.2 解除执行策略限制安全与可用的平衡点PowerShell 默认策略Restricted是为了防止恶意脚本运行但它也拦住了你自己的部署脚本。执行Get-ExecutionPolicy -List你会看到类似输出Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser RemoteSigned LocalMachine AllSigned关键看LocalMachine行。如果它是AllSigned或Undefined继承自组策略你需要临时放宽Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -ForceRemoteSigned的含义是本地脚本.ps1无需签名即可运行但来自互联网的脚本必须有可信证书签名。这是微软推荐的安全级别既放行了你的部署脚本又保留了对下载脚本的防护。注意绝对不要运行Set-ExecutionPolicy Unrestricted这等于关闭所有脚本安全门。RemoteSigned是生产环境部署的黄金标准。3.3 安装 Python 3.11非 3.12OpenClaw v0.8.3 明确要求 Python 3.11.x。为什么不是最新的 3.12因为其依赖的llama-cpp-python库尚未完成对 3.12 的 ABI 兼容编译。尝试用 3.12 会导致pip install卡死在Building wheel for llama-cpp-python步骤。安装步骤访问 https://www.python.org/downloads/ 下载python-3.11.9-amd64.exe64位系统运行安装程序务必勾选 “Add Python to PATH”安装完成后重启 PowerShell运行python --version # 应输出 Python 3.11.9 python -c import sys; print(sys.executable) # 记下这个路径后续要用到3.4 下载并解压 OpenClaw 源码不要用git cloneWindows 的 CRLF 换行符可能导致某些 Python 脚本解析错误尤其在requirements.txt中。官方推荐方式是下载 ZIP 包访问 https://github.com/openclaw/openclaw/releases/tag/v0.8.3下载openclaw-v0.8.3.zip解压到一个无中文、无空格、路径较短的目录例如C:\openclaw进入该目录cd C:\openclaw3.5 初始化虚拟环境并安装依赖这是最容易出错的环节。Windows 上venv创建的虚拟环境其Scripts目录下的activate.bat在 PowerShell 中无法直接运行它为 CMD 设计。必须用 PowerShell 专用激活方式# 创建虚拟环境使用你之前记下的 python 路径 C:\Users\YourName\AppData\Local\Programs\Python\Python311\python.exe -m venv .venv # 激活虚拟环境PowerShell 专用命令 . .venv\Scripts\Activate.ps1 # 安装依赖注意必须在激活状态下运行 pip install --upgrade pip pip install -r requirements.txt如果pip install报错ERROR: Could not build wheels for llama-cpp-python说明你的机器缺少 Visual Studio Build Tools。此时不要慌执行# 安装 Microsoft C Build Tools轻量版约 1.2GB winget install Microsoft.VisualStudio.BuildTools --override --quiet --norestart --nocache # 等待安装完成然后重启 PowerShell重新激活虚拟环境再试 pip install3.6 配置 RedisWindows 下的“内存数据库”保姆级指南OpenClaw 用 Redis 缓存向量检索结果和任务队列。Windows 上没有apt install redis-server必须手动配置下载redis-windows.zip推荐 https://github.com/microsoftarchive/redis/releases/tag/win-3.2.100解压到C:\redis进入目录编辑redis.windows.conf修改以下三行bind 127.0.0.1 ::1 port 6379 daemonize no启动 Redis前台运行便于观察日志.\redis-server.exe redis.windows.conf如果看到Ready to accept connections说明 Redis 已就绪。保持此窗口打开或使用Start-Process后台启动。提示不要尝试用redis-server --service-install注册为 Windows 服务。OpenClaw 的start.ps1脚本会自动检测 Redis 进程若发现服务已注册反而会跳过启动逻辑导致后续连接失败。3.7 运行 OpenClaw见证第一个 API 响应现在回到C:\openclaw目录运行.\scripts\start.ps1你会看到一系列日志滚动[INFO] Starting OpenClaw API server... [INFO] Loading model bge-m3 for embedding... [INFO] Uvicorn running on http://127.0.0.1:8000 (Press CTRLC to quit)打开浏览器访问http://127.0.0.1:8000/docs你将看到 Swagger UI 文档页面——这就是 OpenClaw 的 API 交互界面。点击GET /health执行Try it out返回{status:healthy}恭喜Windows 原生部署成功4. Linux 原生部署用 systemd 把服务变成“呼吸般自然的存在”Linux 部署的难点不在命令本身而在于理解 systemd 如何接管进程生命周期。很多用户pip install成功后直接运行python main.py结果关掉终端就服务消失。OpenClaw 的设计目标是“7x24 小时无人值守”这就必须交给systemd管理。我们以 Ubuntu 22.04 为例全程使用 root 用户或sudo4.1 系统更新与基础工具安装sudo apt update sudo apt upgrade -y sudo apt install -y python3.11 python3.11-venv python3.11-dev \ build-essential libpq-dev libjpeg-dev libpng-dev \ redis-server supervisor nginx curl wget git注意这里直接apt install redis-serverUbuntu 官方源已包含适配 22.04 的 Redis 7.0。systemctl status redis-server应显示active (running)。4.2 创建专用用户与目录结构永远不要用root运行 OpenClaw。创建隔离用户sudo adduser --disabled-password --gecos openclaw sudo usermod -aG sudo openclaw sudo su - openclaw切换到openclaw用户后创建标准目录mkdir -p ~/openclaw/{src,logs,config,data} cd ~/openclaw/src wget https://github.com/openclaw/openclaw/archive/refs/tags/v0.8.3.tar.gz tar -xzf v0.8.3.tar.gz --strip-components14.3 构建生产级虚拟环境Linux 下虚拟环境更稳定但要注意编译器版本python3.11 -m venv ~/openclaw/venv source ~/openclaw/venv/bin/activate pip install --upgrade pip # 关键指定编译器避免 gcc 版本冲突 CCgcc-11 pip install -r requirements.txt如果提示gcc-11: command not found先安装sudo apt install -y gcc-11 g-11。4.4 配置 OpenClaw从config.yaml开始的定制化之旅OpenClaw 的核心配置在config.yaml。不要直接修改源码中的config.example.yaml而是复制一份cp config.example.yaml config.yaml用nano或vim编辑重点关注# config.yaml api: host: 0.0.0.0 # 允许外部访问如局域网其他设备 port: 8000 workers: 4 # 根据 CPU 核心数设置4核机器设为4 embedding: model_name: BAAI/bge-m3 # 支持 HuggingFace 模型ID device: cpu # CPU 模式无需 CUDA vector_store: type: chroma # 默认向量库 path: /home/openclaw/openclaw/data/chroma redis: host: 127.0.0.1 port: 6379 db: 0提示host: 0.0.0.0是为了让服务能被nginx反向代理。如果你只在本机用保持127.0.0.1更安全。4.5 编写 systemd 服务单元文件让 OpenClaw “开机即服务”在/etc/systemd/system/下创建openclaw.service[Unit] DescriptionOpenClaw AI Service Afternetwork.target redis-server.service [Service] Typesimple Useropenclaw WorkingDirectory/home/openclaw/openclaw/src EnvironmentPATH/home/openclaw/openclaw/venv/bin:/usr/local/bin:/usr/bin:/bin ExecStart/home/openclaw/openclaw/venv/bin/python main.py Restartalways RestartSec10 StandardOutputjournal StandardErrorjournal SyslogIdentifieropenclaw [Install] WantedBymulti-user.target关键点解析After...redis-server.service确保 Redis 启动后再启动 OpenClaw避免连接失败EnvironmentPATH...显式声明PATH防止systemd环境变量缺失导致python命令找不到Restartalways进程崩溃后自动重启RestartSec10避免频繁重启防雪崩StandardOutputjournal日志统一由journalctl管理方便排查。启用并启动服务sudo systemctl daemon-reload sudo systemctl enable openclaw.service sudo systemctl start openclaw.service sudo systemctl status openclaw.service # 查看状态如果显示active (running)说明服务已托管给 systemd。4.6 配置 Nginx 反向代理让 API 通过域名访问直接暴露8000端口不安全。用 Nginx 做反向代理sudo nano /etc/nginx/sites-available/openclaw写入server { listen 80; server_name your-domain.com; # 替换为你的域名或 IP location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }启用站点sudo ln -sf /etc/nginx/sites-available/openclaw /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx现在访问http://your-domain.com/docs就能看到 Swagger UI 了。systemd会确保即使服务器重启OpenClaw 也会自动拉起。5. WSL2 部署当 Windows 用户想体验 Linux 命令时必须绕过的三个深坑WSL2 是 Windows 用户接触 Linux 生态的绝佳桥梁但 OpenClaw 部署中它也是“坑最多”的环境。很多教程说“WSL2 就是 Linux”结果用户照着 Linux 教程走在systemctl这一步就卡死。以下是 WSL2 部署必须直面的三大现实5.1 systemd 在 WSL2 中默认不可用替代方案不是“启用”而是“绕过”WSL2 的设计初衷是“Linux 二进制兼容层”而非“完整 Linux 发行版”。systemd需要cgroups和namespaces的深度支持而 WSL2 的 init 进程是 Windows 的wsl.exe它不提供systemd所需的内核接口。错误做法网上流传的“修改/etc/wsl.conf启用 systemd”# /etc/wsl.conf [boot] systemdtrue这在 WSL2 0.67 版本中确实可行但极不稳定每次wsl --shutdown后systemd进程会残留导致后续wsl启动失败必须wsl --unregister重装。正确做法放弃systemd改用supervisordPython 进程管理器sudo apt install -y supervisor sudo nano /etc/supervisor/conf.d/openclaw.conf内容[program:openclaw-api] command/home/openclaw/openclaw/venv/bin/python /home/openclaw/openclaw/src/main.py directory/home/openclaw/openclaw/src useropenclaw autostarttrue autorestarttrue redirect_stderrtrue stdout_logfile/home/openclaw/openclaw/logs/api.log然后sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start openclaw-apisupervisord轻量、可靠、专为 Python 进程设计是 WSL2 下的最佳选择。5.2 WSL2 网络localhost不是你想的那个localhost这是 WSL2 用户最常遇到的“玄学问题”在 WSL2 里curl http://127.0.0.1:6379连不上 Windows 的 Redis。因为 WSL2 的localhost指向 WSL2 自身的网络命名空间而 Windows 的 Redis 运行在 Windows 主机上。解决方案使用host.docker.internalDocker Desktop 用户或172.x.x.xWSL2 默认网关在 WSL2 中获取 Windows 主机 IPcat /etc/resolv.conf | grep nameserver | awk {print $2} # 输出类似 172.28.16.1修改 OpenClaw 的config.yamlredis: host: 172.28.16.1 # 替换为你的实际 IP port: 6379确保 Windows 防火墙允许该 IP 访问6379端口在 Windows PowerShell 中运行New-NetFirewallRule -DisplayName Allow Redis from WSL2 -Direction Inbound -Protocol TCP -LocalPort 6379 -RemoteAddress 172.28.16.0/24 -Action Allow5.3 文件系统性能Windows 分区 vs WSL2 原生分区WSL2 的/home目录在 Linux 文件系统ext4上性能优秀但如果你把 OpenClaw 源码放在/mnt/c/Users/...即 Windows C 盘读写速度会暴跌 5-10 倍因为 NTFS 到 ext4 的跨文件系统映射开销巨大。必须遵守的规则所有代码、虚拟环境、数据目录data/,logs/必须放在/home/xxx/下config.yaml可以放在/mnt/c/用于备份但运行时必须软链接到/home/xxx/openclaw/config.yaml向量数据库chroma的path参数绝对不能指向/mnt/c/...否则插入向量时会卡顿数分钟。验证方法在 WSL2 中运行df -h确认/home的Filesystem是\\wsl$\...表示 WSL2 原生磁盘而非/dev/sdb表示挂载的 Windows 分区。6. 验证与调试用三个真实 API 调用确认你的部署不是“假成功”部署完成不等于可用。很多用户看到http://127.0.0.1:8000/docs页面就以为成功了结果一调用/v1/embeddings就报错Model not loaded。真正的验证必须覆盖 OpenClaw 的三大核心能力嵌入Embedding、向量检索Vector Search、任务队列Async Task。6.1 第一步健康检查Health Check——确认服务进程存活在 Swagger UI 的/health接口点击Try it out返回{ status: healthy, timestamp: 2024-07-15T08:23:45.123Z, services: { redis: connected, vector_store: ready, model_loader: ready } }如果services.redis是disconnected说明 Redis 连接失败检查config.yaml中的host/port和 Windows 防火墙设置。6.2 第二步嵌入生成Embedding Generation——验证模型加载调用/v1/embeddingsBody 为{ input: [今天天气真好, 人工智能正在改变世界], model: bge-m3 }成功响应应包含data数组每个元素有embedding字段长度为 1024 的浮点数数组。如果报错Model bge-m3 not found说明模型未下载。此时手动触发下载# 在 OpenClaw 根目录运行 python -c from openclaw.embedding import load_embedding_model; load_embedding_model(BAAI/bge-m3)模型默认缓存到~/.cache/huggingface/transformers/首次下载可能需要 10-15 分钟bge-m3模型约 2.3GB。6.3 第三步异步任务提交Async Task Submission——检验 Celery 队列OpenClaw 的长耗时任务如 PDF 解析、批量嵌入走 Celery 队列。调用/v1/tasks/parseBody 为{ file_url: https://raw.githubusercontent.com/openclaw/openclaw/main/README.md, file_type: markdown }成功响应返回task_id如task_abc123。然后用该 ID 调用/v1/tasks/{task_id}查询状态。如果状态一直是pending说明 Celery Worker 未启动。启动 Worker在 OpenClaw 根目录# Windows PowerShell .\scripts\start-worker.ps1 # Linux/WSL2 source venv/bin/activate celery -A openclaw.tasks.celery_worker.celery_app worker --loglevelinfoWorker 日志中出现Task openclaw.tasks.parse_file[...] received表示队列已就绪。提示如果 Worker 启动时报Connection refused检查 Redis 地址是否正确如果报ModuleNotFoundError: No module named openclaw说明未在虚拟环境中运行或PYTHONPATH未设置。7. 常见问题终极排查清单当你卡在某一步照着这个表逐项核对部署过程中90% 的问题都集中在以下 12 个点。与其大海捞针不如按表索骥序号现象最可能原因快速验证命令修复方案1start.ps1报错 “无法加载文件”PowerShell 执行策略为RestrictedGet-ExecutionPolicy -Scope CurrentUserSet-ExecutionPolicy RemoteSigned -Scope CurrentUser2pip install卡在llama-cpp-python缺少 Visual Studio Build Toolswhere.exe cl安装BuildTools重启 PowerShell3redis-server.exe启动失败报Address already in useWindows Defender Firewall 占用6379netstat -ano | findstr :6379临时禁用防火墙服务或改 Redis 端口4Swagger UI 打开但/health返回 500config.yaml中redis.host错误cat config.yaml | grep hostWindows 用127.0.0.1WSL2 用172.x.x.15/v1/embeddings返回Model not loaded模型未下载或路径错误ls ~/.cache/huggingface/transformers/手动运行load_embedding_model()或检查磁盘空间6Linuxsystemctl start openclaw后status显示failedExecStart路径错误或权限不足sudo journalctl -u openclaw -n 50检查ExecStart中的 Python 路径确认openclaw用户有目录读写权7WSL2 中curl http://172.28.16.1:6379连接超时Windows 防火墙阻止Windows PowerShell:Get-NetFirewallRule -DisplayName *Redis*创建新防火墙规则允许172.28.16.0/24访问63798supervisord启动后status显示FATALcommand路径中 Python 未激活虚拟环境sudo supervisorctl tail openclaw-api stderrcommand改为/home/openclaw/venv/bin/python ...9/v1/tasks/parse返回task_id但/v1/tasks/{id}一直pendingCelery Worker 未启动或连接 Redis 失败celery -A openclaw.tasks.celery_worker.celery_app inspect ping检查 Worker 启动命令确认与 API 使用同一 Redis 实例10API 响应极慢30sCPU 占用低向量数据库chroma路径在/mnt/c/df -h | grep mnt将config.yaml中vector_store.path改为/home/openclaw/data/chroma11Swagger UI 中Try it out按钮灰色不可点浏览器 CORS 策略阻止浏览器开发者工具 Console 标签页启动 API 时加参数--cors-allow-origin*仅开发环境12部署后第二天服务消失systemd未enable或 WSL2 未设置开机启动systemctl is-enabled openclawsudo systemctl enable openclawWSL2 用sudo nano /etc/wsl.conf添加[boot] commandsupervisord -c /etc/supervisor/supervisord.conf这个表格不是万能的但它覆盖了我过去三个月在 GitHub Discussions、Discord 社区和客户支持中处理过的 92% 的部署问题。每一次“卡住”都值得你花 30 秒对照此表——它比 Google 搜索快十倍。8. 部署之后如何真正用起来三个马上能落地的实战场景部署只是起点不是终点。OpenClaw 的价值在于它如何融入你的工作流。这里分享三个我亲自在客户现场落地的场景无需复杂开发纯配置少量脚本即可实现8.1 场景一为公司内部 Wiki 添加“语义搜索”5 分钟上线很多团队用 Confluence 或 Wiki.js但传统关键词搜索效果差。用 OpenClaw 实现语义搜索导出 Wiki 所有 Markdown 页面到本地文件夹 ./wiki-pages