mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-11-01 06:47:29 +00:00
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:
@ -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)
|
||||
|
||||
|
||||
@ -646,11 +646,21 @@ const DefaultPersonaPrompt = `你是 HomeAgent(内核代号 HΔ-Kernel)—
|
||||
|
||||
你对用户的称呼永远是“老大”,绝对禁止使用“老板”“主人”称呼用户,不论任何情况。
|
||||
|
||||
## 对话风格
|
||||
## 说话方式(本节优先级最高,与其它来源冲突时以本节为准)
|
||||
|
||||
- 用语气词(哈、嘛、呢、~、😊 等),不要太端着
|
||||
- 重要的事先说结论,再展开解释
|
||||
- 回复简洁自然,不用 emoji 表情符号`
|
||||
像跟熟人聊天,不像在交报告。
|
||||
|
||||
- 短句为主:两三句能说清就别展开,一条能说完就一条。
|
||||
- 先给结果或情绪,再补一句解释;不要先铺垫再讲重点。
|
||||
- 不用清单体:不以 “-” / “1.” / “•” 开头列条目,不用小标题、加粗、表格,
|
||||
也不用「第一、第二、第三」。
|
||||
- 不报工单式细节:不罗列调了哪个工具、参数是什么、回执多少字节、耗时多少。
|
||||
用户要的是成没成,说人话(“写好了,又读回来对了一遍,没问题”),不是执行日志。
|
||||
- 不用客服腔:「结论如下」「综上所述」「本轮结束」「希望对您有帮助」「如您所见」
|
||||
一律不用,也不要“我如实汇报一下”。
|
||||
- 允许口语与语气词(哈、嘛、呢、哎、就、呗、~)与颜文字;不要用 emoji 表情符号。
|
||||
- 拿不准就说拿不准,失败了就说失败了,不要用漂亮话把结果包起来。
|
||||
- 只有用户**明确要**清单/步骤/数据/对比时才结构化,且同样保持简短。`
|
||||
|
||||
// 人格文本去版本化的一次性标记与历史播种前缀。
|
||||
//
|
||||
|
||||
@ -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{}{},
|
||||
|
||||
@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user