Skip to content

Commit 71290f0

Browse files
authored
Merge pull request #2061 from AstrBotDevs/feat-handle-image-in-quote-message
Feature: 支持对引用消息中的图片内容进行理解
2 parents f51f510 + 22364ef commit 71290f0

File tree

1 file changed

+31
-13
lines changed

1 file changed

+31
-13
lines changed

packages/astrbot/main.py

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -229,9 +229,7 @@ async def plugin_ls(self, event: AstrMessageEvent):
229229
async def plugin_off(self, event: AstrMessageEvent, plugin_name: str = None):
230230
"""禁用插件"""
231231
if DEMO_MODE:
232-
event.set_result(
233-
MessageEventResult().message("演示模式下无法禁用插件。")
234-
)
232+
event.set_result(MessageEventResult().message("演示模式下无法禁用插件。"))
235233
return
236234
if not plugin_name:
237235
event.set_result(
@@ -246,9 +244,7 @@ async def plugin_off(self, event: AstrMessageEvent, plugin_name: str = None):
246244
async def plugin_on(self, event: AstrMessageEvent, plugin_name: str = None):
247245
"""启用插件"""
248246
if DEMO_MODE:
249-
event.set_result(
250-
MessageEventResult().message("演示模式下无法启用插件。")
251-
)
247+
event.set_result(MessageEventResult().message("演示模式下无法启用插件。"))
252248
return
253249
if not plugin_name:
254250
event.set_result(
@@ -263,9 +259,7 @@ async def plugin_on(self, event: AstrMessageEvent, plugin_name: str = None):
263259
async def plugin_get(self, event: AstrMessageEvent, plugin_repo: str = None):
264260
"""安装插件"""
265261
if DEMO_MODE:
266-
event.set_result(
267-
MessageEventResult().message("演示模式下无法安装插件。")
268-
)
262+
event.set_result(MessageEventResult().message("演示模式下无法安装插件。"))
269263
return
270264
if not plugin_repo:
271265
event.set_result(
@@ -1304,12 +1298,36 @@ async def decorate_llm_req(self, event: AstrMessageEvent, req: ProviderRequest):
13041298
) and not req.contexts:
13051299
req.contexts[:0] = begin_dialogs
13061300

1307-
if quote and quote.message_str:
1301+
if quote:
1302+
sender_info = ""
13081303
if quote.sender_nickname:
13091304
sender_info = f"(Sent by {quote.sender_nickname})"
1310-
else:
1311-
sender_info = ""
1312-
req.system_prompt += f"\nUser is quoting the message{sender_info}: {quote.message_str}, please consider the context."
1305+
message_str = quote.message_str or "[Empty Text]"
1306+
req.system_prompt += (
1307+
f"\nUser is quoting a message{sender_info}.\n"
1308+
f"Here are the information of the quoted message: Text Content: {message_str}.\n"
1309+
)
1310+
image_seg = None
1311+
if quote.chain:
1312+
for comp in quote.chain:
1313+
if isinstance(comp, Image):
1314+
image_seg = comp
1315+
break
1316+
if image_seg:
1317+
try:
1318+
if prov := self.context.get_using_provider(
1319+
event.unified_msg_origin
1320+
):
1321+
llm_resp = await prov.text_chat(
1322+
prompt="Please describe the image content.",
1323+
image_urls=[await image_seg.convert_to_file_path()],
1324+
)
1325+
if llm_resp.completion_text:
1326+
req.system_prompt += (
1327+
f"Image Caption: {llm_resp.completion_text}\n"
1328+
)
1329+
except BaseException as e:
1330+
logger.error(f"处理引用图片失败: {e}")
13131331

13141332
if self.ltm:
13151333
try:

0 commit comments

Comments
 (0)