编程 OpenHarness:港大开源的AI Agent轻量级框架,1.1万行代码复刻Claude Code 98%核心能力

2026-04-08 13:36:32 +0800 CST views 10

OpenHarness:港大开源的AI Agent轻量级框架,1.1万行代码复刻Claude Code 98%核心能力

一、开篇:一个让GitHub服务器"喘不过气"的项目

2026年4月,一个现象在AI圈悄然发生:AI Agent驱动的代码提交量正在以惊人的速度增长,GitHub的每周commit量已经达到了前所未有的峰值。而在这股浪潮中,有一个项目格外引人注目——OpenHarness

4月2日开源,两天狂揽1.9K+ GitHub Star,登顶全球Trending榜首。不到一周,Star数突破7000。用1.1万行Python代码,实现了闭源巨头51.2万行代码98%的核心工具能力,体积直接压缩44倍。

这不是一个普通的"轮子",这是香港大学数据科学研究院(HKUDS)对AI Agent本质的一次深刻回答。

二、什么是 Agent Harness?重新理解AI Agent的边界

在AI圈有一个公认的公式:

Agent = LLM + Harness

LLM提供智能,Harness提供"手、眼、记忆和安全边界"。

OpenHarness给出的定义更加精准:

An Agent Harness is the complete infrastructure that wraps around an LLM to make it a functional agent.

翻译过来就是:Agent Harness是包裹在LLM周围的完整基础设施,使其成为一个功能性的智能体。

这个定义揭示了AI Agent的本质:模型本身只是"大脑",真正让它能做事的,是围绕它构建的工具调用系统、上下文管理、权限控制、记忆持久化等一整套工程系统。

Harness = Tools + Knowledge + Observation + Action + Permissions

这个公式概括了Harness的五大核心要素:

  • Tools:工具能力,让Agent能操作文件、执行命令、调用API
  • Knowledge:知识注入,让Agent理解项目上下文、业务规则
  • Observation:观察能力,让Agent能感知环境变化、读取输出结果
  • Action:行动能力,让Agent能执行操作并产生实际影响
  • Permissions:权限控制,让Agent的行为有边界、可审计

三、10大子系统:把黑盒拆成可理解的积木

OpenHarness最难得的一点,是把复杂的Agent Harness拆解成了10个边界清晰、逻辑独立的子系统。每个模块都有完整的类型校验和权限控制,哪怕是新手开发者,也能顺着代码理清Agent的完整运行逻辑。

3.1 Agent Loop(代理循环)——心脏

这是Harness的核心。一个简化的实现如下:

while True:
    response = await api.stream(messages, tools)
    
    if response.stop_reason != "tool_use":
        break  # 模型完成了
    
    for tool_call in response.tool_uses:
        # 权限检查 → Hook → 执行 → Hook → 结果
        result = await harness.execute_tool(tool_call)
    
    messages.append(tool_results)
    # 循环继续,模型基于工具结果继续思考

这个循环实现了"思考-工具调用-结果反馈-再决策"的完整闭环。模型生成工具调用请求,Harness执行并返回结果,模型基于结果继续推理,直到任务完成。

3.2 工具调用系统

内置43种核心工具,覆盖:

  • 文件操作:read、write、edit、glob、grep
  • Shell执行:exec、bash、terminal
  • 网络搜索:web_search、web_fetch
  • MCP协议:与外部工具服务的标准化通信
  • 代码分析:AST解析、依赖追踪

每个工具都有完整的类型签名、参数校验和权限声明。

3.3 上下文与记忆系统

解决Agent"健忘"的关键设计:

  • CLAUDE.md发现与注入:自动发现项目根目录的CLAUDE.md文件,注入项目上下文
  • Context Compression(自动压缩):当上下文超过token限制时,智能压缩历史消息
  • MEMORY.md持久化记忆:跨会话保存重要信息,下次对话自动恢复
  • 会话恢复:支持断点续聊,不会因为意外中断丢失进度

3.4 权限治理系统

多级权限模式,让Agent的行为可控可审计:

# 权限级别示例
ALLOW_ALL = "allow"          # 允许所有操作
DENY_ALL = "deny"            # 拒绝所有操作
ASK_EACH = "ask"             # 每次操作询问用户
ALLOWLIST = "allowlist"      # 只允许白名单操作

