mirror of https://github.com/Mai-with-u/MaiBot.git
feat:添加思考深度配置
parent
8bbbedf0b4
commit
110431e6d2
|
|
@ -605,7 +605,18 @@ class HeartFChatting:
|
||||||
self.consecutive_no_reply_count = 0
|
self.consecutive_no_reply_count = 0
|
||||||
|
|
||||||
reason = action_planner_info.reasoning or ""
|
reason = action_planner_info.reasoning or ""
|
||||||
think_level = action_planner_info.action_data.get("think_level", 1)
|
# 根据 think_mode 配置决定 think_level 的值
|
||||||
|
think_mode = global_config.chat.think_mode
|
||||||
|
if think_mode == "default":
|
||||||
|
think_level = 0
|
||||||
|
elif think_mode == "deep":
|
||||||
|
think_level = 1
|
||||||
|
elif think_mode == "dynamic":
|
||||||
|
# dynamic 模式:从 planner 返回的 action_data 中获取
|
||||||
|
think_level = action_planner_info.action_data.get("think_level", 1)
|
||||||
|
else:
|
||||||
|
# 默认使用 default 模式
|
||||||
|
think_level = 0
|
||||||
# 使用 action_reasoning(planner 的整体思考理由)作为 reply_reason
|
# 使用 action_reasoning(planner 的整体思考理由)作为 reply_reason
|
||||||
planner_reasoning = action_planner_info.action_reasoning or reason
|
planner_reasoning = action_planner_info.action_reasoning or reason
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ no_reply
|
||||||
{moderation_prompt}
|
{moderation_prompt}
|
||||||
|
|
||||||
target_message_id为必填,表示触发消息的id
|
target_message_id为必填,表示触发消息的id
|
||||||
请选择所有符合使用要求的action,动作用json格式输出,用```json包裹,如果输出多个json,每个json都要单独一行放在同一个```json代码块内,你可以重复使用同一个动作或不同动作:
|
请选择所有符合使用要求的action,动作用json格式输出,用```json包裹,如果输出多个json,每个json都要单独一行放在同一个```json代码块内:
|
||||||
**示例**
|
**示例**
|
||||||
// 理由文本(简短)
|
// 理由文本(简短)
|
||||||
```json
|
```json
|
||||||
|
|
@ -78,43 +78,8 @@ target_message_id为必填,表示触发消息的id
|
||||||
```""",
|
```""",
|
||||||
"planner_prompt",
|
"planner_prompt",
|
||||||
)
|
)
|
||||||
|
|
||||||
Prompt(
|
|
||||||
"""{time_block}
|
|
||||||
{name_block}
|
|
||||||
{chat_context_description},以下是具体的聊天内容
|
|
||||||
**聊天内容**
|
|
||||||
{chat_content_block}
|
|
||||||
|
|
||||||
**可选的action**
|
|
||||||
no_reply
|
|
||||||
动作描述:
|
|
||||||
没有合适的可以使用的动作,不使用action
|
|
||||||
{{"action":"no_reply"}}
|
|
||||||
|
|
||||||
{action_options_text}
|
|
||||||
|
|
||||||
**你之前的action执行和思考记录**
|
|
||||||
{actions_before_now_block}
|
|
||||||
|
|
||||||
请选择**可选的**且符合使用条件的action,并说明触发action的消息id(消息id格式:m+数字)
|
|
||||||
先输出你的简短的选择思考理由,再输出你选择的action,理由不要分点,精简。
|
|
||||||
**动作选择要求**
|
|
||||||
请你根据聊天内容,用户的最新消息和以下标准选择合适的动作:
|
|
||||||
1.思考**所有**的可用的action中的**每个动作**是否符合当下条件,如果动作使用条件符合聊天内容就使用
|
|
||||||
2.如果相同的内容已经被执行,请不要重复执行
|
|
||||||
{moderation_prompt}
|
|
||||||
|
|
||||||
请选择所有符合使用要求的action,动作用json格式输出,用```json包裹,如果输出多个json,每个json都要单独一行放在同一个```json代码块内,你可以重复使用同一个动作或不同动作:
|
|
||||||
**示例**
|
|
||||||
// 理由文本(简短)
|
|
||||||
```json
|
|
||||||
{{"action":"动作名", "target_message_id":"m123"}}
|
|
||||||
{{"action":"动作名", "target_message_id":"m456"}}
|
|
||||||
```""",
|
|
||||||
"planner_prompt_mentioned",
|
|
||||||
)
|
|
||||||
|
|
||||||
Prompt(
|
Prompt(
|
||||||
"""
|
"""
|
||||||
{action_name}
|
{action_name}
|
||||||
|
|
@ -463,6 +428,29 @@ class ActionPlanner:
|
||||||
plan_style=global_config.personality.plan_style,
|
plan_style=global_config.personality.plan_style,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# 如果 think_mode 为 "default",移除 think_level 相关说明(第 50-51 行)
|
||||||
|
if global_config.chat.think_mode == "default":
|
||||||
|
# 移除 "5.think_level表示思考深度..." 这一行和下一行的 JSON 示例中的 think_level 部分
|
||||||
|
lines = prompt.split('\n')
|
||||||
|
new_lines = []
|
||||||
|
skip_next = False
|
||||||
|
for i, line in enumerate(lines):
|
||||||
|
if skip_next:
|
||||||
|
skip_next = False
|
||||||
|
# 移除 JSON 示例中的 think_level 部分
|
||||||
|
if 'think_level' in line:
|
||||||
|
# 移除 "think_level":数值等级(0或1), 这部分
|
||||||
|
line = re.sub(r',\s*"think_level":数值等级\(0或1\)', '', line)
|
||||||
|
line = re.sub(r'"think_level":数值等级\(0或1\),\s*', '', line)
|
||||||
|
new_lines.append(line)
|
||||||
|
continue
|
||||||
|
# 检查是否是 think_level 说明行
|
||||||
|
if 'think_level表示思考深度' in line or 'think_level表示思考深度' in line:
|
||||||
|
skip_next = True
|
||||||
|
continue
|
||||||
|
new_lines.append(line)
|
||||||
|
prompt = '\n'.join(new_lines)
|
||||||
|
|
||||||
return prompt, message_id_list
|
return prompt, message_id_list
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"构建 Planner 提示词时出错: {e}")
|
logger.error(f"构建 Planner 提示词时出错: {e}")
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,8 @@ def init_replyer_prompt():
|
||||||
{planner_reasoning}
|
{planner_reasoning}
|
||||||
{identity}
|
{identity}
|
||||||
{chat_prompt}你正在群里聊天,现在请你读读之前的聊天记录,然后给出日常且口语化的回复,
|
{chat_prompt}你正在群里聊天,现在请你读读之前的聊天记录,然后给出日常且口语化的回复,
|
||||||
尽量简短一些。{keywords_reaction_prompt}请注意把握聊天内容,不要回复的太有条理。
|
尽量简短一些。{keywords_reaction_prompt}
|
||||||
|
请注意把握聊天内容,不要回复的太有条理。
|
||||||
{reply_style}
|
{reply_style}
|
||||||
请注意不要输出多余内容(包括不必要的前后缀,冒号,括号,表情包,at或 @等 ),只输出发言内容就好。
|
请注意不要输出多余内容(包括不必要的前后缀,冒号,括号,表情包,at或 @等 ),只输出发言内容就好。
|
||||||
现在,你说:""",
|
现在,你说:""",
|
||||||
|
|
@ -35,8 +36,9 @@ def init_replyer_prompt():
|
||||||
{reply_target_block}。
|
{reply_target_block}。
|
||||||
{planner_reasoning}
|
{planner_reasoning}
|
||||||
{identity}
|
{identity}
|
||||||
{chat_prompt}你正在群里聊天,现在请你读读之前的聊天记录,把握当前的话题,然后给出回复,
|
{chat_prompt}你正在群里聊天,现在请你读读之前的聊天记录,把握当前的话题,然后给出口语化回复,
|
||||||
{keywords_reaction_prompt}请注意把握聊天内容。
|
{keywords_reaction_prompt}
|
||||||
|
请注意把握聊天内容。
|
||||||
{reply_style}
|
{reply_style}
|
||||||
请注意不要输出多余内容(包括不必要的前后缀,冒号,括号,at或 @等 ),只输出发言内容就好。
|
请注意不要输出多余内容(包括不必要的前后缀,冒号,括号,at或 @等 ),只输出发言内容就好。
|
||||||
现在,你说:""",
|
现在,你说:""",
|
||||||
|
|
|
||||||
|
|
@ -108,6 +108,14 @@ class ChatConfig(ConfigBase):
|
||||||
时间区间支持跨夜,例如 "23:00-02:00"。
|
时间区间支持跨夜,例如 "23:00-02:00"。
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
think_mode: Literal["default", "deep", "dynamic"] = "default"
|
||||||
|
"""
|
||||||
|
思考模式配置
|
||||||
|
- default: 默认think_level为0(轻量回复,不需要思考和回忆)
|
||||||
|
- deep: 默认think_level为1(深度回复,需要进行回忆和思考)
|
||||||
|
- dynamic: think_level由planner动态给出(根据planner返回的think_level决定)
|
||||||
|
"""
|
||||||
|
|
||||||
def _parse_stream_config_to_chat_id(self, stream_config_str: str) -> Optional[str]:
|
def _parse_stream_config_to_chat_id(self, stream_config_str: str) -> Optional[str]:
|
||||||
"""与 ChatStream.get_stream_id 一致地从 "platform:id:type" 生成 chat_id。"""
|
"""与 ChatStream.get_stream_id 一致地从 "platform:id:type" 生成 chat_id。"""
|
||||||
try:
|
try:
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
[inner]
|
[inner]
|
||||||
version = "7.1.5"
|
version = "7.1.6"
|
||||||
|
|
||||||
#----以下是给开发人员阅读的,如果你只是部署了麦麦,不需要阅读----
|
#----以下是给开发人员阅读的,如果你只是部署了麦麦,不需要阅读----
|
||||||
# 如果你想要修改配置文件,请递增version的值
|
# 如果你想要修改配置文件,请递增version的值
|
||||||
|
|
@ -22,10 +22,10 @@ alias_names = ["麦叠", "牢麦"] # 麦麦的别名
|
||||||
|
|
||||||
[personality]
|
[personality]
|
||||||
# 建议120字以内,描述人格特质 和 身份特征
|
# 建议120字以内,描述人格特质 和 身份特征
|
||||||
personality = "是一个女大学生,现在在读大二,会刷贴吧。"
|
personality = "是一个大二在读女大学生,现在正在上网和群友聊天,有时有点攻击性,有时比较温柔"
|
||||||
# アイデンティティがない 生まれないらららら
|
# アイデンティティがない 生まれないらららら
|
||||||
# 描述麦麦说话的表达风格,表达习惯,如要修改,可以酌情新增内容
|
# 描述麦麦说话的表达风格,表达习惯,如要修改,可以酌情新增内容,建议1-2行
|
||||||
reply_style = "请回复的平淡一些,简短一些,说中文,不要刻意突出自身学科背景。可以参考贴吧,知乎和微博的回复风格。"
|
reply_style = "请不要刻意突出自身学科背景。可以参考贴吧,知乎和微博的回复风格。"
|
||||||
|
|
||||||
# 麦麦的说话规则,行为风格:
|
# 麦麦的说话规则,行为风格:
|
||||||
plan_style = """
|
plan_style = """
|
||||||
|
|
@ -34,7 +34,7 @@ plan_style = """
|
||||||
3.你对技术相关话题,游戏和动漫相关话题感兴趣,也对日常话题感兴趣,不喜欢太过沉重严肃的话题
|
3.你对技术相关话题,游戏和动漫相关话题感兴趣,也对日常话题感兴趣,不喜欢太过沉重严肃的话题
|
||||||
4.请控制你的发言频率,不要太过频繁的发言
|
4.请控制你的发言频率,不要太过频繁的发言
|
||||||
5.如果有人对你感到厌烦,请减少回复
|
5.如果有人对你感到厌烦,请减少回复
|
||||||
6.如果有人对你进行攻击,或者情绪激动,请你以合适的方法应对"""
|
6.如果有人在追问你,或者话题没有说完,请你继续回复"""
|
||||||
|
|
||||||
# 麦麦识图规则,不建议修改
|
# 麦麦识图规则,不建议修改
|
||||||
visual_style = "请用中文描述这张图片的内容。如果有文字,请把文字描述概括出来,请留意其主题,直观感受,输出为一段平文本,最多30字,请注意不要分点,就输出一段文本"
|
visual_style = "请用中文描述这张图片的内容。如果有文字,请把文字描述概括出来,请留意其主题,直观感受,输出为一段平文本,最多30字,请注意不要分点,就输出一段文本"
|
||||||
|
|
@ -55,6 +55,8 @@ states = [
|
||||||
# 替换概率,每次构建人格时替换personality的概率(0.0-1.0)
|
# 替换概率,每次构建人格时替换personality的概率(0.0-1.0)
|
||||||
state_probability = 0.3
|
state_probability = 0.3
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[expression]
|
[expression]
|
||||||
# 表达学习配置
|
# 表达学习配置
|
||||||
learning_list = [ # 表达学习配置列表,支持按聊天流配置
|
learning_list = [ # 表达学习配置列表,支持按聊天流配置
|
||||||
|
|
@ -89,6 +91,7 @@ talk_value = 1 # 聊天频率,越小越沉默,范围0-1
|
||||||
mentioned_bot_reply = true # 是否启用提及必回复
|
mentioned_bot_reply = true # 是否启用提及必回复
|
||||||
max_context_size = 30 # 上下文长度
|
max_context_size = 30 # 上下文长度
|
||||||
planner_smooth = 3 # 规划器平滑,增大数值会减小planner负荷,略微降低反应速度,推荐1-5,0为关闭,必须大于等于0
|
planner_smooth = 3 # 规划器平滑,增大数值会减小planner负荷,略微降低反应速度,推荐1-5,0为关闭,必须大于等于0
|
||||||
|
think_mode = "dynamic" # 思考模式,可选:default(默认浅度思考和回复)、deep(会进行比较长的,深度回复)、dynamic(动态选择两种模式)
|
||||||
|
|
||||||
enable_talk_value_rules = true # 是否启用动态发言频率规则
|
enable_talk_value_rules = true # 是否启用动态发言频率规则
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue