WSL2与云服务器部署Hermes Agent实战:从环境搭建到调试
2026/9/21 20:18:06 网站建设 项目流程

先交代一下背景。如果你最近在折腾本地大模型、自动化工作流,或者想把 Agent 类服务从笔记本迁到服务器上跑,那你大概率听过 Hermes Agent 这个名字。它本质上是一个能承载工具调用、多轮任务编排、模型调度的运行时框架,底层可以对接 OpenAI 兼容接口、本地 Ollama、vLLM 等推理后端,适合做个人知识库助手、定时任务代理、API 聚合节点这类场景。之前写过环境部署篇的第一部分,把原理和架构讲清楚了,这篇直接进实战,把手上的 WSL2 本地环境和一台云服务器从头到尾部署一遍,包含服务启动、状态校验、环境调试,算是把「自己从零搭一套」这条路完整走通。

这篇内容适合三种人:一是想在 Windows 上开发、但不想装双系统或完整虚拟机的同学;二是有一台云服务器、但不知道怎么把 Agent 服务正式跑起来的新手;三是看过官方 README 但被各种依赖报错劝退的实操党。我会把每一步的命令、配置、为什么这么做的逻辑都写出来,踩过的坑也会单独列一节。

1. 部署思路与方案选择

1.1 为什么本地选 WSL2 而不是双系统或虚拟机

我平时主力机是 Windows 11,最早部署 Hermes Agent 时犹豫过要不要直接装 Ubuntu 双系统。后来实测下来,WSL2 在开发调试阶段是最省事的方案,原因有三个。

第一,WSL2 不是传统的虚拟机模拟,它是基于虚拟化平台的轻量级运行时,Linux 内核直接跑在 Windows 的 Hyper-V 虚拟化层上,和 Windows 之间的文件互访、网络转发都是原生的。这意味着你可以在 VS Code 里直接连 WSL 目录写代码,也可以在 Windows 浏览器里访问 WSL 里起的服务,完全不用管什么端口映射和 IP 配置,开发体验接近原生 Linux。

第二,Hermes Agent 这类项目依赖很多 Python 包、系统库,比如pydantichttpxfastapi,在 Windows 原生环境里跑容易因为编译器和动态链接库问题翻车。但在 WSL2 里,Python 生态的兼容性问题少一大半,pip install 基本都是一次过。

第三,WSL2 删了重装成本极低。我第一遍部署时把系统搞得很乱,wsl --unregister之后一分钟就是一个干净的 Ubuntu,这在物理机上根本不敢想。所以,开发调试阶段用 WSL2,生产上线用云服务器,这是我自己固定的组合拳。

1.2 云服务器在整套方案里的定位

本地 WSL2 适合开发和验证流程,但 Agent 服务如果要在群里被调用、或者通过 API 对外提供能力,你就得有一台 7x24 小时在线的机器。云服务器在这里的角色是"常驻运行端"。

选云服务器时有几个参数需要提前想明白,别盲目上高配。Hermes Agent 空载的时候内存占用只有 300 到 500MB,但一旦加载了大模型推理进程,内存开销会飙到 8GB 以上。所以,跑轻量任务用 2 核 4G 就够,准备接本地大模型,至少得上 4 核 16G,否则 SWAP 一开,服务响应速度会难看得没法用。

带宽方面,如果只是跑 API 调用和不知道多少次回调,5Mbps 够用;如果要传模型文件、下载依赖,建议临时用按量付费把带宽拉满,部署完再降回去。我第一次买服务器时图便宜选了 1Mbps,结果拉一个 2GB 的依赖包等了一个小时,后来学聪明了,先临时升带宽再部署,效率翻了好几倍。

磁盘这块,系统盘 40GB 是底线。Hermes Agent 本体很小,但 Python 虚拟环境、模型缓存、日志文件会慢慢把空间吃光,我建议直接上 60GB 以上,免得用半年就得清一次盘。

注意:不同云厂商的"云服务器"名字不一样,有的叫 ECS,有的叫 CVM,也有的叫轻量应用服务器,本质都一样,选最便宜的活动机型即可。部署流程基本通用,区别只在控制台的按钮位置。

1.3 一键部署脚本解决的问题和仍然要手动做的事

"一键部署"这四个字很容易让人误解,以为点一下脚本就全部搞定。真实情况是,脚本解决的是 90% 的重复劳动,剩下 10% 的环境差异必须自己处理。

