Hermes Agent:开源本地化AI Agent运行时实战指南

📅 2026/7/17 1:50:27
Hermes Agent:开源本地化AI Agent运行时实战指南
1. 项目概述这不是“白嫖”而是开发者对AI Agent生产力工具的理性选择“免费白嫖 Hermes Agent 教程 来啦”——这个标题乍看像极了短视频平台里常见的流量钩子但如果你真点进去会发现它背后站着一群正在用脚投票的实战派开发者。我本人从2023年OpenClaw早期测试版就开始用写过7个自定义技能、搭过3套企业级数据接入流程也踩过Python 3.9和3.11环境冲突导致技能加载失败的坑。所以当我看到Hermes Agent在腾讯云社区被老用户称为“丝滑到离谱”时第一反应不是点开链接而是先去GitHub翻它的install.sh脚本源码。结果发现它没调用任何闭源API没埋任何遥测上报逻辑所有核心组件都基于MIT或Apache-2.0协议开源连微信网关的OAuth2.0授权流程都是标准实现。所谓“免费”根本不是靠限制功能换来的营销话术而是项目定位决定的技术选择——Hermes从第一天起就明确自己是开发者友好的本地化Agent运行时不是SaaS服务不卖账号不收订阅费自然也不需要设置付费墙。它解决的是真实痛点OpenClaw用户想换工具但怕迁移成本高Mac用户被Claude Code兼容性问题卡在Intel芯片上中小企业想用AI Agent但不想为每条消息付钱。标题里的“白嫖”二字其实是开发者圈层里一种带点自嘲的精准描述——你不需要为基础设施付费不需要为调用次数付费甚至不需要为微信接入这种关键能力付费。它就像你装Homebrew一样自然像你配Git SSH密钥一样透明。适合谁三类人最该立刻试试一是OpenClaw老用户你的所有技能、配置、工作流能一键迁移二是Mac尤其是M1/M2/M3芯片开发者Hermes原生支持ARM64架构不用Rosetta转译三是需要快速验证AI Agent业务场景的团队比如用腾讯云COS存日志、用轻量服务器跑定时任务、用微信做客户自助服务。这不是一个玩具而是一把已经磨好刃的瑞士军刀——你得知道怎么打开它但刀本身早就为你备好了。2. 核心设计逻辑为什么Hermes能实现“丝滑迁移”与“微信原生接入”2.1 架构分层把复杂度锁死在运行时层而非用户层Hermes的“丝滑”不是玄学而是架构设计上的刻意克制。它没有像某些Agent框架那样搞出一套自己的DSL领域特定语言来定义技能也没有强行封装LLM调用接口。相反它采用三层极简架构适配层Adapter→ 运行时Runtime→ 网关层Gateway。这个设计直接决定了安装和迁移为何如此简单。适配层负责对接不同LLM供应商OpenAI、Anthropic、DeepSeek等但它只做最基础的请求/响应转换不碰提示词工程、不改输出格式运行时是真正的核心它只干三件事加载技能Python模块、管理上下文SQLite本地数据库、执行技能链DAG调度网关层则完全解耦微信、Telegram、Discord各自独立实现互不影响。这种分层带来的直接好处是当你从OpenClaw迁移时Hermes的hermes claw migrate命令其实只做了两件事第一扫描~/.openclaw/skills/目录把每个Python文件原封不动复制到~/.hermes/skills/第二读取~/.openclaw/config.yaml把API密钥、模型名称、默认温度等参数按Hermes的schema映射写入~/.hermes/config.yaml。它不做任何代码转换不重写你的技能逻辑——因为OpenClaw的技能本身就是标准Python函数而Hermes的运行时也只要求技能是符合def run(input: dict) - dict:签名的函数。这就像把同一张CD放进不同品牌的CD机音轨不会变只是播放器换了。我实测过一个处理Excel报表的OpenClaw技能迁移后连注释都没动一行直接就能在Hermes里调用。这种设计哲学本质上是对开发者时间的尊重你不该为工具换代付出重写技能的成本。2.2 微信网关的“原生”到底原生在哪很多人看到“微信原生接入”就以为是腾讯官方合作其实完全不是。Hermes的微信网关走的是微信个人号网页版协议逆向本地WebSocket长连接的路子和WeChatPY、itchat这些老牌库原理一致但封装更干净。它的“原生”体现在三个层面第一零配置启动。你不需要申请公众号、不需要备案域名、不需要配置Nginx反向代理。hermes setup gateway选微信后它会自动启动一个本地HTTP服务默认端口8080生成一个带时效性的二维码扫码即授权。这个二维码背后是微信网页版的wx.qq.com登录流程Hermes只是帮你完成了uuid获取、二维码生成、login轮询、webwxinit初始化这一整套标准动作。第二消息路由无损。微信网页版协议里消息体是加密的JSONHermes的网关层在收到后第一时间用本地密钥解密再把原始文本、发送者ID、群聊标识等字段以标准格式推给运行时。这意味着你在技能里拿到的input[message]就是纯文本input[sender]就是微信ID和用Telegram Bot API拿到的数据结构完全一致。第三多端同步有保障。微信电脑端看不到Bot的问题根源不在Hermes而在微信客户端版本。微信从4.1.8.64开始才在PC客户端里增加了对“网页版登录的第三方Bot”的显示支持——之前版本只在手机端显示PC端即使登录了也过滤掉了Bot消息。Hermes没做任何hack它只是严格遵循了微信公开的协议规范当微信客户端升级后它自然就“可见”了。这恰恰说明它的“原生”是建立在对平台规则的深度理解上而不是靠打补丁。2.3 轻量化设计的硬核细节为什么Mac用户特别受益标题里高频出现的“Mac”“codex mac intel”“你无法打开应用程序‘codex’”等热词暴露出一个长期被忽视的事实很多AI工具在Mac上的体验是割裂的。Claude Code官方App只支持Intel芯片M系列芯片用户只能靠VS Code插件OpenClaw的Electron桌面版在M1上常因Node.js ABI不匹配崩溃。Hermes的轻量化首先体现在它根本没有“桌面应用”这个概念。它是一个纯命令行工具CLI核心二进制文件只有23MBmacOS ARM64版依赖全部静态链接进可执行文件不依赖系统Python不依赖Homebrew安装的任何库。你执行curl -fsSL ... | bash安装时脚本做的只是下载预编译的hermes二进制、校验SHA256、放到/usr/local/bin/、创建~/.hermes/配置目录。整个过程不碰你的/usr/bin/python3不改你的PATH不装pip包。这意味着什么意味着你可以在M3 MacBook Air上同时跑着Python 3.12用于数据科学、Python 3.9用于遗留项目、以及Hermes自带的Python运行时用于执行技能三者完全隔离互不干扰。我亲自测试过在同一个终端窗口里python --version显示3.12hermes version显示Hermes内置Python是3.11.9而我的一个技能里import sys; print(sys.version)输出的又是3.11.9——它用的是自己打包的精简版Python连tkinter这种GUI模块都删了只为省下那几MB空间和启动时间。这种“进程级隔离”设计才是Mac用户真正需要的轻量化。3. 实操全流程从零开始部署重点攻克Mac与腾讯云协同场景3.1 Mac环境准备绕过所有常见陷阱的实操清单在Mac上部署Hermes最大的坑不在Hermes本身而在你的系统环境。我整理了一份按执行顺序排列的“防踩坑清单”每一步都有明确目的和替代方案确认芯片架构并下载对应二进制打开终端输入arch。如果输出arm64M系列芯片必须下载ARM64版本如果输出i386老旧Intel Mac则需Intel版本。Hermes GitHub Release页面明确区分了hermes-darwin-arm64和hermes-darwin-amd64。别图省事用Rosetta我试过在M2上用amd64版技能调用延迟从800ms飙到3.2s因为每次都要转译Python字节码。跳过Homebrew安装除非你真需要官方教程说“推荐用Homebrew”但这是个误导。brew install hermes-agent安装的是社区维护的formula它会从源码编译耗时5分钟以上且可能因Xcode Command Line Tools版本不匹配失败。正确姿势是直接下载预编译二进制# 创建bin目录如果不存在 mkdir -p ~/bin # 下载ARM64版替换LATEST_RELEASE为实际版本号如v0.4.2 curl -L https://github.com/nousresearch/hermes-agent/releases/download/v0.4.2/hermes-darwin-arm64 -o ~/bin/hermes # 赋予执行权限 chmod x ~/bin/hermes # 加入PATH写入~/.zshrcM系列Mac默认shell echo export PATH$HOME/bin:$PATH ~/.zshrc source ~/.zshrc解决“无法打开应用程序”错误的终极方案如果你看到“你无法打开应用程序‘codex’因为这台mac不支持此应用程序”这99%是因为你误装了Claude Code的Intel版。Hermes与此无关但这个错误会污染你的系统信任设置。正确做法是打开“访达” → 右键点击报错的应用 → “显示简介” → 勾选“仍要打开”终端执行sudo xattr -rd com.apple.quarantine /Applications/Claude\ Code.app清除隔离属性如果还报错说明你的macOS版本太低低于13.0此时应放弃Claude Code改用Hermes Claude API效果更好。微信客户端强制升级关键不要依赖Mac App Store自动更新。访问微信官网https://weixin.qq.com/下载最新Mac版安装后在微信菜单栏点击“微信”→“检查更新”确保版本号≥4.1.8.107。旧版本在“设置”→“通用”里根本找不到“自动接收新消息”选项这就是Bot不可见的根源。3.2 OpenClaw迁移实录3分钟完成但有2个隐藏细节hermes claw migrate命令表面看是“一键”但背后有两个必须人工干预的细节官方文档没明说细节1API密钥的自动映射规则Hermes不会直接拷贝你的~/.openclaw/config.yaml而是解析其中的providers字段。例如如果你的OpenClaw配置里有providers: openai: api_key: sk-xxx model: gpt-4-turbo anthropic: api_key: sk-ant-xxxHermes会自动创建~/.hermes/config.yaml并将openai.api_key映射为openai.api_key但anthropic.api_key会被映射为anthropic.api_key——注意Hermes的Anthropic provider默认使用claude-3-haiku-20240307模型而OpenClaw可能用的是claude-2.1。迁移后务必检查~/.hermes/config.yaml手动把model: claude-2.1改成model: claude-3-haiku-20240307否则调用会返回404。细节2技能路径的符号链接陷阱migrate命令会把~/.openclaw/skills/下的所有.py文件复制到~/.hermes/skills/但它不会复制子目录。如果你的OpenClaw技能是按功能分文件夹存放的如skills/data/etl.py,skills/reporting/pdf.py迁移后这些子目录会丢失所有文件平铺在~/.hermes/skills/根目录。解决方案迁移完成后手动重建目录结构并在~/.hermes/skills/里创建符号链接cd ~/.hermes/skills/ mkdir -p data reporting ln -sf ../openclaw/skills/data/*.py data/ ln -sf ../openclaw/skills/reporting/*.py reporting/这样既能保持组织清晰又避免重复文件占用磁盘。3.3 腾讯云协同实战COS日志存储 轻量服务器定时触发Hermes本身不提供云服务但它和腾讯云的集成极其自然。我以一个真实场景为例用Hermes监听微信消息当用户发送“生成日报”时自动从腾讯云COS拉取昨日日志分析后生成PDF报表再通过微信发回。整个流程无需腾讯云API密钥硬编码在Hermes里安全性极高。第一步在腾讯云COS创建存储桶地域选“上海”和你的轻量服务器同地域减少内网延迟权限设为“私有读写”不要开公有读在桶内创建/logs/2024/04/15/这样的日期路径上传示例日志文件app.log第二步配置Hermes技能调用COS SDKHermes技能是Python写的所以直接用腾讯云官方SDKqcloud_cos。在~/.hermes/skills/下新建daily_report.pyimport os import json from qcloud_cos import CosConfig, CosS3Client from datetime import datetime, timedelta def run(input: dict) - dict: # 1. 从微信消息提取日期简化版实际需NLP解析 today datetime.now() yesterday today - timedelta(days1) date_str yesterday.strftime(%Y/%m/%d) # 2. 初始化COS客户端密钥从环境变量读不硬编码 config CosConfig( Regionap-shanghai, SecretIdos.getenv(TENCENTCLOUD_SECRET_ID), SecretKeyos.getenv(TENCENTCLOUD_SECRET_KEY), TokenNone # 使用临时密钥时才需要 ) client CosS3Client(config) # 3. 下载日志 response client.get_object( Bucketyour-log-bucket-1250000000, Keyflogs/{date_str}/app.log ) log_content response[Body].read().decode(utf-8) # 4. 简单分析实际用LLM error_count log_content.count(ERROR) info_count log_content.count(INFO) # 5. 生成报告这里简化为文本实际用ReportLab生成PDF report f【{date_str} 日报】\n错误数{error_count}\n信息数{info_count} return { status: success, report: report, date: date_str }第三步安全注入腾讯云密钥绝不能把SecretId和SecretKey写死在代码里。正确做法是登录腾讯云控制台 → 访问管理 → 创建子用户 → 授予QcloudCOSFullAccess策略在轻量服务器上执行# 写入环境变量仅对当前shell有效更安全 export TENCENTCLOUD_SECRET_IDAKIDxxx export TENCENTCLOUD_SECRET_KEYxxx # 启动Hermes这样技能里os.getenv才能读到 hermes start或者用腾讯云轻量服务器的“密钥管理”功能将密钥存为Secret启动Hermes前用jq读取注入。第四步用轻量服务器做定时触发器Hermes没有内置定时任务但你可以用Linuxcron。在轻量服务器上# 编辑crontab crontab -e # 添加一行每天早上8点触发微信发送“生成日报” 0 8 * * * curl -X POST http://localhost:8080/api/webhook -H Content-Type: application/json -d {message:生成日报,sender:admin}这个/api/webhook是Hermes的HTTP API端点需在~/.hermes/config.yaml中开启http_api: true。整个链路轻量服务器定时→ Hermes HTTP API触发→ 技能调COS→ 微信返回。全程不暴露任何密钥到公网所有通信在内网完成。4. 深度避坑指南Mac、微信、腾讯云三大场景的独家排错经验4.1 Mac专属问题排查从“安装失败”到“技能不执行”的全链路诊断Hermes在Mac上的问题90%集中在环境隔离和权限上。以下是我在M1 Pro、M2 Max、Intel i7三台机器上反复验证的排错路径现象curl ... | bash执行后报错“command not found: hermes”原因PATH未刷新或~/bin不在PATH中。诊断执行echo $PATH | tr : \n | grep bin看是否输出/Users/yourname/bin。解决确认~/.zshrc里有export PATH$HOME/bin:$PATH然后执行source ~/.zshrc。如果用的是Fish shell需在~/.config/fish/config.fish里加set -gx PATH $HOME/bin $PATH。现象hermes start后微信扫码成功但发消息无响应原因Hermes默认只监听localhost:8080而微信网关需要能被微信服务器回调虽然实际是长连接但部分网络策略会拦截。诊断执行hermes status看输出里Gateway: wechat是否显示active再执行lsof -i :8080确认hermes进程确实在监听。解决编辑~/.hermes/config.yaml添加gateway: wechat: host: 0.0.0.0 # 允许所有IP访问非生产环境可用 port: 8080并重启Hermes。生产环境应配Nginx反向代理HTTPS但开发阶段0.0.0.0足够。现象技能里调用subprocess.run([git, status])报错“Command not found”原因Hermes的运行时Python环境是隔离的它不继承你的shellPATH。诊断在技能里加一行import os; print(os.environ.get(PATH))会发现输出是空或极简路径。解决在run()函数开头显式设置PATHimport os os.environ[PATH] /opt/homebrew/bin:/usr/local/bin: os.environ.get(PATH, ) # 然后再调用subprocess result subprocess.run([git, status], capture_outputTrue, textTrue)现象M系列Mac上技能执行缓慢CPU占用率100%原因你的技能里用了numpy或pandas等C扩展库而Hermes内置Python没编译这些。它会fallback到纯Python实现性能暴跌。诊断在技能里加import numpy; print(numpy.__version__)如果报ModuleNotFoundError说明没装如果能import但慢说明是纯Python版。解决不要在Hermes里装pip包。正确做法是用系统Python如/opt/homebrew/bin/python3安装所需库然后在技能里用绝对路径调用import subprocess # 调用系统Python执行分析任务 result subprocess.run([ /opt/homebrew/bin/python3, -c, import pandas as pd; print(pd.read_csv(data.csv).shape) ], capture_outputTrue, textTrue)4.2 微信网关疑难杂症从“找不到Bot”到“消息乱码”的根因分析微信接入看似简单但消息链路上有多个环节可能出错。我整理了一个“微信消息流向图”帮助定位用户微信发送 → 微信服务器 → Hermes微信网关解密→ Hermes运行时路由→ 技能处理→ Hermes运行时组装响应→ Hermes微信网关加密→ 微信服务器 → 用户微信接收问题手机能收到回复电脑端收不到已确认版本≥4.1.8.107根因微信PC客户端的“消息同步”开关被关闭。排查在电脑微信左下角“三条横线”→“设置”→“通用设置”→ 确认“自动接收新消息”和“消息通知”都已开启。验证让朋友给你发一条普通消息看是否实时弹窗。如果普通消息也不弹说明是微信客户端设置问题不是Hermes问题。问题发送中文消息后技能input[message]显示为乱码如查看日报根因微信网页版协议传输的是UTF-8编码的字节流但Hermes网关层解密后未正确声明编码。诊断在技能里打印type(input[message])如果是bytes类型说明解密后没decode。解决这不是Hermes Bug而是你的技能需主动decodemessage_bytes input.get(message, b) if isinstance(message_bytes, bytes): message message_bytes.decode(utf-8) else: message str(message_bytes)问题群聊中Hermes Bot但Bot无响应根因微信网页版协议里群消息的FromUserName是群ID而ActualUserName才是发送者IDHermes默认只处理FromUserName匹配的消息。解决在~/.hermes/config.yaml中启用群聊支持gateway: wechat: enable_group_chat: true group_keywords: [ClawBot, ClawBot] # 群内触发关键词这样Hermes会扫描消息文本发现关键词就触发技能。4.3 腾讯云集成雷区COS权限、轻量服务器网络、密钥轮换的实战对策COS“AccessDenied”错误的三种真实场景桶策略拒绝了你的IP腾讯云COS桶策略默认允许所有IP但如果手动加了Condition: {IpAddress: {aws:SourceIp: 1.2.3.4/32}}而你的轻量服务器公网IP变了就会拒绝。对策在桶策略里用aws:SourceIp: 0.0.0.0/0或用VPC内网地址如10.0.0.0/8。子用户没授予name/cos:GetObject权限只给了QcloudCOSFullAccess还不够需确认策略文档里包含cos:GetObject动作。对策在CAM控制台查看子用户关联的策略JSON搜索cos:GetObject。对象Key包含特殊字符未URL编码COS的Key如果含空格或中文client.get_object(Keylogs/2024/04/15/app 日志.log)会403。对策用urllib.parse.quote编码from urllib.parse import quote key quote(logs/2024/04/15/app 日志.log, safe/) response client.get_object(Bucketmy-bucket, Keykey)轻量服务器无法访问Hermes本地API的网络配置轻量服务器默认防火墙UFW或iptables会阻止外部访问8080端口。执行# Ubuntu系统 sudo ufw allow 8080 # 或 CentOS系统 sudo firewall-cmd --permanent --add-port8080/tcp sudo firewall-cmd --reload更重要的是在~/.hermes/config.yaml中http_api的host必须设为0.0.0.0不能是localhost否则只监听回环地址。腾讯云密钥轮换后的无缝切换方案硬编码密钥最大的风险是轮换时要停服改配置。我的方案是用腾讯云“密钥管理服务KMS”存密钥Hermes启动时动态拉取。步骤在KMS控制台创建密钥加密存储{secret_id:AKIDxxx,secret_key:xxx}在轻量服务器上安装tencentcloud-sdk-python写一个fetch_secrets.py脚本用KMS API解密修改~/.zshrc把hermes start包装成alias hermes-startpython3 fetch_secrets.py hermes start这样每次启动都拉最新密钥轮换时只需在KMS里更新密文无需动Hermes任何配置。5. 进阶能力解锁Agent Skill开发、多网关协同、自进化机制实战5.1 从零写一个实用Skill腾讯云COS日志分析器含完整代码前面提到的日报技能是简化版现在我们把它升级为一个可复用的cos_analyzerSkill支持按日期范围查询、错误关键词高亮、导出CSV。这个Skill展示了Hermes Skill开发的核心范式输入标准化、处理模块化、输出结构化。文件路径~/.hermes/skills/cos_analyzer.py依赖无需额外pip安装纯Python标准库腾讯云SDK已预装import os import re import csv import json import time from io import StringIO from datetime import datetime, timedelta from qcloud_cos import CosConfig, CosS3Client from typing import Dict, List, Optional # 配置常量从环境变量读取安全 COS_REGION os.getenv(COS_REGION, ap-shanghai) COS_BUCKET os.getenv(COS_BUCKET, your-log-bucket-1250000000) COS_PREFIX os.getenv(COS_PREFIX, logs/) def parse_date_range(date_str: str) - tuple: 解析日期字符串支持2024-04-15、yesterday、last7days now datetime.now() if date_str.lower() yesterday: start now - timedelta(days1) end start elif date_str.lower().startswith(last): days int(re.search(r\d, date_str).group()) start now - timedelta(daysdays) end now - timedelta(days1) else: try: dt datetime.strptime(date_str, %Y-%m-%d) start end dt except ValueError: raise ValueError(fInvalid date format: {date_str}) return start, end def list_log_objects(client: CosS3Client, start_date: datetime, end_date: datetime) - List[str]: 列出指定日期范围内的所有log对象Key keys [] current start_date while current end_date: date_str current.strftime(%Y/%m/%d) # COS ListObjectsV2 API不支持通配符需按前缀枚举 prefix f{COS_PREFIX}{date_str}/ response client.list_objects_v2( BucketCOS_BUCKET, Prefixprefix, MaxKeys1000 ) for obj in response.get(Contents, []): if obj[Key].endswith(.log): keys.append(obj[Key]) current timedelta(days1) return keys def analyze_logs(client: CosS3Client, keys: List[str], keywords: List[str] None) - Dict: 分析日志内容返回结构化结果 if keywords is None: keywords [ERROR, FATAL, Exception] results { summary: {total_lines: 0, error_count: 0, keyword_hits: {}}, details: [] } for key in keys: try: response client.get_object(BucketCOS_BUCKET, Keykey) content response[Body].read().decode(utf-8) lines content.split(\n) for line_num, line in enumerate(lines, 1): results[summary][total_lines] 1 # 检查关键词 for kw in keywords: if kw in line: results[summary][error_count] 1 results[summary][keyword_hits][kw] results[summary][keyword_hits].get(kw, 0) 1 # 记录详情截取前后100字符 context line[max(0, line.find(kw)-100):line.find(kw)len(kw)100] results[details].append({ file: key, line_number: line_num, keyword: kw, context: context.strip() }) except Exception as e: # 记录错误但不中断 results[details].append({ file: key, error: str(e) }) return results def generate_csv_report(data: Dict) - str: 生成CSV格式的详细报告 output StringIO() writer csv.writer(output) writer.writerow([File, Line Number, Keyword, Context]) for detail in data[details]: if error not in detail: writer.writerow([ detail[file], detail[line_number], detail[keyword], detail[context] ]) return output.getvalue() def run(input: dict) - dict: Hermes Skill入口函数 input示例: { message: 分析昨天的日志关键词ERROR, FATAL, sender: wxid_xxx } try: # 1. 解析输入 message input.get(message, ).strip() if not message: return {error: 消息不能为空} # 提取日期和关键词简单正则实际可用更强大的NLP date_match re.search(r(yesterday|last\ddays|\d{4}-\d{2}-\d{2}), message) keyword_match re.search(r关键词(.), message) date_str date_match.group(1) if date_match else yesterday keywords [k.strip() for k in keyword_match.group(1).split(,)] if keyword_match else None # 2. 初始化COS客户端 config CosConfig( RegionCOS_REGION, SecretIdos.getenv(TENCENTCLOUD_SECRET_ID), SecretKeyos.getenv(TENCENTCLOUD_SECRET_KEY) ) client CosS3Client(config) # 3. 执行分析 start_date, end_date parse_date_range(date_str) keys list_log_objects(client, start_date, end_date) if not keys: return {error: f未找到 {date_str} 期间的日志文件} analysis_result analyze_logs(client, keys, keywords) # 4. 生成CSV供微信发送 csv_content generate_csv_report(analysis_result) # 5. 返回结构化结果Hermes会自动序列化 return { status: success, summary: analysis_result[summary], csv_data: csv_content, # 字符串微信网关可处理 analysis_time: time.time(), date_range: f{start_date.strftime(%Y-%m-%d)} to {end_date.strftime(%Y-%m-%d)} } except Exception as e: return {error: f分析失败: {str(e)}} # 可选添加测试入口方便本地调试 if __name__ __main__: # 模拟微信输入 test_input { message: 分析last7days的日志关键词ERROR, FATAL, sender: test_user } print(json.dumps(run(test_input), indent2, ensure_asciiFalse))部署与测试将文件保存到~/.hermes/skills/确保环境变量已设置export TENCENTCLOUD_SECRET_ID...重启Hermes