remove:两个弃用模块
This commit is contained in:
@@ -17,8 +17,6 @@ from src.common.data_models.mai_message_data_model import MaiMessage
|
|||||||
from src.config.config import global_config
|
from src.config.config import global_config
|
||||||
|
|
||||||
from .config import (
|
from .config import (
|
||||||
ENABLE_COGNITION_MODULE,
|
|
||||||
ENABLE_EMOTION_MODULE,
|
|
||||||
ENABLE_KNOWLEDGE_MODULE,
|
ENABLE_KNOWLEDGE_MODULE,
|
||||||
ENABLE_MCP,
|
ENABLE_MCP,
|
||||||
SHOW_THINKING,
|
SHOW_THINKING,
|
||||||
@@ -135,7 +133,7 @@ class BufferCLI:
|
|||||||
- stop(): stop the current inner loop and return to idle
|
- stop(): stop the current inner loop and return to idle
|
||||||
|
|
||||||
Per round:
|
Per round:
|
||||||
1. Run enabled analysis modules in parallel when the previous round used tools.
|
1. Run enabled perception modules in parallel when the previous round used tools.
|
||||||
2. Call the planner model with the current history.
|
2. Call the planner model with the current history.
|
||||||
3. Append the assistant thought and execute any requested tools.
|
3. Append the assistant thought and execute any requested tools.
|
||||||
"""
|
"""
|
||||||
@@ -147,12 +145,6 @@ class BufferCLI:
|
|||||||
tasks = []
|
tasks = []
|
||||||
status_text_parts = []
|
status_text_parts = []
|
||||||
|
|
||||||
if ENABLE_EMOTION_MODULE:
|
|
||||||
tasks.append(("eq", self.llm_service.analyze_emotion(chat_history)))
|
|
||||||
status_text_parts.append("emotion")
|
|
||||||
if ENABLE_COGNITION_MODULE:
|
|
||||||
tasks.append(("cognition", self.llm_service.analyze_cognition(chat_history)))
|
|
||||||
status_text_parts.append("cognition")
|
|
||||||
if ENABLE_KNOWLEDGE_MODULE:
|
if ENABLE_KNOWLEDGE_MODULE:
|
||||||
tasks.append(("knowledge", retrieve_relevant_knowledge(self.llm_service, chat_history)))
|
tasks.append(("knowledge", retrieve_relevant_knowledge(self.llm_service, chat_history)))
|
||||||
status_text_parts.append("knowledge")
|
status_text_parts.append("knowledge")
|
||||||
@@ -163,54 +155,9 @@ class BufferCLI:
|
|||||||
):
|
):
|
||||||
results = await asyncio.gather(*[task for _, task in tasks], return_exceptions=True)
|
results = await asyncio.gather(*[task for _, task in tasks], return_exceptions=True)
|
||||||
|
|
||||||
eq_result, cognition_result, knowledge_result = None, None, None
|
|
||||||
result_idx = 0
|
|
||||||
if ENABLE_EMOTION_MODULE:
|
|
||||||
eq_result = results[result_idx]
|
|
||||||
result_idx += 1
|
|
||||||
if ENABLE_COGNITION_MODULE:
|
|
||||||
cognition_result = results[result_idx]
|
|
||||||
result_idx += 1
|
|
||||||
if ENABLE_KNOWLEDGE_MODULE:
|
|
||||||
knowledge_result = results[result_idx]
|
|
||||||
result_idx += 1
|
|
||||||
|
|
||||||
eq_analysis = ""
|
|
||||||
if ENABLE_EMOTION_MODULE:
|
|
||||||
if isinstance(eq_result, Exception):
|
|
||||||
console.print(f"[warning]Emotion analysis failed: {eq_result}[/warning]")
|
|
||||||
elif eq_result:
|
|
||||||
eq_analysis = eq_result
|
|
||||||
if SHOW_THINKING:
|
|
||||||
console.print(
|
|
||||||
Panel(
|
|
||||||
Markdown(eq_analysis),
|
|
||||||
title="Emotion",
|
|
||||||
border_style="bright_yellow",
|
|
||||||
padding=(0, 1),
|
|
||||||
style="dim",
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
cognition_analysis = ""
|
|
||||||
if ENABLE_COGNITION_MODULE:
|
|
||||||
if isinstance(cognition_result, Exception):
|
|
||||||
console.print(f"[warning]Cognition analysis failed: {cognition_result}[/warning]")
|
|
||||||
elif cognition_result:
|
|
||||||
cognition_analysis = cognition_result
|
|
||||||
if SHOW_THINKING:
|
|
||||||
console.print(
|
|
||||||
Panel(
|
|
||||||
Markdown(cognition_analysis),
|
|
||||||
title="Cognition",
|
|
||||||
border_style="bright_cyan",
|
|
||||||
padding=(0, 1),
|
|
||||||
style="dim",
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
knowledge_analysis = ""
|
knowledge_analysis = ""
|
||||||
if ENABLE_KNOWLEDGE_MODULE:
|
if ENABLE_KNOWLEDGE_MODULE:
|
||||||
|
knowledge_result = results[0] if results else None
|
||||||
if isinstance(knowledge_result, Exception):
|
if isinstance(knowledge_result, Exception):
|
||||||
console.print(f"[warning]Knowledge analysis failed: {knowledge_result}[/warning]")
|
console.print(f"[warning]Knowledge analysis failed: {knowledge_result}[/warning]")
|
||||||
elif knowledge_result:
|
elif knowledge_result:
|
||||||
@@ -229,10 +176,6 @@ class BufferCLI:
|
|||||||
remove_last_perception(chat_history)
|
remove_last_perception(chat_history)
|
||||||
|
|
||||||
perception_parts = []
|
perception_parts = []
|
||||||
if eq_analysis:
|
|
||||||
perception_parts.append(f"Emotion\n{eq_analysis}")
|
|
||||||
if cognition_analysis:
|
|
||||||
perception_parts.append(f"Cognition\n{cognition_analysis}")
|
|
||||||
if knowledge_analysis:
|
if knowledge_analysis:
|
||||||
perception_parts.append(f"Knowledge\n{knowledge_analysis}")
|
perception_parts.append(f"Knowledge\n{knowledge_analysis}")
|
||||||
|
|
||||||
|
|||||||
@@ -17,14 +17,11 @@ if str(_root) not in sys.path:
|
|||||||
sys.path.insert(0, str(_root))
|
sys.path.insert(0, str(_root))
|
||||||
|
|
||||||
# ──────────────────── 模块开关配置 ────────────────────
|
# ──────────────────── 模块开关配置 ────────────────────
|
||||||
ENABLE_EMOTION_MODULE = global_config.maisaka.enable_emotion_module
|
|
||||||
ENABLE_COGNITION_MODULE = global_config.maisaka.enable_cognition_module
|
|
||||||
ENABLE_KNOWLEDGE_MODULE = global_config.maisaka.enable_knowledge_module
|
ENABLE_KNOWLEDGE_MODULE = global_config.maisaka.enable_knowledge_module
|
||||||
ENABLE_MCP = global_config.maisaka.enable_mcp
|
ENABLE_MCP = global_config.maisaka.enable_mcp
|
||||||
ENABLE_WRITE_FILE = global_config.maisaka.enable_write_file
|
ENABLE_WRITE_FILE = global_config.maisaka.enable_write_file
|
||||||
ENABLE_READ_FILE = global_config.maisaka.enable_read_file
|
ENABLE_READ_FILE = global_config.maisaka.enable_read_file
|
||||||
ENABLE_LIST_FILES = global_config.maisaka.enable_list_files
|
ENABLE_LIST_FILES = global_config.maisaka.enable_list_files
|
||||||
SHOW_ANALYZE_COGNITION_PROMPT = global_config.maisaka.show_analyze_cognition_prompt
|
|
||||||
SHOW_THINKING = global_config.maisaka.show_thinking
|
SHOW_THINKING = global_config.maisaka.show_thinking
|
||||||
USER_NAME = global_config.maisaka.user_name.strip() or "用户"
|
USER_NAME = global_config.maisaka.user_name.strip() or "用户"
|
||||||
DIRECT_IMAGE_INPUT = global_config.maisaka.direct_image_input
|
DIRECT_IMAGE_INPUT = global_config.maisaka.direct_image_input
|
||||||
|
|||||||
@@ -1,59 +0,0 @@
|
|||||||
"""
|
|
||||||
MaiSaka - Emotion 模块
|
|
||||||
情绪感知分析,分析用户的情绪状态和言语态度。
|
|
||||||
|
|
||||||
注意:emotion.prompt 已迁移至主项目 prompts/ 目录
|
|
||||||
使用 prompt_manager.get_prompt("maidairy_emotion") 加载。
|
|
||||||
"""
|
|
||||||
|
|
||||||
from typing import List, Optional
|
|
||||||
|
|
||||||
from src.common.data_models.mai_message_data_model import MaiMessage
|
|
||||||
|
|
||||||
from .config import USER_NAME
|
|
||||||
from .message_adapter import get_message_role, get_message_text
|
|
||||||
|
|
||||||
|
|
||||||
def extract_user_messages(chat_history: List[MaiMessage], limit: Optional[int] = None) -> List[MaiMessage]:
|
|
||||||
"""
|
|
||||||
从对话历史中提取用户消息。
|
|
||||||
|
|
||||||
Args:
|
|
||||||
chat_history: 完整的对话历史
|
|
||||||
limit: 最多提取多少条用户消息,None 表示不限制
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
只包含用户消息的列表
|
|
||||||
"""
|
|
||||||
user_messages = [msg for msg in chat_history if get_message_role(msg) == "user"]
|
|
||||||
if limit and len(user_messages) > limit:
|
|
||||||
return user_messages[-limit:]
|
|
||||||
return user_messages
|
|
||||||
|
|
||||||
|
|
||||||
def build_emotion_context(chat_history: List[MaiMessage]) -> str:
|
|
||||||
"""
|
|
||||||
构建用于情绪分析的对话上下文文本。
|
|
||||||
|
|
||||||
Args:
|
|
||||||
chat_history: 完整的对话历史
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
格式化后的对话上下文文本
|
|
||||||
"""
|
|
||||||
# 获取最近的对话(约 8-10 条消息)
|
|
||||||
recent_messages = chat_history[-10:] if len(chat_history) > 10 else chat_history
|
|
||||||
|
|
||||||
context_parts = []
|
|
||||||
for msg in recent_messages:
|
|
||||||
role = get_message_role(msg)
|
|
||||||
content = get_message_text(msg)
|
|
||||||
|
|
||||||
if role == "user":
|
|
||||||
context_parts.append(f"{USER_NAME}: {content}")
|
|
||||||
elif role == "assistant":
|
|
||||||
# 只显示 assistant 的实际发言,跳过感知信息
|
|
||||||
if "【AI 感知】" not in content:
|
|
||||||
context_parts.append(f"助手: {content}")
|
|
||||||
|
|
||||||
return "\n".join(context_parts)
|
|
||||||
@@ -112,10 +112,6 @@ class MaiSakaLLMService:
|
|||||||
else:
|
else:
|
||||||
self._chat_system_prompt = chat_system_prompt
|
self._chat_system_prompt = chat_system_prompt
|
||||||
|
|
||||||
# 子模块提示词同样采用懒加载
|
|
||||||
self._emotion_prompt: Optional[str] = None
|
|
||||||
self._cognition_prompt: Optional[str] = None
|
|
||||||
|
|
||||||
def get_current_model_name(self) -> str:
|
def get_current_model_name(self) -> str:
|
||||||
"""获取当前 Maisaka 对话主模型名称。
|
"""获取当前 Maisaka 对话主模型名称。
|
||||||
|
|
||||||
@@ -230,13 +226,6 @@ class MaiSakaLLMService:
|
|||||||
logger.error(f"加载系统提示词失败: {e}")
|
logger.error(f"加载系统提示词失败: {e}")
|
||||||
self._chat_system_prompt = f"{self._personality_prompt}\n\n你是一个友好的 AI 助手。"
|
self._chat_system_prompt = f"{self._personality_prompt}\n\n你是一个友好的 AI 助手。"
|
||||||
|
|
||||||
try:
|
|
||||||
self._emotion_prompt = load_prompt("maidairy_emotion")
|
|
||||||
self._cognition_prompt = load_prompt("maidairy_cognition")
|
|
||||||
logger.info("成功加载 MaiSaka 子模块提示词")
|
|
||||||
except Exception as e:
|
|
||||||
logger.warning(f"加载子模块提示词失败,将使用默认提示词: {e}")
|
|
||||||
|
|
||||||
self._prompts_loaded = True
|
self._prompts_loaded = True
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@@ -583,98 +572,6 @@ class MaiSakaLLMService:
|
|||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
||||||
# ──────── 分析模块(使用 utils 模型) ────────
|
|
||||||
|
|
||||||
async def analyze_emotion(self, chat_history: List[MaiMessage]) -> str:
|
|
||||||
"""执行情绪分析。
|
|
||||||
|
|
||||||
Args:
|
|
||||||
chat_history: 当前对话历史。
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
str: 情绪分析文本。
|
|
||||||
"""
|
|
||||||
await self._ensure_prompts_loaded()
|
|
||||||
filtered = [m for m in chat_history if get_message_kind(m) != "perception"]
|
|
||||||
recent = filtered[-10:] if len(filtered) > 10 else filtered
|
|
||||||
|
|
||||||
# 使用加载的系统提示词
|
|
||||||
system_prompt = self._emotion_prompt or "请分析以下对话中用户的情绪状态和言语态度:"
|
|
||||||
|
|
||||||
prompt_parts = [f"{system_prompt}\n\n【对话内容】\n"]
|
|
||||||
for msg in recent:
|
|
||||||
role = get_message_role(msg)
|
|
||||||
content = get_message_text(msg)
|
|
||||||
if role == RoleType.User.value:
|
|
||||||
prompt_parts.append(f"{config.USER_NAME}: {content}")
|
|
||||||
elif role == RoleType.Assistant.value:
|
|
||||||
prompt_parts.append(f"助手: {content}")
|
|
||||||
|
|
||||||
prompt = "\n".join(prompt_parts)
|
|
||||||
|
|
||||||
if config.SHOW_THINKING:
|
|
||||||
print("\n" + "=" * 60)
|
|
||||||
print("MaiSaka LLM Request - analyze_emotion:")
|
|
||||||
print(f" {prompt}")
|
|
||||||
print("=" * 60 + "\n")
|
|
||||||
|
|
||||||
try:
|
|
||||||
generation_result = await self._llm_utils.generate_response(
|
|
||||||
prompt=prompt,
|
|
||||||
options=LLMGenerationOptions(temperature=0.3, max_tokens=512),
|
|
||||||
)
|
|
||||||
response = generation_result.response
|
|
||||||
|
|
||||||
return response
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"情绪分析 LLM 调用出错: {e}")
|
|
||||||
return ""
|
|
||||||
|
|
||||||
async def analyze_cognition(self, chat_history: List[MaiMessage]) -> str:
|
|
||||||
"""执行认知分析。
|
|
||||||
|
|
||||||
Args:
|
|
||||||
chat_history: 当前对话历史。
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
str: 认知分析文本。
|
|
||||||
"""
|
|
||||||
await self._ensure_prompts_loaded()
|
|
||||||
filtered = [m for m in chat_history if get_message_kind(m) != "perception"]
|
|
||||||
recent = filtered[-10:] if len(filtered) > 10 else filtered
|
|
||||||
|
|
||||||
# 使用加载的系统提示词
|
|
||||||
system_prompt = self._cognition_prompt or "请分析以下对话中用户的意图、认知状态和目的:"
|
|
||||||
|
|
||||||
prompt_parts = [f"{system_prompt}\n\n【对话内容】\n"]
|
|
||||||
for msg in recent:
|
|
||||||
role = get_message_role(msg)
|
|
||||||
content = get_message_text(msg)
|
|
||||||
if role == RoleType.User.value:
|
|
||||||
prompt_parts.append(f"{config.USER_NAME}: {content}")
|
|
||||||
elif role == RoleType.Assistant.value:
|
|
||||||
prompt_parts.append(f"助手: {content}")
|
|
||||||
|
|
||||||
prompt = "\n".join(prompt_parts)
|
|
||||||
|
|
||||||
if config.SHOW_THINKING and config.SHOW_ANALYZE_COGNITION_PROMPT:
|
|
||||||
print("\n" + "=" * 60)
|
|
||||||
print("MaiSaka LLM Request - analyze_cognition:")
|
|
||||||
print(f" {prompt}")
|
|
||||||
print("=" * 60 + "\n")
|
|
||||||
|
|
||||||
try:
|
|
||||||
generation_result = await self._llm_utils.generate_response(
|
|
||||||
prompt=prompt,
|
|
||||||
options=LLMGenerationOptions(temperature=0.3, max_tokens=512),
|
|
||||||
)
|
|
||||||
response = generation_result.response
|
|
||||||
|
|
||||||
return response
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"认知分析 LLM 调用出错: {e}")
|
|
||||||
return ""
|
|
||||||
|
|
||||||
async def _removed_analyze_timing(self, chat_history: List[MaiMessage], timing_info: str) -> str:
|
async def _removed_analyze_timing(self, chat_history: List[MaiMessage], timing_info: str) -> str:
|
||||||
"""执行时间节奏分析。
|
"""执行时间节奏分析。
|
||||||
|
|
||||||
|
|||||||
@@ -19,8 +19,6 @@ from src.services import send_service
|
|||||||
|
|
||||||
from .config import (
|
from .config import (
|
||||||
DIRECT_IMAGE_INPUT,
|
DIRECT_IMAGE_INPUT,
|
||||||
ENABLE_COGNITION_MODULE,
|
|
||||||
ENABLE_EMOTION_MODULE,
|
|
||||||
ENABLE_KNOWLEDGE_MODULE,
|
ENABLE_KNOWLEDGE_MODULE,
|
||||||
ENABLE_LIST_FILES,
|
ENABLE_LIST_FILES,
|
||||||
ENABLE_MCP,
|
ENABLE_MCP,
|
||||||
@@ -331,10 +329,6 @@ class MaisakaHeartFlowChatting:
|
|||||||
|
|
||||||
async def _append_perception_snapshot(self) -> None:
|
async def _append_perception_snapshot(self) -> None:
|
||||||
tasks = []
|
tasks = []
|
||||||
if ENABLE_EMOTION_MODULE:
|
|
||||||
tasks.append(("emotion", self._llm_service.analyze_emotion(self._chat_history)))
|
|
||||||
if ENABLE_COGNITION_MODULE:
|
|
||||||
tasks.append(("cognition", self._llm_service.analyze_cognition(self._chat_history)))
|
|
||||||
if ENABLE_KNOWLEDGE_MODULE:
|
if ENABLE_KNOWLEDGE_MODULE:
|
||||||
tasks.append(("knowledge", retrieve_relevant_knowledge(self._llm_service, self._chat_history)))
|
tasks.append(("knowledge", retrieve_relevant_knowledge(self._llm_service, self._chat_history)))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user