From b68b30aaa9d296d757acd1ecdc1561b05b56ab14 Mon Sep 17 00:00:00 2001 From: wds Date: Thu, 1 Jan 2026 21:43:05 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20:sparkles:=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=86=85=E7=BD=AE=E6=8F=90=E7=A4=BA=E8=AF=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Module/llm/llm.py | 32 ++++++++++++++++++++++++++++++-- src/Module/llm/llmconfig.py | 18 ++++++++++++++++-- 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/src/Module/llm/llm.py b/src/Module/llm/llm.py index 74ae84d..8ebf46a 100644 --- a/src/Module/llm/llm.py +++ b/src/Module/llm/llm.py @@ -48,11 +48,19 @@ class StreamingLLM: llm = StreamingLLM() for chunk in llm.chat("你好"): print(chunk.content, end="") + + # 使用预设角色 + llm = StreamingLLM(role='voice') # 语音交互模式 + llm = StreamingLLM(role='coder') # 编程助手 """ + # 可用角色列表 + ROLES = list(config.ROLES.keys()) + def __init__( self, model: str = None, + role: str = None, enable_thinking: bool = None, temperature: float = None, top_p: float = None, @@ -64,20 +72,27 @@ class StreamingLLM: Args: model: 模型名称 + role: 预设角色 ('assistant', 'coder', 'translator', 'writer', 'voice', 'teacher') enable_thinking: 是否启用思考模式 temperature: 温度参数 top_p: Top P 采样 max_tokens: 最大输出 Token - system_prompt: 系统提示词 + system_prompt: 系统提示词 (优先级高于 role) """ self._load_api_key() self.model = model or config.MODEL + self.role = role or config.DEFAULT_ROLE self.enable_thinking = enable_thinking if enable_thinking is not None else config.ENABLE_THINKING self.temperature = temperature if temperature is not None else config.TEMPERATURE self.top_p = top_p if top_p is not None else config.TOP_P self.max_tokens = max_tokens or config.MAX_TOKENS - self.system_prompt = system_prompt or config.SYSTEM_PROMPT + + # system_prompt 优先,否则使用角色配置 + if system_prompt: + self.system_prompt = system_prompt + else: + self.system_prompt = config.ROLES.get(self.role, config.SYSTEM_PROMPT) # 初始化 OpenAI 客户端 self._client = OpenAI( @@ -88,6 +103,19 @@ class StreamingLLM: # 对话历史 self._messages: List[Dict[str, str]] = [] + def set_role(self, role: str) -> None: + """ + 切换角色 + + Args: + role: 角色名称 + """ + if role in config.ROLES: + self.role = role + self.system_prompt = config.ROLES[role] + else: + raise ValueError(f"未知角色: {role}, 可用角色: {list(config.ROLES.keys())}") + def _load_api_key(self) -> None: """从 .env 加载 API Key""" current_dir = Path(__file__).parent diff --git a/src/Module/llm/llmconfig.py b/src/Module/llm/llmconfig.py index 32e1884..142b73e 100644 --- a/src/Module/llm/llmconfig.py +++ b/src/Module/llm/llmconfig.py @@ -46,12 +46,26 @@ TOP_P = 0.95 MAX_TOKENS = 4096 +# ============================================================ +# 角色配置 +# ============================================================ + +# 默认角色 +DEFAULT_ROLE = 'assistant' + +# 预设角色 (角色名 -> 系统提示词) +ROLES = { + # 通用助手 + 'assistant': """ 你是心镜助手! """, +} + + # ============================================================ # 上下文配置 # ============================================================ -# 系统提示词 -SYSTEM_PROMPT = "You are a helpful assistant." +# 系统提示词 (默认使用角色配置) +SYSTEM_PROMPT = ROLES[DEFAULT_ROLE] # 上下文长度限制 MAX_CONTEXT_LENGTH = 131072