Hermes Agent 社区常见的一键部署脚本主要做的事情包括:更新系统包、安装 Python 环境、创建虚拟目录、拉取项目代码、安装 pip 依赖、生成默认配置文件。这些步骤如果手动操作,至少要二三十条命令,而且还容易因为网络、镜像源、系统版本差异报错。脚本把整条链路编排好,出错时也能定位到具体环节。

但脚本不会替你做的事情也很明确:不会替你配置模型 API Key,不会替你判断底层 CUDA 环境是否可用,更不会自动调整系统防火墙放行端口。这些属于"环境调试"范畴,恰恰是本章后半部分重点讲的。

2. WSL2 本地环境搭建

2.1 从零启用 WSL2 的完整步骤

如果你电脑上还没装过 WSL,第一步是打开管理员权限的 PowerShell,执行:

wsl --install

这条命令会自动开启 Windows 虚拟化功能、下载 WSL2 内核、安装默认的 Ubuntu 发行版。装完重启一次,系统会让你设置 Linux 用户名和密码。这一步国内网络有时候会卡在下载内核上,如果等了很久没反应,可以直接去微软官方文档找 WSL2 Linux 内核更新包,手动下载安装后再执行wsl --install

装完确认一下版本:

wsl --status wsl -l -v

正常情况会看到 Ubuntu 对应的 VERSION 是 2。如果显示 VERSION 是 1,说明当前还是 WSL1,需要执行:

wsl --set-version Ubuntu 2

升级过程要一两分钟,这个命令在部分旧版本 Windows 上会失败,建议先把系统更新补丁打齐再试。

进入 Ubuntu 环境后,先做一遍常规更新:

sudo apt update && sudo apt upgrade -y

然后把 Python 环境装上。Hermes Agent 目前要求 Python 3.10 以上,Ubuntu 22.04 默认自带的 Python 3.10 可以直接用,Ubuntu 24.04 自带的 3.12 也没问题。

sudo apt install -y python3-pip python3-venv git curl

这里有一个小细节,Ubuntu 上直接用 pip 装包经常会碰到externally-managed-environment报错,这是新版系统的 PEP 668 限制。解决办法统一用虚拟环境,不要往系统 Python 里塞包,后面部署的时候我会全程带着 venv 走。

2.2 让 WSL2 稳定跑服务的关键配置

WSL2 有一个让人很头疼的特点:默认情况下,当你关闭所有终端窗口后,WSL2 虚拟机过一段时间就自动关机了。这会导致你在 WSL 里启动的 Agent 服务跟着一起停止。解决办法是在 Windows 用户目录下创建一个.wslconfig文件,写入:

[wsl2] memory=12GB processors=6 swap=4GB

保存后执行wsl --shutdown重启 WSL 生效。这里memory按你电脑实际内存的一半到三分之二设置就行,别贪多,不然 Windows 自身内存吃紧时会卡到没法用。

想阻止 WSL2 自动休眠,还有一个办法就是用screentmux保持会话。我习惯在 WSL 里装一个 tmux,把 Hermes Agent 的启动命令放在 tmux 会话里跑,这样即使不小心关了终端窗口,服务也还在后台继续运行。

sudo apt install -y tmux tmux new -s hermes # 在会话内启动服务

如果要让 WSL2 里的服务能被局域网其他设备访问,默认配置还不够。WSL2 的 NAT 模式不会自动把端口暴露出去,需要 Windows 侧做一次端口转发。这个我放在调试章节详细写。

2.3 本地大模型推理环境的注意点

如果你打算在本地 WSL2 里跑 Ollama 或 vLLM 来给 Hermes Agent 提供推理能力,需要先确认两件事:物理机上有没有 NVIDIA 显卡,以及 WSL2 里能不能正常调用 CUDA。

WSL2 对 CUDA 的支持已经比较成熟,Windows 侧安装好 NVIDIA 驱动后,WSL2 里直接就能用nvidia-smi看到显卡信息,不需要在 Linux 侧单独装驱动。但 PyTorch 和相关的 CUDA 工具链还是要在 Linux 侧装一遍,比如:

pip install torch --index-url https://download.pytorch.org/whl/cu124

如果nvidia-smi在 WSL2 里执行时报错或者看不到 GPU,先回 Windows 检查显卡驱动版本,WSL 里的 CUDA 支持需要驱动版本在 470 以上。

