1. 渐进式披露:LLM开发的核心工程哲学
在传统LLM应用开发中,我们常常面临一个困境:要么把所有工具和资源描述一次性塞进上下文窗口导致token爆炸,要么严格限制功能导致智能体能力贫乏。渐进式披露(Progressive Disclosure)正是解决这一困境的黄金法则。
我最近在电商客服机器人项目中深刻体会到这一原则的价值。当用户简单询问"订单状态"时,系统只需要加载基础的订单查询工具描述(约200token);而当用户进一步追问"为什么物流延迟"时,才会动态加载物流异常处理工具和知识库(约1500token)。这种方式使得平均对话token消耗降低了63%,而任务完成率反而提升了22%。
1.1 三层信息架构设计
元数据层(L1) 就像工具的黄页目录。在我们的电商系统中,这部分包含:
- 工具名称:
query_order_status - 功能描述:"查询订单当前状态"
- 参数占位符:
order_id
核心指令层(L2) 则是完整的工具说明书。仍以订单查询为例,这里会包含:
- 详细的API调用规范
- 错误代码处理逻辑
- 隐私数据过滤规则
- 完整的参数说明(类型、格式、示例)
补充资源层(L3) 存放着"高级玩家手册"。当用户询问"如何理解订单状态码"时,系统才会加载:
- 状态码对照表
- 各状态对应的预期处理时间
- 历史异常案例参考
1.2 实现方案对比
我们在项目中测试了三种加载策略:
| 策略 | 平均Token消耗 | 任务成功率 | 响应延迟 |
|---|---|---|---|
| 全量加载 | 8,200 | 89% | 1.2s |
| 固定分层 | 3,500 | 85% | 0.8s |
| 动态渐进式 | 1,200 | 91% | 0.6s |
动态渐进式的优势显而易见。特别是在处理复杂工作流时(如退换货申请),系统可以按需加载:
- 先加载退货政策查询工具(L1)
- 用户确认退货后加载物流预约工具(L2)
- 出现异常时加载纠纷处理知识库(L3)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. MCP协议深度解析
2.1 协议栈架构
MCP协议栈就像AI界的USB协议,其分层设计如下:
code复制应用层
├── 工具调用
├── 资源访问
└── 提示词模板
-----------------
传输层
├── JSON-RPC 2.0
└── 传输适配器(HTTP/WS/Stdio)
在实际开发中,最常打交道的三个方法是:
tools/list- 获取工具清单tools/call- 执行工具调用resources/read- 读取资源内容
2.2 完整交互流程示例
以查询MySQL订单数据为例:
java复制// 初始化连接
McpTransport transport = StreamableHttpMcpTransport.builder()
.url("http://order-service/mcp")
.build();
McpClient client = DefaultMcpClient.builder()
.transport(transport)
.build();
// 获取可用工具
List<ToolSpecification> tools = client.listTools();
// 构造查询请求
ToolExecutionRequest request = new ToolExecutionRequest(
"query_order",
Map.of("order_id", "12345")
);
// 执行查询
ToolExecutionResult result = client.executeTool(request);
对应的网络请求序列:
- 握手阶段:
json复制{
"jsonrp
