Files
nexus/wiki/concepts/Minimum-Viable-Harness.md
2026-05-03 05:42:12 +08:00

2.3 KiB
Raw Blame History

title, type, tags, sources, last_updated
title type tags sources last_updated
Minimum Viable Harness concept
harness-engineering
agentic-ai
quick-start
Your-AI-Isn-t-Stupid---It-Just-Needs-a-Better-Harness--Lychee-Technology-Engineering-Blog
2026-04-20

Overview

Minimum Viable Harness——Day 1 即可构建的 4 个核心组件,使 Agent 能够优雅失败,为后续增加智能赢得权利。

The 4 Components

1. state.json

单一结构化文件跟踪任务状态——如果进程死亡,可以从上次停止的地方继续。

{
  "task_id": "report-001",
  "steps": {
    "fetch_competitor_a": "COMPLETED",
    "fetch_competitor_b": "IN_PROGRESS",
    "compare": "PENDING"
  },
  "last_updated": "2026-04-20T10:30:00Z"
}

2. Retry Wrapper

每个工具调用包装 try/catch至少一次自动重试 + 指数退避:

def tool_call_with_retry(func, max_attempts=3):
    for attempt in range(max_attempts):
        try:
            return func()
        except (TimeoutError, APIError) as e:
            if attempt < max_attempts - 1:
                sleep(exponential_backoff(attempt))
            else:
                raise

3. Schema Validator

每个 LLM 输出在接收前必须通过 JSON Schema 验证。格式不符触发重试,不触发崩溃:

def validate_and_retry(llm_output, schema):
    try:
        validated = jsonschema.validate(llm_output, schema)
        return validated
    except ValidationError:
        return retry_with_error_feedback(llm_output, schema)

4. Tool Output Truncation

每个工具 payload 硬性上限固定 token 预算——context window 内的静默截断是幻觉最常见原因之一:

MAX_TOOL_TOKENS = 3000  # 保守上限

def truncate_tool_output(raw_output, max_tokens=MAX_TOOL_TOKENS):
    tokens = encode(raw_output)
    if len(tokens) > max_tokens:
        return decode(tokens[:max_tokens]) + "\n[TRUNCATED]"
    return raw_output

Philosophy

你可以忍受不完美的提示词。你可以忍受天真的工具集成。但是你无法忍受一个失败时破坏自己状态或静默吞噬错误的 Agent。

Source

See Also