quick-demo.js•8.67 kB
#!/usr/bin/env node
/**
* 快速演示 Code Mode 核心概念(无需完整依赖)
*/
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
console.log('📚 MCP Code Mode - 核心概念演示');
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
// 传统模式示例
console.log('❌ 传统 MCP 模式:\n');
console.log('用户: "读取 config.json,获取 API endpoint,调用它并保存结果"');
console.log('');
console.log('执行过程:');
console.log(' 1. LLM → 工具调用: readFile(config.json)');
console.log(' ↓ 返回 5000 tokens');
console.log(' 2. LLM 处理 → 工具调用: httpGet(endpoint)');
console.log(' ↓ 返回 10000 tokens');
console.log(' 3. LLM 处理 → 工具调用: writeFile(result.json)');
console.log(' ↓ 完成');
console.log('');
console.log(' Token 消耗: ~20,000 tokens');
console.log(' 耗时: ~6-8 秒 (3轮往返)');
console.log(' 问题: 大数据会超限,中间结果全部过模型');
console.log('');
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
// Code Mode 示例
console.log('✅ Code Mode 模式:\n');
console.log('用户: "读取 config.json,获取 API endpoint,调用它并保存结果"');
console.log('');
console.log('执行过程:');
console.log(' 1. LLM → 生成代码:');
console.log('');
console.log(' ```typescript');
console.log(' import * as fs from "./servers/filesystem/index.js";');
console.log(' import * as fetch from "./servers/fetch/index.js";');
console.log(' ');
console.log(' // 读取配置');
console.log(' const config = await fs.readFile({ path: "config.json" });');
console.log(' const data = JSON.parse(config);');
console.log(' ');
console.log(' // 调用 API');
console.log(' const result = await fetch.fetch({ url: data.endpoint });');
console.log(' ');
console.log(' // 保存结果');
console.log(' await fs.writeFile({');
console.log(' path: "result.json",');
console.log(' content: result');
console.log(' });');
console.log(' ');
console.log(' console.log("已保存到 result.json");');
console.log(' ```');
console.log('');
console.log(' 2. 沙箱执行代码 → 完成');
console.log(' ↓ 返回: "已保存到 result.json"');
console.log('');
console.log(' Token 消耗: ~3,000 tokens');
console.log(' 耗时: ~2 秒 (1轮执行)');
console.log(' 优势: 数据在沙箱内流动,不受限制');
console.log('');
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
// 性能对比
console.log('📊 性能对比:\n');
const comparison = [
['指标', '传统模式', 'Code Mode', '提升'],
['──────────', '─────────', '─────────', '──────'],
['Token 消耗', '~20,000', '~3,000', '85% ↓'],
['往返次数', '3 次', '1 次', '67% ↓'],
['响应时间', '6-8 秒', '2 秒', '75% ↓'],
['大文件支持', '容易超限', '无限制', '✅'],
['复杂逻辑', '需要多轮', '直接写代码', '✅'],
];
comparison.forEach(row => {
console.log(` ${row[0].padEnd(14)} ${row[1].padEnd(12)} ${row[2].padEnd(12)} ${row[3]}`);
});
console.log('');
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
// 架构对比
console.log('🏗️ 架构对比:\n');
console.log('传统模式架构:');
console.log(' ┌─────────┐');
console.log(' │ LLM │ ← 每次工具调用都要过模型');
console.log(' └────┬────┘');
console.log(' │');
console.log(' ┌────▼─────┐');
console.log(' │ MCP Tool │ → 返回结果给 LLM');
console.log(' └──────────┘');
console.log(' │');
console.log(' ┌────▼─────┐');
console.log(' │ MCP Tool │ → 又返回给 LLM');
console.log(' └──────────┘');
console.log('');
console.log('Code Mode 架构:');
console.log(' ┌─────────┐');
console.log(' │ LLM │ → 生成代码(一次)');
console.log(' └────┬────┘');
console.log(' │ TypeScript code');
console.log(' ┌────▼────────────┐');
console.log(' │ Sandbox │');
console.log(' │ ┌───────────┐ │');
console.log(' │ │ MCP Tool │ │ ← 数据在沙箱内流动');
console.log(' │ │ ↓ │ │');
console.log(' │ │ MCP Tool │ │');
console.log(' │ │ ↓ │ │');
console.log(' │ │ MCP Tool │ │');
console.log(' │ └───────────┘ │');
console.log(' └────┬────────────┘');
console.log(' │ 最终结果');
console.log(' ┌────▼────┐');
console.log(' │ LLM │ ← 只接收最终输出');
console.log(' └─────────┘');
console.log('');
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
// 实际应用场景
console.log('💡 实际应用场景:\n');
console.log('场景 1: 数据分析');
console.log(' 任务: "读取 sales.csv (50MB),分析前 10 名客户,生成报告"');
console.log(' 传统模式: ❌ CSV 太大,超过 context 限制');
console.log(' Code Mode: ✅ 在沙箱内读取、过滤、分析,只返回 top 10');
console.log('');
console.log('场景 2: 批量操作');
console.log(' 任务: "读取 users.json,为每个用户调用 API 更新状态"');
console.log(' 传统模式: ❌ 100 个用户 = 100 轮对话');
console.log(' Code Mode: ✅ for 循环直接搞定,1 次执行');
console.log('');
console.log('场景 3: 复杂工作流');
console.log(' 任务: "从 Google Drive 下载文档,转换格式,上传到 Salesforce"');
console.log(' 传统模式: ❌ 多次往返,中间文件内容重复传输');
console.log(' Code Mode: ✅ 管道式处理,数据不出沙箱');
console.log('');
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
// 安全优势
console.log('🔒 安全优势:\n');
console.log('1. 网络隔离:');
console.log(' - 沙箱无法访问互联网(除非明确允许的域名)');
console.log(' - 防止数据泄露');
console.log('');
console.log('2. 文件系统隔离:');
console.log(' - 无法读取 ~/.ssh, ~/.aws 等敏感目录');
console.log(' - 无法修改 .env, .git 等关键文件');
console.log('');
console.log('3. API Key 保护:');
console.log(' - MCP clients 在主进程,API key 不暴露给沙箱');
console.log(' - LLM 生成的代码无法泄露凭证');
console.log('');
console.log('4. 资源限制:');
console.log(' - CPU、内存、执行时间都有上限');
console.log(' - 防止恶意或失控代码');
console.log('');
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
// 总结
console.log('✅ 总结:\n');
console.log('Code Mode 的本质是让 LLM 发挥所长:');
console.log(' • LLM 擅长写代码(训练数据丰富)');
console.log(' • 不擅长直接调工具(训练数据少)');
console.log(' • 把 MCP 工具包装成代码 API');
console.log(' • 在沙箱内安全执行');
console.log(' • 减少 token、提升性能、支持复杂场景');
console.log('');
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
console.log('🚀 下一步:\n');
console.log(' 1. npm install # 安装依赖');
console.log(' 2. npm run generate-api # 生成 TypeScript API');
console.log(' 3. npm run example # 运行演示');
console.log('');
console.log('📖 详细文档: cat README.md');
console.log('');