Skip to content

承载管控工程(Harness Engineering)

Harness Engineering 是模型外部的「承载与约束系统」设计,解决模型输出后如何安全、可控地接入真实系统完成任务。

注:Harness Engineering 尚无通用中文译名,本文暂用「承载管控工程」。

为什么需要 Harness Engineering

问题:LLM 能"说",但不能"做"

LLM 输出:
"我来帮你创建一个用户表"
→ 输出的是 SQL 语句(文本)
→ 但没有真正执行

需要 Harness:
- 接住模型的输出
- 调用工具执行
- 验证执行结果
- 控制权限和风险

核心职责

Harness = 模型的"手"和"安全气囊"

手:执行模型决策(调用工具、读写文件、运行代码)
安全气囊:权限控制、失败处理、人工审核

1. 接住模型输出

模型输出的是文本,需要解析成结构化指令:

python
# 模型输出(文本)
output = '''
我认为应该执行以下 SQL:
```sql
CREATE TABLE user (...);

'''

Harness 需要解析出:要执行什么、参数是什么

用 Function Calling 可以让模型直接输出结构化指令

tool_call = parse_tool_call(output)


### 2. 调用工具(Tool Execution)

```python
def execute_tool(tool_name, args):
    """Harness 层:执行工具调用"""
    if tool_name == "run_sql":
        # 权限检查
        if not has_permission("db_write"):
            raise PermissionError("无数据库写入权限")

        # 执行
        result = db.execute(args["sql"])

        # 结果验证
        if result.has_error():
            return {"status": "error", "message": result.error}

        return {"status": "success", "result": result}

    elif tool_name == "read_file":
        # 路径安全检查(防止路径遍历攻击)
        if is_path_traversal(args["path"]):
            raise SecurityError("非法文件路径")
        return read_file(args["path"])

3. 安全边界设计

python
# Harness 层定义安全边界

SAFE_COMMANDS = ["ls", "cat", "grep"]  # 允许执行的命令
DANGEROUS_COMMANDS = ["rm", "dd", "mkfs"]  # 禁止执行的命令

def execute_command(cmd):
    # 检查是否在白名单
    if not is_safe(cmd, SAFE_COMMANDS):
        raise SecurityError(f"命令 {cmd} 不在白名单")

    # 沙箱执行
    return run_in_sandbox(cmd)

4. 执行结果验证

python
# 模型说"测试通过了"
# Harness 要真正运行测试,验证结果

def verify_and_execute(llm_output):
    # 解析模型意图
    action = parse_action(llm_output)

    # 预检查
    if action["type"] == "delete_file":
        if not human_approval_required(action):
            raise ValueError("删除操作需要人工确认")

    # 执行
    result = execute(action)

    # 验证
    if action["type"] == "run_tests":
        if result["failed"] > 0:
            return {"status": "test_failed", "details": result}

    return result

5. 失败处理与回滚

python
def execute_with_rollback(action):
    # 记录操作前状态
    snapshot = take_snapshot()

    try:
        result = execute(action)
        return result
    except Exception as e:
        # 回滚
        restore_snapshot(snapshot)
        return {"status": "failed", "error": str(e), "rolled_back": True}

实际案例

Case 1:AI 编程助手(Cursor / Claude Code)

用户:帮我修复这个 Bug

Harness 层做了什么:
1. 让模型分析代码(LLM 调用)
2. 模型输出修改建议(文本)
3. Harness 解析建议,真正修改文件
4. 运行测试,验证修改是否正确
5. 如果测试失败,回滚修改
6. 把结果反馈给模型(用于下一轮)

Case 2:AI Agent 的工具调用

python
# LangChain 的 Tool 执行就是 Harness 层
from langchain.tools import Tool

def search_tool(query: str) -> str:
    # Harness:实际执行搜索
    results = google_search(query)
    return results[:5]  # Harness:限制返回数量

tool = Tool(
    name="Search",
    func=search_tool,  # Harness 层
    description="搜索网络"
)

Harness 设计原则

1. 最小权限原则

Agent 不需要 root 权限
→ 只用普通用户权限运行
→ 只能访问必要的文件和 API

2. 关键操作人工确认

python
DANGEROUS_ACTIONS = [
    "delete_file",
    "send_email",
    "execute_sql",
    "deploy_to_prod"
]

def execute(action):
    if action["type"] in DANGEROUS_ACTIONS:
        if not human_approved(action):
            raise PermissionError("需要人工确认")
    return do_execute(action)

3. 沙箱执行

python
# 执行不可信代码时,用沙箱
def execute_code_safely(code):
    return run_in_sandbox(
        code,
        timeout=30,          # 超时
        memory_limit="512M", # 内存限制
        network="off"        # 禁止网络访问
    )

4. 完整的日志

python
# 记录 Agent 的每一步操作(审计需求)
def log_action(action, result):
    log = {
        "timestamp": now(),
        "action": action,
        "result": result,
        "user": current_user()
    }
    audit_log.append(log)

4 个工程层的关系

┌─────────────────────────────────────┐
│ Loop Engineering                    │  ← 多步循环、终止条件
├─────────────────────────────────────┤
│ Harness Engineering                 │  ← 执行、验证、安全
├─────────────────────────────────────┤
│ Context Engineering                 │  ← 信息输入(给模型喂料)
├─────────────────────────────────────┤
│ Prompt Engineering                  │  ← 单次输入优化
└─────────────────────────────────────┘

层层叠加,不是互相替代

相关资源