面向 server,而不只是一个能调用的循环
Client.start_workers(n) 把同一个进程变成常驻 worker 池;把存储指向 Postgres,多个 host 就共享同一个数据库,写入由 lease 围栏保护。Engine 是无状态的,所以横向扩展是换一次存储、不是重写 —— 而且没有要运维的 daemon,也没有 HTTP 跳转。
今天在你自己的进程里驱动一个 agent;明天把同一个 agent 放到多 worker、多 host 的池子上跑 —— agent 本身一行不用改。每一项能力都是插件,每一家模型厂商都只隔着一行接线,每一次运行都持久到能扛住 kill -9、事后还能 replay。
| 基准 | 范围 | noeta-agent main(Claude Opus 4.8) | 领域水平 |
|---|---|---|---|
| Terminal-Bench 2.1 | 40 题分层抽样 | 82.5%(33/40) | 公开榜单区间 58.7%–83.8% |
| SWE-bench Verified | 15 实例子集 | 86.7%(13/15) | 榜首约 79%,中段约 66–77% |
跑在 harbor(官方 Terminal-Bench harness)上,用官方数据集,由每道题自己的 verifier 打分。参赛的是 noeta-agent 的 main 预设,完全由本 SDK 的公开面组装而成。两行都是抽样,并如实标注 —— 完整方法学、排除项与可复跑命令见基准测试。
uv pip install noeta-sdk # noeta-runtime 会作为传递依赖一起装上零凭证、零网络 —— 用离线的 FakeLLMProvider 驱动一轮:
from noeta.sdk import Options, query, LLMResponse, TextBlock, Usage
from noeta.sdk.testing import FakeLLMProvider
provider = FakeLLMProvider(responses=[
LLMResponse(stop_reason="end_turn",
content=[TextBlock(text="Hello from Noeta.")],
usage=Usage(uncached=1, output=1))
])
result = query(
Options(system_prompt="You are concise.",
allowed_tools=("Read",),
permission_mode="bypassPermissions"),
goal="Say hello.",
provider=provider,
model="stub-model",
)
assert result.answer() == "Hello from Noeta."换一个 provider 就能接上真实模型 —— 见 配置 Provider。
第一次来?先看快速上手,再看你的第一个 agent。其余内容都在下面。
| 页面 | 你会得到 |
|---|---|
| 快速上手(5 分钟) | 安装、离线跑通一轮、读懂它产生的事件日志。 |
| 你的第一个 agent | 一个带自定义工具和权限闸门的真实 agent。 |
| CI 集成 | 在 CI 里确定性地跑 agent,不需要 API key。 |
| 页面 | 什么时候用 |
|---|---|
| 配置 Provider | 你想接真实模型:Anthropic、OpenAI 兼容网关,或 Responses API。 |
| 构建自定义工具 | agent 需要调用你自己的代码。 |
| 生成子代理 | 一个 Task 需要把部分工作委派出去并等待结果。 |
| 连接 MCP | 你想用现成 MCP server 提供的工具。 |
| 编写插件 | 你想把工具、agent 或 policy 打包复用。 |
| 部署 Worker | Task 需要在启动它的进程之外继续运行。 |
| 用 Docker 部署 | 你要把 worker 作为容器发布。 |
| 使用 Sandbox | 工具调用必须与宿主机隔离运行。 |
| 多租户记忆 | 多个租户共用一套部署,且彼此不可见。 |
| 切换 Provider | 已有的 agent 要换到另一个端点。 |
| 页面 | 讲什么 |
|---|---|
| 概念总览 | 阅读顺序,以及每个概念的一句话定义。 |
| 事件溯源 | 为什么状态是 fold(events),以及这带来了什么。 |
| 任务模型 | Task 是唯一原语:状态、Attempt、子任务。 |
| 引擎与执行 | 一个 Step 做的事:取 lease、fold、组装上下文、决策、派发工具。 |
| Fold 与快照 | 如何从日志重建状态,以及让它保持快速的快照。 |
| 唤醒与恢复 | 为人、定时器或子任务挂起 —— 并恰好唤醒一次。 |
| Guard 与 Observer | 谁能拦下一次工具调用,谁只能旁观。 |
| Composer 与缓存 | prompt 如何按三段组装以命中 provider 缓存。 |
| Provider 中立 | 一个内部协议、三个适配器,内核里没有任何厂商。 |
| 页面 | 覆盖 |
|---|---|
| 概览 | 整个系统的导览。 |
| 包与导入规则 | noeta-sdk 位于 noeta-runtime 之上、同一个命名空间,以及隔开二者的规则。 |
| 状态与写入者 | 状态切片、单写入者不变式、带版本的 fold。 |
| 扩展平面 | 三个平面上的十六个 Surface,以及 built-in plugin 如何走同一条路。 |
| 页面 | 内容 |
|---|---|
| SDK API 地图 | 所有可从 noeta.sdk 导入的东西,并链到细节页。 |
| query / Client | 两个入口、它们的参数,以及返回什么。 |
| Options | 每一个 Options 字段和各个权限模式。 |
| 类型与测试替身 | 事件、内容块、结果,以及离线测试替身。 |
| 插件总览 | 插件是什么,以及它如何对某个 agent 生效。 |
| 插件 manifest | manifest 结构、加载过程与版本锁定。 |
| 插件 Surface | 全部十六个扩展 Surface,每个一节。 |
| 工具 | 内置工具清单。 |
| 预设代理 | 预设 agent 及各自的接线。 |
| WorkerLoop | worker 池 API、lease 与轮询行为。 |
| 对比 | Noeta 与其他 agent 框架的对比。 |
| 术语表 | 按领域分组的全部术语,附 A–Z 索引。 |
| 页面 | 回答 |
|---|---|
| 故障排查 | 你真正会遇到的故障:现象、原因、修法。 |
| 已知限制 | Noeta 目前还做不到什么,直说。 |
| 基准测试 | 建在 Noeta 上的 agent 在公开基准上的成绩,以及这是怎么测的。 |