已开启
[NL2SQL][Tools] shutil.copytree(dirs_exist_ok=True) 覆盖 workspace 已有 prompt 文件 #34
henry创建于  7月7日
henry成员
7月7日 创建

现象

dataagent/actions/tools/local_tool/tools.py:1234nl2sql_sub_agent_toolshutil.copytreeprompts/user/ 复制到 workspace 根目录:

shutil.copytree(user_prompt_path, workspace, dirs_exist_ok=True)

dirs_exist_ok=True 让 copytree 覆盖 workspace 下已有的同名文件。如果用户 workspace 已有自定义 sql_rules_bird.md / prompt_user.md 等 prompt 文件,会被仓库内的默认版本覆盖。

影响

  • 用户自定义 prompt 静默丢失,NL2SQL 行为不可预测
  • 调试时 prompt 内容与用户预期不符,但用户以为是自己的修改没生效

修复方案

任选其一:

  1. 复制到 workspace/.nl2sql_prompts/ 子目录(隔离默认 prompt 与用户自定义)
  2. 加存在性检查:if not (workspace / "sql_rules_bird.md").exists(): shutil.copy2(...)
  3. shutil.copy2 逐文件复制,跳过已存在的文件

涉及文件

  • dataagent/actions/tools/local_tool/tools.py:1234

验证

  • 单测:在 workspace 预置自定义 sql_rules_bird.md,调 nl2sql_sub_agent_tool,断言自定义文件未被覆盖

严重性

major(用户数据静默丢失)

环境

  • 分支:0623
  • HEAD:c5c899a4196717d1eb5944a9736f766310655ef7
likedislike
xsmqxsmq成员
7月20日 关联了看板:@hwxsmq的看板 20260720