内容
# 🤖 FastAPI Langgraph 机器人,具备向量存储、记忆、MCP 工具和语音模式
[]()
[](https://opensource.org/licenses/Apache-2.0)

[](https://fastapi.tiangolo.com)
[](https://github.com/langchain-ai/langgraph)
一个可扩展的 AI 聊天机器人平台,基于 FastAPI 和 LangGraph 构建,具备多智能体编排、多租户向量存储、跨聊天记忆和通过 LiveKit 集成的语音通话功能。
## 演示
https://github.com/user-attachments/assets/25adf403-6c66-4894-9f0e-27367787273c
## 🌟 主要功能
### 🔒 安全认证和多租户
- **OAuth2 密码流**: 使用 JWT 令牌的安全 API 访问,符合行业标准
- **用户注册系统**: 包含用户名、密码和 tenant_id 的完整注册流程
- **多租户架构**: 增强安全性和隐私性的不同租户之间的数据隔离
- **基于角色的访问控制**: 针对不同用户类型的粒度权限
### 🧠 使用 LangGraph 的高级 AI 编排
- **多智能体系统**: 协作解决复杂任务的专门智能体
- **监督智能体**: 协调工作流程并将任务委派给专门智能体
- **研究智能体**: 从网络和知识库中检索信息
- **抓取智能体**: 从网页中提取和总结内容
- **复杂工作流程**: 处理多步骤推理和任务分解
- **状态管理**: 跨多个回合维护对话上下文
### 📊 使用 Qdrant 的强大向量存储
- **多租户向量存储**: 使用租户隔离高效存储和检索对话历史
- **语义搜索**: 使用语义相似性查找相关过去的对话
- **有效载荷过滤**: 使用 tenant_id 进行数据安全和性能的有效过滤
- **元数据存储**: 存储和检索与向量嵌入相关的附加上下文
### 💾 使用 Mem0 的持久记忆
- **跨聊天记忆**: 在不同对话中记住重要信息
- **长期上下文**: 在扩展交互中维护上下文
- **选择性记忆**: 智能决定要记住哪些信息
- **记忆检索**: 根据对话上下文检索相关记忆
### 🔍 MCP 工具集成
- **Firecrawl**: 高级网页抓取和内容提取
- 从网站提取结构化数据
- 总结长篇内容
- 处理表格和列表
- **Tavily**: 智能网络搜索功能
- 网络语义搜索
- 实时信息检索
- 来源归属和引用
### 🎤 通过 LiveKit 实现语音助手
- **实时语音通信**: 使用 LiveKit 的 WebRTC 平台实现自然语音交互
- **高质量语音识别**: 使用 Deepgram 的高级 STT 实现准确转录
- **自然文本转语音**: 使用 Cartesia TTS 实现栩栩如生的语音响应
- **语音活动检测**: 使用 Silero VAD 实现智能轮流发言
- **多语言支持**: 支持多种语言的语音交互
### 🔎 LangSmith 集成
- **全面跟踪**: 捕获所有 LangChain 和 LangGraph 执行的详细跟踪
- **可视化调试**: 可视化多智能体工作流程和消息传递
- **性能监控**: 跟踪不同组件的延迟、令牌使用情况和成本
- **反馈收集**: 收集和分析模型响应的用户反馈
- **实验跟踪**: 比较不同的提示、模型和智能体配置
### 🎨 现代 React 用户界面
- **干净的材料 UI 设计**: 具有现代设计原则的直观界面
- **响应式布局**: 在桌面和移动设备上提供无缝体验
- **实时聊天界面**: 动态消息气泡,带有用户/助手头像
- **Markdown 支持**: 消息中的丰富文本格式化
- **语音模式集成**: 在文本和语音交互之间无缝切换
### 后端架构
- **FastAPI 框架**: 高性能异步 API 框架,带有自动 OpenAPI 文档
- **SQLAlchemy ORM**: 使用 SQLite(可配置为 PostgreSQL/MySQL)的异步数据库操作
- **Pydantic 模型**: 类型安全的数据验证和序列化
- **JWT 认证**: 使用 OAuth2 密码流的安全令牌认证
## 👨💻 使用指南
### 入门指南
1. **注册账户**:
- 导航到 `/register` 的注册页面
- 使用唯一的用户名、安全密码和分配的 tenant_id 创建账户
- 每个 tenant_id 创建一个隔离的环境用于数据存储
2. **登录平台**:
- 使用您的凭证在主页面登录
- 您的 JWT 令牌将被安全存储以供后续 API 调用
### 使用聊天界面
1. **创建对话**:
- 点击侧边栏中的“+”按钮开始新的对话
- 为您的对话取一个有意义的标题以便于参考
- 每个对话都与您的 tenant_id 存储以实现数据隔离
2. **与 AI 交互**:
- 在输入字段中输入您的消息并按 Enter 或点击发送按钮
- AI 响应将实时流式传输,逐令牌更新
- 消息显示为清晰的用户/助手头像以便于区分
- 系统支持用户和助手消息的 Markdown 格式化
3. **管理对话**:
- 从侧边栏导航访问以前的对话
- 搜索您的对话历史
### 使用语音助手
1. **启动语音模式**:
- 点击聊天界面中的麦克风图标激活语音模式
- 系统将请求麦克风权限(如果尚未授予)
- 等待“语音助手就绪”消息后再开始讲话
2. **语音交互**:
- 看到“正在聆听…”指示器时自然讲话
- 助手将处理您的语音并用语音回应
- 视觉反馈显示您和助手的语音转录
- 语音助手支持自然轮流对话
3. **高级语音功能**:
- 系统自动检测您何时结束讲话
- 语音活动检测过滤掉背景噪音
- 多语言支持允许用不同语言进行交互
- 可以为不同环境调整语音质量设置
4. **结束语音会话**:
- 点击断开按钮结束语音会话
- 您的对话历史将被保留以供未来参考
### 使用外部工具
AI 助手可以利用强大的外部工具来增强您的体验:
1. **网络搜索**: 提问需要来自网络的最新信息
2. **网页抓取**: 请求特定网站的摘要或信息
## 💻 安装
### 先决条件
- Python 3.13+
- Node.js 16+
- npm 8+
- Qdrant(可以通过 Docker 运行)
### 后端设置
1. 克隆仓库
```bash
git clone <repository-url>
cd ruban_fastapi-langgraph-chatbot
```
2. 创建并激活虚拟环境
```bash
python -m venv venv
source venv/bin/activate # 在 Windows 上:venv\Scripts\activate
```
3. 安装 Python 依赖项
```bash
pip install -r requirements.txt
```
4. 设置环境变量
在根目录中创建一个 `.env` 文件,其中包含以下变量:
```env
# FastAPI 设置
SECRET_KEY=your_secret_key_here
ACCESS_TOKEN_EXPIRE_MINUTES=30
# 数据库设置
SQLALCHEMY_DATABASE_URI=sqlite:///./app.db
# OpenAI 设置
OPENAI_API_KEY=your_openai_api_key_here
# Qdrant 设置
QDRANT_HOST=localhost
QDRANT_PORT=6333
# LiveKit 设置
LIVEKIT_URL=your_livekit_url_here
LIVEKIT_API_KEY=your_livekit_api_key_here
LIVEKIT_API_SECRET=your_livekit_api_secret_here
# LangSmith(可选,用于跟踪)
LANGCHAIN_TRACING_V2=true
LANGSMITH_API_KEY=your_langsmith_api_key_here
LANGSMITH_PROJECT=your_project_name
```
### 前端设置
1. 导航到前端目录
```bash
cd frontend
```
2. 安装 Node.js 依赖项
```bash
npm install
```
## 🚀 运行应用程序
### 启动后端服务
1. 启动 MCP 服务器(在单独的终端中)
```bash
# 终端 1:启动搜索服务器
python -m app.mcp_server.search_server
# 终端 2:启动网页抓取服务器
python -m app.mcp_server.web_scrapping_server
```
2. 启动主 FastAPI 服务器
```bash
python app.py
```
3. 启动 LiveKit 语音助手
```bash
python app/agent/livekit_agent.py dev
```
### 启动前端
```bash
cd frontend
npm start
```
### 访问应用程序
- 后端 API 文档:http://localhost:8000/docs
- 前端界面:http://localhost:3000
如果您没有账户,请先注册,然后登录以访问聊天界面。