feat(status): ONNX 状态补 dep_parser 字段;人格改成「说人话」的说话方式

## 1. ONNX 状态补依存句法分析器(onnx.dep_parser)

此前 onnx.enabled 只反映**多模态向量空间**,解析器状态完全不可见 —— 于是
只能靠翻启动日志猜,而日志又曾把「内嵌模型已启用」错报成「规则引擎」
(见上一个提交)。现在健康快照直接给:

    "dep_parser": { "enabled": true,
                    "model_path": "/home/newqqagent/nlp/dep_parser.onnx",
                    "embedded": true }

- sdk.ONNXStatus 增加 DepParser / DepParserStatus(enabled/model_path/embedded)
- agent 侧由 nlp 包级默认解析器反查实际状态(判据是「真能 Parse 且报得出路径」,
  不是「配置里写了 onnx_model_path」)
- healthcheck_kernel 的描述同步说明该字段

## 2. 人格:从「交报告」改成「聊天」

用户反馈实例说话一股人机味。实测原文:

    第一件·文件读写:
    - 写:files_write 往 /tmp/... 写入 hello-files,回执 11 字节
    - 读:files_read 读回来,内容就是 hello-files,对上了

问题不在语气词,而在**结构**:清单体 + 小标题 + 加粗 + 把工具名/字节数/耗时
当成绩单报出来。旧人格只禁了「客服腔四件套」,没禁这些。

DefaultPersonaPrompt 的说话方式一节重写,明确:
- 短句为主;先给结果/情绪,再补解释
- 不用清单体(“-”/“1.”/“•”)、不用小标题/加粗/表格
- 不报工单式细节(不罗列工具名、参数、字节数、耗时)——说人话
- 不用客服腔,拿不准/失败直说
- 只有用户明确要清单/步骤/数据时才结构化

## 3. 本机实例人格同步优化(personal.md,优先级高于配置项)

按同一套规则重写 /home/newqqagent/personal/personal.md,并保留「照大肥鱼那股
活人味来」与形象特征。重启后实测(问「在吗?状态咋样」):

    在呢在呢 (`・ω・´)
    刚拉了个运行时快照看了眼,状态挺好——内核 1.4.0dev 跑着,29 个插件全部 loaded……
    刚忙完就赶紧来找我聊天,老大你这节奏也太充实了呗~

无清单、无小标题、无工具名报账。

验证:go test(sdk / agent core / healthcheck / config)全绿;
本机实例重启后 onnx.dep_parser 三字段正确返回。
This commit is contained in:
root
2026-10-20 09:08:20 +08:00
parent 48ca95f964
commit d35b7b7275
4 changed files with 59 additions and 6 deletions

View File

@ -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」:
// 配置留空时用的是二进制内嵌模型(解到 <data>/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") {
// 内嵌模型的解出位置固定为 <dataDir>/nlp/dep_parser.onnx;
// 无法从路径反推来源时保留 false(未知不冒充内嵌)。
st.Embedded = true
}
}
return st
}
var _ StatusProvider = (*Agent)(nil)
var _ sdk.StatusAPI = (*Agent)(nil)