没有独显也没关系,Hermes Agent 完全可以走 CPU 推理或纯 API 模式。如果你的场景只是写写工具调用、跑跑流程编排,本地 CPU 跑小模型完全够用,不需要在 GPU 上死磕。

3. Hermes Agent 安装与一键部署实操

3.1 项目拉取与虚拟环境创建

先把代码从仓库拉下来。为了保持目录整洁,我习惯把项目都放在~/apps下:

mkdir -p ~/apps && cd ~/apps git clone https://github.com/YourRepo/hermes-agent.git cd hermes-agent

提示:这里用到的仓库地址请以官方文档为准。社区里有一些第三方封装版本,功能有增减,不建议新手一上来就用,等理解了核心目录结构再换不迟。

接下来创建虚拟环境:

python3 -m venv venv source venv/bin/activate

激活后命令行前缀会变成(venv),这一步后续所有 pip 安装都要保持激活状态,否则包会装到系统 Python 里,版本冲突时排查起来非常难受。

安装项目依赖:

pip install --upgrade pip pip install -r requirements.txt

国内网络下,pip 下载大文件(比如torchtransformers)很慢,建议先换国内镜像源:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

实测换源之后,依赖安装速度能提升五倍以上。但要注意,直接把全局源改成清华对大部分场景没问题,个别包可能镜像同步不及时,遇到安装失败时先试单个pip install 包名 -i https://pypi.org/simple

3.2 一键部署脚本的常见形态与核心逻辑

现在很多项目会把部署逻辑封装成一个deploy.shsetup.py。Hermes Agent 社区版本常见的脚本结构大致是:

#!/bin/bash set -e echo ">>> 检查 Python 版本..." python3 --version echo ">>> 创建虚拟环境..." python3 -m venv venv source venv/bin/activate echo ">>> 安装依赖..." pip install -r requirements.txt echo ">>> 复制默认配置..." if [ ! -f .env ]; then cp .env.example .env fi echo ">>> 部署完成,请编辑 .env 文件配置模型参数"

这个脚本的逻辑很直白,就是"先检查前置条件,再搭建环境,最后生成配置"。实际项目里可能还会加上 Docker 检测、端口占用检查、模型目录初始化等步骤,骨架都一样。

使用脚本部署:

chmod +x deploy.sh ./deploy.sh

执行过程中如果报错,脚本内部如果有set -e,遇到第一个错误就会终止。这时候不要急着改脚本,先看错误信息定位是哪一步失败了。最常见的三个报错来源是网络超时、Python 版本不匹配、pip 依赖包解析冲突,排查思路放在第五部分统一讲。

3.3 手动安装的核心命令参照

如果你更喜欢完全掌控每一步,可以不走脚本,手动安装的核心流程如下:

# 1. 系统依赖 sudo apt install -y build-essential libssl-dev libffi-dev # 2. Python 虚拟环境 cd ~/apps/hermes-agent python3 -m venv venv source venv/bin/activate # 3. 核心 Python 依赖 pip install -r requirements-base.txt # 4. 开发调试可选依赖 pip install -r requirements-dev.txt # 5. 初始化配置 cp .env.example .env

手动方式的最大好处是每一步都能控制,出问题方便定位。缺点是比较啰嗦,而且你很容易漏装某个系统库。所以我给的建议是:第一次部署用脚本跑通全流程,跑通之后删掉重来,手动执行一遍加深理解。这样既快速拿到可用环境,又能搞清楚脚本背后到底干了些啥。

4. 云服务器部署全流程

4.1 服务器选型与系统初始化

云服务器的选择在第一章已经给了参考,这里直接说部署时的实操细节。

拿到服务器后,第一件事是登录控制台,重置 root 密码,确认安全组规则。安全组是云服务商的第一道防火墙,很多"服务启动了但外部访问不了"的问题都是安全组没放行端口。Hermes Agent 默认监听 8080 端口做 API 服务,所以安全组需要放行 TCP 8080 入方向规则。

如果是 SSH 登录,建议把默认端口从 22 改掉。虽然改端口治标不治本,但能过滤掉绝大多数扫描脚本。

登录服务器:

ssh root@服务器IP

登录后创建一个普通用户,不要直接用 root 跑服务:

adduser hermes usermod -aG sudo hermes su - hermes

用普通用户跑服务的好处是,即使服务被攻破或者误操作删库,也不会直接威胁到系统根目录。这个习惯在云服务器上尤其重要,本地开发机倒是可以随意一些。

系统初始化:

