fix:调整目录结构,优化hfc prompt,移除日程,移除动态和llm判断willing模式,
This commit is contained in:
1 parent
6376da0682
commit
fed71bccad
131 files changed
+422
-1500
No files matched your search
@@ -10,13 +10,13 @@ from time import sleep
|
||||
|
||||
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
|
||||
|
||||
from src.plugins.knowledge.src.lpmmconfig import PG_NAMESPACE, global_config
|
||||
from src.plugins.knowledge.src.embedding_store import EmbeddingManager
|
||||
from src.plugins.knowledge.src.llm_client import LLMClient
|
||||
from src.plugins.knowledge.src.open_ie import OpenIE
|
||||
from src.plugins.knowledge.src.kg_manager import KGManager
|
||||
from src.chat.knowledge.src.lpmmconfig import PG_NAMESPACE, global_config
|
||||
from src.chat.knowledge.src.embedding_store import EmbeddingManager
|
||||
from src.chat.knowledge.src.llm_client import LLMClient
|
||||
from src.chat.knowledge.src.open_ie import OpenIE
|
||||
from src.chat.knowledge.src.kg_manager import KGManager
|
||||
from src.common.logger import get_module_logger
|
||||
from src.plugins.knowledge.src.utils.hash import get_sha256
|
||||
from src.chat.knowledge.src.utils.hash import get_sha256
|
||||
|
||||
|
||||
# 添加项目根目录到 sys.path
|
||||
|
||||
@@ -13,11 +13,11 @@ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
|
||||
from rich.progress import Progress # 替换为 rich 进度条
|
||||
|
||||
from src.common.logger import get_module_logger
|
||||
from src.plugins.knowledge.src.lpmmconfig import global_config
|
||||
from src.plugins.knowledge.src.ie_process import info_extract_from_str
|
||||
from src.plugins.knowledge.src.llm_client import LLMClient
|
||||
from src.plugins.knowledge.src.open_ie import OpenIE
|
||||
from src.plugins.knowledge.src.raw_processing import load_raw_data
|
||||
from src.chat.knowledge.src.lpmmconfig import global_config
|
||||
from src.chat.knowledge.src.ie_process import info_extract_from_str
|
||||
from src.chat.knowledge.src.llm_client import LLMClient
|
||||
from src.chat.knowledge.src.open_ie import OpenIE
|
||||
from src.chat.knowledge.src.raw_processing import load_raw_data
|
||||
from rich.progress import (
|
||||
BarColumn,
|
||||
TimeElapsedColumn,
|
||||
|
||||
@@ -6,7 +6,7 @@ import datetime # 新增导入
|
||||
|
||||
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
|
||||
from src.common.logger_manager import get_logger
|
||||
from src.plugins.knowledge.src.lpmmconfig import global_config
|
||||
from src.chat.knowledge.src.lpmmconfig import global_config
|
||||
|
||||
logger = get_logger("lpmm")
|
||||
ROOT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
|
||||
|
||||
@@ -34,14 +34,6 @@ class APIBotConfig:
|
||||
gender: str # 性别
|
||||
appearance: str # 外貌特征描述
|
||||
|
||||
# schedule
|
||||
enable_schedule_gen: bool # 是否启用日程表
|
||||
enable_schedule_interaction: bool # 日程表是否影响回复模式
|
||||
prompt_schedule_gen: str # 日程生成提示词
|
||||
schedule_doing_update_interval: int # 日程表更新间隔(秒)
|
||||
schedule_temperature: float # 日程表温度
|
||||
time_zone: str # 时区
|
||||
|
||||
# platforms
|
||||
platforms: Dict[str, str] # 平台信息
|
||||
|
||||
@@ -164,7 +156,6 @@ class APIBotConfig:
|
||||
"groups",
|
||||
"personality",
|
||||
"identity",
|
||||
"schedule",
|
||||
"platforms",
|
||||
"chat",
|
||||
"normal_chat",
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
"""
|
||||
MaiMBot插件系统
|
||||
包含聊天、情绪、记忆、日程等功能模块
|
||||
"""
|
||||
|
||||
from src.chat.message_receive.chat_stream import chat_manager
|
||||
from src.chat.emoji_system.emoji_manager import emoji_manager
|
||||
from src.chat.person_info.relationship_manager import relationship_manager
|
||||
from src.chat.normal_chat.willing.willing_manager import willing_manager
|
||||
|
||||
# 导出主要组件供外部使用
|
||||
__all__ = [
|
||||
"chat_manager",
|
||||
"emoji_manager",
|
||||
"relationship_manager",
|
||||
"willing_manager",
|
||||
]
|
||||
@@ -12,7 +12,7 @@ import re
|
||||
|
||||
from ...common.database import db
|
||||
from ...config.config import global_config
|
||||
from ..chat.utils_image import image_path_to_base64, image_manager
|
||||
from ..utils.utils_image import image_path_to_base64, image_manager
|
||||
from ..models.utils_model import LLMRequest
|
||||
from src.common.logger_manager import get_logger
|
||||
from rich.traceback import install
|
||||
@@ -1,7 +1,7 @@
|
||||
import os
|
||||
import time
|
||||
from typing import List, Dict, Any, Tuple
|
||||
from src.plugins.heartFC_chat.heartFC_Cycleinfo import CycleInfo
|
||||
from src.chat.focus_chat.heartFC_Cycleinfo import CycleInfo
|
||||
from src.common.logger_manager import get_logger
|
||||
|
||||
logger = get_logger("cycle_analyzer")
|
||||
@@ -1,6 +1,6 @@
|
||||
import os
|
||||
import argparse
|
||||
from src.plugins.heartFC_chat.cycle_analyzer import CycleAnalyzer
|
||||
from src.chat.focus_chat.cycle_analyzer import CycleAnalyzer
|
||||
|
||||
|
||||
def print_section(title: str, width: int = 80):
|
||||
+25
-15
@@ -1,23 +1,23 @@
|
||||
import time
|
||||
import traceback
|
||||
from typing import List, Optional, Dict, Any
|
||||
from src.plugins.chat.message import MessageRecv, MessageThinking, MessageSending
|
||||
from src.plugins.chat.message import Seg # Local import needed after move
|
||||
from src.plugins.chat.message import UserInfo
|
||||
from src.plugins.chat.chat_stream import chat_manager
|
||||
from src.chat.message_receive.message import MessageRecv, MessageThinking, MessageSending
|
||||
from src.chat.message_receive.message import Seg # Local import needed after move
|
||||
from src.chat.message_receive.message import UserInfo
|
||||
from src.chat.message_receive.chat_stream import chat_manager
|
||||
from src.common.logger_manager import get_logger
|
||||
from src.plugins.models.utils_model import LLMRequest
|
||||
from src.chat.models.utils_model import LLMRequest
|
||||
from src.config.config import global_config
|
||||
from src.plugins.chat.utils_image import image_path_to_base64 # Local import needed after move
|
||||
from src.plugins.utils.timer_calculator import Timer # <--- Import Timer
|
||||
from src.plugins.emoji_system.emoji_manager import emoji_manager
|
||||
from src.plugins.heartFC_chat.heartflow_prompt_builder import prompt_builder
|
||||
from src.plugins.heartFC_chat.heartFC_sender import HeartFCSender
|
||||
from src.plugins.chat.utils import process_llm_response
|
||||
from src.plugins.respon_info_catcher.info_catcher import info_catcher_manager
|
||||
from src.chat.utils.utils_image import image_path_to_base64 # Local import needed after move
|
||||
from src.chat.utils.timer_calculator import Timer # <--- Import Timer
|
||||
from src.chat.emoji_system.emoji_manager import emoji_manager
|
||||
from src.chat.focus_chat.heartflow_prompt_builder import prompt_builder
|
||||
from src.chat.focus_chat.heartFC_sender import HeartFCSender
|
||||
from src.chat.utils.utils import process_llm_response
|
||||
from src.chat.utils.info_catcher import info_catcher_manager
|
||||
from src.manager.mood_manager import mood_manager
|
||||
from src.heart_flow.utils_chat import get_chat_type_and_target_info
|
||||
from src.plugins.chat.chat_stream import ChatStream
|
||||
from src.chat.message_receive.chat_stream import ChatStream
|
||||
|
||||
logger = get_logger("expressor")
|
||||
|
||||
@@ -99,6 +99,7 @@ class DefaultExpressor:
|
||||
anchor_message=anchor_message,
|
||||
thinking_id=thinking_id,
|
||||
reason=reasoning,
|
||||
action_data=action_data,
|
||||
)
|
||||
|
||||
if reply:
|
||||
@@ -135,6 +136,7 @@ class DefaultExpressor:
|
||||
reason: str,
|
||||
anchor_message: MessageRecv,
|
||||
thinking_id: str,
|
||||
action_data: Dict[str, Any],
|
||||
) -> Optional[List[str]]:
|
||||
"""
|
||||
回复器 (Replier): 核心逻辑,负责生成回复文本。
|
||||
@@ -160,6 +162,8 @@ class DefaultExpressor:
|
||||
)
|
||||
# --- End determining sender_name ---
|
||||
|
||||
target_message = action_data.get("target", "")
|
||||
|
||||
# 3. 构建 Prompt
|
||||
with Timer("构建Prompt", {}): # 内部计时器,可选保留
|
||||
prompt = await prompt_builder.build_prompt(
|
||||
@@ -170,6 +174,7 @@ class DefaultExpressor:
|
||||
current_mind_info="",
|
||||
structured_info="",
|
||||
sender_name=sender_name_for_prompt, # Pass determined name
|
||||
target_message=target_message,
|
||||
)
|
||||
|
||||
# 4. 调用 LLM 生成回复
|
||||
@@ -182,9 +187,14 @@ class DefaultExpressor:
|
||||
|
||||
try:
|
||||
with Timer("LLM生成", {}): # 内部计时器,可选保留
|
||||
# logger.info(f"{self.log_prefix}[Replier-{thinking_id}]\nPrompt:\n{prompt}\n")
|
||||
content, reasoning_content, model_name = await self.express_model.generate_response(prompt)
|
||||
# logger.info(f"{self.log_prefix}[Replier-{thinking_id}]\nPrompt:\n{prompt}\n生成回复: {content}\n")
|
||||
# 捕捉 LLM 输出信息
|
||||
|
||||
logger.info(f"{self.log_prefix}\nPrompt:\n{prompt}\n---------------------------\n")
|
||||
|
||||
logger.info(f"想要表达:{in_mind_reply}")
|
||||
logger.info(f"理由:{reason}")
|
||||
logger.info(f"生成回复: {content}\n")
|
||||
info_catcher.catch_after_llm_generated(
|
||||
prompt=prompt, response=content, reasoning_content=reasoning_content, model_name=model_name
|
||||
)
|
||||
+102
-37
@@ -2,10 +2,10 @@ import time
|
||||
import random
|
||||
from typing import List, Dict, Optional, Any, Tuple
|
||||
from src.common.logger_manager import get_logger
|
||||
from src.plugins.models.utils_model import LLMRequest
|
||||
from src.chat.models.utils_model import LLMRequest
|
||||
from src.config.config import global_config
|
||||
from src.plugins.utils.chat_message_builder import get_raw_msg_by_timestamp_random, build_readable_messages
|
||||
from src.plugins.heartFC_chat.heartflow_prompt_builder import Prompt, global_prompt_manager
|
||||
from src.chat.utils.chat_message_builder import get_raw_msg_by_timestamp_random, build_readable_messages
|
||||
from src.chat.focus_chat.heartflow_prompt_builder import Prompt, global_prompt_manager
|
||||
import os
|
||||
import json
|
||||
|
||||
@@ -16,12 +16,12 @@ logger = get_logger("expressor")
|
||||
|
||||
|
||||
def init_prompt() -> None:
|
||||
learn_expression_prompt = """
|
||||
learn_style_prompt = """
|
||||
{chat_str}
|
||||
|
||||
请从上面这段群聊中概括除了人名为"麦麦"之外的人的语言风格,只考虑文字,不要考虑表情包和图片
|
||||
不要涉及具体的人名,只考虑语言风格
|
||||
思考回复语法,长度和情感
|
||||
语言风格包含特殊内容和情感
|
||||
思考有没有特殊的梗,一并总结成语言风格
|
||||
总结成如下格式的规律,总结的内容要详细,但具有概括性:
|
||||
当"xxx"时,可以"xxx", xxx不超过10个字
|
||||
@@ -29,20 +29,18 @@ def init_prompt() -> None:
|
||||
例如:
|
||||
当"表示十分惊叹"时,使用"我嘞个xxxx"
|
||||
当"表示讽刺的赞同,不想讲道理"时,使用"对对对"
|
||||
当"想表达某个观点,但不想明说",使用"反讽的句式"
|
||||
当"想说明某个观点,但懒得明说",使用"懂的都懂"
|
||||
当"想搞笑的表现高深的感觉",使用"文言文句式"
|
||||
|
||||
注意不要总结你自己的发言
|
||||
现在请你概括
|
||||
"""
|
||||
Prompt(learn_expression_prompt, "learn_expression_prompt")
|
||||
Prompt(learn_style_prompt, "learn_style_prompt")
|
||||
|
||||
personality_expression_prompt = """
|
||||
{personality}
|
||||
|
||||
请从以上人设中总结出这个角色可能的语言风格
|
||||
思考回复语法,长度和情感
|
||||
思考回复的特殊内容和情感
|
||||
思考有没有特殊的梗,一并总结成语言风格
|
||||
总结成如下格式的规律,总结的内容要详细,但具有概括性:
|
||||
当"xxx"时,可以"xxx", xxx不超过10个字
|
||||
@@ -50,20 +48,38 @@ def init_prompt() -> None:
|
||||
例如:
|
||||
当"表示十分惊叹"时,使用"我嘞个xxxx"
|
||||
当"表示讽刺的赞同,不想讲道理"时,使用"对对对"
|
||||
当"想表达某个观点,但不想明说",使用"反讽的句式"
|
||||
当"想说明某个观点,但懒得明说",使用"懂的都懂"
|
||||
当"想搞笑的表现高深的感觉",使用"文言文句式"
|
||||
|
||||
现在请你概括
|
||||
"""
|
||||
Prompt(personality_expression_prompt, "personality_expression_prompt")
|
||||
|
||||
learn_grammar_prompt = """
|
||||
{chat_str}
|
||||
|
||||
请从上面这段群聊中概括除了人名为"麦麦"之外的人的语法和句法特点,只考虑纯文字,不要考虑表情包和图片
|
||||
不要总结【图片】,【动画表情】,[图片],[动画表情],不总结 表情符号
|
||||
不要涉及具体的人名,只考虑语法和句法特点,
|
||||
语法和句法特点要包括,句子长短(具体字数),如何分局,有何种语病,如何拆分句子。
|
||||
总结成如下格式的规律,总结的内容要简洁,不浮夸:
|
||||
当"xxx"时,可以"xxx"
|
||||
|
||||
例如:
|
||||
当"表达观点较复杂"时,使用"省略主语"的句法
|
||||
当"不用详细说明的一般表达"时,使用"非常简洁的句子"的句法
|
||||
当"需要单纯简单的确认"时,使用"单字或几个字的肯定"的句法
|
||||
|
||||
注意不要总结你自己的发言
|
||||
现在请你概括
|
||||
"""
|
||||
Prompt(learn_grammar_prompt, "learn_grammar_prompt")
|
||||
|
||||
|
||||
class ExpressionLearner:
|
||||
def __init__(self) -> None:
|
||||
self.express_learn_model: LLMRequest = LLMRequest(
|
||||
model=global_config.llm_normal,
|
||||
temperature=global_config.llm_normal["temp"],
|
||||
temperature=0.1,
|
||||
max_tokens=256,
|
||||
request_type="response_heartflow",
|
||||
)
|
||||
@@ -73,17 +89,22 @@ class ExpressionLearner:
|
||||
读取/data/expression/learnt/{chat_id}/expressions.json和/data/expression/personality/expressions.json
|
||||
返回(learnt_expressions, personality_expressions)
|
||||
"""
|
||||
learnt_file = os.path.join("data", "expression", "learnt", str(chat_id), "expressions.json")
|
||||
learnt_style_file = os.path.join("data", "expression", "learnt_style", str(chat_id), "expressions.json")
|
||||
learnt_grammar_file = os.path.join("data", "expression", "learnt_grammar", str(chat_id), "expressions.json")
|
||||
personality_file = os.path.join("data", "expression", "personality", "expressions.json")
|
||||
learnt_expressions = []
|
||||
learnt_style_expressions = []
|
||||
learnt_grammar_expressions = []
|
||||
personality_expressions = []
|
||||
if os.path.exists(learnt_file):
|
||||
with open(learnt_file, "r", encoding="utf-8") as f:
|
||||
learnt_expressions = json.load(f)
|
||||
if os.path.exists(learnt_style_file):
|
||||
with open(learnt_style_file, "r", encoding="utf-8") as f:
|
||||
learnt_style_expressions = json.load(f)
|
||||
if os.path.exists(learnt_grammar_file):
|
||||
with open(learnt_grammar_file, "r", encoding="utf-8") as f:
|
||||
learnt_grammar_expressions = json.load(f)
|
||||
if os.path.exists(personality_file):
|
||||
with open(personality_file, "r", encoding="utf-8") as f:
|
||||
personality_expressions = json.load(f)
|
||||
return learnt_expressions, personality_expressions
|
||||
return learnt_style_expressions, learnt_grammar_expressions, personality_expressions
|
||||
|
||||
def is_similar(self, s1: str, s2: str) -> bool:
|
||||
"""
|
||||
@@ -98,23 +119,48 @@ class ExpressionLearner:
|
||||
return same / min_len > 0.8
|
||||
|
||||
async def learn_and_store_expression(self) -> List[Tuple[str, str, str]]:
|
||||
"""选择从当前到最近1小时内的随机10条消息,然后学习这些消息的表达方式"""
|
||||
logger.info("开始学习表达方式...")
|
||||
expressions: Optional[List[Tuple[str, str, str]]] = await self.learn_expression()
|
||||
logger.info(f"学习到{len(expressions) if expressions else 0}条表达方式")
|
||||
# expressions: List[(chat_id, situation, style)]
|
||||
if not expressions:
|
||||
logger.info("没有学习到表达方式")
|
||||
"""
|
||||
学习并存储表达方式,分别学习语言风格和句法特点
|
||||
"""
|
||||
learnt_style: Optional[List[Tuple[str, str, str]]] = await self.learn_and_store(type="style", num=3)
|
||||
if not learnt_style:
|
||||
return []
|
||||
|
||||
learnt_grammar: Optional[List[Tuple[str, str, str]]] = await self.learn_and_store(type="grammar", num=2)
|
||||
if not learnt_grammar:
|
||||
return []
|
||||
|
||||
return learnt_style, learnt_grammar
|
||||
|
||||
async def learn_and_store(self, type: str, num: int = 10) -> List[Tuple[str, str, str]]:
|
||||
"""
|
||||
选择从当前到最近1小时内的随机num条消息,然后学习这些消息的表达方式
|
||||
type: "style" or "grammar"
|
||||
"""
|
||||
if type == "style":
|
||||
type_str = "语言风格"
|
||||
elif type == "grammar":
|
||||
type_str = "句法特点"
|
||||
else:
|
||||
raise ValueError(f"Invalid type: {type}")
|
||||
logger.info(f"开始学习{type_str}...")
|
||||
learnt_expressions: Optional[List[Tuple[str, str, str]]] = await self.learn_expression(type, num)
|
||||
logger.info(f"学习到{len(learnt_expressions) if learnt_expressions else 0}条{type_str}")
|
||||
# learnt_expressions: List[(chat_id, situation, style)]
|
||||
|
||||
if not learnt_expressions:
|
||||
logger.info(f"没有学习到{type_str}")
|
||||
return []
|
||||
|
||||
# 按chat_id分组
|
||||
chat_dict: Dict[str, List[Dict[str, str]]] = {}
|
||||
for chat_id, situation, style in expressions:
|
||||
for chat_id, situation, style in learnt_expressions:
|
||||
if chat_id not in chat_dict:
|
||||
chat_dict[chat_id] = []
|
||||
chat_dict[chat_id].append({"situation": situation, "style": style})
|
||||
# 存储到/data/expression/对应chat_id/expressions.json
|
||||
for chat_id, expr_list in chat_dict.items():
|
||||
dir_path = os.path.join("data", "expression", "learnt", str(chat_id))
|
||||
dir_path = os.path.join("data", "expression", f"learnt_{type}", str(chat_id))
|
||||
os.makedirs(dir_path, exist_ok=True)
|
||||
file_path = os.path.join(dir_path, "expressions.json")
|
||||
# 若已存在,先读出合并
|
||||
@@ -154,17 +200,26 @@ class ExpressionLearner:
|
||||
old_data.append(new_expr)
|
||||
with open(file_path, "w", encoding="utf-8") as f:
|
||||
json.dump(old_data, f, ensure_ascii=False, indent=2)
|
||||
return expressions
|
||||
return learnt_expressions
|
||||
|
||||
async def learn_expression(self) -> Optional[List[Tuple[str, str, str]]]:
|
||||
"""选择从当前到最近1小时内的随机10条消息,然后学习这些消息的表达方式
|
||||
async def learn_expression(self, type: str, num: int = 10) -> Optional[List[Tuple[str, str, str]]]:
|
||||
"""选择从当前到最近1小时内的随机num条消息,然后学习这些消息的表达方式
|
||||
|
||||
Args:
|
||||
chat_stream (ChatStream): _description_
|
||||
type: "style" or "grammar"
|
||||
"""
|
||||
if type == "style":
|
||||
type_str = "语言风格"
|
||||
prompt = "learn_style_prompt"
|
||||
elif type == "grammar":
|
||||
type_str = "句法特点"
|
||||
prompt = "learn_grammar_prompt"
|
||||
else:
|
||||
raise ValueError(f"Invalid type: {type}")
|
||||
|
||||
current_time = time.time()
|
||||
random_msg: Optional[List[Dict[str, Any]]] = get_raw_msg_by_timestamp_random(
|
||||
current_time - 3600 * 24, current_time, limit=10
|
||||
current_time - 3600 * 24, current_time, limit=num
|
||||
)
|
||||
if not random_msg:
|
||||
return None
|
||||
@@ -173,15 +228,19 @@ class ExpressionLearner:
|
||||
random_msg_str: str = await build_readable_messages(random_msg, timestamp_mode="normal")
|
||||
|
||||
prompt: str = await global_prompt_manager.format_prompt(
|
||||
"learn_expression_prompt",
|
||||
prompt,
|
||||
chat_str=random_msg_str,
|
||||
)
|
||||
|
||||
logger.debug(f"学习表达方式的prompt: {prompt}")
|
||||
logger.debug(f"学习{type_str}的prompt: {prompt}")
|
||||
|
||||
response, _ = await self.express_learn_model.generate_response_async(prompt)
|
||||
try:
|
||||
response, _ = await self.express_learn_model.generate_response_async(prompt)
|
||||
except Exception as e:
|
||||
logger.error(f"学习{type_str}失败: {e}")
|
||||
return None
|
||||
|
||||
logger.debug(f"学习表达方式的response: {response}")
|
||||
logger.debug(f"学习{type_str}的response: {response}")
|
||||
|
||||
expressions: List[Tuple[str, str, str]] = self.parse_expression_response(response, chat_id)
|
||||
|
||||
@@ -232,7 +291,13 @@ class ExpressionLearner:
|
||||
personality=global_config.expression_style,
|
||||
)
|
||||
logger.info(f"个性表达方式提取prompt: {prompt}")
|
||||
response, _ = await self.express_learn_model.generate_response_async(prompt)
|
||||
|
||||
try:
|
||||
response, _ = await self.express_learn_model.generate_response_async(prompt)
|
||||
except Exception as e:
|
||||
logger.error(f"个性表达方式提取失败: {e}")
|
||||
return
|
||||
|
||||
logger.info(f"个性表达方式提取response: {response}")
|
||||
# chat_id用personality
|
||||
expressions = self.parse_expression_response(response, "personality")
|
||||
File renamed without changes.
@@ -6,32 +6,32 @@ import time
|
||||
import traceback
|
||||
from collections import deque
|
||||
from typing import List, Optional, Dict, Any, Deque, Callable, Coroutine
|
||||
from src.plugins.chat.chat_stream import ChatStream
|
||||
from src.plugins.chat.chat_stream import chat_manager
|
||||
from src.chat.message_receive.chat_stream import ChatStream
|
||||
from src.chat.message_receive.chat_stream import chat_manager
|
||||
from rich.traceback import install
|
||||
from src.common.logger_manager import get_logger
|
||||
from src.plugins.models.utils_model import LLMRequest
|
||||
from src.chat.models.utils_model import LLMRequest
|
||||
from src.config.config import global_config
|
||||
from src.plugins.utils.timer_calculator import Timer
|
||||
from src.chat.utils.timer_calculator import Timer
|
||||
from src.heart_flow.observation.observation import Observation
|
||||
from src.plugins.heartFC_chat.heartflow_prompt_builder import prompt_builder
|
||||
from src.plugins.heartFC_chat.heartFC_Cycleinfo import CycleDetail
|
||||
from src.chat.focus_chat.heartflow_prompt_builder import prompt_builder
|
||||
from src.chat.focus_chat.heartFC_Cycleinfo import CycleDetail
|
||||
from src.heart_flow.observation.chatting_observation import ChattingObservation
|
||||
from src.heart_flow.utils_chat import get_chat_type_and_target_info
|
||||
from src.heart_flow.info.info_base import InfoBase
|
||||
from src.heart_flow.info.obs_info import ObsInfo
|
||||
from src.heart_flow.info.cycle_info import CycleInfo
|
||||
from src.heart_flow.info.mind_info import MindInfo
|
||||
from src.heart_flow.info.structured_info import StructuredInfo
|
||||
from src.plugins.heartFC_chat.info_processors.chattinginfo_processor import ChattingInfoProcessor
|
||||
from src.plugins.heartFC_chat.info_processors.mind_processor import MindProcessor
|
||||
from src.chat.focus_chat.info.info_base import InfoBase
|
||||
from src.chat.focus_chat.info.obs_info import ObsInfo
|
||||
from src.chat.focus_chat.info.cycle_info import CycleInfo
|
||||
from src.chat.focus_chat.info.mind_info import MindInfo
|
||||
from src.chat.focus_chat.info.structured_info import StructuredInfo
|
||||
from src.chat.focus_chat.info_processors.chattinginfo_processor import ChattingInfoProcessor
|
||||
from src.chat.focus_chat.info_processors.mind_processor import MindProcessor
|
||||
from src.heart_flow.observation.memory_observation import MemoryObservation
|
||||
from src.heart_flow.observation.hfcloop_observation import HFCloopObservation
|
||||
from src.heart_flow.observation.working_observation import WorkingObservation
|
||||
from src.plugins.heartFC_chat.info_processors.tool_processor import ToolProcessor
|
||||
from src.plugins.heartFC_chat.expressors.default_expressor import DefaultExpressor
|
||||
from src.plugins.heartFC_chat.hfc_utils import _create_empty_anchor_message
|
||||
from src.plugins.heartFC_chat.memory_activator import MemoryActivator
|
||||
from src.chat.focus_chat.info_processors.tool_processor import ToolProcessor
|
||||
from src.chat.focus_chat.expressors.default_expressor import DefaultExpressor
|
||||
from src.chat.focus_chat.hfc_utils import _create_empty_anchor_message
|
||||
from src.chat.focus_chat.memory_activator import MemoryActivator
|
||||
|
||||
install(extra_lines=3)
|
||||
|
||||
File renamed without changes.
@@ -5,7 +5,7 @@ HeartFC_chat 是一个基于心流理论的聊天系统,通过模拟人类的
|
||||
## 核心工作流程
|
||||
|
||||
### 1. 消息处理与存储 (HeartFCProcessor)
|
||||
[代码位置: src/plugins/heartFC_chat/heartflow_processor.py]
|
||||
[代码位置: src/plugins/focus_chat/heartflow_processor.py]
|
||||
|
||||
消息处理器负责接收和预处理消息,主要完成以下工作:
|
||||
```mermaid
|
||||
@@ -23,7 +23,7 @@ graph TD
|
||||
- 消息存储:`storage.store_message()` [行号: 108]
|
||||
|
||||
### 2. 对话管理循环 (HeartFChatting)
|
||||
[代码位置: src/plugins/heartFC_chat/heartFC_chat.py]
|
||||
[代码位置: src/plugins/focus_chat/focus_chat.py]
|
||||
|
||||
HeartFChatting是系统的核心组件,实现了完整的对话管理循环:
|
||||
|
||||
@@ -55,7 +55,7 @@ graph TD
|
||||
* 处理表情:`_handle_emoji()` [行号: 527-567]
|
||||
|
||||
### 3. 回复生成机制 (HeartFCGenerator)
|
||||
[代码位置: src/plugins/heartFC_chat/heartFC_generator.py]
|
||||
[代码位置: src/plugins/focus_chat/heartFC_generator.py]
|
||||
|
||||
回复生成器负责产生高质量的回复内容:
|
||||
|
||||
@@ -74,7 +74,7 @@ graph TD
|
||||
* 响应处理:`_process_response()` [行号: 97-106]
|
||||
|
||||
### 4. 提示词构建系统 (HeartFlowPromptBuilder)
|
||||
[代码位置: src/plugins/heartFC_chat/heartflow_prompt_builder.py]
|
||||
[代码位置: src/plugins/focus_chat/heartflow_prompt_builder.py]
|
||||
|
||||
提示词构建器支持两种工作模式,HeartFC_chat专门使用Focus模式,而Normal模式是为normal_chat设计的:
|
||||
|
||||
@@ -106,8 +106,8 @@ graph TD
|
||||
## 智能特性
|
||||
|
||||
### 1. 对话决策机制
|
||||
- LLM决策工具定义:`PLANNER_TOOL_DEFINITION` [heartFC_chat.py 行号: 13-42]
|
||||
- 决策执行:`_planner()` [heartFC_chat.py 行号: 282-386]
|
||||
- LLM决策工具定义:`PLANNER_TOOL_DEFINITION` [focus_chat.py 行号: 13-42]
|
||||
- 决策执行:`_planner()` [focus_chat.py 行号: 282-386]
|
||||
- 考虑因素:
|
||||
* 上下文相关性
|
||||
* 情感状态
|
||||
@@ -115,7 +115,7 @@ graph TD
|
||||
* 对话时机
|
||||
|
||||
### 2. 状态管理
|
||||
[代码位置: src/plugins/heartFC_chat/heartFC_chat.py]
|
||||
[代码位置: src/plugins/focus_chat/focus_chat.py]
|
||||
- 状态机实现:`HeartFChatting`类 [行号: 44-567]
|
||||
- 核心功能:
|
||||
* 初始化:`_initialize()` [行号: 89-112]
|
||||
@@ -123,7 +123,7 @@ graph TD
|
||||
* 状态转换:`_handle_loop_completion()` [行号: 166-190]
|
||||
|
||||
### 3. 回复生成策略
|
||||
[代码位置: src/plugins/heartFC_chat/heartFC_generator.py]
|
||||
[代码位置: src/plugins/focus_chat/heartFC_generator.py]
|
||||
- 温度调节:`current_model.temperature = global_config.llm_normal["temp"] * arousal_multiplier` [行号: 48]
|
||||
- 生成控制:`_generate_response_with_model()` [行号: 69-95]
|
||||
- 响应处理:`_process_response()` [行号: 97-106]
|
||||
@@ -133,7 +133,7 @@ graph TD
|
||||
### 关键参数
|
||||
- LLM配置:`model_normal` [heartFC_generator.py 行号: 32-37]
|
||||
- 过滤规则:`_check_ban_words()`, `_check_ban_regex()` [heartflow_processor.py 行号: 196-215]
|
||||
- 状态控制:`INITIAL_DURATION = 60.0` [heartFC_chat.py 行号: 11]
|
||||
- 状态控制:`INITIAL_DURATION = 60.0` [focus_chat.py 行号: 11]
|
||||
|
||||
### 优化建议
|
||||
1. 调整LLM参数:`temperature`和`max_tokens`
|
||||
@@ -1,14 +1,11 @@
|
||||
# src/plugins/heartFC_chat/heartFC_sender.py
|
||||
import asyncio # 重新导入 asyncio
|
||||
import asyncio
|
||||
from typing import Dict, Optional # 重新导入类型
|
||||
from ..chat.message import MessageSending, MessageThinking # 只保留 MessageSending 和 MessageThinking
|
||||
|
||||
# from ..message import global_api
|
||||
from src.plugins.message.api import global_api
|
||||
from ..storage.storage import MessageStorage
|
||||
from ..chat.utils import truncate_message
|
||||
from src.chat.message_receive.message import MessageSending, MessageThinking
|
||||
from src.common.message.api import global_api
|
||||
from src.chat.message_receive.storage import MessageStorage
|
||||
from src.chat.utils.utils import truncate_message
|
||||
from src.common.logger_manager import get_logger
|
||||
from src.plugins.chat.utils import calculate_typing_time
|
||||
from src.chat.utils.utils import calculate_typing_time
|
||||
from rich.traceback import install
|
||||
|
||||
install(extra_lines=3)
|
||||
+7
-7
@@ -2,16 +2,16 @@ import time
|
||||
import traceback
|
||||
from ..memory_system.Hippocampus import HippocampusManager
|
||||
from ...config.config import global_config
|
||||
from ..chat.message import MessageRecv
|
||||
from ..storage.storage import MessageStorage
|
||||
from ..chat.utils import is_mentioned_bot_in_message
|
||||
from ..message_receive.message import MessageRecv
|
||||
from ..message_receive.storage import MessageStorage
|
||||
from ..utils.utils import is_mentioned_bot_in_message
|
||||
from maim_message import Seg
|
||||
from src.heart_flow.heartflow import heartflow
|
||||
from src.common.logger_manager import get_logger
|
||||
from ..chat.chat_stream import chat_manager
|
||||
from ..chat.message_buffer import message_buffer
|
||||
from ..message_receive.chat_stream import chat_manager
|
||||
from ..message_receive.message_buffer import message_buffer
|
||||
from ..utils.timer_calculator import Timer
|
||||
from src.plugins.person_info.relationship_manager import relationship_manager
|
||||
from src.chat.person_info.relationship_manager import relationship_manager
|
||||
from typing import Optional, Tuple, Dict, Any
|
||||
|
||||
logger = get_logger("chat")
|
||||
@@ -215,7 +215,7 @@ class HeartFCProcessor:
|
||||
f"[{current_time}][{mes_name}]"
|
||||
f"{userinfo.user_nickname}:"
|
||||
f"{message.processed_plain_text}"
|
||||
f"[兴趣度: {interested_rate:.2f}]"
|
||||
f"[激活: {interested_rate:.1f}]"
|
||||
)
|
||||
|
||||
# 8. 关系处理
|
||||
+59
-97
@@ -1,21 +1,20 @@
|
||||
import random
|
||||
from ...config.config import global_config
|
||||
from src.config.config import global_config
|
||||
from src.common.logger_manager import get_logger
|
||||
from ...individuality.individuality import Individuality
|
||||
from src.plugins.utils.prompt_builder import Prompt, global_prompt_manager
|
||||
from src.plugins.utils.chat_message_builder import build_readable_messages, get_raw_msg_before_timestamp_with_chat
|
||||
from src.plugins.person_info.relationship_manager import relationship_manager
|
||||
from src.plugins.chat.utils import get_embedding
|
||||
from src.individuality.individuality import Individuality
|
||||
from src.chat.utils.prompt_builder import Prompt, global_prompt_manager
|
||||
from src.chat.utils.chat_message_builder import build_readable_messages, get_raw_msg_before_timestamp_with_chat
|
||||
from src.chat.person_info.relationship_manager import relationship_manager
|
||||
from src.chat.utils.utils import get_embedding
|
||||
import time
|
||||
from typing import Union, Optional, Dict, Any
|
||||
from ...common.database import db
|
||||
from ..chat.utils import get_recent_group_speaker
|
||||
from src.common.database import db
|
||||
from src.chat.utils.utils import get_recent_group_speaker
|
||||
from src.manager.mood_manager import mood_manager
|
||||
from ..memory_system.Hippocampus import HippocampusManager
|
||||
from ..schedule.schedule_generator import bot_schedule
|
||||
from ..knowledge.knowledge_lib import qa_manager
|
||||
from .expressors.exprssion_learner import expression_learner
|
||||
from src.chat.memory_system.Hippocampus import HippocampusManager
|
||||
from src.chat.knowledge.knowledge_lib import qa_manager
|
||||
from src.chat.focus_chat.expressors.exprssion_learner import expression_learner
|
||||
import traceback
|
||||
import random
|
||||
|
||||
|
||||
logger = get_logger("prompt")
|
||||
@@ -24,21 +23,22 @@ logger = get_logger("prompt")
|
||||
def init_prompt():
|
||||
Prompt(
|
||||
"""
|
||||
你可以参考以下的语言习惯,如果情景合适就使用,不要盲目使用:
|
||||
{language_habits}
|
||||
你可以参考以下的语言习惯,如果情景合适就使用,不要盲目使用,不要生硬使用,而是结合到表达中:
|
||||
{style_habbits}
|
||||
|
||||
不要生硬使用,而是结合到表达中
|
||||
|
||||
你现在正在群里聊天,以下是群里正在进行的聊天内容:
|
||||
{chat_info}
|
||||
|
||||
你只需要了解聊天记录中的内容就好
|
||||
|
||||
{chat_target}
|
||||
你的名字是{bot_name},{prompt_personality},你想表达:{in_mind_reply},原因是:{reason}
|
||||
以上是聊天内容,你需要了解聊天记录中的内容
|
||||
|
||||
请注意,请根据你想表达的内容和原因,参考聊天内容,组织一条日常且口语化的回复
|
||||
要求回复尽量简短一些。{reply_style2}。{prompt_ger}。可以参考贴吧,知乎或者微博的回复风格,你可以完全重组回复,保留最基本的表达含义就好,但注意简短,保持一个话题。
|
||||
{reply_style1},说中文,不要刻意突出自身学科背景。不要浮夸,不要用夸张修辞,平淡一些。不要输出多余内容(包括前后缀,冒号和引号,括号,表情包,at或 @等 ),只输出一条回复就好。
|
||||
{chat_target}
|
||||
你的名字是{bot_name},{prompt_personality},在这聊天中,"{target_message}"引起了你的注意,你想表达:{in_mind_reply},原因是:{reason}。你现在要思考怎么回复
|
||||
你需要使用合适的语法和句法,参考聊天内容,组织一条日常且口语化的回复。
|
||||
请你根据情景使用以下句法:
|
||||
{grammar_habbits}
|
||||
回复尽量简短一些。可以参考贴吧,知乎和微博的回复风格,你可以完全重组回复,保留最基本的表达含义就好,但注意回复要简短。
|
||||
回复不要浮夸,不要用夸张修辞,平淡一些。不要输出多余内容(包括前后缀,冒号和引号,括号,表情包,at或 @等 ),只输出一条回复就好。
|
||||
现在,你说:
|
||||
""",
|
||||
"heart_flow_prompt",
|
||||
)
|
||||
@@ -119,7 +119,6 @@ def init_prompt():
|
||||
{memory_prompt}
|
||||
{relation_prompt}
|
||||
{prompt_info}
|
||||
{schedule_prompt}
|
||||
{chat_target}
|
||||
{chat_talking_prompt}
|
||||
现在"{sender_name}"说的:{message_txt}。引起了你的注意,你想要在群里发言或者回复这条消息。\n
|
||||
@@ -137,7 +136,7 @@ def init_prompt():
|
||||
"你回忆起:{related_memory_info}。\n以上是你的回忆,不一定是目前聊天里的人说的,也不一定是现在发生的事情,请记住。\n",
|
||||
"memory_prompt",
|
||||
)
|
||||
Prompt("你现在正在做的事情是:{schedule_info}", "schedule_prompt")
|
||||
|
||||
Prompt("\n你有以下这些**知识**:\n{prompt_info}\n请你**记住上面的知识**,之后可能会用到。\n", "knowledge_prompt")
|
||||
|
||||
# --- Template for HeartFChatting (FOCUSED mode) ---
|
||||
@@ -168,7 +167,6 @@ def init_prompt():
|
||||
{memory_prompt}
|
||||
{relation_prompt}
|
||||
{prompt_info}
|
||||
{schedule_prompt}
|
||||
你正在和 {sender_name} 私聊。
|
||||
聊天记录如下:
|
||||
{chat_talking_prompt}
|
||||
@@ -186,7 +184,7 @@ def init_prompt():
|
||||
|
||||
|
||||
async def _build_prompt_focus(
|
||||
reason, current_mind_info, structured_info, chat_stream, sender_name, in_mind_reply
|
||||
reason, current_mind_info, structured_info, chat_stream, sender_name, in_mind_reply, target_message
|
||||
) -> str:
|
||||
individuality = Individuality.get_instance()
|
||||
prompt_personality = individuality.get_prompt(x_person=0, level=2)
|
||||
@@ -206,38 +204,12 @@ async def _build_prompt_focus(
|
||||
chat_talking_prompt = await build_readable_messages(
|
||||
message_list_before_now,
|
||||
replace_bot_name=True,
|
||||
merge_messages=False,
|
||||
timestamp_mode="normal",
|
||||
merge_messages=True,
|
||||
timestamp_mode="relative",
|
||||
read_mark=0.0,
|
||||
truncate=True,
|
||||
)
|
||||
|
||||
prompt_ger = ""
|
||||
if random.random() < 0.04:
|
||||
prompt_ger += "你喜欢用倒装句"
|
||||
if random.random() < 0.02:
|
||||
prompt_ger += "你喜欢用反问句"
|
||||
|
||||
reply_styles1 = [
|
||||
("给出日常且口语化的回复,平淡一些", 0.4),
|
||||
("给出非常简短的回复", 0.4),
|
||||
("给出缺失主语的回复,简短", 0.15),
|
||||
("给出带有语病的回复,朴实平淡", 0.05),
|
||||
]
|
||||
reply_style1_chosen = random.choices(
|
||||
[style[0] for style in reply_styles1], weights=[style[1] for style in reply_styles1], k=1
|
||||
)[0]
|
||||
|
||||
reply_styles2 = [
|
||||
("不要回复的太有条理,可以有个性", 0.7),
|
||||
("不要回复的太有条理,可以复读,但是不要复读自己说的话", 0.1),
|
||||
("回复的认真一些", 0.1),
|
||||
("可以回复单个表情符号", 0.05),
|
||||
]
|
||||
reply_style2_chosen = random.choices(
|
||||
[style[0] for style in reply_styles2], weights=[style[1] for style in reply_styles2], k=1
|
||||
)[0]
|
||||
|
||||
if structured_info:
|
||||
structured_info_prompt = await global_prompt_manager.format_prompt(
|
||||
"info_from_tools", structured_info=structured_info
|
||||
@@ -246,33 +218,36 @@ async def _build_prompt_focus(
|
||||
structured_info_prompt = ""
|
||||
|
||||
# 从/data/expression/对应chat_id/expressions.json中读取表达方式
|
||||
learnt_expressions, personality_expressions = await expression_learner.get_expression_by_chat_id(
|
||||
chat_stream.stream_id
|
||||
)
|
||||
language_habits = []
|
||||
# 1. learnt_expressions加权随机选5条
|
||||
if learnt_expressions:
|
||||
weights = [expr["count"] for expr in learnt_expressions]
|
||||
selected_learnt = weighted_sample_no_replacement(learnt_expressions, weights, 5)
|
||||
(
|
||||
learnt_style_expressions,
|
||||
learnt_grammar_expressions,
|
||||
personality_expressions,
|
||||
) = await expression_learner.get_expression_by_chat_id(chat_stream.stream_id)
|
||||
|
||||
style_habbits = []
|
||||
grammar_habbits = []
|
||||
# 1. learnt_expressions加权随机选3条
|
||||
if learnt_style_expressions:
|
||||
weights = [expr["count"] for expr in learnt_style_expressions]
|
||||
selected_learnt = weighted_sample_no_replacement(learnt_style_expressions, weights, 3)
|
||||
for expr in selected_learnt:
|
||||
if isinstance(expr, dict) and "situation" in expr and "style" in expr:
|
||||
language_habits.append(f"当{expr['situation']}时,使用 {expr['style']}")
|
||||
# 2. personality_expressions随机选1条
|
||||
style_habbits.append(f"当{expr['situation']}时,使用 {expr['style']}")
|
||||
# 2. learnt_grammar_expressions加权随机选3条
|
||||
if learnt_grammar_expressions:
|
||||
weights = [expr["count"] for expr in learnt_grammar_expressions]
|
||||
selected_learnt = weighted_sample_no_replacement(learnt_grammar_expressions, weights, 3)
|
||||
for expr in selected_learnt:
|
||||
if isinstance(expr, dict) and "situation" in expr and "style" in expr:
|
||||
grammar_habbits.append(f"当{expr['situation']}时,使用 {expr['style']}")
|
||||
# 3. personality_expressions随机选1条
|
||||
if personality_expressions:
|
||||
expr = random.choice(personality_expressions)
|
||||
if isinstance(expr, dict) and "situation" in expr and "style" in expr:
|
||||
language_habits.append(f"当{expr['situation']}时,使用 {expr['style']}")
|
||||
# 3. 如果都没有,给默认
|
||||
if not language_habits:
|
||||
language_habits = [
|
||||
"当表示惊讶无语是,使用 不是?",
|
||||
"当表示无语时,使用 阿这",
|
||||
"当用调侃的方式称呼某人,使用 哈基X",
|
||||
"当表示讽刺的赞同时,使用 对对对",
|
||||
"当你想说明某个观点,但懒得明说,使用 懂的都懂",
|
||||
]
|
||||
language_habits = random.sample(language_habits, 6)
|
||||
language_habits_str = "\n".join(language_habits)
|
||||
style_habbits.append(f"当{expr['situation']}时,使用 {expr['style']}")
|
||||
|
||||
style_habbits_str = "\n".join(style_habbits)
|
||||
grammar_habbits_str = "\n".join(grammar_habbits)
|
||||
|
||||
logger.debug("开始构建 focus prompt")
|
||||
|
||||
@@ -286,20 +261,17 @@ async def _build_prompt_focus(
|
||||
prompt = await global_prompt_manager.format_prompt(
|
||||
template_name,
|
||||
# info_from_tools=structured_info_prompt,
|
||||
language_habits=language_habits_str,
|
||||
style_habbits=style_habbits_str,
|
||||
grammar_habbits=grammar_habbits_str,
|
||||
chat_target=chat_target_1, # Used in group template
|
||||
# chat_talking_prompt=chat_talking_prompt,
|
||||
chat_info=chat_talking_prompt,
|
||||
bot_name=global_config.BOT_NICKNAME,
|
||||
# prompt_personality=prompt_personality,
|
||||
prompt_personality="",
|
||||
# chat_target_2=chat_target_2, # Used in group template
|
||||
# current_mind_info=current_mind_info,
|
||||
reply_style2=reply_style2_chosen,
|
||||
reply_style1=reply_style1_chosen,
|
||||
reason=reason,
|
||||
in_mind_reply=in_mind_reply,
|
||||
prompt_ger=prompt_ger,
|
||||
target_message=target_message,
|
||||
# moderation_prompt=await global_prompt_manager.get_prompt_async("moderation_prompt"),
|
||||
# sender_name is not used in the group template
|
||||
)
|
||||
@@ -314,10 +286,7 @@ async def _build_prompt_focus(
|
||||
prompt_personality=prompt_personality,
|
||||
# chat_target and chat_target_2 are not used in private template
|
||||
current_mind_info=current_mind_info,
|
||||
reply_style2=reply_style2_chosen,
|
||||
reply_style1=reply_style1_chosen,
|
||||
reason=reason,
|
||||
prompt_ger=prompt_ger,
|
||||
moderation_prompt=await global_prompt_manager.get_prompt_async("moderation_prompt"),
|
||||
)
|
||||
# --- End choosing template ---
|
||||
@@ -464,13 +433,6 @@ class PromptBuilder:
|
||||
end_time = time.time()
|
||||
logger.debug(f"知识检索耗时: {(end_time - start_time):.3f}秒")
|
||||
|
||||
if global_config.ENABLE_SCHEDULE_GEN:
|
||||
schedule_prompt = await global_prompt_manager.format_prompt(
|
||||
"schedule_prompt", schedule_info=bot_schedule.get_current_num_task(num=1, time_info=False)
|
||||
)
|
||||
else:
|
||||
schedule_prompt = ""
|
||||
|
||||
logger.debug("开始构建 normal prompt")
|
||||
|
||||
# --- Choose template and format based on chat type ---
|
||||
@@ -486,7 +448,6 @@ class PromptBuilder:
|
||||
sender_name=effective_sender_name,
|
||||
memory_prompt=memory_prompt,
|
||||
prompt_info=prompt_info,
|
||||
schedule_prompt=schedule_prompt,
|
||||
chat_target=chat_target_1,
|
||||
chat_target_2=chat_target_2,
|
||||
chat_talking_prompt=chat_talking_prompt,
|
||||
@@ -511,7 +472,6 @@ class PromptBuilder:
|
||||
sender_name=effective_sender_name,
|
||||
memory_prompt=memory_prompt,
|
||||
prompt_info=prompt_info,
|
||||
schedule_prompt=schedule_prompt,
|
||||
chat_talking_prompt=chat_talking_prompt,
|
||||
message_txt=message_txt,
|
||||
bot_name=global_config.BOT_NICKNAME,
|
||||
@@ -861,7 +821,7 @@ class PromptBuilder:
|
||||
return "[构建 Planner Prompt 时出错]"
|
||||
|
||||
|
||||
def weighted_sample_no_replacement(items, weights, k):
|
||||
def weighted_sample_no_replacement(items, weights, k) -> list:
|
||||
"""
|
||||
加权且不放回地随机抽取k个元素。
|
||||
|
||||
@@ -872,6 +832,8 @@ def weighted_sample_no_replacement(items, weights, k):
|
||||
返回:
|
||||
selected: 按权重加权且不重复抽取的k个元素组成的列表
|
||||
|
||||
如果 items 中的元素不足 k 个,就只会返回所有可用的元素
|
||||
|
||||
实现思路:
|
||||
每次从当前池中按权重加权随机选出一个元素,选中后将其从池中移除,重复k次。
|
||||
这样保证了:
|
||||
@@ -1,9 +1,9 @@
|
||||
import time
|
||||
import traceback
|
||||
from typing import Optional
|
||||
from src.plugins.chat.message import MessageRecv, BaseMessageInfo
|
||||
from src.plugins.chat.chat_stream import ChatStream
|
||||
from src.plugins.chat.message import UserInfo
|
||||
from src.chat.message_receive.message import MessageRecv, BaseMessageInfo
|
||||
from src.chat.message_receive.chat_stream import ChatStream
|
||||
from src.chat.message_receive.message import UserInfo
|
||||
from src.common.logger_manager import get_logger
|
||||
import json
|
||||
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+1
-1
@@ -1,6 +1,6 @@
|
||||
from abc import ABC, abstractmethod
|
||||
from typing import List, Any, Optional, Dict
|
||||
from src.heart_flow.info.info_base import InfoBase
|
||||
from src.chat.focus_chat.info.info_base import InfoBase
|
||||
from src.heart_flow.observation.observation import Observation
|
||||
from src.common.logger_manager import get_logger
|
||||
|
||||
+4
-4
@@ -1,15 +1,15 @@
|
||||
from typing import List, Optional, Any
|
||||
from src.heart_flow.info.obs_info import ObsInfo
|
||||
from src.chat.focus_chat.info.obs_info import ObsInfo
|
||||
from src.heart_flow.observation.observation import Observation
|
||||
from src.heart_flow.info.info_base import InfoBase
|
||||
from src.chat.focus_chat.info.info_base import InfoBase
|
||||
from .base_processor import BaseProcessor
|
||||
from src.common.logger_manager import get_logger
|
||||
from src.heart_flow.observation.chatting_observation import ChattingObservation
|
||||
from src.heart_flow.observation.hfcloop_observation import HFCloopObservation
|
||||
from src.heart_flow.info.cycle_info import CycleInfo
|
||||
from src.chat.focus_chat.info.cycle_info import CycleInfo
|
||||
from datetime import datetime
|
||||
from typing import Dict
|
||||
from src.plugins.models.utils_model import LLMRequest
|
||||
from src.chat.models.utils_model import LLMRequest
|
||||
from src.config.config import global_config
|
||||
|
||||
logger = get_logger("observation")
|
||||
+8
-8
@@ -1,28 +1,28 @@
|
||||
from src.heart_flow.observation.chatting_observation import ChattingObservation
|
||||
from src.heart_flow.observation.observation import Observation
|
||||
from src.plugins.models.utils_model import LLMRequest
|
||||
from src.chat.models.utils_model import LLMRequest
|
||||
from src.config.config import global_config
|
||||
import time
|
||||
import traceback
|
||||
from src.common.logger_manager import get_logger
|
||||
from src.individuality.individuality import Individuality
|
||||
import random
|
||||
from src.plugins.utils.prompt_builder import Prompt, global_prompt_manager
|
||||
from src.plugins.utils.json_utils import safe_json_dumps
|
||||
from src.plugins.chat.chat_stream import chat_manager
|
||||
from src.chat.utils.prompt_builder import Prompt, global_prompt_manager
|
||||
from src.chat.utils.json_utils import safe_json_dumps
|
||||
from src.chat.message_receive.chat_stream import chat_manager
|
||||
import difflib
|
||||
from src.plugins.person_info.relationship_manager import relationship_manager
|
||||
from src.chat.person_info.relationship_manager import relationship_manager
|
||||
from .base_processor import BaseProcessor
|
||||
from src.heart_flow.info.mind_info import MindInfo
|
||||
from src.chat.focus_chat.info.mind_info import MindInfo
|
||||
from typing import List, Optional
|
||||
from src.heart_flow.observation.hfcloop_observation import HFCloopObservation
|
||||
from src.plugins.heartFC_chat.info_processors.processor_utils import (
|
||||
from src.chat.focus_chat.info_processors.processor_utils import (
|
||||
calculate_similarity,
|
||||
calculate_replacement_probability,
|
||||
get_spark,
|
||||
)
|
||||
from typing import Dict
|
||||
from src.heart_flow.info.info_base import InfoBase
|
||||
from src.chat.focus_chat.info.info_base import InfoBase
|
||||
|
||||
logger = get_logger("sub_heartflow")
|
||||
|
||||
File renamed without changes.
+5
-5
@@ -1,18 +1,18 @@
|
||||
from src.heart_flow.observation.chatting_observation import ChattingObservation
|
||||
from src.plugins.models.utils_model import LLMRequest
|
||||
from src.chat.models.utils_model import LLMRequest
|
||||
from src.config.config import global_config
|
||||
import time
|
||||
from src.common.logger_manager import get_logger
|
||||
from src.individuality.individuality import Individuality
|
||||
from src.plugins.utils.prompt_builder import Prompt, global_prompt_manager
|
||||
from src.chat.utils.prompt_builder import Prompt, global_prompt_manager
|
||||
from src.tools.tool_use import ToolUser
|
||||
from src.plugins.utils.json_utils import process_llm_tool_calls
|
||||
from src.plugins.person_info.relationship_manager import relationship_manager
|
||||
from src.chat.utils.json_utils import process_llm_tool_calls
|
||||
from src.chat.person_info.relationship_manager import relationship_manager
|
||||
from .base_processor import BaseProcessor
|
||||
from typing import List, Optional, Dict
|
||||
from src.heart_flow.observation.observation import Observation
|
||||
from src.heart_flow.observation.working_observation import WorkingObservation
|
||||
from src.heart_flow.info.structured_info import StructuredInfo
|
||||
from src.chat.focus_chat.info.structured_info import StructuredInfo
|
||||
|
||||
logger = get_logger("tool_use")
|
||||
|
||||
+3
-3
@@ -1,12 +1,12 @@
|
||||
from src.heart_flow.observation.chatting_observation import ChattingObservation
|
||||
from src.heart_flow.observation.working_observation import WorkingObservation
|
||||
from src.heart_flow.observation.hfcloop_observation import HFCloopObservation
|
||||
from src.plugins.models.utils_model import LLMRequest
|
||||
from src.chat.models.utils_model import LLMRequest
|
||||
from src.config.config import global_config
|
||||
from src.common.logger_manager import get_logger
|
||||
from src.plugins.utils.prompt_builder import Prompt
|
||||
from src.chat.utils.prompt_builder import Prompt
|
||||
from datetime import datetime
|
||||
from src.plugins.memory_system.Hippocampus import HippocampusManager
|
||||
from src.chat.memory_system.Hippocampus import HippocampusManager
|
||||
from typing import List, Dict
|
||||
|
||||
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -11,14 +11,14 @@ import networkx as nx
|
||||
import numpy as np
|
||||
from collections import Counter
|
||||
from ...common.database import db
|
||||
from ...plugins.models.utils_model import LLMRequest
|
||||
from ...chat.models.utils_model import LLMRequest
|
||||
from src.common.logger_manager import get_logger
|
||||
from src.plugins.memory_system.sample_distribution import MemoryBuildScheduler # 分布生成器
|
||||
from src.chat.memory_system.sample_distribution import MemoryBuildScheduler # 分布生成器
|
||||
from ..utils.chat_message_builder import (
|
||||
get_raw_msg_by_timestamp,
|
||||
build_readable_messages,
|
||||
) # 导入 build_readable_messages
|
||||
from ..chat.utils import translate_timestamp_to_human_readable
|
||||
from ..utils.utils import translate_timestamp_to_human_readable
|
||||
from .memory_config import MemoryConfig
|
||||
from rich.traceback import install
|
||||
|
||||
@@ -6,7 +6,7 @@ import os
|
||||
|
||||
# 添加项目根目录到系统路径
|
||||
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))))
|
||||
from src.plugins.memory_system.Hippocampus import HippocampusManager
|
||||
from src.chat.memory_system.Hippocampus import HippocampusManager
|
||||
from src.config.config import global_config
|
||||
from rich.traceback import install
|
||||
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -2,7 +2,7 @@ from ..emoji_system.emoji_manager import emoji_manager
|
||||
from ..person_info.relationship_manager import relationship_manager
|
||||
from .chat_stream import chat_manager
|
||||
from .message_sender import message_manager
|
||||
from ..storage.storage import MessageStorage
|
||||
from .storage import MessageStorage
|
||||
|
||||
|
||||
__all__ = [
|
||||
@@ -3,13 +3,13 @@ from typing import Dict, Any
|
||||
|
||||
from src.common.logger_manager import get_logger
|
||||
from src.manager.mood_manager import mood_manager # 导入情绪管理器
|
||||
from .chat_stream import chat_manager
|
||||
from .message import MessageRecv
|
||||
from .only_message_process import MessageProcessor
|
||||
from ..PFC.pfc_manager import PFCManager
|
||||
from ..heartFC_chat.heartflow_processor import HeartFCProcessor
|
||||
from ..utils.prompt_builder import Prompt, global_prompt_manager
|
||||
from ...config.config import global_config
|
||||
from src.chat.message_receive.chat_stream import chat_manager
|
||||
from src.chat.message_receive.message import MessageRecv
|
||||
from src.experimental.only_message_process import MessageProcessor
|
||||
from src.experimental.PFC.pfc_manager import PFCManager
|
||||
from src.chat.focus_chat.heartflow_processor import HeartFCProcessor
|
||||
from src.chat.utils.prompt_builder import Prompt, global_prompt_manager
|
||||
from src.config.config import global_config
|
||||
|
||||
# 定义日志配置
|
||||
|
||||
File renamed without changes.
@@ -7,7 +7,7 @@ import urllib3
|
||||
|
||||
from src.common.logger_manager import get_logger
|
||||
from .chat_stream import ChatStream
|
||||
from .utils_image import image_manager
|
||||
from ..utils.utils_image import image_manager
|
||||
from maim_message import Seg, UserInfo, BaseMessageInfo, MessageBase
|
||||
from rich.traceback import install
|
||||
|
||||
File renamed without changes.
@@ -3,14 +3,14 @@ import asyncio
|
||||
import time
|
||||
from asyncio import Task
|
||||
from typing import Union
|
||||
from src.plugins.message.api import global_api
|
||||
from src.common.message.api import global_api
|
||||
|
||||
# from ...common.database import db # 数据库依赖似乎不需要了,注释掉
|
||||
from .message import MessageSending, MessageThinking, MessageSet
|
||||
|
||||
from ..storage.storage import MessageStorage
|
||||
from .storage import MessageStorage
|
||||
from ...config.config import global_config
|
||||
from .utils import truncate_message, calculate_typing_time, count_messages_between
|
||||
from ..utils.utils import truncate_message, calculate_typing_time, count_messages_between
|
||||
|
||||
from src.common.logger_manager import get_logger
|
||||
from rich.traceback import install
|
||||
@@ -2,8 +2,8 @@ import re
|
||||
from typing import Union
|
||||
|
||||
from ...common.database import db
|
||||
from ..chat.message import MessageSending, MessageRecv
|
||||
from ..chat.chat_stream import ChatStream
|
||||
from .message import MessageSending, MessageRecv
|
||||
from .chat_stream import ChatStream
|
||||
from src.common.logger import get_module_logger
|
||||
|
||||
logger = get_module_logger("message_storage")
|
||||
@@ -157,7 +157,7 @@ class LLMRequest:
|
||||
completion_tokens: 输出token数
|
||||
total_tokens: 总token数
|
||||
user_id: 用户ID,默认为system
|
||||
request_type: 请求类型(chat/embedding/image/topic/schedule)
|
||||
request_type: 请求类型
|
||||
endpoint: API端点
|
||||
"""
|
||||
# 如果 request_type 为 None,则使用实例变量中的值
|
||||
@@ -10,17 +10,17 @@ from maim_message import UserInfo, Seg
|
||||
from src.common.logger_manager import get_logger
|
||||
from src.heart_flow.utils_chat import get_chat_type_and_target_info
|
||||
from src.manager.mood_manager import mood_manager
|
||||
from src.plugins.chat.chat_stream import ChatStream, chat_manager
|
||||
from src.plugins.person_info.relationship_manager import relationship_manager
|
||||
from src.plugins.respon_info_catcher.info_catcher import info_catcher_manager
|
||||
from src.plugins.utils.timer_calculator import Timer
|
||||
from src.chat.message_receive.chat_stream import ChatStream, chat_manager
|
||||
from src.chat.person_info.relationship_manager import relationship_manager
|
||||
from src.chat.utils.info_catcher import info_catcher_manager
|
||||
from src.chat.utils.timer_calculator import Timer
|
||||
from .normal_chat_generator import NormalChatGenerator
|
||||
from ..chat.message import MessageSending, MessageRecv, MessageThinking, MessageSet
|
||||
from ..chat.message_sender import message_manager
|
||||
from ..chat.utils_image import image_path_to_base64
|
||||
from ..emoji_system.emoji_manager import emoji_manager
|
||||
from ..willing.willing_manager import willing_manager
|
||||
from ...config.config import global_config
|
||||
from ..message_receive.message import MessageSending, MessageRecv, MessageThinking, MessageSet
|
||||
from src.chat.message_receive.message_sender import message_manager
|
||||
from src.chat.utils.utils_image import image_path_to_base64
|
||||
from src.chat.emoji_system.emoji_manager import emoji_manager
|
||||
from src.chat.normal_chat.willing.willing_manager import willing_manager
|
||||
from src.config.config import global_config
|
||||
|
||||
logger = get_logger("chat")
|
||||
|
||||
+5
-5
@@ -2,12 +2,12 @@ from typing import List, Optional, Tuple, Union
|
||||
import random
|
||||
from ..models.utils_model import LLMRequest
|
||||
from ...config.config import global_config
|
||||
from ..chat.message import MessageThinking
|
||||
from .heartflow_prompt_builder import prompt_builder
|
||||
from ..chat.utils import process_llm_response
|
||||
from ..utils.timer_calculator import Timer
|
||||
from ..message_receive.message import MessageThinking
|
||||
from src.chat.focus_chat.heartflow_prompt_builder import prompt_builder
|
||||
from src.chat.utils.utils import process_llm_response
|
||||
from src.chat.utils.timer_calculator import Timer
|
||||
from src.common.logger_manager import get_logger
|
||||
from src.plugins.respon_info_catcher.info_catcher import info_catcher_manager
|
||||
from src.chat.utils.info_catcher import info_catcher_manager
|
||||
|
||||
|
||||
logger = get_logger("llm")
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
+4
-4
@@ -1,9 +1,9 @@
|
||||
from src.common.logger import LogConfig, WILLING_STYLE_CONFIG, LoguruLogger, get_module_logger
|
||||
from dataclasses import dataclass
|
||||
from ...config.config import global_config, BotConfig
|
||||
from ..chat.chat_stream import ChatStream, GroupInfo
|
||||
from ..chat.message import MessageRecv
|
||||
from ..person_info.person_info import person_info_manager, PersonInfoManager
|
||||
from src.config.config import global_config, BotConfig
|
||||
from src.chat.message_receive.chat_stream import ChatStream, GroupInfo
|
||||
from src.chat.message_receive.message import MessageRecv
|
||||
from src.chat.person_info.person_info import person_info_manager, PersonInfoManager
|
||||
from abc import ABC, abstractmethod
|
||||
import importlib
|
||||
from typing import Dict, Optional
|
||||
@@ -6,7 +6,7 @@ from typing import Any, Callable, Dict
|
||||
import datetime
|
||||
import asyncio
|
||||
import numpy as np
|
||||
from src.plugins.models.utils_model import LLMRequest
|
||||
from src.chat.models.utils_model import LLMRequest
|
||||
from src.config.config import global_config
|
||||
from src.individuality.individuality import Individuality
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
from src.common.logger_manager import get_logger
|
||||
from ..chat.chat_stream import ChatStream
|
||||
from ..message_receive.chat_stream import ChatStream
|
||||
import math
|
||||
from bson.decimal128 import Decimal128
|
||||
from .person_info import person_info_manager
|
||||
@@ -1,24 +1,11 @@
|
||||
from src.config.config import global_config
|
||||
|
||||
# 不再直接使用 db
|
||||
# from src.common.database import db
|
||||
# 移除 logger 和 traceback,因为错误处理移至 repository
|
||||
# from src.common.logger import get_module_logger
|
||||
# import traceback
|
||||
from typing import List, Dict, Any, Tuple # 确保类型提示被导入
|
||||
import time # 导入 time 模块以获取当前时间
|
||||
import random
|
||||
import re
|
||||
|
||||
# 导入新的 repository 函数
|
||||
from src.common.message_repository import find_messages, count_messages
|
||||
|
||||
# 导入 PersonInfoManager 和时间转换工具
|
||||
from src.plugins.person_info.person_info import person_info_manager
|
||||
from src.plugins.chat.utils import translate_timestamp_to_human_readable
|
||||
|
||||
# 不再需要文件级别的 logger
|
||||
# logger = get_module_logger(__name__)
|
||||
from src.chat.person_info.person_info import person_info_manager
|
||||
from src.chat.utils.utils import translate_timestamp_to_human_readable
|
||||
|
||||
|
||||
def get_raw_msg_by_timestamp(
|
||||
@@ -1,5 +1,5 @@
|
||||
from src.config.config import global_config
|
||||
from src.plugins.chat.message import MessageRecv, MessageSending, Message
|
||||
from src.chat.message_receive.message import MessageRecv, MessageSending, Message
|
||||
from src.common.database import db
|
||||
import time
|
||||
import traceback
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -10,9 +10,9 @@ from pymongo.errors import PyMongoError
|
||||
|
||||
from src.common.logger import get_module_logger
|
||||
from src.manager.mood_manager import mood_manager
|
||||
from .message import MessageRecv
|
||||
from ..message_receive.message import MessageRecv
|
||||
from ..models.utils_model import LLMRequest
|
||||
from ..utils.typo_generator import ChineseTypoGenerator
|
||||
from .typo_generator import ChineseTypoGenerator
|
||||
from ...common.database import db
|
||||
from ...config.config import global_config
|
||||
|
||||
File renamed without changes.
File renamed without changes.
@@ -8,7 +8,7 @@ from dotenv import load_dotenv
|
||||
|
||||
|
||||
# 加载 .env 文件
|
||||
env_path = Path(__file__).resolve().parent.parent.parent / ".env"
|
||||
env_path = Path(os.getcwd()) / ".env"
|
||||
load_dotenv(dotenv_path=env_path)
|
||||
|
||||
# 保存原生处理器ID
|
||||
@@ -29,8 +29,7 @@ _handler_registry: dict[str, List[int]] = {}
|
||||
_custom_style_handlers: dict[Tuple[str, str], List[int]] = {} # 记录自定义样式处理器ID
|
||||
|
||||
# 获取日志存储根地址
|
||||
current_file_path = Path(__file__).resolve()
|
||||
ROOT_PATH = os.path.abspath(os.path.join(current_file_path, "..", ".."))
|
||||
ROOT_PATH = os.getcwd()
|
||||
LOG_ROOT = str(ROOT_PATH) + "/" + "logs"
|
||||
|
||||
SIMPLE_OUTPUT = os.getenv("SIMPLE_OUTPUT", "false").strip().lower()
|
||||
|
||||
@@ -9,7 +9,6 @@ from src.common.logger import (
|
||||
RELATION_STYLE_CONFIG,
|
||||
CONFIG_STYLE_CONFIG,
|
||||
HEARTFLOW_STYLE_CONFIG,
|
||||
SCHEDULE_STYLE_CONFIG,
|
||||
LLM_STYLE_CONFIG,
|
||||
CHAT_STYLE_CONFIG,
|
||||
EMOJI_STYLE_CONFIG,
|
||||
@@ -56,7 +55,6 @@ MODULE_LOGGER_CONFIGS = {
|
||||
"relation": RELATION_STYLE_CONFIG, # 关系
|
||||
"config": CONFIG_STYLE_CONFIG, # 配置
|
||||
"heartflow": HEARTFLOW_STYLE_CONFIG, # 麦麦大脑袋
|
||||
"schedule": SCHEDULE_STYLE_CONFIG, # 在干嘛
|
||||
"llm": LLM_STYLE_CONFIG, # 麦麦组织语言
|
||||
"chat": CHAT_STYLE_CONFIG, # 见闻
|
||||
"emoji": EMOJI_STYLE_CONFIG, # 表情包
|
||||
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -2,7 +2,6 @@ import os
|
||||
import re
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Dict, List, Optional
|
||||
from dateutil import tz
|
||||
|
||||
import tomli
|
||||
import tomlkit
|
||||
@@ -167,13 +166,6 @@ class BotConfig:
|
||||
gender: str = "男" # 性别
|
||||
appearance: str = "用几句话描述外貌特征" # 外貌特征
|
||||
|
||||
# schedule
|
||||
ENABLE_SCHEDULE_GEN: bool = False # 是否启用日程生成
|
||||
PROMPT_SCHEDULE_GEN = "无日程"
|
||||
SCHEDULE_DOING_UPDATE_INTERVAL: int = 300 # 日程表更新间隔 单位秒
|
||||
SCHEDULE_TEMPERATURE: float = 0.5 # 日程表温度,建议0.5-1.0
|
||||
TIME_ZONE: str = "Asia/Shanghai" # 时区
|
||||
|
||||
# chat
|
||||
allow_focus_mode: bool = True # 是否允许专注聊天状态
|
||||
|
||||
@@ -374,24 +366,6 @@ class BotConfig:
|
||||
config.gender = identity_config.get("gender", config.gender)
|
||||
config.appearance = identity_config.get("appearance", config.appearance)
|
||||
|
||||
def schedule(parent: dict):
|
||||
schedule_config = parent["schedule"]
|
||||
config.ENABLE_SCHEDULE_GEN = schedule_config.get("enable_schedule_gen", config.ENABLE_SCHEDULE_GEN)
|
||||
config.PROMPT_SCHEDULE_GEN = schedule_config.get("prompt_schedule_gen", config.PROMPT_SCHEDULE_GEN)
|
||||
config.SCHEDULE_DOING_UPDATE_INTERVAL = schedule_config.get(
|
||||
"schedule_doing_update_interval", config.SCHEDULE_DOING_UPDATE_INTERVAL
|
||||
)
|
||||
logger.info(
|
||||
f"载入自定义日程prompt:{schedule_config.get('prompt_schedule_gen', config.PROMPT_SCHEDULE_GEN)}"
|
||||
)
|
||||
if config.INNER_VERSION in SpecifierSet(">=1.0.2"):
|
||||
config.SCHEDULE_TEMPERATURE = schedule_config.get("schedule_temperature", config.SCHEDULE_TEMPERATURE)
|
||||
time_zone = schedule_config.get("time_zone", config.TIME_ZONE)
|
||||
if tz.gettz(time_zone) is None:
|
||||
logger.error(f"无效的时区: {time_zone},使用默认值: {config.TIME_ZONE}")
|
||||
else:
|
||||
config.TIME_ZONE = time_zone
|
||||
|
||||
def emoji(parent: dict):
|
||||
emoji_config = parent["emoji"]
|
||||
config.EMOJI_CHECK_INTERVAL = emoji_config.get("check_interval", config.EMOJI_CHECK_INTERVAL)
|
||||
@@ -681,7 +655,6 @@ class BotConfig:
|
||||
"groups": {"func": groups, "support": ">=0.0.0"},
|
||||
"personality": {"func": personality, "support": ">=0.0.0"},
|
||||
"identity": {"func": identity, "support": ">=1.2.4"},
|
||||
"schedule": {"func": schedule, "support": ">=0.0.11", "necessary": False},
|
||||
"emoji": {"func": emoji, "support": ">=0.0.0"},
|
||||
"model": {"func": model, "support": ">=0.0.0"},
|
||||
"memory": {"func": memory, "support": ">=0.0.0", "necessary": False},
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
import time
|
||||
from typing import Tuple, Optional # 增加了 Optional
|
||||
from src.common.logger_manager import get_logger
|
||||
from ..models.utils_model import LLMRequest
|
||||
from ...config.config import global_config
|
||||
from .chat_observer import ChatObserver
|
||||
from .pfc_utils import get_items_from_json
|
||||
from src.chat.models.utils_model import LLMRequest
|
||||
from src.config.config import global_config
|
||||
from src.experimental.PFC.chat_observer import ChatObserver
|
||||
from src.experimental.PFC.pfc_utils import get_items_from_json
|
||||
from src.individuality.individuality import Individuality
|
||||
from .observation_info import ObservationInfo
|
||||
from .conversation_info import ConversationInfo
|
||||
from src.plugins.utils.chat_message_builder import build_readable_messages
|
||||
from src.experimental.PFC.observation_info import ObservationInfo
|
||||
from src.experimental.PFC.conversation_info import ConversationInfo
|
||||
from src.chat.utils.chat_message_builder import build_readable_messages
|
||||
|
||||
|
||||
logger = get_logger("pfc_action_planner")
|
||||
@@ -4,9 +4,13 @@ import traceback
|
||||
from typing import Optional, Dict, Any, List
|
||||
from src.common.logger import get_module_logger
|
||||
from maim_message import UserInfo
|
||||
from ...config.config import global_config
|
||||
from .chat_states import NotificationManager, create_new_message_notification, create_cold_chat_notification
|
||||
from .message_storage import MongoDBMessageStorage
|
||||
from src.config.config import global_config
|
||||
from src.experimental.PFC.chat_states import (
|
||||
NotificationManager,
|
||||
create_new_message_notification,
|
||||
create_cold_chat_notification,
|
||||
)
|
||||
from src.experimental.PFC.message_storage import MongoDBMessageStorage
|
||||
from rich.traceback import install
|
||||
|
||||
install(extra_lines=3)
|
||||
File renamed without changes.
@@ -3,11 +3,11 @@ import asyncio
|
||||
import datetime
|
||||
|
||||
# from .message_storage import MongoDBMessageStorage
|
||||
from src.plugins.utils.chat_message_builder import build_readable_messages, get_raw_msg_before_timestamp_with_chat
|
||||
from src.chat.utils.chat_message_builder import build_readable_messages, get_raw_msg_before_timestamp_with_chat
|
||||
|
||||
# from ...config.config import global_config
|
||||
from typing import Dict, Any, Optional
|
||||
from ..chat.message import Message
|
||||
from src.chat.message_receive.message import Message
|
||||
from .pfc_types import ConversationState
|
||||
from .pfc import ChatObserver, GoalAnalyzer
|
||||
from .message_sender import DirectMessageSender
|
||||
@@ -16,9 +16,9 @@ from .action_planner import ActionPlanner
|
||||
from .observation_info import ObservationInfo
|
||||
from .conversation_info import ConversationInfo # 确保导入 ConversationInfo
|
||||
from .reply_generator import ReplyGenerator
|
||||
from ..chat.chat_stream import ChatStream
|
||||
from maim_message import UserInfo
|
||||
from src.plugins.chat.chat_stream import chat_manager
|
||||
from src.chat.message_receive.chat_stream import ChatStream
|
||||
from src.chat.message_receive.message import UserInfo
|
||||
from src.chat.message_receive.chat_stream import chat_manager
|
||||
from .pfc_KnowledgeFetcher import KnowledgeFetcher
|
||||
from .waiter import Waiter
|
||||
|
||||
File renamed without changes.
@@ -1,13 +1,13 @@
|
||||
import time
|
||||
from typing import Optional
|
||||
from src.common.logger import get_module_logger
|
||||
from ..chat.chat_stream import ChatStream
|
||||
from ..chat.message import Message
|
||||
from src.chat.message_receive.chat_stream import ChatStream
|
||||
from src.chat.message_receive.message import Message
|
||||
from maim_message import UserInfo, Seg
|
||||
from src.plugins.chat.message import MessageSending, MessageSet
|
||||
from src.plugins.chat.message_sender import message_manager
|
||||
from ..storage.storage import MessageStorage
|
||||
from ...config.config import global_config
|
||||
from src.chat.message_receive.message import MessageSending, MessageSet
|
||||
from src.chat.message_receive.message_sender import message_manager
|
||||
from src.chat.message_receive.storage import MessageStorage
|
||||
from src.config.config import global_config
|
||||
from rich.traceback import install
|
||||
|
||||
install(extra_lines=3)
|
||||
File renamed without changes.
@@ -2,9 +2,9 @@ from typing import List, Optional, Dict, Any, Set
|
||||
from maim_message import UserInfo
|
||||
import time
|
||||
from src.common.logger import get_module_logger
|
||||
from .chat_observer import ChatObserver
|
||||
from .chat_states import NotificationHandler, NotificationType, Notification
|
||||
from src.plugins.utils.chat_message_builder import build_readable_messages
|
||||
from src.experimental.PFC.chat_observer import ChatObserver
|
||||
from src.experimental.PFC.chat_states import NotificationHandler, NotificationType, Notification
|
||||
from src.chat.utils.chat_message_builder import build_readable_messages
|
||||
import traceback # 导入 traceback 用于调试
|
||||
|
||||
logger = get_module_logger("observation_info")
|
||||
@@ -1,13 +1,13 @@
|
||||
from typing import List, Tuple, TYPE_CHECKING
|
||||
from src.common.logger import get_module_logger
|
||||
from ..models.utils_model import LLMRequest
|
||||
from ...config.config import global_config
|
||||
from .chat_observer import ChatObserver
|
||||
from .pfc_utils import get_items_from_json
|
||||
from src.chat.models.utils_model import LLMRequest
|
||||
from src.config.config import global_config
|
||||
from src.experimental.PFC.chat_observer import ChatObserver
|
||||
from src.experimental.PFC.pfc_utils import get_items_from_json
|
||||
from src.individuality.individuality import Individuality
|
||||
from .conversation_info import ConversationInfo
|
||||
from .observation_info import ObservationInfo
|
||||
from src.plugins.utils.chat_message_builder import build_readable_messages
|
||||
from src.experimental.PFC.conversation_info import ConversationInfo
|
||||
from src.experimental.PFC.observation_info import ObservationInfo
|
||||
from src.chat.utils.chat_message_builder import build_readable_messages
|
||||
from rich.traceback import install
|
||||
|
||||
install(extra_lines=3)
|
||||
+6
-6
@@ -1,11 +1,11 @@
|
||||
from typing import List, Tuple
|
||||
from src.common.logger import get_module_logger
|
||||
from src.plugins.memory_system.Hippocampus import HippocampusManager
|
||||
from ..models.utils_model import LLMRequest
|
||||
from ...config.config import global_config
|
||||
from ..chat.message import Message
|
||||
from ..knowledge.knowledge_lib import qa_manager
|
||||
from ..utils.chat_message_builder import build_readable_messages
|
||||
from src.chat.memory_system.Hippocampus import HippocampusManager
|
||||
from src.chat.models.utils_model import LLMRequest
|
||||
from src.config.config import global_config
|
||||
from src.chat.message_receive.message import Message
|
||||
from src.chat.knowledge.knowledge_lib import qa_manager
|
||||
from src.chat.utils.chat_message_builder import build_readable_messages
|
||||
|
||||
logger = get_module_logger("knowledge_fetcher")
|
||||
|
||||
File renamed without changes.
Loaded 100 of 131 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user