Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -456,6 +456,41 @@ def _handle_mcp_request(

return None

@staticmethod
def _handle_memory_placeholder(message_list, chat_user_id, application_id):
user_system_prompt = None
filtered_message_list = []

for msg in message_list:
if isinstance(msg, SystemMessage):
if msg.content and isinstance(msg.content, str):
if "{memory}" in msg.content:
# 读取长期记忆数据
long_term_memory = (
QuerySet(ApplicationLongTermMemory).filter(chat_user_id=chat_user_id,
application_id=application_id).first()
)
if long_term_memory is not None:
memory = long_term_memory.memory
else:
memory = ""

# 替换占位符
user_system_prompt = msg.content.replace("{memory}", memory)
msg.content = user_system_prompt
else:
user_system_prompt = msg.content
elif msg.content and isinstance(msg.content, list):
user_system_prompt = "".join(
item.get("text", "") if isinstance(item, dict) else str(item) for item in msg.content
)
else:
user_system_prompt = str(msg.content) if msg.content else ""
else:
filtered_message_list.append(msg)

return user_system_prompt, filtered_message_list

def get_stream_result(
self,
message_list: List[BaseMessage],
Expand Down Expand Up @@ -496,37 +531,15 @@ def get_stream_result(
return iter(
[
AIMessageChunk(
_(
"Sorry, the AI model is not configured. Please go to the application to set up the AI model first."
)
_("Sorry, the AI model is not configured. Please go to the application to set up the AI model first.")
)
]
), False
else:
user_system_prompt = None
filtered_message_list = []
long_term_memory = (
QuerySet(ApplicationLongTermMemory).filter(chat_user_id=chat_user_id, application_id=agent_id).first()
# 读取长期记忆数据,替换占位符:{memory}
user_system_prompt, filtered_message_list = self._handle_memory_placeholder(
message_list, chat_user_id, agent_id
)
if long_term_memory is not None:
memory = long_term_memory.memory
else:
memory = ""

# print(chat_user_id, chat_user_type)
for msg in message_list:
if isinstance(msg, SystemMessage):
if isinstance(msg.content, str):
user_system_prompt = msg.content.replace("{memory}", memory)
msg.content = user_system_prompt
elif isinstance(msg.content, list):
user_system_prompt = "".join(
item.get("text", "") if isinstance(item, dict) else str(item) for item in msg.content
)
else:
user_system_prompt = str(msg.content)
else:
filtered_message_list.append(msg)
runtime_user_id = get_runtime_user_id(chat_user_id=chat_user_id, chat_user_type=chat_user_type)
# 过滤tool_id
all_tool_ids = list(set((mcp_tool_ids or []) + (tool_ids or []) + (skill_tool_ids or [])))
Expand Down Expand Up @@ -554,7 +567,9 @@ def get_stream_result(
)
if mcp_result:
return mcp_result, True
return chat_model.stream(message_list), True
if user_system_prompt:
filtered_message_list.insert(0, SystemMessage(content=user_system_prompt))
return chat_model.stream(filtered_message_list), True

def execute_stream(
self,
Expand Down Expand Up @@ -666,6 +681,10 @@ def get_block_result(
_("Sorry, the AI model is not configured. Please go to the application to set up the AI model first.")
), False
else:
# 读取长期记忆数据,替换占位符:{memory}
user_system_prompt, filtered_message_list = self._handle_memory_placeholder(
message_list, chat_user_id, application_id
)
runtime_user_id = get_runtime_user_id(chat_user_id=chat_user_id, chat_user_type=chat_user_type)
# 过滤tool_id
all_tool_ids = list(set((mcp_tool_ids or []) + (tool_ids or []) + (skill_tool_ids or [])))
Expand All @@ -684,16 +703,18 @@ def get_block_result(
skill_tool_ids,
mcp_output_enable,
chat_model,
"",
message_list,
user_system_prompt,
filtered_message_list,
application_id,
chat_id,
workspace_id,
runtime_user_id,
)
if mcp_result:
return mcp_result, True
return chat_model.invoke(message_list), True
if user_system_prompt:
filtered_message_list.insert(0, SystemMessage(content=user_system_prompt))
return chat_model.invoke(filtered_message_list), True

def execute_block(
self,
Expand Down
Loading