Laya 在 Hermes Agent 中安装与使用

📅 发布时间:2026/10/11 6:20:26
Laya 在 Hermes Agent 中安装与使用
范围记录 Laya System 1 决策模型在 Hermes Agent 中的完整落地链路——本地安装、MCP 配置、工具实测、踩坑记录以及一次聊天中如何决定是否调用 Laya的机制分析。1. 为什么是 Laya Hermes AgentLaya 是非自回归 System 1 决策引擎Apache-2.0ConvAI Innovations类型化问题choice/score/noul单次前向输出校准概率不生成文本物理上不能编造标签。适合路由、分诊、注入守卫、置信门控长文档理解与开放生成仍归 LLM。Hermes Agent 内置 MCP 客户端在 config.yaml 声明 server 后工具自动发现并注册进 agent 工具列表——Laya 的 8 个工具因此变成 Hermes 里一等公民工具和 terminal、web_search 同等地位被模型按需调用。2. 本地安装WSLCPU2.1 环境venv~/.venvs/laya/Python 3.11 torch 2.14.1cpu laya[mcp]0.3.22检查点multilingual 322MHF 缓存~/.cache/huggingface/hub/models--convaiinnovations--layapython3-mvenv ~/.venvs/laya# CPU-only torch 必须先装避免误装多 GB CUDA 版~/.venvs/laya/bin/pipinstalltorch --index-url https://download.pytorch.org/whl/cpu ~/.venvs/laya/bin/pipinstalllaya[mcp]2.2 检查点下载国内网络已踩坑验证exportHF_ENDPOINThttps://hf-mirror.comexportHF_HUB_DISABLE_XET1# 关键关掉 hf_xet 协议默认走 cas-server.xethub.hf.co镜像不支持 → 401~/.venvs/laya/bin/python-cfrom huggingface_hub import snapshot_download; snapshot_download(convaiinnovations/laya, allow_patterns[multilingual/*])坑HF_HUB_DOWNLOAD_XET0无效不是真实变量名只有HF_HUB_DISABLE_XET1生效。只按需下子文件夹allow_patterns[multilingual/*]≈647MB别整包 2.5GB。3. Hermes Agent 配置3.1 config.yamlmcp_servers:# 注意 key 是 mcp_servers不是 mcp.serverslaya:command:/home/honya/.venvs/laya/bin/laya-mcp-async# 必须用 async 包装器别用官方 laya-mcp-serverenv:LAYA_MODELS:multilingualLAYA_DEVICE:cpuHF_HUB_DISABLE_XET:1HF_HUB_OFFLINE:1connect_timeout:120验证hermes mcp test laya→ Connected ~2.8s、8/8 工具。MCP 工具只在新会话出现无热加载。3.2 关键坑为什么必须用laya-mcp-async包装器官方laya-mcp-server在server.run()前同步预加载检查点CPU 6-10s期间事件循环不转mcp 2.2 SDK 客户端initialize握手 10s 超时hermes mcp add报✗ Failed to connect:错误信息为空。laya-mcp-async包装器把预热挪到后台线程握手 0.8s 即过。判别特征裸 JSON-RPC-over-stdio 能通、SDK 客户端不通 启动阻塞握手不是服务器坏了。包装器内容见技能laya-system-one的references/mcp-wrapper.md。3.3 技能laya-system-one的分工技能不是访问通道真正调用走 MCP 工具mcp__laya__*而是说明书环境重建命令、8 个工具的参数格式、门控策略、11 条 pitfalls。模型在任务沾边 Laya 时加载它保证选对工具后用得对。4. 工具实测2026-10-01CPU测试输入中文运维告警机房3号空调外机温度传感器读数92°C持续15分钟环境温度35°C。4.1 laya_status返回 devicecpu、torch 2.14.1cpu、multilingual 已加载、router 就绪——接入健康检查入口。4.2 laya_predictnoul score问题类型结果置信度是否垃圾/误报noulP(垃圾) 0.74 → 判为真实告警0.74严重度 0-3score得分 1.06168%36%→ “轻微”0.31路由正确自动检测 92% 汉字 → multilingual checkpoint。耗时 1.28sCPU。4.3 min_confidence 门控设min_confidence0.85后两个答案都带low_confidence: true值仍返回。门控行为符合预期调用方见 flag 即升级 LLM 复核。对比laya_decide门控时直接把字段置 null不确定就不许动作的强语义。4.4 laya_decideschema 投影字段值置信度categoryenum 4 选项设备告警 (99.2%)0.96 ✅need_dispatchbooleanfalse (96.4%)0.96 ✅priorityinteger 0-300.005❌ 概率近均匀 (30/24/23/23)4.5 laya_route纯路由无 forward正确返回 multilingualreason“non-Latin script (han, 92% of letters)”。零推理成本用于解释/预判路由。4.6 能力边界结论可靠区enum 分类、noul 布尔高置信不可靠区数值/序数定级score、integer priority、choice 多选项零样本——必须min_confidence门控 低置信升级 LLM生产提精度路线自有域标注数据微调 typed-decisions 检查点 按域温度校准零样本 0.362 vs 微调 0.7665. 实测踩的参数坑已录入技能坑现象正解score 的 criteria 格式传 dict{0: 描述}报invalid_questions: criteria must be a non-empty listscore 用 list[档位0 描述, ...]choice 才用 dictlaya_route 的 questions 格式值写成字符串{q: 问题}报must be an object必须是完整问题对象{q: {type: noul, instructions: ...}}与 laya_predict 同结构MCP arguments 传参vo{...}或扁平参数名报错arguments必须是 JSON 对象{key: value}6. 八个 MCP 工具详解与选型通用前提state是要分析的上下文任意对象只用于结构化决策choice/score/noul开放问答、摘要、改写、代码、多跳推理不要用单次前向 ~33msGPU/ ~200msCPU。6.1 回答类跑一次前向laya_predict—— 最通用的手写问题入口返回完整概率分布 路由元数据。三种题型choice有限标签criteria: {标签: 描述}≤20 个选项score有序量表criteria: [档位0描述, 档位1描述, ...]必须是 listnoul校准的 P(true)可选labels: {true: 文本, false: 文本}{state:{text:【告警】机房3号空调外机92°C},questions:{is_spam:{type:noul,instructions:是否垃圾/误报},severity:{type:score,instructions:严重度,criteria:[正常,轻微,一般,严重]}}}常用可选参数min_confidence低置信标low_confidence: true值仍返回、model中文显式multilingual最稳、lang、head_max_len选项多时调大防标签糊掉。laya_decide—— 答案形状已定时用给一个 JSON Schema返回值直接投影到 schemaenum 成员 / 整数 / 布尔不用解析 answer map。schema 里只允许 enum / boolean / 带 min/max 的 integer自由字符串、数组、嵌套对象会被拒。{state:{text:【告警】...},schema:{type:object,properties:{category:{enum:[设备告警,网络安全,业务故障,其他]},need_dispatch:{type:boolean},priority:{type:integer,minimum:0,maximum:3}}}}与 predict 的关键区别min_confidence门控时 decide 把低置信字段直接置 null不确定就不许动作的强语义predict 只打 flag。需要程序化 abstain 用 decide需要看分布做二次分析用 predict。laya_shortlist—— choice 选项 20 的救星先用检查点自带 encoder 的嵌入相似度把 N 个选项收窄到 k 个默认 20不下载额外模型再走一次前向作答。返回答案 每问题的短列元数据保留标签、余弦分、k、原选项数。choice 超 20 选项必须走它77 标签零样本实测 0.425 崩塌。khead_max_len是处理大 criteria 问题的组合拳。laya_preset—— 五套内置工作流免手写问题presetstate 读取字段用途triagemessage消息分诊guardprompt注入/安全守卫moderationpost内容审核emailbody邮件处理model_routerrequest模型路由别名routerstate 只含单个字符串时会自动放进对应字段多 key 则原样透传所以要把文本放在对应字段名下。6.2 批量类laya_predict_batch—— 一批请求一次往返requests是{state, questions, model?, task?, lang?, max_len?, head_max_len?}数组每项同 predict 结构。先路由、按检查点分组、schema 相同的请求共享前向——评 100 条告警是一次 round trip 而不是 100 次。返回按输入顺序附每请求路由/device、model_counts、批量延迟。注意max_len/head_max_len是每请求的不同 budget 的请求会被拆成多个前向。laya_route_batch—— 批量只判路由零推理成本与 predict_batch 同构但不跑前向、不加载检查点每条返回{model, repo, reason}。用于付模型加载成本前先盘点 workload 的路由分布“这批消息会走几个检查点”。6.3 路由类单条版无 forwardlaya_route—— 单条路由预判不推理只返回这条 statequestions 会被路由到哪个检查点及原因。用途① 调试为什么中文没走 multilingual② 传入某次 predict 的model/task/lang可复现它的 routing 块而不付前向成本。坑questions的每个值必须是完整问题对象不能写成字符串。6.4 诊断类laya_status—— 健康检查无参数。返回实际在用设备区分配置偏好和实际加载设备、torch CUDA 可用性、已加载检查点、router 就绪状态、包版本。部署完先跑它接入异常时用它判别是配置问题还是模型没加载。6.5 选型速查表场景用哪个单条、要看概率分布laya_predict单条、答案形状已定、要 abstainlaya_decidechoice 20 选项laya_shortlist任务恰好是邮件/守卫/审核/分诊/路由laya_preset大批量同构请求laya_predict_batch先盘点路由再决定加载laya_route_batch调试路由/接入体检laya_route/laya_status7. 一次聊天中怎么决定是否调用 Laya没有自动触发器由模型agent每轮自行判断依据三层信号工具目录常驻系统提示里列着 12 个 laya 工具的延迟加载目录laya_predict、laya_decide、laya_route…每个带描述。描述写死了适用边界——“只用于结构化决策choice/score/noul开放问答、摘要、代码不要用”。任务匹配如这条告警是垃圾吗→noul→ 调不匹配“帮我总结”→ 不调技能触发用户提到 Laya 或任务沾结构化决策/分诊/告警守卫 → 按技能 tagslaya, decision-model, agent-integration加载技能拿到完整用法与避坑清单memory 经验中文 choice 多选项不可靠、数值定级要门控升级 LLM——决定调了之后怎么用带 min_confidence、低置信转 LLM 复核即路由判断本身靠读工具描述做匹配与 Hermes 选任何工具同机制技能保证用得对memory 保证策略稳。想要某类消息必过 Laya 预筛的确定行为时不靠聊天里自觉应写成 cronjob / webhook / 脚本显式调用。8. 下一步在真实告警流上跑 laya_presetguard/triage验证预设问题集的中文表现收集低置信样本评估是否需要微调 typed-decisions 检查点把 min_confidence 门控 LLM 复核写成可复用脚本cronjob 场景