diff --git a/internal/kernelmod/onnx/mod.go b/internal/kernelmod/onnx/mod.go index 6c86d8d4..68e3907f 100644 --- a/internal/kernelmod/onnx/mod.go +++ b/internal/kernelmod/onnx/mod.go @@ -40,13 +40,11 @@ func (Module) Init(ks *kernelboot.KernelState) error { 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) - } + // 日志必须报**实际解析出的**模型路径,不能回显配置值: + // core.agent.onnx_model_path 留空时内核会用**二进制内嵌**的 dep_parser.onnx + // (解到 /nlp 后加载)。此前只打配置值,于是出现 + // "initialized (model: )" —— 看着像 ONNX 没启用,实际内嵌模型一直在跑。 + log.Printf("[homed] dep parser ready (ONNX,模型: %s)", onnxParser.ModelPath()) return nil } diff --git a/internal/nlp/onnx.go b/internal/nlp/onnx.go index b776b96b..934986c7 100644 --- a/internal/nlp/onnx.go +++ b/internal/nlp/onnx.go @@ -20,10 +20,23 @@ var onnxModelFS embed.FS const maxSeqLen = 128 type ONNXParser struct { - rt *ort.DynamicAdvancedSession - vocab map[string]int64 - posVocab map[string]int64 - close sync.Once + rt *ort.DynamicAdvancedSession + vocab map[string]int64 + posVocab map[string]int64 + close sync.Once + modelPath string // 实际加载的模型路径(空 ModelPath 时为解出的内嵌模型) +} + +// ModelPath 返回**实际**加载的 ONNX 模型路径。 +// +// 为什么需要它:配置里的 core.agent.onnx_model_path 允许留空,此时用二进制内嵌 +// 的 dep_parser.onnx(解到 DataDir/nlp 后加载)。只看配置就会把「内嵌模型已启用」 +// 误报成「未配置 → 走规则引擎」—— 启动日志一度这样误导。 +func (p *ONNXParser) ModelPath() string { + if p == nil { + return "" + } + return p.modelPath } type ONNXConfig struct { @@ -75,9 +88,10 @@ func NewONNXParser(cfg ONNXConfig) (*ONNXParser, error) { } return &ONNXParser{ - rt: session, - vocab: vocab, - posVocab: posVocab, + rt: session, + vocab: vocab, + posVocab: posVocab, + modelPath: modelPath, }, nil } diff --git a/internal/nlp/onnx_stub.go b/internal/nlp/onnx_stub.go index 10c30106..39f83fcd 100644 --- a/internal/nlp/onnx_stub.go +++ b/internal/nlp/onnx_stub.go @@ -15,6 +15,9 @@ func NewONNXParser(_ ONNXConfig) (*ONNXParser, error) { return nil, fmt.Errorf("ONNX parser requires build tag 'onnxruntime' (go build -tags onnxruntime)") } +// ModelPath 在无 onnxruntime 标签时恒为空(根本没有加载模型)。 +func (p *ONNXParser) ModelPath() string { return "" } + func (p *ONNXParser) Parse(_ string) (*ParseResult, error) { return nil, fmt.Errorf("ONNX parser not available: rebuild with -tags onnxruntime") }