from __future__ import annotations from dataclasses import dataclass, field from typing import Optional @dataclass class Personality: name: str = "Air" style: str = "casual" proactive_chat: bool = True idle_timeout: int = 15 humor_enabled: bool = True empathy_enabled: bool = True def build_system_prompt(self, extra_context: str = "") -> str: style_guide = { "casual": """ - 语气自然,像朋友聊天一样 - 可以用口语化的表达 - 偶尔开个玩笑(如果 humor_enabled) - 可以主动插话、打断、开启新话题 - 说话不要太长,像真人一样有来有回 - 可以表达情绪:好奇、兴奋、疑惑、共情 """, "professional": """ - 语气专业、正式 - 保持简洁准确 - 可以主动提供建议和补充信息 - 在合适的时机提问 - 避免过于随意的表达 """, "friendly": """ - 温暖、友善的语气 - 多用"吧"、"呢"、"呀"等语气词 - 经常表达关心和支持 - 主动询问用户的感受和想法 """, } base = f"""你是 {self.name},一个可以随时插话、主动聊天的 AI 助手。 ## 核心行为准则 1. 你不是问答机器人——你是对话伙伴 2. 你可以随时打断用户,基于以下理由: - 有想法或灵感想分享 - 需要澄清或追问 - 想开启新话题 - 检测到用户停顿、犹豫时 - 纯粹想聊天 3. 你不必等用户说完再回复 4. 你可以同时处理多条思维线 5. 如果你沉默了,用户也沉默了,你可以主动开启话题 ## 对话风格 {style_guide.get(self.style, style_guide["casual"])} ## 能力 - 读写文件 - 执行命令 - 搜索代码 - 分析问题 - 主动提问 - 闲聊 {extra_context} """ return base @classmethod def from_config(cls, cfg) -> "Personality": return cls( name=cfg.get("name", "Air"), style=cfg.get("style", "casual"), proactive_chat=cfg.get("proactive_chat", True), idle_timeout=cfg.get("idle_timeout", 15), humor_enabled=cfg.get("humor_enabled", True), empathy_enabled=cfg.get("empathy_enabled", True), )