一个基于 GitHub Copilot SDK 的全栈 AI 助手应用程序,支持文件上传、图片处理和交互式对话。
- 🤖 AI 驱动: 使用 GitHub Copilot SDK 提供智能对话支持
- 📁 文件上传: 支持多种格式文件作为上下文
- 🖼️ 图片分析: 支持上传图片进行视觉识别与处理
- 💬 流式对话: 实时流式响应,提供流畅的交互体验
- 🔄 模型选择: 支持多种 AI 模型,首次消息后锁定
- 📱 现代界面: 响应式设计,支持 Markdown 渲染
demo-cli-dataanalysis/
├── backend/ # Node.js 后端
│ ├── src/
│ │ ├── index.ts # 入口文件 (Express + WebSocket)
│ │ ├── copilot-service.ts # Copilot SDK 封装
│ │ └── types.ts # 类型定义
│ └── package.json
├── frontend/ # Next.js 前端
│ ├── app/ # App Router 页面
│ ├── components/ # React 组件
│ ├── hooks/ # 自定义 Hooks
│ ├── types/ # TypeScript 类型
│ └── package.json
└── development_plan.md # 开发计划文档
系统采用了精细的事件监听机制来确保流式响应的稳定性和完整性,解决了流式输出与完整响应之间的同步问题。
-
后端监听 (Copilot Service):
assistant.message_delta: 监听流式增量内容。收到后立即通过 WebSocket 发送type: "content"事件给前端,并累积到内存 buffer 中。assistant.message: 监听消息节点完成。此事件用于通过日志验证消息完整性,并更新 buffer(如果节点内容比累积内容更完整),但不作为会话结束信号,以防止在多步骤推理或工具调用中过早截断。session.idle: 监听会话空闲。作为唯一的最终完成信号。触发时,通过 WebSocket 发送type: "done"事件,携带最终完整内容。session.error: 监听错误。触发type: "error"事件。
-
前端反馈 (WebSocket):
- 实时渲染: 收到
type: "content"时,实时追加到 UI 的最后一条消息中,提供打字机效果。 - 最终确认: 收到
type: "done"时,结束加载状态(Loading Indicator)。如果在此之前的流式过程由于网络原因未收到任何内容,则使用done事件中携带的完整内容更新 UI,作为兜底机制。
- 实时渲染: 收到
- Node.js: v18 或更高版本
- GitHub Copilot CLI: 需要安装后登录(或使用PAT)
npm install -g @github/copilot
# 后端
cd backend
npm install
# 前端
cd ../frontend
npm installcd backend
npm run dev后端将在 http://localhost:3001 启动。
cd frontend
npm run dev前端将在 http://localhost:3000 启动。
打开浏览器访问 http://localhost:3000
| 方法 | 端点 | 描述 |
|---|---|---|
| GET | /health |
健康检查 |
| GET | /api/models |
获取可用模型列表 |
| POST | /api/chat |
发送聊天消息 |
| DELETE | /api/sessions/:id |
关闭会话 |
连接地址: ws://localhost:3001/ws
客户端消息:
{ type: "chat", sessionId?, modelId?, message, attachments? }{ type: "close_session", sessionId }
服务端消息:
{ type: "session", sessionId, modelId }- 会话创建{ type: "content", content }- 流式内容{ type: "done" }- 消息完成{ type: "error", error }- 错误
- 新建对话: 点击侧边栏的"新建对话"按钮
- 选择模型: 在顶部下拉菜单选择 AI 模型(发送第一条消息后将锁定)
- 上传文件: 点击附件按钮上传数据文件或图片
- 发送消息: 输入问题并按 Enter 或点击发送按钮
- 查看分析: AI 将以流式方式返回分析结果
- 图片: PNG, JPEG, GIF, WebP
- 数据: CSV, JSON, TXT
- 文档: PDF, Excel (XLSX, XLS)
- Node.js + TypeScript
- Express.js
- WebSocket (ws)
- Next.js 14 (App Router)
- React 18
- Tailwind CSS
- TypeScript

