feat: 支持 LLM 对引用消息的感知 #783

This commit is contained in:
Soulter
2025-03-13 17:40:28 +08:00
parent a24eb9d9b0
commit efa287ed35
2 changed files with 56 additions and 12 deletions
+16 -4
View File
@@ -17,7 +17,7 @@ from astrbot.core.star.filter.permission import PermissionTypeFilter
from astrbot.core.config.default import VERSION
from .long_term_memory import LongTermMemory
from astrbot.core import logger
from astrbot.api.message_components import Plain, Image
from astrbot.api.message_components import Plain, Image, Reply
from typing import Union
@@ -1088,12 +1088,17 @@ UID: {user_id} 此 ID 可用于设置管理员。
@filter.on_llm_request()
async def decorate_llm_req(self, event: AstrMessageEvent, req: ProviderRequest):
"""在请求 LLM 前注入人格信息、Identifier、时间等 System Prompt"""
logger.debug(req.conversation)
"""在请求 LLM 前注入人格信息、Identifier、时间、回复内容等 System Prompt"""
if self.prompt_prefix:
req.prompt = self.prompt_prefix + req.prompt
# 解析引用内容
quote = None
for comp in event.message_obj.message:
if isinstance(comp, Reply):
quote = comp
break
if self.identifier:
user_id = event.message_obj.sender.user_id
user_nickname = event.message_obj.sender.nickname
@@ -1129,6 +1134,13 @@ UID: {user_id} 此 ID 可用于设置管理员。
if begin_dialogs := persona["_begin_dialogs_processed"]:
req.contexts[:0] = begin_dialogs
if quote and quote.message_str:
if quote.sender_nickname:
sender_info = f"(Sent by {quote.sender_nickname})"
else:
sender_info = ""
req.system_prompt += f"\nUser is quoting the message{sender_info}: {quote.message_str}, please consider the context."
if self.ltm:
try:
await self.ltm.on_req_llm(event, req)