理想化 demo 的路径通常都很简单:
这适合做第一个 demo,但还不是生产环境的集成方案。
一旦进到生产,增加的并不是代码行数,而是你必须自己承担的判断:
user request
-> app 内的 agent runtime
-> workflow-specific tool policy
-> MCP client
-> 一个或多个 MCP server
-> 外部系统或 governed context
-> 结果组装
-> logs、approvals、traces
很多团队最容易漏掉的一层,就是 tool policy。
Discovery 是协议能力,Exposure 是产品决策。
AI SDK 能列出 20 个工具,并不意味着当前 workflow 就应该看到这 20 个工具。
更合理的做法是:把 discovery 视为能力上限,把 runtime allowlist 视为真正的执行边界。
当前 AI SDK 文档建议生产环境优先使用 HTTP transport,而 stdio 更适合本地 server。它听起来像协议细节,但实际上会影响防火墙、重试、代理和运维责任归属。
最稳妥的规则通常很朴素:
这是“集成”开始变成“产品设计”的地方。
如果工具描述很模糊,模型的调用行为也会变得模糊。如果两个工具能力重叠,模型会把 token 浪费在“选哪个”上,而不是解决任务。
好的工具描述应该像一个谨慎的操作员写出来的:
模型不应该被放任去:
预算必须存在于 runtime 里,而不是只存在于系统提示词的愿望里。
如果某次工具调用导致糟糕回答或错误动作,你需要的绝不只是“模型判断错了”。
至少应该有:
| 选择 | 团队为什么喜欢它 | 会在哪里出问题 |
|---|---|---|
| 把发现到的工具全部加载进来 | 原型速度快,也能自动跟 server 同步 | 对生产来说暴露面太宽,控制力太弱 |
| 显式定义 schema 和 tool set | 类型更稳、审查更容易、控制更强 | 维护成本更高 |
更实用的规则通常是:
如果你的智能体系统同时需要 governed context 和 tool calling,puppyone 很适合放在中间层:
这在生产环境里尤其重要,因为很多时候 tool calling 和 context delivery 本来就是同一个 workflow 的两个面向。
如果你现在就在做 AI SDK + MCP 集成,更推荐按这个顺序上线:
然后再逐步增加:
不会。MCP 给 SDK 提供的是一种标准化发现和使用外部能力的方式,应用原生工具仍然可以继续存在,而且很多生产系统最后都会两者并用。
不应该。Discovery 应该收敛成更窄的 runtime allowlist。把整个工具目录暴露给每次请求,通常会让可靠性下降得更快。
先看工具选择质量和延迟。如果模型持续选错工具,或者工具调用过慢,用户侧体验会非常快地变差。