mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-11-01 23:07:30 +00:00
用户质疑「编译的内核没启用 onnx」。核查结论:**ONNX 是启用的**,是我上一版 日志改错了,误导了判断。 ## 事实 - 编译:`make build` 默认 `HOMED_TAGS=onnxruntime`(Makefile 有明确注释, 产物里 `go version -m` 可验 `-tags=onnxruntime`、CGO_ENABLED=1)。 - 多模态向量空间:`provider=chineseclip dim=512` 已加载,健康快照 `onnx.enabled=true`。 - 依存句法分析器:`core.agent.onnx_model_path` 留空时走**二进制内嵌模型** (`//go:embed models/*` → 解到 `<data>/nlp/dep_parser.onnx` 后加载), 同样是 ONNX 推理,不是规则引擎。 ## 上一版错在哪 我只回显了**配置值**(空串),于是打出 `dep parser ready (内置规则引擎;未配置 ...)` —— 把「内嵌模型已启用」 说成了「降级到规则引擎」。原始日志 `initialized (model: )` 的空括号 本来就是同一个信息缺失,我把它改成了**更确定的错误结论**。 ## 修法 - `nlp.ONNXParser` 记录实际加载的 `modelPath` 并暴露 `ModelPath()` (stub 构建下恒为空,两套构建接口一致)。 - 内核启动日志改为报实际路径: `dep parser ready (ONNX,模型: /home/newqqagent/nlp/dep_parser.onnx)` 部署后实录:该行正确输出实际模型路径;`onnx.enabled=true`; 启动告警仅剩两条 CLI 型技能降级说明(已在上一个提交解释)。
52 lines
2.0 KiB
Go
52 lines
2.0 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)
|
||
// 日志必须报**实际解析出的**模型路径,不能回显配置值:
|
||
// core.agent.onnx_model_path 留空时内核会用**二进制内嵌**的 dep_parser.onnx
|
||
// (解到 <data>/nlp 后加载)。此前只打配置值,于是出现
|
||
// "initialized (model: )" —— 看着像 ONNX 没启用,实际内嵌模型一直在跑。
|
||
log.Printf("[homed] dep parser ready (ONNX,模型: %s)", onnxParser.ModelPath())
|
||
return nil
|
||
}
|
||
|
||
func init() { kernelmod.Register(Module{}) }
|