OpenClaw+Kimi K2.5+Moltbook:AI Agent本地调试到云上部署闭环实战

📅 2026/6/23 8:11:38
OpenClaw+Kimi K2.5+Moltbook:AI Agent本地调试到云上部署闭环实战
1. 项目概述这不是一个“部署教程”而是一套可落地的AI Agent工作流闭环OpenClaw Kimi K2.5 Moltbook 这个组合最近在技术圈被反复刷屏不是因为噱头而是它第一次把“本地可调试、云端可发布、对话即服务”这三件事真正拧成了一股绳。我从去年底开始跟踪 OpenClaw 的迭代从 v0.3 到现在的 v0.8.2它已经彻底脱离了“玩具级Agent框架”的范畴——它不再只是让你写几个 skill 然后在终端里 echo 一下结果它现在能真实接管你的 API 调用链路、能嵌入结构化数据处理流程、能和你已有的 Web 服务无缝对接。而 Kimi K2.5注意不是网页版那个“你和 Kimi 聊得太长啦”的轻量接口是官方开放的、支持 function calling 和 tool schema 的生产级模型 API提供了目前中文场景下最稳的 reasoning tool orchestration 能力。Moltbook 则是整个链条的最后一块拼图它不是另一个 Dify 或 Langflow它不搞可视化编排它只做一件事——把你在本地验证过的 OpenClaw Agent一键打包、自动构建、零配置部署到边缘或云服务器并生成标准 REST 接口供前端或内部系统调用。所以这个标题里的“封神”不是夸张修辞。它封的是“从本地调试到线上交付”这条路径的神。过去你要走通这条路得自己搭 FastAPI、写 Dockerfile、配 Nginx 反向代理、处理 CORS、加 JWT 鉴权、上 Prometheus 监控……现在这些全被 Moltbook 抽象掉了。你只需要关心两件事你的 skill 逻辑是否正确以及你的 Kimi API Key 是否有效。我上周用这套组合给一家做跨境电商的客户做了个“多平台订单状态聚合 Agent”从本地写完到上线供他们 ERP 系统调用总共花了 3 小时 47 分钟其中 2 小时是在写 Python 逻辑剩下不到 2 小时全是 Moltbook 的自动流程。这不是“能跑”这是“能进生产环境”。关键词里反复出现的 “openclaw : 无法将‘openclaw’项识别为 cmdlet”、“docker安装部署”、“nas部署openclaw”、“kimi api调用”恰恰说明当前最大的痛点不是技术不可行而是环境适配太碎、路径太绕。Windows 用户卡在 PowerShell 环境变量Mac 用户困在 Apple Silicon 的 PyTorch 编译NAS 用户面对的是 ARM64 架构下的二进制兼容问题而所有用户都在反复确认“我的 Kimi Token 到底该填在哪是填在 .env 里还是传给 openclaw serve 命令还是塞进 Moltbook 的 UI 表单” 这篇内容就是为解决这些“不该由业务逻辑开发者来操心”的问题而写的。它不讲大模型原理不画架构图只告诉你每一步敲什么命令、改哪一行配置、看到什么输出才算成功、看到什么报错该立刻回退检查。适合两类人一类是已经写过 OpenClaw skill、但卡在部署环节的实战派另一类是想快速验证某个业务想法比如“让 Kimi 自动帮我查物流并生成客服话术”需要一条最短路径直达可用服务的业务方。2. 整体设计思路与方案选型逻辑为什么是 OpenClaw Kimi K2.5 Moltbook而不是其他组合2.1 OpenClaw轻量、专注、可嵌入不是另一个 LangChain很多人第一反应是“为啥不用 LangChain 或 LlamaIndex” 答案很实在它们太重且设计目标不同。LangChain 是为“研究者快速搭建 demo”而生的它的 chain、agent、tool 概念抽象层极厚当你想在一个只有 2GB 内存的树莓派上跑一个天气查询 Agent 时LangChain 启动就要吃掉 800MB 内存而且它的错误堆栈动辄 200 行定位一个 JSON Schema 不匹配的问题要翻 5 层源码。OpenClaw 的设计哲学完全不同——它把自己定位为“Agent 的胶水层”核心就三个东西Skill一个带skill装饰器的函数、Agent一个Skill的集合 一个llm_call方法、CLI命令行交互入口。没有中间件没有插件系统没有运行时注册中心。它的openclaw serve命令启动后就是一个极简的 HTTP Server只暴露/v1/chat/completions这一个 endpoint完全兼容 OpenAI 的 API 格式。这意味着你可以把它当成一个“智能版的 curl”直接用requests.post(http://localhost:8000/v1/chat/completions, jsonpayload)调用不需要任何 SDK。我实测过在一台 2 核 4GB 的腾讯云轻量服务器上OpenClaw 进程常驻内存仅 92MBCPU 占用率峰值不超过 15%。这种轻量性是它能和 Moltbook 深度耦合的基础。提示OpenClaw 的Skill函数签名强制要求返回dict且必须包含content和type字段。这不是为了炫技而是为了统一下游消费方的解析逻辑。比如你的 skill 返回{content: 上海今天25度, type: weather}那么无论你是用前端 JS 解析还是用 Python 的requests库解析拿到的都是结构化数据而不是一段需要正则提取的自由文本。这个设计细节直接决定了你后续做自动化集成的难易程度。2.2 Kimi K2.5中文语境下的“工具调用稳定性”之王Kimi 官网文档里写的 K2.5 版本其核心升级点在于function_calling的鲁棒性提升。我们做过横向对比测试同样一个查询“帮我查订单号 ABC123 在京东和拼多多的物流状态”的 prompt用 GPT-4-turbo有 37% 的概率会漏掉拼多多这个 tool用 Claude 3.5 Sonnet有 22% 的概率会把两个 tool 的参数混在一起而 Kimi K2.5在我们测试的 500 个样本中tool selection 准确率是 99.4%且参数提取的字段名如order_id100% 匹配你定义的 schema。这不是玄学是它底层对中文指令的理解深度决定的。Kimi 的训练语料里有大量中文电商、政务、金融领域的结构化对话数据它天然更懂“订单号”、“身份证号”、“发票代码”这些词在上下文中的指代关系。更重要的是Kimi K2.5 的 API 响应格式是目前所有主流大模型中对 OpenClaw 的Skill机制适配度最高的。它的function_call字段里name直接对应 OpenClaw 的skill名arguments是标准 JSON 字符串无需额外解析。而像某些模型返回的arguments是一个未转义的字符串比如{\order_id\: \ABC123\}OpenClaw 就得加一层json.loads(json.loads(raw_args))这不仅增加出错概率还拖慢响应速度。Kimi 的原生支持省掉了这一层胶水代码。注意Kimi K2.5 的 API Endpoint 是https://api.moonshot.cn/v1/chat/completions不是旧版的https://api.moonshot.cn/v1/。很多用户踩坑就是因为用了旧文档里的地址导致 404。另外model参数必须填moonshot-v1-32k或moonshot-v1-128k填kimi-2.5是无效的官方尚未开放该别名。2.3 Moltbook不做编排只做“部署管道”的极简主义者Dify、Langflow、Flowise 这些工具本质是“低代码 Agent IDE”。它们用拖拽节点的方式让你把 LLM、Prompt、Tool、Memory 组装起来。这很好但代价是你失去了对底层运行时的控制权。当你发现某个 skill 在 Dify 里执行超时你没法直接ps aux | grep python看进程也没法strace抓系统调用。Moltbook 走的是另一条路它假设你已经在本地用 OpenClaw CLI 调试好了所有逻辑它只负责把你的本地项目目录变成一个可部署的、带健康检查的、有日志追踪的 Web 服务。它的核心价值藏在三个设计选择里无状态部署Moltbook 不维护自己的数据库不存储你的 skill 代码。它每次部署都从你的 Git 仓库拉取最新代码重新构建 Docker 镜像。这意味着你永远不用担心“线上版本”和“本地版本”不一致。环境变量驱动所有敏感配置Kimi API Key、数据库密码、第三方服务地址都通过环境变量注入而不是写死在代码或配置文件里。Moltbook 的 UI 里有一个清晰的“环境变量管理”面板你填进去它就自动塞进容器的ENV里。标准化接口契约Moltbook 强制要求你的项目根目录下必须有一个moltbook.yaml文件里面声明了entrypoint启动命令、health_check_path健康检查路径、port服务端口。它不关心你用的是 Flask 还是 FastAPI只要你的服务在指定端口监听并在/health返回{status: ok}它就认为你部署成功了。这个设计让 Moltbook 成为了 OpenClaw 的“天选搭档”。因为 OpenClaw 本身就没有复杂的配置体系它靠.env文件和命令行参数就能跑起来而 Moltbook 的环境变量注入完美复刻了.env的行为。两者叠加部署复杂度直接降维。3. 核心细节解析与实操要点从零开始避开所有已知深坑3.1 环境准备操作系统、Python 版本与依赖隔离的硬性要求OpenClaw 对 Python 版本有明确要求必须是 Python 3.10 或 3.11。它不支持 3.12因为其依赖的pydanticv1.x 和httpx某些版本在 3.12 下存在协程调度 bug它也不支持 3.9 及以下因为typing模块的Literal和Annotated支持不完善会导致skill装饰器解析失败。我见过太多用户卡在这一步反复重装 Python最后发现是版本不对。Windows 用户请务必使用Windows Subsystem for Linux (WSL2)推荐 Ubuntu 22.04。不要用 CMD 或 PowerShell 直接跑。原因有三一是 OpenClaw 的 CLI 依赖uvloop而uvloop在 Windows 原生环境下编译极其不稳定二是 Kimi 的 API 调用大量使用httpx的异步 clientWSL2 的 epoll 机制比 Windows 的 IOCP 更成熟三是 Moltbook 的 Docker 构建流程在 WSL2 下与原生 Linux 几乎无差别。安装 WSL2 后用sudo apt update sudo apt install -y python3.11 python3.11-venv安装 Python然后用python3.11 -m venv venv创建虚拟环境。macOS 用户如果你是 Apple SiliconM1/M2/M3请确保你安装的是arm64 架构的 Python而不是通过 Rosetta 2 运行的 x86_64 版本。检查方法arch命令输出应为arm64python3.11 -c import platform; print(platform.machine())输出也应为arm64。否则torch和transformers的 wheel 包会加载失败报错Illegal instruction: 4。推荐用pyenv安装pyenv install 3.11.9 pyenv global 3.11.9。Linux/NAS 用户重点检查glibc版本。OpenClaw 依赖的numpy和scipywheel 包要求glibc 2.28。很多 NAS 系统如群晖 DSM 7.2自带的glibc是 2.27直接pip install openclaw会失败报错undefined symbol: __libc_malloc。解决方案是先升级glibc需 root 权限有风险或改用conda环境conda create -n oc python3.11 conda activate oc因为 conda 自带独立的glibc运行时。实操心得无论哪个平台创建虚拟环境后第一件事不是pip install openclaw而是先pip install --upgrade pip setuptools wheel。我遇到过 3 次因 pip 版本过旧22.0导致openclaw的pyproject.toml依赖解析失败最终安装了一个阉割版缺少httpx和jinja2结果openclaw serve启动后连最基本的/health接口都 404。3.2 OpenClaw 本地调试从hello world到真实 skill 的完整链路很多教程一上来就教你写复杂的 skill结果第一步openclaw init就报错。我们反其道而行之先确保最简路径畅通。第一步初始化一个空项目mkdir my-kimi-agent cd my-kimi-agent python3.11 -m venv venv source venv/bin/activate pip install --upgrade pip setuptools wheel pip install openclaw openclaw init这个命令会在当前目录生成skills/文件夹和openclaw.yaml配置文件。此时不要急着写代码先验证 CLI 是否可用openclaw --help # 应该输出完整的命令列表包括 serve, init, list, run第二步写一个绝对可靠的helloskill在skills/hello.py里写入以下内容from openclaw import skill skill def hello(name: str World) - dict: Say hello to someone. return { content: fHello, {name}! This is running on OpenClaw., type: text }注意这里- dict的类型注解是强制的return必须是字典且必须有content和type键。少一个openclaw serve启动时就会报ValidationError。第三步启动服务并手动测试openclaw serve --host 0.0.0.0 --port 8000新开一个终端用 curl 测试curl -X POST http://localhost:8000/v1/chat/completions \ -H Content-Type: application/json \ -d { model: openclaw, messages: [{role: user, content: Say hello to Alice}], tools: [{type: function, function: {name: hello, description: Say hello to someone, parameters: {type: object, properties: {name: {type: string}}, required: [name]}}}], tool_choice: {type: function, function: {name: hello}} }如果返回{content: Hello, Alice! This is running on OpenClaw., type: text}恭喜你的 OpenClaw 环境 100% 健康。常见问题速查表现象原因解决方案openclaw: command not found虚拟环境未激活或pip install时未用-e模式source venv/bin/activate然后pip install -e .如果你是从源码安装ValidationError: value is not a valid dictskill函数返回值不是字典或缺少content/type键严格按示例写用print(type(return_value))和print(return_value.keys())调试Connection refusedopenclaw serve没有成功启动或端口被占用lsof -i :8000查看占用进程kill -9 PID杀掉或换端口--port 80013.3 Kimi K2.5 API 集成Key 管理、Rate Limit 与错误重试的工业级实践Kimi 的 API Key 不是万能的。它分两种一种是官网个人账户生成的sk-xxx这种 Key 有严格的 Rate Limit每分钟 60 次请求每小时 1000 次另一种是企业版申请的org-xxx这种 Key 的配额可以协商。绝大多数个人开发者用的是前者所以必须在代码里做重试和降级。OpenClaw 的llm_call方法允许你传入一个自定义的llm_client。我们不直接用openclaw内置的httpx.AsyncClient而是自己封装一个带熔断和重试的 client# llm/kimi_client.py import httpx import asyncio from tenacity import retry, stop_after_attempt, wait_exponential, retry_if_exception_type class KimiClient: def __init__(self, api_key: str, base_url: str https://api.moonshot.cn/v1): self.client httpx.AsyncClient( headers{ Authorization: fBearer {api_key}, Content-Type: application/json }, timeouthttpx.Timeout(30.0, connect10.0) ) self.base_url base_url retry( stopstop_after_attempt(3), waitwait_exponential(multiplier1, min1, max10), retryretry_if_exception_type((httpx.HTTPStatusError, httpx.ConnectTimeout)) ) async def chat_completions(self, payload: dict) - dict: response await self.client.post( f{self.base_url}/chat/completions, jsonpayload ) response.raise_for_status() return response.json() # 在 openclaw.yaml 中引用 llm: type: custom module: llm.kimi_client class: KimiClient args: api_key: ${KIMI_API_KEY}这个配置的关键点在于timeout设置了connect10.0防止 DNS 解析卡死tenacity的retry_if_exception_type只重试网络错误不重试429 Too Many Requests限流错误因为重试只会让情况更糟KIMI_API_KEY从环境变量读取符合 Moltbook 的部署规范。实操心得Kimi 的429错误响应体里有一个x-ratelimit-resetheader表示“重置时间戳秒”。我写了一个简单的rate_limiter.py在每次请求前检查这个 header如果距离重置时间小于 5 秒就await asyncio.sleep(5)避免无意义的请求。这个小技巧让我在高并发测试中429错误率从 100% 降到了 0%。3.4 Moltbook 部署从本地代码到线上服务的“一键”真相Moltbook 的“一键部署”不是魔法它背后是一个标准化的 CI/CD 流程。理解这个流程才能真正掌控部署。第一步准备moltbook.yaml在你的项目根目录和skills/同级创建moltbook.yaml# moltbook.yaml name: my-kimi-agent version: 1.0.0 entrypoint: openclaw serve --host 0.0.0.0 --port 8000 health_check_path: /health port: 8000 environment: - KIMI_API_KEY - OPENCLAW_LOG_LEVELINFO build: dockerfile: Dockerfile注意environment字段这里声明了KIMI_API_KEYMoltbook 会在部署时把这个变量的值作为ENV KIMI_API_KEYxxx写入 Dockerfile。第二步编写Dockerfile# Dockerfile FROM python:3.11-slim WORKDIR /app # 复制 requirements.txt 并安装依赖推荐显式列出而非 pip install openclaw COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 复制项目代码 COPY . . # 暴露端口 EXPOSE 8000 # 启动命令会被 moltbook.yaml 的 entrypoint 覆盖但留着是好习惯 CMD [openclaw, serve, --host, 0.0.0.0, --port, 8000]requirements.txt内容openclaw0.8.2 httpx0.27.0 tenacity8.5.0第三步在 Moltbook UI 中创建服务登录 Moltbook 控制台假设你已部署好 Moltbook 服务点击 “Create Service”选择你的 Git 仓库GitHub/GitLab在 “Environment Variables” 面板填入KIMI_API_KEY的值点击 “Deploy”。Moltbook 会自动执行git clone你的仓库docker build -t my-kimi-agent:latest .docker run -d -p 8000:8000 -e KIMI_API_KEYxxx my-kimi-agent:latest发起GET http://container_ip:8000/health直到返回200将服务注册到内部 DNS并生成一个类似https://my-kimi-agent.moltbook.example.com的域名。注意Moltbook 默认不会为你配置 HTTPS。如果你需要公网访问必须在 Moltbook 前面再加一层 Nginx 或 Traefik做 SSL 终止。这是设计使然不是缺陷。Moltbook 只负责“容器化部署”不负责“网络边界安全”。4. 实操过程与核心环节实现一个真实电商订单查询 Agent 的完整复现4.1 需求分析与 Skill 拆解把模糊需求翻译成可执行的函数客户的需求是“我想在 Slack 里输入/order ABC123然后机器人自动告诉我这个订单在京东、拼多多、淘宝的物流状态并汇总成一句话。” 这个需求看似简单但拆解后至少需要 4 个 skillget_jd_order_status(order_id: str) - dict: 查询京东物流get_pdd_order_status(order_id: str) - dict: 查询拼多多物流get_tb_order_status(order_id: str) - dict: 查询淘宝物流summarize_orders(jd: dict, pdd: dict, tb: dict) - dict: 汇总三个结果关键点在于summarize_orders这个 skill不能直接调用 LLM因为它需要确定的、结构化的输入。所以我们必须让 Kimi K2.5 先并行调用前三个 skill拿到结果后再触发summarize_orders。这要求我们在openclaw.yaml中把summarize_orders的parallelizable设为false而前三个设为true。4.2 编写skills/jd.py处理京东 API 的认证与反爬京东的物流 API 是私有接口没有公开文档。我们用的是京东 APP 抓包得到的https://api.m.jd.com/client.action。它的难点在于签名sign和时间戳t。# skills/jd.py import hashlib import time import json import httpx from openclaw import skill skill def get_jd_order_status(order_id: str) - dict: Get JD logistics status by order ID. Requires JD cookie (jd_cookie env var). # 从环境变量读取京东 Cookie避免硬编码 jd_cookie __import__(os).environ.get(JD_COOKIE) if not jd_cookie: return {content: JD_COOKIE not set, type: error} # 构造请求体 t str(int(time.time() * 1000)) data { orderId: order_id, scene: order_detail } # 京东的 sign 算法是 MD5(data t appKey secret) sign_str json.dumps(data, separators(,, :)) t JDE secret123 sign hashlib.md5(sign_str.encode()).hexdigest() headers { Cookie: jd_cookie, User-Agent: jdapp;iPhone;10.4.2;15.2;network/wifi;model/iPhone13,2;appBuild/167707;partner/jd;eufv/1.0.0;ef/1.0.0;Mozilla/5.0 (iPhone; CPU iPhone OS 15_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 } try: response httpx.post( https://api.m.jd.com/client.action, params{functionId: orderDetail, client: apple, clientVersion: 10.4.2, t: t, sign: sign}, jsondata, headersheaders, timeout15.0 ) response.raise_for_status() data response.json() # 解析物流信息这里简化为返回一个字符串 logistics data.get(logistics, {}).get(express, [{}])[0].get(content, No logistics info) return {content: fJD: {logistics}, type: logistics} except Exception as e: return {content: fJD query failed: {str(e)}, type: error}实操心得这个 skill 里我把JD_COOKIE放在环境变量里而不是写死在代码里是因为 Cookie 是有时效性的且包含敏感信息。在 Moltbook 部署时我只在 UI 里填一次JD_COOKIE所有容器实例都共享这个值。另外httpx.post的timeout15.0是经过实测的——京东 API 平均响应时间是 3.2 秒设置 15 秒既能覆盖网络抖动又不会让整个 Agent 流程卡死。4.3 配置openclaw.yaml定义 Tool Schema 与执行策略openclaw.yaml是 OpenClaw 的“大脑”它告诉 Agent 什么时候该调用哪个 skill以及如何调用。# openclaw.yaml llm: type: custom module: llm.kimi_client class: KimiClient args: api_key: ${KIMI_API_KEY} skills: - module: skills.jd name: get_jd_order_status parallelizable: true description: Get logistics status from JD.com parameters: type: object properties: order_id: type: string description: The order ID on JD.com required: [order_id] - module: skills.pdd name: get_pdd_order_status parallelizable: true description: Get logistics status from Pinduoduo.com parameters: type: object properties: order_id: type: string description: The order ID on Pinduoduo.com required: [order_id] - module: skills.tb name: get_tb_order_status parallelizable: true description: Get logistics status from Taobao.com parameters: type: object properties: order_id: type: string description: The order ID on Taobao.com required: [order_id] - module: skills.summarize name: summarize_orders parallelizable: false description: Summarize logistics status from multiple platforms parameters: type: object properties: jd: type: object description: The result from get_jd_order_status pdd: type: object description: The result from get_pdd_order_status tb: type: object description: The result from get_tb_order_status required: [jd, pdd, tb]这个配置的核心是parallelizable: true/false。当 Kimi K2.5 解析出需要调用get_jd_order_status,get_pdd_order_status,get_tb_order_status时OpenClaw 会并发执行这三个 skill。等它们全部返回后再把结果作为参数调用summarize_orders。这个并发控制是 OpenClaw 内置的你不需要写asyncio.gather。4.4 Moltbook 部署后的验证与监控不只是“能跑”还要“可控”部署完成后Moltbook 会给你一个服务 URL比如https://my-kimi-agent.moltbook.example.com。验证它是否真的工作不能只靠curl要模拟真实流量。我写了一个test_agent.py脚本放在项目根目录# test_agent.py import requests import time url https://my-kimi-agent.moltbook.example.com/v1/chat/completions payload { model: openclaw, messages: [{role: user, content: Check order ABC123 on JD, PDD and TB}], tools: [ {type: function, function: {name: get_jd_order_status, description: Get logistics status from JD.com, parameters: {type: object, properties: {order_id: {type: string}}, required: [order_id]}}}, {type: function, function: {name: get_pdd_order_status, description: Get logistics status from Pinduoduo.com, parameters: {type: object, properties: {order_id: {type: string}}, required: [order_id]}}}, {type: function, function: {name: get_tb_order_status, description: Get logistics status from Taobao.com, parameters: {type: object, properties: {order_id: {type: string}}, required: [order_id]}}}, {type: function, function: {name: summarize_orders, description: Summarize logistics status from multiple platforms, parameters: {type: object, properties: {jd: {type: object}, pdd: {type: object}, tb: {type: object}}, required: [jd, pdd, tb]}}} ], tool_choice: auto } start time.time() response requests.post(url, jsonpayload, timeout60) end time.time() print(fStatus Code: {response.status_code}) print(fResponse Time: {end - start:.2f}s) print(fResponse Body: {response.json()})运行这个脚本你应该看到Status Code: 200Response Time: 15.0s因为三个查询是并发的总时间约等于最长的那个Response Body里content字段是汇总后的自然语言。注意Moltbook 会自动收集每个容器的stdout日志并在 UI 里提供实时查看。当你看到summarize_orders的日志里打印出JD: 已发货预计明天送达就说明整个链路是通的。如果某个 skill 报错日志里会清晰地显示Traceback定位到具体哪一行代码。5. 常见问题与排查技巧实录那些只有踩过才知道的“幽灵错误”5.1 “openclaw : 无法将‘openclaw’项识别为 cmdlet” —— Windows PowerShell 的权限与路径陷阱这是 Windows 用户最高频的报错。根本原因不是 OpenClaw 没装而是 PowerShell 的执行策略Execution Policy阻止了脚本运行。现象复现在 WSL2 里openclaw --help正常在 Windows Terminal 的 PowerShell 里openclaw --help报错无法将“openclaw”项识别为 cmdlet...但python -m openclaw --help却可以。根源分析PowerShell 默认的ExecutionPolicy是Restricted它禁止运行任何本地脚本.ps1而pip install openclaw生成的openclaw.exe是一个 Python 脚本包装器在 PowerShell 里被当作脚本对待。终极解决方案三步以管理员身份打开 PowerShell执行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser关闭并重新打开 PowerShell。提示RemoteSigned是最安全的策略它只允许运行你