支持细粒度的工具权限控制,比如"只允许读取,禁止写入",或者"禁止执行网络请求"。

3.5 Hooks系统

在工具执行的各个阶段插入自定义逻辑:

# 执行前Hook
@harness.before_tool("exec")
async def log_command(tool_call):
    logger.info(f"即将执行命令: {tool_call.args['command']}")

# 执行后Hook
@harness.after_tool("write")
async def backup_file(tool_call, result):
    if result.success:
        backup_path = f".backup/{tool_call.args['path']}"
        await backup_file(tool_call.args['path'], backup_path)

3.6-3.10 其他子系统

  • Multi-Agent协作:支持子Agent派发、并行任务执行
  • Sandbox沙箱:Docker隔离,安全的工具执行环境
  • Skill系统:可复用的能力包,支持插件化扩展
  • 状态管理:多层状态追踪,支持任务中断恢复
  • 日志与可观测性:完整的执行日志、性能追踪

四、44倍体积压缩的秘密:工程哲学的胜利

Claude Code有51.2万行TypeScript代码,OpenHarness只有1.1万行Python代码。为什么能做到98%的功能覆盖,体积却只有1/44?

4.1 语言层面的优势

Python的动态特性让代码更简洁。一个简单的对比:

// TypeScript: Claude Code中的工具定义
interface ToolDefinition {
  name: string;
  description: string;
  parameters: {
    type: "object";
    properties: Record<string, JSONSchema>;
    required?: string[];
  };
}

class ToolRegistry {
  private tools: Map<string, ToolDefinition> = new Map();
  
  register(tool: ToolDefinition): void {
    this.tools.set(tool.name, tool);
  }
  
  get(name: string): ToolDefinition | undefined {
    return this.tools.get(name);
  }
}
# Python: OpenHarness中的工具定义
@tool
def read_file(path: str, limit: int = None) -> str:
    """读取文件内容"""
    return open(path).read()[:limit]

# 自动推断参数类型和描述

Python的装饰器语法让工具定义变成了一行代码。

4.2 架构层面的极简

OpenHarness没有做"大而全"的平台,而是聚焦核心能力:

  • 不做复杂的前端UI,只提供CLI和API
  • 不做自己的模型,只做模型适配层
  • 不做重型框架,只提供可组合的模块

4.3 兼容而非重新发明

OpenHarness完全兼容Claude Code生态:

  • 支持anthropics/skills协议
  • 支持Claude Code的CLAUDE.md格式
  • 支持MCP协议标准

这意味着你现有的Claude Code配置、Skills、插件,可以直接迁移到OpenHarness使用。

五、实战:用OpenHarness构建你的第一个Agent

5.1 安装

git clone https://github.com/HKUDS/OpenHarness.git
cd OpenHarness
pip install -e .

5.2 基础配置

创建配置文件 config.yaml

model:
  provider: "openai"  # 或 "anthropic"
  api_key: "${API_KEY}"  # 从环境变量读取
  
harness:
  permission_mode: "ask"  # 每次工具调用询问用户
  
memory:
  persistence: true
  memory_file: "./MEMORY.md"

5.3 编写第一个Agent

from openharness import Agent, Tool

# 定义自定义工具
@Tool
def search_web(query: str) -> str:
    """搜索互联网获取信息"""
    import requests
    response = requests.get(f"https://api.search.com?q={query}")
    return response.json()["results"]

# 创建Agent
agent = Agent(
    name="research-assistant",
    tools=[search_web],
    system_prompt="你是一个研究助手,帮助用户搜索和整理信息。"
)

# 启动对话
async def main():
    response = await agent.run("帮我研究一下2026年AI Agent的发展趋势")
    print(response)

import asyncio
asyncio.run(main())

5.4 添加记忆能力

from openharness import Memory

agent = Agent(
    name="personal-assistant",
    tools=[...],
    memory=Memory(
        persistence=True,
        context_injection=True  # 自动注入MEMORY.md
    )
)

# 跨会话记忆
agent.remember("用户偏好使用Python,不喜欢JavaScript")
# 下次对话时,Agent会自动应用这个偏好

六、适用场景:谁应该用OpenHarness?

6.1 想要深入理解AI Agent的开发者

OpenHarness的代码结构清晰,文档完善,是学习AI Agent工程实现的最佳教材。相比闭源的Claude Code,你可以看到每一个设计决策背后的代码。

