
[!CAUTION] ⚠️ Alpha内测提醒:项目内容仍在持续完善中,可能存在错误或缺漏,欢迎大家提 Issue 反馈问题或建议。
本项目是一本关于 Harness Engineering 的开源教程,旨在帮助开发者理解和掌握在大模型时代,如何为复杂、长时间运行的 AI 智能体(Agent)构建健壮的底层运行架构。
随着智能体技术的发展,AI 系统的开发范式正在经历深刻的演进:从单次的提示词工程(Prompt Engineering),到动态信息管理的上下文工程(Context Engineering),最终迈向系统级的 Harness Engineering。
本教程包含理论讲解和实践代码两部分: - 理论部分:系统介绍提示词工程、上下文工程、harness 的核心概念、设计原则、实现策略。以及为什么会一步步演进到 harness engineering - 实践部分:通过 miniMaster 项目(一个最小化的 Harness 实现),展示如何将 Harness 理论应用于实际开发
本教程适合以下人群: - AI 应用开发者:希望构建更复杂、更智能的 AI 应用系统 - 大模型技术爱好者:想深入了解 Agent 系统和上下文管理机制 - Python 开发者:具备基础 Python 编程能力,想学习 AI 系统工程化实践
通过学习本教程,你将能够: - 理解上下文工程与提示词工程的本质区别 - 掌握动态上下文管理的核心策略 - 学会设计可扩展的 AI 技能系统 - 动手实现一个最小化的类 Claude Code 系统
📖 https://datawhalechina.github.io/self-harness/
| 章节名 | 简介 | 状态 |
|---|---|---|
| 第1章 总览 | 总览 | ✅ |
| 第2章 什么是提示词工程 | Prompt Engineering 的概念、方法、局限性 | ✅ |
| 第3章 什么是上下文工程 | 上下文工程的概念和方法 | ✅ |
| 第4章 长时运行下的 Harness Engineering | 再长时间复杂软件开发中、如何设计 harness 以保证 agent 在长时间的运行中不会出错 | ✅ |
| 第5章 三种工程的演进 | 这三种工程理论的演进 | ✅ |
| 第6章 miniMaster 实战项目 | 围绕 miniMaster 实例讲清 Tool 设计、Prompt/动作协议、动态工作记忆、验证闭环与三层智能体协作方式 | ✅ |
miniMaster 是本教程配套的最小 Harness 实践项目,代码目录位于 code/miniMaster2.0/。
它把任务建模、Prompt 构造、动作协议、运行时记忆、验证闭环和工具系统拆成清晰模块,便于理解一个可持续运行的 Agent 系统到底由哪些部件组成。
tools/core 中的 ToolContext + ToolSpec + ToolService 统一管理llm/prompting/ 中,保证 Prompt 描述与动作边界一致planner_memory、generator_memory、validation_memory 与 retry_archive_by_task 分开管理,既保留必要上下文,也能压缩旧轨迹
query: 分析当前项目中 memory/ 目录的实际作用,并说明 planner_memory / generator_memory / validation_memory / retry_archive_by_task 分别负责什么,以及这套 memory 是否跨重启持久化
部分结果:
plan-agent
📋 Planner-Agent 选择工具: init_tasks
📋 参数: {'tasks': [{'task_name': '分析 memory 目录作用', ...}]}
✅ 已初始化任务列表: [{'task_name': '分析 memory 目录作用', ...}]
📋 Planner-Agent 选择工具: read
📋 参数: {'file_path': 'C:\\Users\\25853\\Desktop\\self-harness\\code\\miniMaster2.0\\bootstrap\\runtime.py'}
✅ 规划侦察结果: {'success': True, 'content': 'import os\\nimport time\\n...'}
📋 Planner-Agent 选择工具: split_task
📋 参数: {'target_task_name': '分析 memory 目录作用', ...}
generator-agent
🚀 开始执行任务: 分析 memory 目录作用
🛠️ Executor-Agent 选择工具: read
🛠️ 参数: {'file_path': 'bootstrap/runtime.py'}
✅ 工具执行结果: {'success': True, 'content': 'import os\\nimport time\\n...', 'total_lines': 107}
🛠️ Executor-Agent 选择工具: read
🛠️ 参数: {'file_path': 'memory/prompt_context.py'}
✅ 工具执行结果: {'success': True, 'content': 'from __future__ import annotations\\n...', 'total_lines': 115}
🛠️ Executor-Agent 选择工具: update_task_conclusion
🛠️ 参数: {'conclusion': 'memory 目录在运行时被直接使用,并参与 Planner、Executor、Validator 的上下文组织。'}
validate-agent
🛠️ Validator-Agent 选择工具: grep
🛠️ 参数: {'pattern': 'from memory.prompt_context import', 'path': 'engine/validator.py', 'recursive': False}
✅ 验证工具执行结果: {'success': True, 'matches': [{'file': 'engine\\validator.py', 'line_number': 18, 'line_content': 'from memory.prompt_context import build_validator_prompt_context', 'matched_text': 'from memory.prompt_context import'}]}
🛠️ Validator-Agent 选择工具: validate_tool
🛠️ 参数: {'status': '有效', 'reason': '现有证据已完整覆盖所有完成项:validator 通过 build_validator_prompt_context 获取验证所需的 memory 上下文。', 'covered_requirements': ['能够说明 validator 是否使用 memory 数据及其使用方式', '验证器与 memory 关联分析报告'], 'missing_requirements': []}
✅ 验证通过!
最终生成的分析结果:生成的结果
code/miniMaster2.0/
├── bootstrap/
│ ├── runtime.py # 启动装配:LLM client、ToolService、memory、skill store
│ └── stage_context.py # 统一构造 system prompt、动作集合与 tool schema
├── domain/
│ ├── todo.py # 任务列表与任务卡片管理
│ ├── task_requirements.py# 把 done_when / deliverable 归一成 completion checklist
│ ├── state_machine.py # 受控任务状态迁移
│ └── types.py # Task、AgentRuntime、MemoryEntry 等核心数据结构
├── engine/
│ ├── main_loop.py # 顶层 Planner 主循环
│ ├── plan_actions.py # init_tasks / split_task / retry_task / subagent_tool 处理
│ ├── runner.py # Executor 执行与任务重试
│ ├── validator.py # Validator 独立验证循环
│ ├── guards.py # 重复动作防护
│ └── support.py # 日志、反馈与运行时工具辅助
├── llm/
│ ├── runner.py # 模型请求入口与 function call 解析
│ └── prompting/
│ ├── builders.py # Plan / Executor / Validator Prompt 构造
│ ├── policies.py # 三个角色的动作白名单
│ └── protocol.py # function call 协议适配
├── memory/
│ ├── prompt_context.py # 按角色整理 prompt 所需的 memory 视图
│ ├── session.py # session memory 与 retry archive 管理
│ └── working_memory.py # 工作记忆记录、裁剪、压缩与渲染
├── skills/
│ ├── store.py # skill 包解析与加载
│ ├── types.py # Skill 数据结构
│ ├── library/ # 示例 skills
│ └── scripts/ # skill 相关脚本
├── tools/
│ ├── base_tool/ # 基础系统工具
│ ├── search_tool/ # 搜索检索工具
│ └── core/ # ToolContext、ToolSpec、ToolService
├── use_case/ # 运行案例、日志与结果
├── utils/ # 控制台日志等辅助模块
├── main_agent.py # 程序入口
└── requirements.txt # 依赖列表
| 姓名 | 职责 | GitHub |
|---|---|---|
| 张文星 | 项目负责人、教程设计与实现 | @funnamer |
| CaptainUniverse_ | 实践项目部分 代码优化 | @TheCaptainUniverse |
扫描下方二维码关注公众号:Datawhale

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
$ claude mcp add self-harness \
-- python -m otcore.mcp_server <graph>