mirror of
https://github.com/FuQuan233/nonebot-plugin-llmchat.git
synced 2025-09-06 19:40:44 +00:00
🐛 修复MCP调用过程中回复不分条的问题
This commit is contained in:
parent
84d3851936
commit
7edd7c913e
1 changed files with 16 additions and 15 deletions
|
@ -234,6 +234,20 @@ async def process_images(event: GroupMessageEvent) -> list[str]:
|
||||||
logger.debug(f"共处理 {len(base64_images)} 张图片")
|
logger.debug(f"共处理 {len(base64_images)} 张图片")
|
||||||
return base64_images
|
return base64_images
|
||||||
|
|
||||||
|
async def send_split_messages(message_handler, content: str):
|
||||||
|
"""
|
||||||
|
将消息按分隔符<botbr>分段并发送
|
||||||
|
"""
|
||||||
|
logger.info(f"准备发送分段消息,分段数:{len(content.split('<botbr>'))}")
|
||||||
|
for segment in content.split("<botbr>"):
|
||||||
|
# 跳过空消息
|
||||||
|
if not segment.strip():
|
||||||
|
continue
|
||||||
|
segment = segment.strip() # 删除前后多余的换行和空格
|
||||||
|
await asyncio.sleep(2) # 避免发送过快
|
||||||
|
logger.debug(f"发送消息分段 内容:{segment[:50]}...") # 只记录前50个字符避免日志过大
|
||||||
|
await message_handler.send(Message(segment))
|
||||||
|
|
||||||
async def process_messages(group_id: int):
|
async def process_messages(group_id: int):
|
||||||
state = group_states[group_id]
|
state = group_states[group_id]
|
||||||
preset = get_preset(group_id)
|
preset = get_preset(group_id)
|
||||||
|
@ -350,7 +364,7 @@ async def process_messages(group_id: int):
|
||||||
|
|
||||||
# 发送LLM调用工具时的回复,一般没有
|
# 发送LLM调用工具时的回复,一般没有
|
||||||
if message.content:
|
if message.content:
|
||||||
await handler.send(Message(message.content))
|
await send_split_messages(handler, message.content)
|
||||||
|
|
||||||
# 处理每个工具调用
|
# 处理每个工具调用
|
||||||
for tool_call in message.tool_calls:
|
for tool_call in message.tool_calls:
|
||||||
|
@ -410,20 +424,7 @@ async def process_messages(group_id: int):
|
||||||
logger.error(f"合并转发消息发送失败:\n{e!s}\n")
|
logger.error(f"合并转发消息发送失败:\n{e!s}\n")
|
||||||
|
|
||||||
assert reply is not None
|
assert reply is not None
|
||||||
logger.info(
|
await send_split_messages(handler, reply)
|
||||||
f"准备发送回复消息 群号:{group_id} 消息分段数:{len(reply.split('<botbr>'))}"
|
|
||||||
)
|
|
||||||
for r in reply.split("<botbr>"):
|
|
||||||
# 似乎会有空消息的情况导致string index out of range异常
|
|
||||||
if len(r) == 0 or r.isspace():
|
|
||||||
continue
|
|
||||||
# 删除前后多余的换行和空格
|
|
||||||
r = r.strip()
|
|
||||||
await asyncio.sleep(2)
|
|
||||||
logger.debug(
|
|
||||||
f"发送消息分段 内容:{r[:50]}..."
|
|
||||||
) # 只记录前50个字符避免日志过大
|
|
||||||
await handler.send(Message(r))
|
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.opt(exception=e).error(f"API请求失败 群号:{group_id}")
|
logger.opt(exception=e).error(f"API请求失败 群号:{group_id}")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue