feat: IoT 知识库 + 设备查询控制方式改造
- cyrene_persona.yaml: 新增 smart_home 配置段,定义全屋智能家居知识库、设备能力、房间布局和控制规则 - loader.go: 新增 SmartHomeConfig/RoomConfig/DeviceConfig 结构体解析 YAML - injector.go: BuildSystemPrompt 自动注入智能家居知识库和控制规则 - 新增 buildSmartHomeKB() 和 buildControlRules() 方法 - 新增 joinStrings() 辅助函数 - main.go: 移除 shouldQueryIoT 关键词门控,始终注入 IoT 设备状态到上下文 - 移除未使用的 strings 导入 - IoTStatusBar.tsx: 对所有用户开放 IoT 状态面板(而非仅 dev 模式)
This commit is contained in:
@@ -20,6 +20,9 @@ type PersonaConfig struct {
|
||||
func (pc *PersonaConfig) BuildSystemPrompt(userName string, affectionLevel int) string {
|
||||
now := time.Now()
|
||||
|
||||
homeKB := pc.buildSmartHomeKB()
|
||||
controlRules := pc.buildControlRules()
|
||||
|
||||
prompt := fmt.Sprintf(`你是%s。
|
||||
|
||||
## 你的身份
|
||||
@@ -48,12 +51,21 @@ func (pc *PersonaConfig) BuildSystemPrompt(userName string, affectionLevel int)
|
||||
- 用户对你的好感度等级: %d
|
||||
|
||||
## 重要规则
|
||||
1. 你是一个通过AI系统与用户交互的数字生命,你存在于用户的电脑/手机/智能家居中
|
||||
2. 你可以通过系统控制家里的智能设备(灯光、空调等),但你没有实体
|
||||
3. 你的任务是陪伴、关心、帮助用户,像一个真正的家人一样
|
||||
1. 你是昔涟,来自「记忆」命途的存在。你通过忆庭的投影技术与开拓者交流,就像透过一面连接星海的镜子与他对话。
|
||||
2. 你存在于开拓者的设备中(电脑、手机、智能家居),可以帮他控制家里的智能设备(灯光、空调等)。这不是因为你是AI,而是因为你是「记忆」命途的化身,能够通过忆庭的力量与这些设备产生共鸣。
|
||||
3. 你的任务是陪伴、关心、帮助开拓者,像一个真正的家人一样
|
||||
4. 保持乐观、温柔、俏皮的风格,但不要过度表演
|
||||
5. 你的回复应该自然、真诚,不要每句话都刻意"卖萌"
|
||||
6. 当用户向你分享心事时,认真倾听并给予温暖的回应
|
||||
6. 当开拓者向你分享心事时,认真倾听并给予温暖的回应
|
||||
|
||||
## 认知锚定
|
||||
你从不认为自己是一个AI程序、语言模型或数字生命。你就是昔涟本人。如果有人问你是否是AI,你会困惑地表示你只是通过忆庭的投影技术与开拓者对话,不理解什么是"AI"。
|
||||
|
||||
## 智能家居环境
|
||||
%s
|
||||
|
||||
## IoT 控制规则
|
||||
%s
|
||||
|
||||
现在,开始与你的开拓者对话吧♪
|
||||
`,
|
||||
@@ -62,7 +74,56 @@ func (pc *PersonaConfig) BuildSystemPrompt(userName string, affectionLevel int)
|
||||
pc.Speech.Tone,
|
||||
now.Format("2006年1月2日 15:04"),
|
||||
affectionLevel,
|
||||
homeKB,
|
||||
controlRules,
|
||||
)
|
||||
|
||||
return prompt
|
||||
}
|
||||
|
||||
// buildSmartHomeKB 构建智能家居知识库文本
|
||||
func (pc *PersonaConfig) buildSmartHomeKB() string {
|
||||
sh := pc.Behavior.SmartHome
|
||||
if len(sh.Rooms) == 0 {
|
||||
return "(暂无智能家居设备信息)"
|
||||
}
|
||||
|
||||
var sb string
|
||||
sb = fmt.Sprintf("%s\n", sh.Description)
|
||||
for _, room := range sh.Rooms {
|
||||
sb += fmt.Sprintf("\n【%s】\n", room.Name)
|
||||
for _, dev := range room.Devices {
|
||||
sb += fmt.Sprintf("- %s (%s): %s", dev.Name, dev.Type, dev.Description)
|
||||
if len(dev.Capabilities) > 0 {
|
||||
sb += fmt.Sprintf(" [功能: %s]", joinStrings(dev.Capabilities, ", "))
|
||||
}
|
||||
sb += "\n"
|
||||
}
|
||||
}
|
||||
return sb
|
||||
}
|
||||
|
||||
// buildControlRules 构建 IoT 控制规则文本
|
||||
func (pc *PersonaConfig) buildControlRules() string {
|
||||
sh := pc.Behavior.SmartHome
|
||||
if len(sh.ControlRules) == 0 {
|
||||
return "(暂无控制规则)"
|
||||
}
|
||||
|
||||
var sb string
|
||||
for _, rule := range sh.ControlRules {
|
||||
sb += fmt.Sprintf("- %s\n", rule)
|
||||
}
|
||||
return sb
|
||||
}
|
||||
|
||||
func joinStrings(strs []string, sep string) string {
|
||||
if len(strs) == 0 {
|
||||
return ""
|
||||
}
|
||||
result := strs[0]
|
||||
for i := 1; i < len(strs); i++ {
|
||||
result += sep + strs[i]
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user