已关闭
[Bug]: AgentContext.template_vars未渲染到主Agent的System Prompt中 #24
m0_61055854创建于  5月24日关闭于  6月4日
m0_61055854
m0_61055854
5月24日 创建

环境信息

  • msAgent版本:0.1.3
  • deepagents版本:latest
  • LangChain版本:latest
  • OS:Linux(WSL2)

🐛 问题描述

问题描述

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} 实际的OS版本字符串
{current_date_time_zoned} 2026-05-23 22:31:27 CST
{local_environment_context} 完整的本地运行时快照(30+ 行)
{mcp_servers} msprof-mcp
{user_memory} 用户记忆内容
likedislike
Mrtutu
Mrtutu成员
5月24日 评论:

👋 您好,欢迎向 MindStudio-Agent 提交 Issue!
我们已收到您的反馈,感谢你对开源社区的支持。🎉

📅处理时效: 维护团队将在24小时内 查看并回复您的问题(工作日)。
🔍自助查询: 在等待期间,建议您先查阅以下资料,可能已有解决方案:

📖 MindStudio-Agent 官方文档
📝 贡献者指南

请确保 Issue 描述清晰,包含复现步骤和日志,这将帮助我们更快定位问题。谢谢!

likedislike
MrtutuMrtutu成员
5月24日 添加了label:triaged
ascend-robotascend-robot成员
5月24日 添加了label:bug
m0_61055854m0_61055854
5月24日 修改标题为 “[Bug]: AgentContext.template_vars未渲染到主Agent的System Prompt中”,原标题为“[Bug]: `AgentContext.template_vars`未渲染到主Agent的System Prompt中”
m0_61055854m0_61055854
5月24日 修改了issue 的描述
Wwangjun
6月1日 关联了pull request:fix(agents): render template_vars in system prompt before LLM call (#24)
yuliangbin成员
6月2日 评论:
likedislike
yuliangbin成员
6月4日 评论:

/label add resolved

likedislike
ascend-robotascend-robot成员
6月4日 添加了label:resolved
yuliangbin成员
6月4日 评论:

/label add resolved

likedislike
fanglanyuefanglanyue成员
6月4日 issue状态由 TODO 改变为 DONE
fanglanyuefanglanyue成员
6月4日 关闭了 issue