保留tool_reponse

This commit is contained in:
朱潮 2025-11-10 17:47:27 +08:00
parent 987d34c4c8
commit 0478163b2d

View File

@ -827,19 +827,46 @@ async def fetch_bot_config(bot_id: str) -> Dict[str, Any]:
def process_messages(messages: List[Message], language: Optional[str] = None) -> List[Dict[str, str]]: def process_messages(messages: List[Message], language: Optional[str] = None) -> List[Dict[str, str]]:
"""处理消息列表,包括[ANSWER]分割和语言指令添加""" """处理消息列表,包括[TOOL_CALL]|[TOOL_RESPONSE]|[ANSWER]分割和语言指令添加"""
processed_messages = [] processed_messages = []
# 处理每条消息 # 处理每条消息
for msg in messages: for msg in messages:
if msg.role == "assistant": if msg.role == "assistant":
# 对assistant消息进行[ANSWER]分割处理,只保留最后一段 # 使用正则表达式按照 [TOOL_CALL]|[TOOL_RESPONSE]|[ANSWER] 进行切割
content_parts = msg.content.split("[ANSWER]") parts = re.split(r'\[(TOOL_CALL|TOOL_RESPONSE|ANSWER)\]', msg.content)
if content_parts:
# 取最后一段非空文本 # 重新组装内容,过滤掉过长的 [TOOL_RESPONSE] 后的内容
last_part = content_parts[-1].strip() filtered_content = ""
processed_messages.append({"role": msg.role, "content": last_part}) current_tag = None
for i in range(0, len(parts)):
if i % 2 == 0: # 文本内容
text = parts[i].strip()
if not text:
continue
if current_tag == "TOOL_RESPONSE":
# 统计 [TOOL_RESPONSE] 后面的文字长度超过1000字符就丢弃
if len(text) <= 1000:
filtered_content += f"[TOOL_RESPONSE]\n{text}\n"
# 如果超过1000字符直接丢弃这块内容
elif current_tag == "TOOL_CALL":
filtered_content += f"[TOOL_CALL]\n{text}\n"
elif current_tag == "ANSWER":
filtered_content += f"[ANSWER]\n{text}\n"
else:
# 第一个标签之前的内容
filtered_content += text + "\n"
else: # 标签
current_tag = parts[i]
# 取最终处理后的内容,去除首尾空白
final_content = filtered_content.strip()
if final_content:
processed_messages.append({"role": msg.role, "content": final_content})
else: else:
# 如果处理后为空,使用原内容
processed_messages.append({"role": msg.role, "content": msg.content}) processed_messages.append({"role": msg.role, "content": msg.content})
else: else:
processed_messages.append({"role": msg.role, "content": msg.content}) processed_messages.append({"role": msg.role, "content": msg.content})