- 人工智能
- AI 技能
- MCP 服务
- AI 评测
【免费下载链接】OpenSpace
"OpenSpace: The Skill Management Layer for AI Agents" -- https://open-space.cloud/
导读
本指南讲解 OpenSpace 技能库中一个高价值的降级模式(fallback pattern):当execute_code_sandbox沙箱执行返回 "unknown error"、或read_file对受支持格式读取失败时,如何通过run_shell(BashTool)配合python3 << 'EOF'heredoc 方式,绕过沙箱执行问题,直接完成文档处理、数据分析与文件读取。读完本文,你将掌握 heredoc 的语法要点、各类文档与表格数据的 Python 处理脚本、错误处理与输出治理最佳实践,并理解该技能在 OpenSpace 源码层面的执行链路(BashTool → LocalShellConnector → subprocess),以及它在 GDPVal 基准评测 中被反复沉淀验证的实战背景。
技能定位:何时该触发这个降级
该技能定义于 SKILL.md,其 frontmatter 明确声明了触发条件:
--- name: fallback-python-shell description: Use run_shell with Python heredoc when execute_code_sandbox or read_file fail ---当以下任一情况出现时,Agent 应当切换到本技能描述的降级路径:
execute_code_sandbox返回'unknown error'(沙箱内部执行状态不可解释,常见于隔离环境异常);read_file对受支持格式返回'unknown error';- 你需要以编程方式处理文档(PDF、Word、Excel)、分析数据或读取文件。
核心思想:不依赖沙箱与专用读取工具,而是通过run_shell执行python3 << 'EOF'heredoc,让 Python 的完整文件 I/O 与数据处理能力直接作用于本地文件系统。从 OpenSpace 源码结构看,这两类工具分别对应 productivity_tools.py 中委托 livebench 的ExecuteCodeSandboxTool(_name = "execute_code_sandbox")与ReadFileProductivityTool(_name = "read"),而run_shell对应的则是 Shell 后端核心的BashTool(_name = "bash",见 session.py)。当前者失效时,后者天然就是最直接的替代通道。
基础模式:heredoc 的正确写法
python3 << 'EOF' # Your Python code here import json import os # Example: Read and process a file with open('/path/to/file.txt', 'r') as f: content = f.read() print(content) EOF四个关键语法点(务必逐条遵守,否则 heredoc 会解析失败):
- 使用
python3 << 'EOF':带单引号的 EOF 分隔符可以阻止 shell 对 heredoc 内容做变量展开(如$VAR、反引号),保证 Python 代码原样交给解释器; - Python 代码从第 0 列开始缩进:不要因为外层 shell 嵌套而给 Python 代码额外缩进,否则会导致
IndentationError; - 以独立一行的
EOF结束:该行前后不能有任何空白字符; - 把结果打印到 stdout:工具响应只捕获 stdout/stderr,
print()是 Agent 获取执行结果的唯一可靠通道。
实战场景一:作为 read_file 的降级读取器
读取纯文本与 JSON
python3 << 'EOF' import json # Read text file with open('document.txt', 'r') as f: content = f.read() print(content) # Read JSON file with open('data.json', 'r') as f: data = json.load(f) print(json.dumps(data, indent=2)) EOF读取 Excel / CSV(pandas)
python3 << 'EOF' import pandas as pd # Read Excel file df = pd.read_excel('data.xlsx', sheet_name='Sheet1') print(df.to_string()) print(f"Shape: {df.shape}") # Read CSV df = pd.read_csv('data.csv') print(df.head(10)) EOF读取 PDF(PyMuPDF / fitz)
python3 << 'EOF' import fitz # PyMuPDF doc = fitz.open('document.pdf') for page_num in range(len(doc)): page = doc[page_num] text = page.get_text() print(f"=== Page {page_num + 1} ===") print(text) doc.close() EOF读取 Word 文档(python-docx)
python3 << 'EOF' from docx import Document doc = Document('document.docx') for para in doc.paragraphs: print(para.text) EOF说明:GDPVal 评测任务中大量产物是 PDF、xlsx、docx(run_benchmark.py 中
_ARTIFACT_EXTENSIONS明确将这些格式列入工件发现范围),这正是该技能在评测中被频繁沉淀的原因。仓库benchmarks/gdpval/skills/下还存有大量同族演化技能(如pdf-extraction-fallback、docx-read-fallback、spreadsheet-direct-python等),印证了“读取失败 → heredoc 兜底”这一模式在真实任务中的高频价值。
实战场景二:数据分析(pandas + numpy)
python3 << 'EOF' import pandas as pd import numpy as np df = pd.read_csv('data.csv') # Basic statistics print(f"Shape: {df.shape}") print(f"Columns: {list(df.columns)}") print(df.describe()) # Filter and aggregate result = df.groupby('category').agg({'value': 'sum'}) print(result) EOF最佳实践
1. 错误处理:文件操作一律包 try/except
python3 << 'EOF' try: with open('file.txt', 'r') as f: content = f.read() print(content) except FileNotFoundError: print("ERROR: File not found") except Exception as e: print(f"ERROR: {e}") EOF明确的ERROR:前缀让 Agent 能够稳定识别失败原因,避免把异常栈当作正常输出误判。
2. 大输出治理:分块处理或打印摘要
python3 << 'EOF' with open('large_file.csv', 'r') as f: for i, line in enumerate(f): if i < 10: print(line.strip()) else: print("... truncated ...") break EOF这一条与 BashTool 的输出上限设计相互印证:BashTool的max_result_size_chars = 30_000(session.py),超长 stdout 会被截断,因此大文件必须自行控制打印量。
3. 工作目录:run_shell 在当前工作目录执行
run_shell默认在会话的当前工作目录执行,因此要么使用绝对路径,要么先确保处在正确目录。从源码看,BashTool._arun会从上下文中解析effective_cwd(context.cwd→session.default_working_dir,见 session.py),相对路径的解析基准即由此决定。
4. 多步骤聚合:一次 heredoc 完成相关操作链
python3 << 'EOF' # Do all related work in one call with open('input.json') as f: data = json.load(f) processed = [transform(x) for x in data] with open('output.json', 'w') as f: json.dump(processed, f) print("Processing complete") EOF把“读取 → 转换 → 写回 → 打印确认”聚合为单次调用,既减少了工具调用往返,也让状态变化(输出文件是否生成)在一次响应内自洽可验证。
与兄弟技能的协同:shell-python-heredoc
仓库中还沉淀了同主题的姊妹技能 shell-python-heredoc/SKILL.md,二者互补:
fallback-python-shell聚焦触发条件(沙箱/读取工具报错)与通用文件处理场景;shell-python-heredoc补充了与execute_code_sandbox的对比结论:heredoc 方式对复杂 import 更可靠、可拿到完整 stdout/stderr、支持更长超时(默认 60s vs 沙箱 30s)、可直连文件系统而无需ARTIFACT_PATH中转;代价是调用间无持久状态、对简单单行脚本过于冗长、复杂字符串字面量可能需要 shell 转义。
实战中建议按阶梯选择:简单脚本优先execute_code_sandbox;需要多 import 或反复报错时切 heredoc;需要自主迭代与错误恢复的长任务则交给shell_agent;可复用复杂逻辑时先落盘为.py文件再执行。
故障排查速查表
| 问题 | 解决方案 |
|---|---|
EOF无法识别 | 确保EOF独占一行且行首无空格 |
| ImportError / Module not found | 确认包已装进 shell 环境;优先标准库或常用预装包(pandas、numpy 通常可用) |
| 文件找不到 | 使用绝对路径,或先pwd确认工作目录 |
| 语法错误 | 检查 heredoc 内 Python 缩进(必须从第 0 列开始) |
| 权限错误 | 确保文件不在受保护目录 |
| 中文/编码异常 | 显式指定编码:open('file.txt', 'r', encoding='utf-8') |
| 代码过长 | 拆成多个 heredoc,或先写入临时.py文件再执行 |
源码级原理:run_shell 到底怎么执行 heredoc
从源码结构看,本技能描述的run_shell在 OpenSpace 中对应 Shell 后端的BashTool,其执行链路为:
- 参数校验与权限:
validate_input检查危险模式(如阻塞式sleep),check_permissions委托bash_tool_has_permission做子命令级权限级联(session.py); - 超时归一化:毫秒超时被钳制在
[1s, 10min],默认 2 分钟(session.py),这也是文档建议对长脚本显式传timeout的原因; - 沙箱策略:若沙箱配置开启,命令会被
should_use_sandbox决策并包装执行;dangerously_disable_sandbox可请求绕过,但仅当策略允许时生效(session.py); - 本地执行:最终经 local_connector.py 的
run_bash_command,把脚本写入/tmp/bash_exec_*.sh后以/bin/bash子进程执行(Windows 下为bash <file>),stdout/stderr 合并捕获并返回{status, output, content, error, returncode}。
这里的关键点在于:run_bash_command执行的是任意 bash 脚本,heredoc 只是把 Python 代码嵌入 bash 脚本的一种写法——这正是本技能“绕过沙箱执行问题”的技术基础:它不经过execute_code_sandbox的隔离层,而直接落在本地 shell 进程中。同时productivity_tools.py的create_file等工具也印证了同一条思路——OpenSpace 内部大量“沙箱外”能力本就依赖 Shell connector 直接跑 Python 代码(productivity_tools.py)。
在 GDPVal 评测中的角色
该技能来自 GDPVal 基准 的技能演化产物:评测在--use-clawwork-productivity模式下为 Agent 注入与 ClawWork 对等的生产力工具集(含execute_code_sandbox与read,见 productivity_tools.py),当这些工具在真实办公任务中失败时,Agent 便依赖本类降级技能完成任务并产出可评估工件。技能进化引擎会把这种“失败 → 降级 → 成功”的执行经验固化为新的SKILL.md(仓库benchmarks/gdpval/skills/下*-fallback、*-workaround命名的数百个目录即由此而来),进而在 Phase 2 热启动阶段直接复用,形成 token 节省与成功率提升——这正是 OpenSpace "Skill Management Layer for AI Agents" 的核心价值闭环。
- 人工智能
- AI 技能
- MCP 服务
- AI 评测
【免费下载链接】OpenSpace
"OpenSpace: The Skill Management Layer for AI Agents" -- https://open-space.cloud/
相关推荐
OpenSpace Agent 技能实战:用 run_shell + Python Heredoc 构建可靠代码执行回退(shell-python-fallback)
OpenSpace Agent 技能实战:用 run_shell + Python Heredoc 构建可靠代码执行回退(shell python fallba
人工智能AI 技能MCP 服务AI 评测create-keystone-app 版本演进解析:从 v10 到 v11 的脚手架变革与实现原理
create keystone app 版本演进解析:从 v10 到 v11 的脚手架变革与实现原理 create keystone app 是 Keyston
人工智能AI 技能MCP 服务AI 评测OpenSpace Skill 实战:shell-python-heredoc 回退模式 —— 用 run_shell 与 Python heredoc 兜底代码执行
OpenSpace Skill 实战:shell python heredoc 回退模式 —— 用 run_shell 与 Python heredoc 兜底代
人工智能AI 技能MCP 服务AI 评测
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考