fix(onnx): 启动日志错报「走规则引擎」—— 实际一直用内嵌 ONNX 模型

用户质疑「编译的内核没启用 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 型技能降级说明(已在上一个提交解释)。
This commit is contained in:
root
2026-10-20 09:04:11 +08:00
parent 16c9d4f69e
commit 48ca95f964
3 changed files with 29 additions and 14 deletions

View File

@ -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
// (解到 <data>/nlp 后加载)。此前只打配置值,于是出现
// "initialized (model: )" —— 看着像 ONNX 没启用,实际内嵌模型一直在跑。
log.Printf("[homed] dep parser ready (ONNX,模型: %s)", onnxParser.ModelPath())
return nil
}

View File

@ -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
}

View File

@ -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")
}