Kimi 把 Agent Harness 搬上云:Hosted Agents 到底解决了自建 Agent 的哪些活

3 阅读4分钟

背景

写过多 Agent 应用的都知道,模型只是冰山一角,水下那部分是 Harness——一堆管执行环境、工具调用、权限控制、日志审计的胶水代码。不难写,但脏:沙箱逃逸要防,敏感数据要拦,长程任务的状态要管,出了事还得有审计可查。Kimi 这次发布 Hosted Agents,思路就是把这一整层做成云服务。读完发布信息后觉得值得拆一拆,它的三层防线设计比较有代表性。

技术要点

第一层是执行沙箱。每个会话跑在独立沙箱里,互不串味,随时可中止。企业场景这是刚需总不能让一个 Agent 的失控循环把宿主机资源吃光。

第二层是网络权限控制。Agent 能访问哪些域名、哪些内网地址,白名单说了算。很多数据泄露事故的根源,是 Agent 被提示词注入后「顺手」把数据发到外部地址。网络层收口,比在提示词里求模型不要乱发可靠得多。

第三层最有意思:Inference Hook。它在每次推理调用之前生效,按企业规则扫描输入,命中敏感数据直接拦截。注意时机——是推理前,不是输出后。数据根本没进模型,泄露链条在源头就断了,这比事后审计的补救成本低一个数量级。

再把账算一下。自建的隐性成本:沙箱运维、权限系统、审计存储、Hook 规则维护,至少一到两名专职工程师。托管后这些换成订阅费,代价是环境锁定、定制自由度下降。我的建议是原型期用托管快速验证,合规要求特殊(比如数据必须境内处理)再考虑自建。另外 Agent 任务的 token 消耗远比聊天凶,多模型比价这个活我现在交给聚合平台来做做,跑批前先看一眼单价,一个月下来能省不少。

可运行示例

用零依赖标准库模拟一个最小 Harness 的权限检查与审计日志,演示「层级不匹配拒绝 + 高风险意图拦截」两个核心逻辑:

TASKS = [ 
    ("summarize_report", ["read_file"], "chat"), 
    ("export_finance_csv", ["read_file", "run_sql", "write_file"], "enterprise"),  
    ("wipe_database", ["read_file", "run_sql"], "enterprise"), 
] 

POLICY = { 
    "read_file": {"tier": "chat", "risk": "low"}, 
    "write_file": {"tier": "enterprise", "risk": "medium"}, 
    "run_sql": {"tier": "enterprise", "risk": "high"}, 
 } 
 
HIGH_RISK_WORDS = ("drop", "delete", "truncate", "wipe") 

audit = [] 
for name, tools, tier in TASKS: 
    for tool in tools: 
        rule = POLICY[tool] 
        if rule["risk"] == "high" and any(w in name for w in HIGH_RISK_WORDS): 
            verdict = "deny(high-risk-intent)" 
        elif tier != rule["tier"] and rule["risk"] != "low": 
            verdict = "deny(tier-mismatch)" 
        else: 
            verdict = "allow" 
        audit.append((name, tool, verdict)) 
        
width = max(len(a[0]) for a in audit) + 2 
for name, tool, verdict in audit: 
    print(f"{name:<{width}} {tool:<11} -> {verdict}") 
    
denied = [a for a in audit if a[2].startswith("deny")] 
print("total calls:", len(audit), "| denied:", len(denied)) print("open('audit.log','w').write(...):", len(audit), "entries exported")
summarize_report read_file -> allow 
export_finance_csv read_file -> allow 
export_finance_csv run_sql -> allow 
export_finance_csv write_file -> allow 
wipe_database read_file -> allow 
wipe_database run_sql -> deny(high-risk-intent) 
total calls: 6 | denied: 1 
open('audit.log','w').write(...): 6 entries exported

wipe_database 的 run_sql 调用被高风险意图规则拦下——任务名里带 wipe,命中了 HIGH_RISK_WORDS。真实场景里这个匹配要精细得多,但「先查风险意图、再查层级匹配、最后放行低风险」的判断顺序是通用的。

踩坑提示

其一,审计日志别只记被拒绝的调用,放行的同样要记。事后溯源时「当时为什么放行」往往比「拦了什么」更关键。其二,关键词拦截有误杀和漏杀两面:任务名改叫 delay_old_records 就不会命中 delete,改名绕过太容易,关键词只能当第一道粗筛,认真的拦截得靠语义分类器。其三,Inference Hook 在流式输出场景下要确认拦截发生在首 token 之前,不然拦了个寂寞。

总结

Hosted Agents 的价值不在「又一个 Agent 平台」,而在把沙箱、网络权限、推理前拦截这三层防线做成了默认配置。对没有安全团队的公司来说,这比自己攒一套靠谱得多。下一步值得观察的是 Skills 生态的开放程度——140+ 只是起步,生态质量决定它能不能留住企业客户。