🏗️ GNS3-Copilot 后端演进计划
1. 架构愿景
从独立的 Streamlit 脚本过渡到"双引擎"架构。
- 引擎 A(遗留): Streamlit
app.py,用于快速内部原型设计和调试。 - 引擎 B(现代): FastAPI
server.py,作为 BFF(Backend for Frontend) 为现代 React UI 和移动端语音交互提供服务。
2. 核心技术策略
- 并发性: 使用 FastAPI 的标准
def路由,利用内部线程池处理同步 GNS3 API 调用和 LangGraph 执行。 - 配置: 维持
.env驱动的设置(本地优先)。凭据(LLM 密钥、GNS3 URL)通过环境变量加载;本地 MVP 不需要复杂的身份验证。 - 通信: 实现 SSE(Server-Sent Events) 用于实时 AI "打字"效果和工具调用状态更新。
- 语音集成: 实现"中继"模式:
浏览器麦克风 -> FastAPI -> 商业 STT (Whisper) -> LangGraph -> 商业 TTS -> 浏览器扬声器。
3. 实施路线图
第一阶段:API 基础设施(基础)
- 目标: 建立 FastAPI 项目结构并启用跨源通信。
- 任务:
- 安装
fastapi和uvicorn。 - 创建
api/main.py并配置 CORS 中间件(对 React 至关重要)。 - 为可扩展性设置路由器目录结构。
第二阶段:LangGraph 集成("大脑")
- 目标: 将 LangGraph 智能体暴露为统一的流式 API。
- 任务:
- 开发
POST /agent/stream端点。 - 使用
asyncio.to_thread或事件泵队列包装同步graph.stream。 - 定义标准 SSE 消息模式(例如,
type: text用于内容,type: tool用于操作状态)。
第三阶段:语音交互管道
- 目标: 使用商业 API 启用语音到命令功能。
- 任务:
- 创建
POST /agent/voice-chat以接收音频文件(.webm/.wav)。 - 集成 OpenAI Whisper API 进行 STT(语音转文本)。
- 将转录的文本连接到现有的 LangGraph 逻辑,并可选择通过 TTS 返回音频。
第四阶段:项目和拓扑服务
- 目标: 为前端提供 GNS3 项目元数据。
- 任务:
- 实现
GET /projects列出可用的 GNS3 拓扑。 - 实现
GET /projects/{id}/topology以获取 React Flow 可视化数据。
4. 推荐的项目结构
src/gns3_copilot/
├── api/
│ ├── __init__.py
│ ├── main.py # 入口点 & 中间件配置
│ ├── dependencies.py # 共享逻辑(Context/配置)
│ └── routers/
│ ├── __init__.py
│ ├── agent.py # 聊天、流式和语音端点
│ └── projects.py # 项目和拓扑管理
├── tools/ # 现有同步 GNS3 工具(未更改)
├── agent/ # 现有 LangGraph 逻辑(未更改)
└── .env # 本地 API 密钥 & GNS3 服务器配置
5. 当前冲刺清单
- [ ] 设置: 运行
pip install fastapi uvicorn pydantic-settings。 - [ ] 脚手架: 创建
api/目录并初始化main.py。 - [ ] 核心 API: 实现
/agent/stream端点并通过 Swagger UI (/docs) 验证。 - [ ] 测试: 确保 API 正确读取
.env变量而无需手动注入。