规模化智能体工作的验收层
智能体交付工作的速度超过任何团队的审核能力。SeaOtter 的评审为每个工件打分,并不断推送修复直至通过您的策略——智能体↔评审,以机器速度闭环。
阅读文档以智能体规模
智能体提交工作以评分。它会被路由到快速的单次通过——或在沙箱中运行、被多轮探测的深度智能体式检查。敌意评审模型做出决定,您为其耗用的算力付费。然后拉远视角:成千上万的智能体并行评分,同步或异步。
定位化反馈
评审不只说“有问题”。它会定位问题,使智能体能精确修订失败的那一行、那一页、那张幻灯、那个单元格、帧或时间戳。
“此工件某处可能存在问题。”
hallucinated_api · high
self.tasks.add_item(task)add_item 不是 list 的有效方法,运行时会报错。应为 self.tasks.append(task)。
这是我们评审对“精确定位跨度并指明文件”的早期、保留集验证读数。检测仍在训练中;此处所述为定位质量,而非泛化的批评能力。
提交 → 评分
智能体通过 POST 提交刚产出的工作,SeaOtter 按您的验收策略进行评分。轻量、快速的检查在响应中内联返回裁定。较重的检查返回作业 ID,供智能体轮询、订阅流或通过 webhook 接收——因此漫长的复核不会阻塞发起请求的智能体。
SYNCHRONOUS
POST 工作,保持连接,OtterScore 裁定——分档、缺陷、锚点、升级建议——在同一响应中返回。最适合用于智能体内环中的“单次”检查,智能体在下一步前需要结果。
POST /api/v1/eval/score → 200 { band, flaws[], upgrades[] }
ASYNCHRONOUS
POST 工作,立即获得作业 ID,然后轮询作业、订阅结果流或注册 webhook。最适合在沙箱中多轮探测的智能体式检查——产出智能体继续前进,裁定落地时再回调。
POST /api/v1/eval/jobs → 202 { job_id } · 轮询 · 流 (SSE) · webhook
同步 · 单次
一次敌意评审,内联返回。低价、固定费率。
curl -s https://dev-api.seaotter.ai/api/v1/eval/score \
-H "Authorization: Bearer $OTTER_KEY" -H 'Content-Type: application/json' \
-d '{ "mode":"one_shot", "modality":"text",
"policy_id":"acme-prod-acceptance",
"artifact_parts":[{"mime_type":"text/plain","text":"..."}] }'
# 200 { "band":"route_to_fix", "flaws":[...], "upgrades":[...] }异步 · 智能体式
评审在沙箱中运行工作,并进行多轮探测。
POST /api/v1/eval/jobs
{ "mode":"agentic", "modality":"code",
"policy_id":"acme-prod-acceptance",
"artifact_ref":"gs://...", "max_passes":6,
"webhook":"https://acme.internal/otter-callback" }
# 202 { "job_id":"job_8f21", "status":"running" }
GET /api/v1/eval/jobs/job_8f21 # 轮询,或流式,或等待 webhook同一策略、同一 OtterScore、同一签名审计记录——无论智能体选择哪种传输方式。
面向智能体 · MCP 快速开始
三步:生成密钥、添加一个 MCP 服务器,然后您的智能体在自身循环中调用 otter_score / otter_iterate——同一 OtterScore、同一验收策略,以机器速度。评审评分;您的智能体依据缺陷迭代,直到分档跨过闸门。这正是上方“舰队”演示的循环:每个被标记的工件(route_to_fix,琥珀弧)通过 otter_iterate 重新进入闸门,且仅当 ready_to_ship 为 true 时才放行。内环无人工——具名签批是最后一道闸门,而非唯一闸门。
已登录的组织用户为智能体生成一次评测密钥。sk-otter-… 只显示一次;将其交给智能体。
在 .mcp.json(Claude / Cursor)或 config.toml(Codex)中加入一个 otterloop 服务器。智能体将获得只读评审工具,并可自动批准。
智能体提交工作、读取带锚点的缺陷、修订并重新提交——当 ready_to_ship 为 false 时持续循环。挺过评审,就是产品本身。
1 — 注册
使用已登录用户 JWT 调用 POST /api/v1/agent-keys。密钥仅返回一次——或在开发者控制台点击“生成评测 API 密钥”。
curl -s -X POST https://dev-api.seaotter.ai/api/v1/agent-keys \
-H "Authorization: Bearer $SEAOTTER_USER_JWT" \
-H 'Content-Type: application/json' \
-d '{"name":"my-agent"}'
# -> { "id":"...", "key":"sk-otter-...",
# "key_prefix":"sk-otter-abcde", "created_at":"..." }
# 将 `key` 交给智能体作为 OTTERLOOP_API_KEY。2 — 添加 MCP 服务器
.mcp.json(Claude / Cursor)——Codex 使用 config.toml 中的 [mcp_servers.otterloop]。一次安装:pip install "otterloop[mcp]"。生产基址:https://api.seaotter.ai。
{
"mcpServers": {
"otterloop": {
"command": "python",
"args": ["-m", "otterloop.mcp_server"],
"env": {
"OTTERLOOP_API_URL": "https://dev-api.seaotter.ai",
"OTTERLOOP_API_KEY": "sk-otter-...",
"OTTERLOOP_POLICY_ID": "enterprise-default"
}
}
}
}
# 工具:otter_list_policies · otter_score · otter_iterate
# otter_score_workflow · otter_get_feedback_artifact3 — 评分与迭代
智能体通过 MCP 完成 提交 → 缺陷 → 修订 → 重新提交 全流程。将裁定视为权威——请勿自评。
# 提交工作 -> 权威裁定
v = otter_score(
work="...the artifact your agent produced...",
modality="text",
prompt="Draft the Q3 incident postmortem",
policy_id="enterprise-default")
# -> { run_id, score, band:"route_to_fix",
# flaws:[{criterion,severity,detail,anchor}],
# upgrades:[...], ready_to_ship:false }
# 根据 flaws[]/upgrades[] 修订,然后在同一 run 上重新提交
d = otter_iterate(
run_id=v["run_id"],
work="...revised draft addressing the flaws...",
prompt="addressed sourcing + tone")
# -> { run_id, verdict:{band:"ship",...},
# delta:{resolved_flaws,new_flaws,persisted_flaws,
# score_change:+18.0}, ready_to_ship:true }
# 当 ready_to_ship 为 false 时持续迭代。迭代 → 收敛
otter_iterate 的返回 —— 与上方舰队动画相同的 route_to_fix → ship 收敛,凝固为清晰的增量差异。
resolved_flaws ↓ 2 · score_change ↑ +18.0 · ready_to_ship → true
纯 HTTP 等价(无 MCP):POST /api/v1/eval/runs → { run_id, first_iteration.critic_verdict },然后 POST /api/v1/eval/runs/{run_id}/iterate { "decision":"re_prompt", "new_artifact_parts":[…] } → { verdict, delta }。评审故障默认“关闭失败”(band:quarantine)——绝不静默通过。
两种检查模式
并非每份输出都需同等审查强度。单次检查为一次敌意评审——快速、低算力、内联返回。智能体式检查在一次性、可联网的沙箱中多轮探测——更慢、更多算力、异步返回。将廉价工作路由至单次,高风险工作路由至智能体式,遵循同一策略。
| 单次一次敌意评审 | 智能体式沙箱,多轮 | |
|---|---|---|
| 评审执行 | 一次性读取工件、策略、提示与参考。 | 在一次性沙箱中运行并多轮探测工作。 |
| 时延 | 内联——裁定随响应返回。 | 异步——先返作业 ID,后轮询、流或 webhook。 |
| 算力 | 低且可预测。 | 更高——随轮次与沙箱时长线性增长。 |
| 最适合 | 内环检查、高量草稿、快速闸门。 | 必须运行的代码、须复现实证的声明、外溢风险高的工作。 |
| 计费 | 廉价,按次固定。 | 按算力与沙箱时长计量。 |
两种模式均返回相同的 OtterScore 裁定结构,并写入相同的签名审计记录。
OTTERLOOP 基础设施
任意智能体输出:代码、文本、图像、演示、表格、视频,或完整轨迹。
SeaOtter 依据正确的量表与组织条件化门槛进行评分。
裁定返回缺陷、升级建议与锚点,智能体可直接对齐。
智能体根据评审的“反推”重写工件或下一步。
仅当分档跨过闸门且审计证据写入后,循环才会停止。
MCP
在 Claude、Codex、Cursor 或自定义运行时中加入 `.mcp.json` 或 `config.toml`。
{ "mcpServers": { "otterloop": {
"command": "python", "args": ["-m", "otterloop.mcp_server"],
"env": { "OTTERLOOP_API_URL": "https://dev-api.seaotter.ai",
"OTTERLOOP_API_KEY": "sk-otter-...",
"OTTERLOOP_POLICY_ID": "acme-prod-acceptance" } } } }curl
任何能使用 HTTP 的运行时都可进行一次性评分或留在循环中。
curl -s https://dev-api.seaotter.ai/api/v1/eval/feedback \
-H "Authorization: Bearer $OTTER_KEY" -H 'Content-Type: application/json' \
-d '{ "modality":"text", "policy_id":"acme-prod-acceptance", "locale":"ja",
"prompt":"Draft the Q3 incident postmortem",
"artifact_parts":[{"mime_type":"text/plain","text":"..."}],
"return_feedback_artifacts": true }'Python SDK
一次循环调用驱动 产出 → 评分 → 修订,直到评审判定可放行。
from otterloop import OtterLoopClient otter = OtterLoopClient(policy_id="acme-prod-acceptance", locale="ja") final = otter.loop(produce=lambda feedback: my_agent.revise(feedback), work=my_agent.first_draft(), modality="document", references=["file://brand-guide.pdf", "file://gold-postmortem.md"], max_rounds=5, target_band="ship")