参考 Claude Code 架构的对话引擎:用户发消息 → LLM 自动判断意图 → 调用对应工具(MCP 工具 / 网络搜索) → 返回结果。
- 后端: Node.js + Express + TypeScript, OpenAI SDK(兼容智谱 GLM)
- 前端: React + Vite + TypeScript, 单页聊天 UI
- MCP: @modelcontextprotocol/sdk, stdio transport
- 搜索: web-search-prime MCP Server(智谱)
npm install
cd backend && npm install && cd ..
cd frontend && npm install && cd ..
cd example-mcp-server && npm install && cd ..cp config.example.json config.json编辑 config.json,填入你的 API Key(参考 config.example.json)。
./start.sh这会同时启动后端(:3000)、前端(:5173)和示例 MCP Server。
打开浏览器访问 http://localhost:5173
./stop.sh分别在不同终端运行:
# 终端 1:后端(端口 3000)
cd backend && npm run dev
# 终端 2:前端(端口 5173)
cd frontend && npm run dev
# 终端 3:示例 MCP Server(可选)
cd example-mcp-server && node index.js├── config.json # API Key 配置(gitignored)
├── config.example.json # 配置模板
├── backend/ # Express 后端
│ └── src/
│ ├── index.ts # HTTP 服务入口
│ ├── config.ts # 配置加载
│ ├── types.ts # 类型定义
│ ├── engine.ts # 对话主循环
│ ├── tools.ts # 内置工具 (web_search, tool_search)
│ └── mcp.ts # MCP 连接管理
├── frontend/ # React 聊天界面
│ └── src/
│ ├── main.tsx
│ └── App.tsx
├── example-mcp-server/ # 示例 MCP Server(计算器)
│ └── index.js
├── start.sh # 一键启动脚本
└── stop.sh # 一键停止脚本
- 意图识别: LLM 自行判断,不做单独分类器
- MCP 工具延迟加载: 初始只给 LLM 工具名称,需要时通过
tool_search获取完整 schema - 工具命名:
mcp__{server}__{tool}避免冲突 - SSE 流式响应: 后端通过 Server-Sent Events 实时推送文本、工具调用和结果
| 端点 | 方法 | 说明 |
|---|---|---|
POST /api/chat |
POST | 发送消息,SSE 流式返回 |
GET /api/sessions/:id |
GET | 获取会话历史 |
GET /api/health |
GET | 健康检查 |