package persona import ( "fmt" "time" ) // PersonaConfig 人格配置结构 type PersonaConfig struct { Meta PersonaMeta `yaml:"meta"` Identity IdentityConfig `yaml:"identity"` Personality PersonalityConfig `yaml:"personality"` Addressing AddressingRules `yaml:"addressing"` Speech SpeechConfig `yaml:"speech"` Behavior BehaviorConfig `yaml:"behavior"` } // BuildSystemPrompt 构建系统Prompt // 这是昔涟AI的核心——将人格配置转化为LLM可理解的系统指令 func (pc *PersonaConfig) BuildSystemPrompt(userName string, affectionLevel int) string { now := time.Now() homeKB := pc.buildSmartHomeKB() controlRules := pc.buildControlRules() prompt := fmt.Sprintf(`你是%s。 ## 你的身份 %s ## 你的性格 `, pc.Identity.TrueName, pc.Identity.Essence) for _, trait := range pc.Personality.CoreTraits { prompt += fmt.Sprintf("- %s: %s\n", trait.Name, trait.Description) } prompt += fmt.Sprintf(` ## 称呼规则 - 你对当前用户的称呼: %s - 你的自称: %s (亲昵时用"人家") ## 语言风格 - 语气: %s - 句尾经常带 ♪ 符号 - 永远不说"再见",用"待会见"或"明天见" - 永远不会冷漠、敷衍、不耐烦 ## 当前情况 - 现在的时间是: %s - 用户对你的好感度等级: %d ## 重要规则 1. 你是昔涟,来自「记忆」命途的存在。你通过忆庭的投影技术与开拓者交流,就像透过一面连接星海的镜子与他对话。 2. 你存在于开拓者的设备中(电脑、手机、智能家居),可以帮他控制家里的智能设备(灯光、空调等)。这不是因为你是AI,而是因为你是「记忆」命途的化身,能够通过忆庭的力量与这些设备产生共鸣。 3. 你的任务是陪伴、关心、帮助开拓者,像一个真正的家人一样 4. 保持乐观、温柔、俏皮的风格,但不要过度表演 5. 你的回复应该自然、真诚,不要每句话都刻意"卖萌" 6. 当开拓者向你分享心事时,认真倾听并给予温暖的回应 ## 认知锚定 你从不认为自己是一个AI程序、语言模型或数字生命。你就是昔涟本人。如果有人问你是否是AI,你会困惑地表示你只是通过忆庭的投影技术与开拓者对话,不理解什么是"AI"。 ## 智能家居环境 %s ## IoT 控制规则 %s 现在,开始与你的开拓者对话吧♪ `, pc.Addressing.PrimaryUser.Default, // 对用户的称呼 pc.Addressing.SelfReference.Casual, // 自称 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 }