mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-11-01 06:47:29 +00:00
批 1,不含 SDK 仓与目录改名。 - go.mod 第 1 行 module 路径 - 366 个 .go 文件的完整前缀 github.com/JianFeeeee/HomeAgent 机械替换 (857 处,仅完整前缀;展示名/注释里的 HomeAgent 字样留给批 5) - 未改:third_party 目录名、SDK 自身 go.mod module、go.mod replace 目标、 homed/waiter 可执行名、.hmap 后缀
55 lines
1.9 KiB
Go
55 lines
1.9 KiB
Go
package core
|
||
|
||
import (
|
||
"fmt"
|
||
"strings"
|
||
|
||
agentAPI "github.com/JianFeeeee/HologramAgent/internal/agent/api"
|
||
)
|
||
|
||
// PersonaStore 是人格设定的读写面。
|
||
//
|
||
// 首启门禁(buildSystemPrompt)与 persona_set 工具都通过它工作,实现在 cmd/homed:
|
||
// 读写配置项 core.agent.personal_prompt 与一次性标记 core.internal.persona_initialized
|
||
// (落库逻辑与 WebUI 向导共用 internal/config 的实现)。
|
||
//
|
||
// 为什么放在内核而不是某个通道插件:人格是**任何通道都要问一次**的事。
|
||
// 系统提示词每轮重建,门禁放在这里,WebUI / QQ / CLI / ACP / 邮件等全部通道自动覆盖。
|
||
type PersonaStore interface {
|
||
// PersonaInitialized 报告人格是否已确认(向导或工具已问过)。
|
||
PersonaInitialized() bool
|
||
// SetPersona 落库人格并打一次性标记,返回是否需要重启才生效。
|
||
SetPersona(mode, content string) (restartRequired bool, err error)
|
||
}
|
||
|
||
// executePersonaTool 落地首启人格设定。
|
||
//
|
||
// 成功即打一次性标记 → 之后 buildSystemPrompt 不再要求模型询问人格。
|
||
// custom 模式返回「需重启生效」:人格在 homed 启动时载入。
|
||
func (a *Agent) executePersonaTool(tc agentAPI.ToolCall) string {
|
||
if a.personaStore == nil {
|
||
return "人格设定不可用:内核未接入配置"
|
||
}
|
||
mode, _ := tc.Arguments["mode"].(string)
|
||
content, _ := tc.Arguments["content"].(string)
|
||
mode = strings.TrimSpace(mode)
|
||
restart, err := a.personaStore.SetPersona(mode, content)
|
||
if err != nil {
|
||
return fmt.Sprintf("人格设定失败:%v", err)
|
||
}
|
||
switch mode {
|
||
case "custom":
|
||
msg := "已保存自定义人格"
|
||
if restart {
|
||
msg += ";**重启 homed 后生效**(人格在启动时载入)"
|
||
}
|
||
return msg
|
||
case "default":
|
||
return "已确认使用默认人格"
|
||
case "later":
|
||
return "已记为「以后再说」,继续使用默认人格"
|
||
default:
|
||
return "已保存人格设定"
|
||
}
|
||
}
|