Skip to content

Commit 9d9917e

Browse files
authored
feat: 增加群名称识别到 system prompt, 并提供相应的配置 (#2770)
* feat🤖: 增加群名称识别到system prompt, 并提供相应的配置 * feat: 优化实现方式, 重构AstrBotMessage, 向后兼容 * style: format
1 parent 91ee0a8 commit 9d9917e

4 files changed

Lines changed: 39 additions & 1 deletion

File tree

astrbot/core/config/default.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
"web_search_link": False,
6161
"display_reasoning_text": False,
6262
"identifier": False,
63+
"group_name_display": False,
6364
"datetime_system_prompt": True,
6465
"default_personality": "default",
6566
"persona_pool": ["*"],
@@ -1724,6 +1725,9 @@
17241725
"identifier": {
17251726
"type": "bool",
17261727
},
1728+
"group_name_display": {
1729+
"type": "bool",
1730+
},
17271731
"datetime_system_prompt": {
17281732
"type": "bool",
17291733
},
@@ -1997,6 +2001,11 @@
19972001
"description": "用户识别",
19982002
"type": "bool",
19992003
},
2004+
"provider_settings.group_name_display": {
2005+
"description": "显示群名称",
2006+
"type": "bool",
2007+
"hint": "启用后,在支持的平台(aiocqhttp)上会在 prompt 中包含群名称信息。",
2008+
},
20002009
"provider_settings.datetime_system_prompt": {
20012010
"description": "现实世界时间感知",
20022011
"type": "bool",

astrbot/core/platform/astrbot_message.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class AstrBotMessage:
5555
self_id: str # 机器人的识别id
5656
session_id: str # 会话id。取决于 unique_session 的设置。
5757
message_id: str # 消息id
58-
group_id: str = "" # 群组id,如果为私聊,则为空
58+
group: Group # 群组
5959
sender: MessageMember # 发送者
6060
message: List[BaseMessageComponent] # 消息链使用 Nakuru 的消息链格式
6161
message_str: str # 最直观的纯文本消息字符串
@@ -64,6 +64,28 @@ class AstrBotMessage:
6464

6565
def __init__(self) -> None:
6666
self.timestamp = int(time.time())
67+
self.group = None
6768

6869
def __str__(self) -> str:
6970
return str(self.__dict__)
71+
72+
@property
73+
def group_id(self) -> str:
74+
"""
75+
向后兼容的 group_id 属性
76+
群组id,如果为私聊,则为空
77+
"""
78+
if self.group:
79+
return self.group.group_id
80+
return ""
81+
82+
@group_id.setter
83+
def group_id(self, value: str):
84+
"""设置 group_id"""
85+
if value:
86+
if self.group:
87+
self.group.group_id = value
88+
else:
89+
self.group = Group(group_id=value)
90+
else:
91+
self.group = None

astrbot/core/platform/sources/aiocqhttp/aiocqhttp_platform_adapter.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ async def _convert_handle_message_event(
187187
if event["message_type"] == "group":
188188
abm.type = MessageType.GROUP_MESSAGE
189189
abm.group_id = str(event.group_id)
190+
abm.group.group_name = event.get("group_name", "N/A")
190191
elif event["message_type"] == "private":
191192
abm.type = MessageType.FRIEND_MESSAGE
192193
if self.unique_session and abm.type == MessageType.GROUP_MESSAGE:

packages/astrbot/main.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1214,6 +1214,12 @@ async def decorate_llm_req(self, event: AstrMessageEvent, req: ProviderRequest):
12141214
user_info = f"\n[User ID: {user_id}, Nickname: {user_nickname}]\n"
12151215
req.prompt = user_info + req.prompt
12161216

1217+
if cfg.get("group_name_display") and event.message_obj.group_id:
1218+
group_name = event.message_obj.group.group_name
1219+
1220+
if group_name:
1221+
req.system_prompt += f"\nGroup name: {group_name}\n"
1222+
12171223
# 启用附加时间戳
12181224
if cfg.get("datetime_system_prompt"):
12191225
current_time = None

0 commit comments

Comments
 (0)