sudo apt update && sudo apt upgrade -y sudo apt install -y curl git python3-pip python3-venv ufw sudo ufw allow 8080/tcp sudo ufw enable

ufw是 Ubuntu 的防火墙管理工具,这里只放行了 8080 端口。如果之后还要跑别的服务,记得把对应端口也加进去,不然防火墙会把流量拦掉。

4.2 服务器端一键部署的步骤差异

云服务器和 WSL2 本地环境的部署步骤基本一致,区别主要体现在内存和磁盘规划上。

首先,如果服务器内存小于 2GB,建议先加一个 swap 分区,避免 pip 编译依赖时内存不足直接 OOM:

sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile

然后按同样的流程拉代码、建虚拟环境、装依赖:

cd ~/apps git clone https://github.com/YourRepo/hermes-agent.git cd hermes-agent python3 -m venv venv source venv/bin/activate pip install --upgrade pip pip install -r requirements.txt

服务器上最好不要用国内镜像源吗?实测下来,国内云服务器用清华大学 PyPI 镜像速度非常快,但是在海外服务器上用国内镜像反而变慢。先跑一次pip install,如果速度还行就别换源,如果卡住了再按需修改。

4.3 使用 systemd 管理服务常驻运行

本地开发时你用 tmux 挂着服务没问题,但云服务器上更专业的做法是用 systemd 把 Hermes Agent 注册成系统服务,实现开机自启、崩溃自动重启、日志统一管理。

创建一个 service 文件:

sudo nano /etc/systemd/system/hermes-agent.service

写入:

[Unit] Description=Hermes Agent Service After=network.target [Service] User=hermes WorkingDirectory=/home/hermes/apps/hermes-agent ExecStart=/home/hermes/apps/hermes-agent/venv/bin/python -m hermes_agent.server Restart=always RestartSec=5 EnvironmentFile=/home/hermes/apps/hermes-agent/.env [Install] WantedBy=multi-user.target

保存后执行:

sudo systemctl daemon-reload sudo systemctl enable hermes-agent sudo systemctl start hermes-agent

注意ExecStart里的启动命令要根据项目实际入口调整,有的版本是python -m hermes_agent.main,有的是直接跑某个server.py。查一下项目 README 或者pyproject.toml里的 scripts 配置段,就能找到正确的模块名。

用 systemd 管理的好处不用多说,一条命令就能看状态、看日志:

sudo systemctl status hermes-agent sudo journalctl -u hermes-agent -f

这套组合拳在云服务器上非常稳妥,重启机器之后服务自动拉起,完全不用人工干预。不过要注意EnvironmentFile指向的.env文件权限,里面如果写了 API Key,建议chmod 600限制访问。

5. 服务启动、状态校验与环境调试

5.1 服务启动的三种方式与适用场景

Hermes Agent 的启动方式取决于你的部署场景,我常碰到的是这三种。

开发调试时用前台模式,日志直接打在当前终端:

source venv/bin/activate python -m hermes_agent.server --host 0.0.0.0 --port 8080

WSL2 或没有 systemd 的环境里用 tmux 后台驻留:

tmux new -s hermes python -m hermes_agent.server --host 0.0.0.0 --port 8080 # Ctrl+B 然后按 D 脱离会话

云服务器生产环境用 systemd,按 4.3 小节配置即可。

启动命令里的--host 0.0.0.0一定要带上。如果默认绑定的是127.0.0.1,那么只有本机能访问,外部请求根本到达不了服务。这个参数是我每次排查"为什么访问不了"时要检查的第一项,比防火墙更常出问题。

5.2 如何确认服务真的起来了

很多新手以为"终端没报错"就等于"服务正常"。实际上,入口是否可用需要从三个层面分别验证。

第一层是进程层面:

ps aux | grep hermes

本地部署时如果看到python -m hermes_agent.server那行,说明进程存在。但如果一秒后进程就消失,大概率是启动后报错退出,需要看日志。

第二层是端口层面:

ss -tlnp | grep 8080

输出里应该有一行LISTEN状态,IP 地址为0.0.0.0:8080。这里如果显示127.0.0.1:8080,说明服务虽然起来了,但只绑定了本机回环地址,外部无法访问。

第三层是接口层面,发一个测试请求看响应:

curl -X POST http://127.0.0.1:8080/health \ -H "Content-Type: application/json" \ -d '{}'

返回{"status":"ok"}这类 JSON 就说明服务本身没问题。接着用服务器公网 IP 测试:

curl -X POST http://服务器公网IP:8080/health \ -H "Content-Type: application/json" \ -d '{}'

这一步如果通了,说明安全组、防火墙、监听地址三层都没问题。如果本地通而公网不通,排查顺序是:先看安全组有没有放行 8080,再看系统防火墙 ufw,最后看服务监听地址。

5.3 .env 配置调试与模型接入

Hermes Agent 运行时的核心配置都集中在.env文件里。常见字段大概包括:

# 模型接入 LLM_PROVIDER=openai_compatible LLM_BASE_URL=http://127.0.0.1:11434/v1 LLM_API_KEY=ollama LLM_MODEL=qwen2.5:7b # 服务监听 HOST=0.0.0.0 PORT=8080 # 日志级别 LOG_LEVEL=info # 工具调用相关 TOOL_TIMEOUT=30

字段的含义不复杂,但有几个坑值得注意。

第一,LLM_BASE_URL不能随便填。如果你在 WSL2 里跑 Ollama 作为推理后端,Ollama 默认监听在127.0.0.1:11434,Hermes Agent 也在同一台机器的 WSL2 环境里,这个地址没问题。但如果你把 Hermes Agent 放在云服务器上、Ollama 放在本地,那LLM_BASE_URL就不能写127.0.0.1了,要写本地机器的局域网 IP,还得让 Ollama 监听非回环地址并确认防火墙放行。

第二,LLM_API_KEY即使本地 Ollama 不校验 Key,也不能留空。很多推理后端的客户端 SDK 在 Key 为空时会直接报错,随便填一个占位符就行,比如ollama

第三,改完.env后必须重启服务才生效。systemd 环境下执行sudo systemctl restart hermes-agent,tmux 环境下要把会话里的进程 Ctrl+C 终止后重新启动。有些配置项有热加载机制,但保险起见还是重启一次,不要在这个问题上浪费排查时间。

5.4 环境调试中的日志分析与性能排查

服务跑起来但表现不正常时,日志是最重要的线索。Hermes Agent 的日志默认输出到 stdout,systemd 模式下可以用journalctl -u hermes-agent -f实时追踪,WSL2 前台模式直接看终端滚动输出。

日常调试时我重点关注四类日志信息:

  • 启动阶段:出现Application startup complete,说明框架初始化完成,依赖全部加载成功
  • 调用阶段:HTTP Request: POST /v1/chat/completions "200 OK",说明一次模型调用结束,状态码正常
  • 错误阶段:Connection refusedTimeoutAuthentication failed,分别对应网络不通、后端超时、Key 无效
  • 工具执行阶段:Tool 'xxx' executed后跟返回结果,用来确认工具调用是否正确

如果日志里模型调用每次要等很久才返回,先检查网络链路。本地 Ollama 模型未加载到内存时需要冷启动,第一次调用可能要十几秒,之后就会快很多;云服务器上如果使用公网 API,每次请求的往返延迟会增加 100ms 到 200ms,这是物理限制,没法完全消除。

内存和 CPU 排查:

htop free -h

看到内存占用持续 90% 以上、且 Swap 用量不断上升,基本可以判定服务内存不足。轻量方案是调小模型并发数,在配置里找MAX_CONCURRENTWORKER_COUNT之类的参数;如果业务量确实大,直接升级服务器配置更省心。

6. 常见问题与排查技巧实录

6.1 端口映射与访问失败的排查路径

WSL2 里访问服务失败,90% 是端口转发或防火墙的问题。我踩过各类场景,整理成一张速查表:

现象可能原因解决方案
Windows 浏览器访问 localhost:8080 失败WSL2 服务未绑定 0.0.0.0启动时加--host 0.0.0.0
局域网设备访问 WSL2 服务失败WSL2 NAT 网络未做端口转发用 netsh 命令配置端口代理
公网访问云服务器失败安全组未放行端口云控制台放行 TCP 端口
公网访问云服务器失败ufw 防火墙拦截执行ufw allow 端口
云服务器本机 curl 通、外部不通服务只绑定了回环地址检查 HOST 配置是否为 0.0.0.0

WSL2 局域网端口转发的方法,在管理员 PowerShell 里执行:

netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=8080 connectaddress=127.0.0.1

这里connectaddress填 WSL2 的 IP。WSL2 的 IP 每次重启会变,你可以通过hostname -I查看。想要固定 IP,在.wslconfig里加networkingMode=mirrored可以让 WSL2 共享 Windows 的网络,这在新版 Windows 上体验好很多。

