mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-11-01 23:07:30 +00:00
用户反馈启动日志里有报错。实测定位到两处,都是真实问题: ## 1. huawei_smarthome 往 stdout 打日志(8 条「收到非法 JSON 帧」) stdout 是 JSON-RPC **协议通道**,它在 plugin.go/handlers.go/service.go 等处 用了 fmt.Printf(31 处),内核每收到一行就把协议解析失败一次。 这不是内核的错,是插件写法错 —— 已在其源码(/home/newqqagent/plugindev/ huawei_smarthome)把 fmt.Printf/Println 全部改成 log.Printf(stderr), 重新 hmapdev 打包并安装。重启后非法帧 0 条、10 个工具正常注册。 ## 2. clawhubadapter 把 CLI 型 main.py 当 JSON-RPC sidecar 判定规则原为「有 main.py 就按 pysidecar 拉起」,但 ClawHub 上大量技能的 main.py 是 **CLI 入口**(`python3 main.py <tool> '<json>'`),对它发 ping 必然超时(bilibili、gaode 各等 5 秒)。旧代码只打一行错误就完事 —— 启动日志一片红,而技能既没变成工具、也没交给 skillmgr,等于半死不活。 改为:sidecar 就绪失败即降级为「CLI 型技能」,移交 skillmgr 并给出说明, 日志措辞从「错误」改为「未就绪 → 按 CLI 型处理」。两个技能现已可经 skill_info 读到文档、再用命令执行。 ## 3. 顺带修一条看着像配置泄漏的日志 `dep parser initialized (model: )` —— 空括号是「未配置 ONNX 模型、走内置规则 引擎」的正常回退。改为显式说明,避免误读成缺配置。 ## 验收(本机实例重启后实录) - 「非法 JSON 帧」0 条(此前 8 条) - dep parser 日志:`ready (内置规则引擎;未配置 core.agent.onnx_model_path)` - 剩余 3 条均为说明性:mail-bridge 出站通道兜底、两个 CLI 型技能降级移交 - 13 个内置 + 13 个自启外部插件全部 loaded,agent main started
54 lines
1.9 KiB
Go
54 lines
1.9 KiB
Go
// Package onnx 是 onnx-parser 模块:依存句法分析器(失败退回规则引擎)。
|
||
//
|
||
// ## ★ 它为什么是独立模块
|
||
//
|
||
// 它写的是**包级单例** `nlp.defaultParser`(internal/nlp/parser.go:15),
|
||
// 而该单例由**运行期**读取(`nlp.NewExtractor(nil)` 构造时快照它,
|
||
// 由蒸馏路径 `extractKeyTriples` 调用)。
|
||
//
|
||
// 这正是设计 §2.8.2 说的"签名看不到的隐藏依赖":没有参数传递,
|
||
// 而是**包级变量 + 运行期读**。
|
||
//
|
||
// ⇒ 独立成模块,让 text-memory 能**显式声明**对它的依赖
|
||
// (见 kernelmod/textmem 的说明)。这样"碰巧安全"变成"结构保证"。
|
||
package onnx
|
||
|
||
import (
|
||
"log"
|
||
"path/filepath"
|
||
|
||
"github.com/JianFeeeee/HomeAgent/internal/kernelboot"
|
||
"github.com/JianFeeeee/HomeAgent/internal/kernelmod"
|
||
"github.com/JianFeeeee/HomeAgent/internal/nlp"
|
||
)
|
||
|
||
// Module 初始化依存句法分析器。
|
||
type Module struct{}
|
||
|
||
func (Module) Name() string { return "onnx-parser" }
|
||
func (Module) Requires() []string { return []string{kernelmod.FacConfig} }
|
||
func (Module) Provides() []string { return []string{kernelmod.FacONNX} }
|
||
|
||
func (Module) Init(ks *kernelboot.KernelState) error {
|
||
modelPath := ks.CfgReg.GetString("core.agent.onnx_model_path", "")
|
||
onnxParser, err := nlp.NewONNXParser(nlp.ONNXConfig{
|
||
ModelPath: modelPath,
|
||
DataDir: filepath.Join(ks.Cfg.Daemon.DataDir, "nlp"),
|
||
})
|
||
if err != nil {
|
||
log.Printf("[homed] warn: ONNX parser init: %v, using fallback", err)
|
||
return nil
|
||
}
|
||
nlp.SetDefaultParser(onnxParser)
|
||
// 空路径 = 走内置规则引擎(不发 ONNX 推理)。旧日志打成
|
||
// "initialized (model: )" —— 空括号看着像配置泄漏了,实为正常回退。
|
||
if modelPath == "" {
|
||
log.Printf("[homed] dep parser ready (内置规则引擎;未配置 core.agent.onnx_model_path)")
|
||
} else {
|
||
log.Printf("[homed] dep parser ready (ONNX model: %s)", modelPath)
|
||
}
|
||
return nil
|
||
}
|
||
|
||
func init() { kernelmod.Register(Module{}) }
|