已关闭
[Bug]: AgentContext.template_vars未渲染到主Agent的System Prompt中 #24
m0_61055854创建于 5月24日关闭于 6月4日
Mrtutu
5月24日 评论:
5月24日 评论:
👋 您好,欢迎向 MindStudio-Agent 提交 Issue!
我们已收到您的反馈,感谢你对开源社区的支持。🎉
📅处理时效: 维护团队将在24小时内 查看并回复您的问题(工作日)。
🔍自助查询: 在等待期间,建议您先查阅以下资料,可能已有解决方案:
📖 MindStudio-Agent 官方文档
📝 贡献者指南
请确保 Issue 描述清晰,包含复现步骤和日志,这将帮助我们更快定位问题。谢谢!


5月24日 添加了label:triaged
5月24日 添加了label:bug
5月24日 修改标题为 “[Bug]: AgentContext.template_vars未渲染到主Agent的System Prompt中”,原标题为“[Bug]: `AgentContext.template_vars`未渲染到主Agent的System Prompt中”
5月24日 修改标题为 “[Bug]: AgentContext.template_vars未渲染到主Agent的System Prompt中”,原标题为“[Bug]: `AgentContext.template_vars`未渲染到主Agent的System Prompt中”
5月24日 修改了issue 的描述
yuliangbin
6月2日 评论:
6月2日 评论:
yuliangbin
6月4日 评论:
6月4日 评论:
/label add resolved


6月4日 添加了label:resolved
yuliangbin
6月4日 评论:
6月4日 评论:
/label add resolved


6月4日 issue状态由 TODO 改变为 DONE
6月4日 关闭了 issue
环境信息
🐛 问题描述
问题描述
environments.md提示词后缀包含了{...}占位符变量,例如{working_dir}、{platform}、{os_version}、{current_date_time_zoned}和{local_environment_context}。这些占位符本应用AgentContext.template_vars中的运行时值替换。然而,在主Agent流程中,这些占位符以字面量形式直接发送给了LLM,没有经过替换。LLM收到的是原始的占位符字符串(如
{current_date_time_zoned}),而不是实际的值(如2026-05-23 22:31:27 CST)。问题日志
在src/msagent/agents/factory.py中添加调试中间件:
class _DebugModelMiddleware(AgentMiddleware[Any, Any, Any]): """Debug middleware that prints the full model request before sending to the LLM.""" def _print_request(self, request): print("\n" + "=" * 80) print("🔍 DEBUG: Model Request (before LLM call)") print("=" * 80) # System message sys_msg = getattr(request, "system_message", None) if sys_msg is not None: content = sys_msg.content if hasattr(sys_msg, "content") else str(sys_msg) print(f"\n📋 System Message ({len(content)} chars):") print("-" * 60) print(content) print("-" * 60) else: print("\n📋 System Message: None") # Messages messages = getattr(request, "messages", []) or [] print(f"\n💬 Messages ({len(messages)} total):") for i, msg in enumerate(messages): role = getattr(msg, "type", type(msg).__name__) content = getattr(msg, "content", str(msg)) content_str = str(content) if content else "" trunc = content_str[:300] + "..." if len(content_str) > 300 else content_str # Replace newlines for compact display trunc_one_line = trunc.replace("\n", "\\n") print(f" [{i}] {role}: {trunc_one_line}") # Runtime context runtime = getattr(request, "runtime", None) if runtime is not None: ctx = getattr(runtime, "context", None) if ctx is not None: print(f"\n🔧 Runtime Context type: {type(ctx).__name__}") if hasattr(ctx, "template_vars"): print(f" template_vars: {ctx.template_vars}") # Tools tools = getattr(request, "tools", []) or [] print(f"\n🛠️ Tools ({len(tools)}): {[getattr(t, 'name', str(t)) for t in tools[:10]]}") print("=" * 80 + "\n") def wrap_model_call(self, request, handler): self._print_request(request) return handler(request) async def awrap_model_call(self, request, handler): self._print_request(request) return await handler(request)然后
middleware.append(_DebugModelMiddleware())进行临时调试,采集到日志:35b46d526fd548299ea0ce79dd3ca6ef.log
预期行为
系统提示中的占位符变量应在发送给LLM之前,被
AgentContext.template_vars中的实际运行时值替换:{working_dir}/path/to/msagent{platform}Linux{os_version}{current_date_time_zoned}2026-05-23 22:31:27 CST{local_environment_context}{mcp_servers}msprof-mcp{user_memory}