提示:Windows 防火墙会拦截 8080 端口的入站请求,如果执行 netsh 后还是不通,再手动加一条入站规则放行 TCP 8080。

6.2 pip 依赖安装失败的典型场景与对策

依赖安装失败在部署环节出现频率最高,报错五花八门,但根因基本集中在三类。

第一类是网络超时。解决方案参考前面章节,换国内镜像源,或者对单个超时包重试:

pip install --timeout 60 --retries 5 包名

第二类是 Python 版本不符。Hermes Agent 某些版本依赖pydantic2.x 或fastapi最新版,Python 3.8 可能直接编译报错。对策是强制使用支持的 Python 版本,云服务器上可以用apt install python3.10python3.12后通过update-alternatives切换默认版本。

第三类是缺少系统编译库。比如某些包需要libxml2-devlibcurl4-openssl-dev。报错信息里会明确写着缺少哪个头文件,按提示安装对应xxx-dev包即可:

sudo apt install -y libxml2-dev libcurl4-openssl-dev

如果一条报错信息里夹杂着大量编译输出,先搜索error:而不是warning:,警告信息一般不影响安装。

6.3 模型调用报错的处理思路

服务起来了,但调用 Agent 对话时返回报错,这种情况通常和模型接入配置相关。

一个常见问题:Connection error: HTTP 404。意思是请求地址不对,多半是LLM_BASE_URL路径拼接错误。OpenAI 兼容接口的路径通常是http://host:port/v1,如果你填成http://host:port,框架在拼接具体接口路径时可能多出个/v1/chat/completions或少了一段,很容易 404。最佳实践是打开浏览器访问一下LLM_BASE_URL/models,能正常返回模型列表,说明路径正确。

另一个常见报错:Authentication failed: 401。即使本地 Ollama 不需要 Key,有些兼容层也会做 Key 校验,给LLM_API_KEY填一个非空字符串即可。如果是接 OpenAI 或第三方平台,检查 Key 有没有复制完整,别带前后空格。

还有一个容易被忽视的问题:模型名称不匹配。你配置的LLM_MODEL必须是推理后端中真实存在的模型名。Ollama 中执行ollama list能看到可用的模型列表,填一个不存在的名字,调用时会直接报模型找不到。另外,模型别名和后端实际名称可能不一致,建议先用ollama pull 模型名确认能正常拉取再写进配置。

6.4 我的排查流程与避坑心得

踩的坑多了之后,我总结出一套自己的排查流程,遇到任何异常都照着走一遍。

第一步看进程:ps aux | grep hermes,确认服务在不在。不在说明启动失败了,去查日志;在就进下一步。第二步看端口:ss -tlnp | grep 8080,确认监听地址对不对。第三步看日志:journalctl -u hermes-agent -f或前台终端输出,确认有没有报错堆栈。第四步看依赖:确认.env里的模型配置项是否能被正常解析。第五步看网络:从服务所在机器上 curl 本机接口,再逐步扩展到公网访问。

这套流程帮我省掉了至少一半的无效排查时间。很多人一有问题就直接问"这是怎么回事",但大多数时候日志里已经写明了原因,只是没人去看。

关于 WSL2 我还有一个私人技巧:如果每次进入 Ubuntu 后python3版本不对,或者环境变量乱了,在~/.bashrc里把虚拟环境的激活写成一行别名:

alias onenv='source ~/apps/hermes-agent/venv/bin/activate'

以后每次进入系统,直接敲onenv就能进入项目环境,不用每次都手打那一长串路径。

我个人在实际操作中最大的体会是,环境部署这件事,最重要的是把每一步操作背后的原因想清楚,而不是背命令。命令是死的,但每次碰到的问题都可能有细微差别。你在 WSL2 和云服务器上各完整部署过一次之后,再遇到任何 Agent 框架的部署,都会觉得原理是相通的,区别只在于依赖名和启动命令不同而已。

最后再分享一个小技巧:部署完成后把整条操作链路整理成自己的部署文档,别只依赖官方 README。因为你遇到的问题和官方文档中的"标准情况"一定有差异,这个差异才是你真正的经验积累。拿 Hermes Agent 这套部署流程来说,换个环境、换台机器跑一遍,你就会发现自己能讲给别人听的东西,比照着教程敲命令时多得多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询