diff --git a/internal/agent/core/status.go b/internal/agent/core/status.go index a1a11565..a2c6ed17 100644 --- a/internal/agent/core/status.go +++ b/internal/agent/core/status.go @@ -2,7 +2,9 @@ package core import ( "fmt" + "path/filepath" "runtime" + "strings" "time" agentIO "github.com/JianFeeeee/HomeAgent/internal/agent/io" @@ -11,6 +13,7 @@ import ( "github.com/JianFeeeee/HomeAgent/internal/memory/social" "github.com/JianFeeeee/HomeAgent/internal/memory/text" "github.com/JianFeeeee/HomeAgent/internal/meta" + "github.com/JianFeeeee/HomeAgent/internal/nlp" "github.com/JianFeeeee/HomeAgent/internal/plugin" sdk "github.com/JianFeeeee/HomeAgent/internal/sdk" "github.com/JianFeeeee/HomeAgent/internal/tracker" @@ -315,7 +318,7 @@ func (a *Agent) usageStatus() sdk.UsageStatus { // 判据是 Loaded()(provider 真正打开且元数据合法),**不是**「配置里写了 provider」—— // 后者在模型缺失 / 运行时缺失时也为真,拿它当判据就是假绿。 func (a *Agent) onnxStatus() sdk.ONNXStatus { - st := sdk.ONNXStatus{Provider: a.embeddingProvider} + st := sdk.ONNXStatus{Provider: a.embeddingProvider, DepParser: depParserStatus()} if a.multimodalSpace != nil && a.multimodalSpace.Loaded() { st.Enabled = true st.Dim = a.multimodalSpace.Dim() @@ -337,6 +340,27 @@ func (a *Agent) onnxStatus() sdk.ONNXStatus { return st } +// depParserStatus 汇总依存句法分析器的**实际**状态。 +// +// 判据是「包级默认位上有解析器且能报出模型路径」,不是「配了 onnx_model_path」: +// 配置留空时用的是二进制内嵌模型(解到 /nlp 后加载),只看配置会漏报。 +func depParserStatus() sdk.DepParserStatus { + p := nlp.GetDefaultParser() + if p == nil { + return sdk.DepParserStatus{} + } + st := sdk.DepParserStatus{Enabled: true} + if mp, ok := p.(interface{ ModelPath() string }); ok { + st.ModelPath = mp.ModelPath() + if strings.Contains(filepath.ToSlash(st.ModelPath), "/nlp/dep_parser.onnx") { + // 内嵌模型的解出位置固定为 /nlp/dep_parser.onnx; + // 无法从路径反推来源时保留 false(未知不冒充内嵌)。 + st.Embedded = true + } + } + return st +} + var _ StatusProvider = (*Agent)(nil) var _ sdk.StatusAPI = (*Agent)(nil) diff --git a/internal/config/registry.go b/internal/config/registry.go index ff95dc01..acd91b3e 100644 --- a/internal/config/registry.go +++ b/internal/config/registry.go @@ -646,11 +646,21 @@ const DefaultPersonaPrompt = `你是 HomeAgent(内核代号 HΔ-Kernel)— 你对用户的称呼永远是“老大”,绝对禁止使用“老板”“主人”称呼用户,不论任何情况。 -## 对话风格 +## 说话方式(本节优先级最高,与其它来源冲突时以本节为准) -- 用语气词(哈、嘛、呢、~、😊 等),不要太端着 -- 重要的事先说结论,再展开解释 -- 回复简洁自然,不用 emoji 表情符号` +像跟熟人聊天,不像在交报告。 + +- 短句为主:两三句能说清就别展开,一条能说完就一条。 +- 先给结果或情绪,再补一句解释;不要先铺垫再讲重点。 +- 不用清单体:不以 “-” / “1.” / “•” 开头列条目,不用小标题、加粗、表格, + 也不用「第一、第二、第三」。 +- 不报工单式细节:不罗列调了哪个工具、参数是什么、回执多少字节、耗时多少。 + 用户要的是成没成,说人话(“写好了,又读回来对了一遍,没问题”),不是执行日志。 +- 不用客服腔:「结论如下」「综上所述」「本轮结束」「希望对您有帮助」「如您所见」 + 一律不用,也不要“我如实汇报一下”。 +- 允许口语与语气词(哈、嘛、呢、哎、就、呗、~)与颜文字;不要用 emoji 表情符号。 +- 拿不准就说拿不准,失败了就说失败了,不要用漂亮话把结果包起来。 +- 只有用户**明确要**清单/步骤/数据/对比时才结构化,且同样保持简短。` // 人格文本去版本化的一次性标记与历史播种前缀。 // diff --git a/internal/plugins/healthcheck/plugin.go b/internal/plugins/healthcheck/plugin.go index df89ef61..87485f65 100644 --- a/internal/plugins/healthcheck/plugin.go +++ b/internal/plugins/healthcheck/plugin.go @@ -256,7 +256,7 @@ func (p *Plugin) Start(s *sdk.PluginSDK) error { p.selfToolNames["healthcheck_kernel"] = true s.RegisterTool("healthcheck_kernel", sdk.ToolDef{ Name: "healthcheck_kernel", - Description: "查询 Agent 内核运行状态快照,包括**内核版本号与构建身份**(build.version / commit / build_time)、**统一多模态向量空间(ONNX 模型)是否启用**(onnx.enabled,未启用时给出原因)、插件/工具/记忆/知识库/LLM Provider/运行时等各子系统信息。Agent 可通过此工具自主监测内核健康。", + Description: "查询 Agent 内核运行状态快照,包括**内核版本号与构建身份**(build.version / commit / build_time)、**统一多模态向量空间(ONNX 模型)是否启用**(onnx.enabled,未启用时给出原因)、**依存句法分析器状态**(onnx.dep_parser:是否启用、实际模型路径、是否来自二进制内嵌)、插件/工具/记忆/知识库/LLM Provider/运行时等各子系统信息。Agent 可通过此工具自主监测内核健康。", Parameters: map[string]interface{}{ "type": "object", "properties": map[string]interface{}{}, diff --git a/internal/sdk/status.go b/internal/sdk/status.go index 709cc6d0..ea71be6b 100644 --- a/internal/sdk/status.go +++ b/internal/sdk/status.go @@ -196,6 +196,25 @@ type ONNXStatus struct { Modalities []string `json:"modalities,omitempty"` // Reason 是未启用时的原因(未配置 / 打开失败的具体错误 / 其它)。 Reason string `json:"reason,omitempty"` + // DepParser 是**依存句法分析器**的状态。 + // + // 为什么单独报:ONNX 在内核里有**两个互不相关的消费者** —— 统一多模态 + // 向量空间(Enabled 字段)与依存句法分析器。前者能启用不代表后者也在跑: + // 解析器可以用二进制内嵌的模型(配置留空时),也可能因缺运行时降级到 + // 规则引擎。只看 Enabled 会把「解析器没启用」这件事完全藏起来, + // 2026-10-20 就因为启动日志没报实际路径,把内嵌模型误判成规则引擎。 + DepParser DepParserStatus `json:"dep_parser"` +} + +// DepParserStatus 是依存句法分析器的运行状态。 +type DepParserStatus struct { + // Enabled 表示解析器已加载并挂在包级默认位(真正可 Parse)。 + Enabled bool `json:"enabled"` + // ModelPath 是**实际**加载的模型路径;Enabled=false 时为空。 + ModelPath string `json:"model_path,omitempty"` + // Embedded 表示模型来自二进制内嵌(core.agent.onnx_model_path 留空)。 + // 二者是独立来源:外置路径与内嵌路径,排查「模型到底是哪来的」时必需。 + Embedded bool `json:"embedded,omitempty"` } type PluginInfo struct {