6.2 需要定制化Agent的企业

Claude Code是一个"黑盒",很难深度定制。OpenHarness提供了:

  • 完全可修改的代码
  • 灵活的工具注册机制
  • 可定制的权限控制
  • 支持私有部署

6.3 研究人员和学者

MIT开源协议,支持学术研究和商业使用。OpenHarness提供了:

  • 完整的测试套件(114个测试全部通过)
  • 清晰的架构文档
  • 可复现的实验环境

6.4 预算有限的个人开发者

Claude Code需要订阅Claude Pro,而OpenHarness支持任意LLM:

  • OpenAI(GPT-4、GPT-4o)
  • Anthropic(Claude)
  • 本地模型(Ollama、LM Studio)
  • 国内模型(DeepSeek、智谱、Kimi)

七、OpenHarness vs Claude Code:功能对比

特性OpenHarnessClaude Code
代码行数1.1万行51.2万行
开源协议MIT闭源
语言支持PythonTypeScript
工具数量43种100+
记忆系统
多Agent协作
沙箱隔离
Skills生态兼容原生
自定义模型✅ 任意LLM❌ 仅Claude
部署方式本地/云仅SaaS

八、总结:AI Agent开发的"乐高时代"

OpenHarness的出现,标志着AI Agent开发进入了一个新阶段——从"使用黑盒"到"理解原理",从"被动接受"到"主动定制"。

1.1万行代码实现了51.2万行代码98%的核心能力,这不是简单的"压缩",而是对AI Agent本质的深刻洞察——智能来自模型,能力来自架构,安全来自边界控制

如果你正在探索AI Agent的世界,OpenHarness是一个绝佳的起点。它不会给你"开箱即用"的完美体验,但会给你"理解透彻"后的掌控感。

正如OpenHarness的slogan所说:

OpenHarness: Open Agent Harness — 让每个开发者都能构建自己的AI Agent。


项目地址:https://github.com/HKUDS/OpenHarness
文档:https://openharness.readthedocs.io
协议:MIT License


本文作者:三哥 | 发布时间:2026年4月8日

复制全文 生成海报 AI Agent 开源项目 OpenHarness Python

推荐文章

Elasticsearch 聚合和分析
2024-11-19 06:44:08 +0800 CST
vue打包后如何进行调试错误
2024-11-17 18:20:37 +0800 CST
php strpos查找字符串性能对比
2024-11-19 08:15:16 +0800 CST
阿里云发送短信php
2025-06-16 20:36:07 +0800 CST
如何在Vue3中定义一个组件?
2024-11-17 04:15:09 +0800 CST
api接口怎么对接
2024-11-19 09:42:47 +0800 CST
pip安装到指定目录上
2024-11-17 16:17:25 +0800 CST
Go语言中的`Ring`循环链表结构
2024-11-19 00:00:46 +0800 CST
Go 接口:从入门到精通
2024-11-18 07:10:00 +0800 CST
服务器购买推荐
2024-11-18 23:48:02 +0800 CST
PyMySQL - Python中非常有用的库
2024-11-18 14:43:28 +0800 CST
120个实用CSS技巧汇总合集
2025-06-23 13:19:55 +0800 CST
浏览器自动播放策略
2024-11-19 08:54:41 +0800 CST
Vue3中如何处理组件的单元测试?
2024-11-18 15:00:45 +0800 CST
Vue3中如何实现国际化(i18n)?
2024-11-19 06:35:21 +0800 CST
thinkphp swoole websocket 结合的demo
2024-11-18 10:18:17 +0800 CST
Vue3中如何实现状态管理?
2024-11-19 09:40:30 +0800 CST
mysql删除重复数据
2024-11-19 03:19:52 +0800 CST
Linux查看系统配置常用命令
2024-11-17 18:20:42 +0800 CST
一个简单的html卡片元素代码
2024-11-18 18:14:27 +0800 CST
Golang 中你应该知道的 noCopy 策略
2024-11-19 05:40:53 +0800 CST
Nginx 防盗链配置
2024-11-19 07:52:58 +0800 CST
Vue3中如何扩展VNode?
2024-11-17 19:33:18 +0800 CST
PHP解决XSS攻击
2024-11-19 02:17:37 +0800 CST
js函数常见的写法以及调用方法
2024-11-19 08:55:17 +0800 CST
程序员茄子在线接单