Files
catonline_ai/vw-agentic-rag/docs/topics/WEB_INTEGRATION_README.md

242 lines
6.4 KiB
Markdown
Raw Permalink Normal View History

2025-09-26 17:15:54 +08:00
# Assistant-UI + LangGraph + FastAPI Web Chatbot
本项目成功集成了 assistant-ui 前端框架与基于 LangGraph + FastAPI 的后端服务,实现了流式 AI 对话界面,支持多步推理和工具调用。
## 项目架构
```
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ React Web │ │ Next.js API │ │ FastAPI+ │
│ (assistant-ui) │◄──►│ Route │◄──►│ LangGraph │
│ │ │ │ │ Backend │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│ │ │
▼ ▼ ▼
用户界面 API 代理/转发 AI Agent + 工具
- Thread 组件 - /api/chat 路由 - 检索工具
- Tool UI 显示 - Data Stream 协议 - 代码分析
- 流式消息渲染 - 请求转发处理 - 多步推理
```
## 核心特性
### 1. 前端 (assistant-ui)
- **框架**: Next.js 15 + React 19 + TypeScript + Tailwind CSS v3
- **UI 库**: @assistant-ui/react, @assistant-ui/react-ui
- **协议**: Data Stream Protocol (SSE 流式通信)
- **组件**:
- `Thread`: 主对话界面
- 自定义 Tool UI: 文档检索、Web搜索、代码执行等
- 响应式设计,支持明暗主题
### 2. 中间层 (Next.js API)
- **路由**: `/api/chat` - 转发请求到 FastAPI 后端
- **协议转换**: 确保 Data Stream Protocol 兼容性
- **headers**: 设置正确的 `x-vercel-ai-data-stream: v1`
### 3. 后端 (FastAPI + LangGraph)
- **框架**: FastAPI + LangGraph
- **协议**: AI SDK Data Stream Protocol
- **功能**:
- 多步 AI 推理
- 工具调用 (检索、搜索、代码分析等)
- 会话状态管理
- 流式响应
## 安装和配置
### 1. 后端服务
确保后端服务在端口 8000 运行:
```bash
cd /home/fl/code/ai-solution/agentic-rag-4
./start_service.sh
```
### 2. 前端应用
```bash
cd web
pnpm install
pnpm dev
```
访问: http://localhost:3000
## 技术实现细节
### Data Stream Protocol
实现了 AI SDK 标准的 Data Stream Protocol:
```
类型格式: TYPE_ID:CONTENT_JSON\n
支持的事件类型:
- 0: 文本流 (text)
- 2: 数据 (data)
- 3: 错误 (error)
- 9: 工具调用 (tool call)
- a: 工具结果 (tool result)
- d: 消息完成 (finish message)
- e: 步骤完成 (finish step)
```
### 工具 UI 自定义
定义了多个工具的可视化组件:
1. **文档检索工具** (`retrieval`)
- 显示检索到的文档
- 相关度评分
- 来源信息
2. **Web 搜索工具** (`web_search`)
- 搜索结果列表
- 链接和摘要
- 执行时间
3. **代码执行工具** (`python`)
- 代码高亮显示
- stdout/stderr 输出
- 执行状态
4. **URL 抓取工具** (`fetch_url`)
- 页面标题和内容
- 错误处理
### 流式集成
```typescript
// 前端运行时配置
const runtime = useDataStreamRuntime({
api: "/api/chat",
});
// 后端事件转换
async function stream_ai_sdk_compatible(internal_stream) {
for await (const event of internal_stream) {
const converted = adapter.convert_event(event);
if (converted) yield converted;
}
}
```
## 文件结构
```
web/
├── src/
│ ├── app/
│ │ ├── page.tsx # 主聊天界面
│ │ ├── globals.css # 全局样式 + assistant-ui
│ │ ├── layout.tsx # 布局配置
│ │ └── api/
│ │ └── chat/
│ │ └── route.ts # API 路由代理
│ └── ...
├── tailwind.config.ts # Tailwind + assistant-ui 插件
├── package.json # 依赖配置
└── ...
service/
├── ai_sdk_adapter.py # Data Stream Protocol 适配器
├── ai_sdk_chat.py # AI SDK 兼容的聊天端点
├── main.py # FastAPI 应用入口
└── ...
```
## 使用指南
### 1. 启动对话
打开 http://localhost:3000在输入框中输入问题例如:
- "帮我搜索关于 Python 异步编程的资料"
- "分析一下这段代码的性能问题"
- "检索关于机器学习的文档"
### 2. 观察工具调用
AI 助手会根据问题自动调用相应工具:
- 文档检索会显示相关文档卡片
- Web 搜索会显示搜索结果列表
- 代码分析会显示执行过程和结果
### 3. 多步推理
助手支持复杂的多步推理流程,每个步骤都会实时显示进度。
## 开发和调试
### 查看后端日志
```bash
tail -f service.log
```
### 检查 Data Stream 协议
```bash
curl -N -H "Content-Type: application/json" \
-d '{"messages":[{"role":"user","content":"Hello"}],"session_id":"test"}' \
http://localhost:8000/api/ai-sdk/chat
```
### 前端开发
```bash
cd web
pnpm dev
# 访问 http://localhost:3000
```
## 协议兼容性确认
**Data Stream Protocol 兼容**
- 正确的事件格式: `TYPE_ID:JSON\n`
- 必需的 HTTP 头: `x-vercel-ai-data-stream: v1`
- 支持工具调用流式渲染
- 支持多步推理可视化
**assistant-ui 集成**
- useDataStreamRuntime 正确配置
- Thread 组件正常渲染
- 自定义 Tool UI 正常显示
- 样式和主题配置正确
**LangGraph + FastAPI 后端**
- 事件正确转换为 Data Stream Protocol
- 工具调用和结果正确传输
- 会话状态正确管理
- 错误处理和异常流处理
## 后续优化建议
1. **性能优化**
- 实现消息缓存
- 添加请求去重
- 优化大文件传输
2. **功能扩展**
- 添加更多工具 UI
- 支持文件上传
- 实现消息编辑和分支
3. **用户体验**
- 添加加载状态指示
- 实现消息重试机制
- 支持键盘快捷键
4. **部署和监控**
- 添加性能监控
- 实现日志聚合
- 配置生产环境部署
## 总结
本项目成功实现了 assistant-ui 与 LangGraph + FastAPI 的无缝集成,提供了完整的流式 AI 对话体验。通过标准的 Data Stream Protocol确保了前后端的协议兼容性同时通过自定义 Tool UI 提供了丰富的交互体验。整个架构具有良好的可扩展性和维护性,为进一步的功能开发和优化奠定了坚实基础。