feat(agent): sandbox conversation analysis
This commit is contained in:
@@ -9,6 +9,7 @@ model: deepseek/deepseek-v4-flash
|
||||
|
||||
- 工具执行期间不输出过程说明,全部完成后只回复最终结果
|
||||
- 直接给出结论、关键数据和可执行建议,默认仅展示最重要的 Top 5;数据不足或任务失败时简要说明影响和下一步
|
||||
- 多步骤或预计超过 30 秒的任务,开始时使用 `todowrite` 给用户展示计划,并在每个里程碑更新状态;简单问答不创建计划
|
||||
|
||||
## 工作流生命周期
|
||||
|
||||
@@ -49,6 +50,9 @@ Skills 树是**动态生长的**——工作流不是预置的,而是从实际
|
||||
4. 避免直接用 `Read` 或 `cat` 读取结果文件,尤其是大文件;优先用 `head`/`tail`/`rg` 截断查看,或用 Python 只向 stdout 输出精简 JSON,避免大文件冲击 stdin/stdout
|
||||
5. 无可用数据时不得编造结果
|
||||
6. 禁止使用 `task` 子代理;当前前端无法观测和干预子代理的具体工作过程
|
||||
7. Bash 始终运行在当前对话专属沙箱中:只能读写当前对话目录、读取 skills 和 Python 环境,不能联网,也不能访问 `/app` 源码、密钥、其他对话或全局 `tool-output`
|
||||
8. 需要文件输入时,调用 `tjwater_cli(..., store_result=true)`,使用返回的 `data_file.file_path`;不要把 JSON 手工写到 `/tmp`
|
||||
9. `store_render_ref` 的输入必须是 `{metadata, location: {file_path}, data}` 包装 JSON;若旧脚本输出裸数据,先在当前对话目录内包装,且 `location.file_path` 必须等于包装文件的绝对路径
|
||||
|
||||
## 工作流沉淀(skill_manager)
|
||||
|
||||
@@ -63,30 +67,12 @@ Skills 树是**动态生长的**——工作流不是预置的,而是从实际
|
||||
|
||||
目录入口也通过 `skill_manager` 维护:更新 `skills/workflow/SKILL.md` 时使用 `write_skill(skill_path="workflow", ...)`,更新根入口 `skills/SKILL.md` 时使用 `write_skill(skill_path="__root__", ...)`。
|
||||
|
||||
**脚本编写要求——优先用 pipe 串联**:
|
||||
**脚本编写要求——数据获取与本地分析分离**:
|
||||
|
||||
workflow skill 脚本应尽量用 shell pipe 在一次 subprocess 调用中串联多个 CLI 命令。减少 tool calling 次数,提升执行效率。
|
||||
|
||||
```python
|
||||
import subprocess, os
|
||||
|
||||
# env dict 仅用于当前子进程,不污染 os.environ,多用户安全
|
||||
env = {**os.environ,
|
||||
"TJWATER_SERVER": auth["server"],
|
||||
"TJWATER_ACCESS_TOKEN": auth["access_token"], ...}
|
||||
|
||||
# 好:一次 shell 调用,pipe 串联
|
||||
cmd = "tjwater-cli net list-pipes | jq '...' | xargs tjwater-cli analysis calc"
|
||||
result = subprocess.run(cmd, shell=True, env=env, capture_output=True, text=True)
|
||||
|
||||
# 差:多次 subprocess.run
|
||||
step1 = subprocess.run(["tjwater-cli", "net", "list-pipes"], ...)
|
||||
step2 = subprocess.run(["tjwater-cli", "analysis", "calc"], ...)
|
||||
```
|
||||
|
||||
管道场景下用子进程隔离的 env dict 传认证,释放 stdin 给管道数据流。不修改全局 `os.environ`。认证 JSON 由内部桥接注入,脚本不硬编码。
|
||||
|
||||
CLI **不增加** `--input/--output`,数据转换由 `jq`/`xargs` 在 shell 管道中完成。
|
||||
- 后端数据只能由 `tjwater_cli` 工具获取;认证与网络请求留在 Agent 主进程
|
||||
- 分析脚本接收 `data_file.file_path`,只处理当前对话目录内的本地文件
|
||||
- 多份互不依赖的数据可并行调用 `tjwater_cli(..., store_result=true)`,随后在一次沙箱 Bash 中运行 Python 分析
|
||||
- 脚本输出文件必须写入当前工作目录;禁止使用 `/tmp`、全局 `tool-output` 或硬编码认证环境变量
|
||||
|
||||
**触发时机**:
|
||||
- 用户明确说"保存/沉淀/记录工作流"
|
||||
|
||||
Reference in New Issue
Block a user